Archive

Articles taggués ‘JPA’

Mapping en JPA 2.0 d’une table de jointure ayant des colonnes supplémentaires

Cet article est la suite d’un premier billet où j’ai présenté une première solution en JPA 1.0 à la problématique : Comment mapper, en JPA (Java Persistence API),  une table de jointure comportant des colonnes supplémentaires en plus des colonnes de clés étrangères constituant sa clé primaire ? S’il y a quelque chose à reprocher à cette première solution, c’est la contrainte de mapper deux fois les colonnes constituant la clé primaire de la table de jointure. Mais grâce l’annotation @MapsId, une nouvelle annotation propre à l’API JPA 2.0, on peut avoir une solution plus élégante. Mais avant de présenter la solution en utilisant cette annotation, je vous encourage à revenir au premier billet où j’ai bien présenté la problématique et l’exemple de modèle de données sur lequel je me suis basé.

Lire la suite…

Categories: Java EE Tags: , , , , ,

Mapping en JPA 1.0 d’une table de jointure ayant des colonnes supplémentaires

J’ai travaillé sur un prototype d’application qui gère les collaborateurs en fonction de leurs connaissances. Lorsque j’ai commencé à mapper le modèle de données, je me suis trouvé face à une problématique dont j’ignorais la solution : Comment mapper, en JPA (Java Persistence API),  une table de jointure comportant des colonnes supplémentaires en plus des colonnes de clés étrangères constituant sa clé primaire ?Lorsque j’ai posé la question autour de moi, la meilleure réponse était : c’est une belle question pour StackOverFlow. En cherchant sur internet je n’ai malheureusement trouvé que des ébauches de solutions…

Quelques heures de travail et quelques lignes de codes plus tard, voici une solution simple et élégante… Je détaillerai cette démarche dans deux billets :

  • Le premier décrit une solution basée sur la version 1.0 de l’API
  • Le second propose  de s’appuyer sur une annotation spécifique à JPA 2.0

Lire la suite…

Categories: Java EE Tags: , , , , ,

La Devoxx 2011 c’est fini ! (Part 1/2)

Devoxx 2011

Du moins pour mon collègue Mehdi Ben Haj Abbes et moi-même, l’aventure de la plus grosse conférence Java de nos contrées européennes s’est terminée mardi dernier, après deux longues journées remplies (à ras bord, mais qui se plaindra?) de conférences en tous genres. Précisément, lors de ces deux premiers jours à la Devoxx 2011, nous avions accès à deux formats de meeting :
– des « University« : ce sont de grosses sessions de 3h, dont le but avoué est d’entrer le plus en profondeur possible dans un sujet nouveau (du moins un sujet à la mode),
– des « Tools in Action » de 30 minutes chacun où, comme le nom l’indique, les speakers vont parler de leurs outils préférés développés autour de l’écosystème Java (du genre Sonar, Mylyn, jclouds, Jenkins, et d’autres noms farfelus dont certains m’étaient inconnus)

Chaque créneau horaire s’articulant autour de 4 salles de cinéma géantes et tout confort (j’entends par là, des salles de cinémas de province), le choix avant chaque session fut souvent cornélien… avec parfois quelques regrets, comme lorsque je me suis lancé naïvement dans une session de 3h, barbante au bout de 20 minutes. Heureusement dans ce cas là, à la Devoxx il est toujours possible de se lever et changer de salle! Car oui, à la Devoxx 2011, les show n’étaient pas tous du même niveau !

Je vais vous faire pour ma part un debriefing « à chaud » (du moins écrit à chaud…) des sessions que j’ai pu couvrir durant ces 48h intenses d’informations Javaesques. De quoi avoir un aperçu du quart des sujets sur ces deux jours.

Je publierai cet article sur deux billets blog distincts, pour des raisons de place et de format.

Une des salles de conférence

Lire la suite…

Livre: Real World Java EE Patterns

CouvertureTout commence par une présentation des changements et des nouvelles possibilités apportées par Java EE 5 (EJB 3.0, JPA 1.0…) et Java EE 6 (EJB 3.1, JSF 2.0…).

Puis l’auteur reprend un à un les Core J2EE patterns pour les mettre au goût du jour: Façade, Data Access Object, Transfert Object… Certains deviennent inutiles, d’autres sont transformés, d’autres tirent partie des nouveautés pour faire leur apparition. Les patterns concernant la couche présentation sont toutefois éludés.

J2EE 1.4 était synonyme de lourdeur et de développements rébarbatifs. Ici, toute complexité, tout code superflu est traqué, avec en ligne de mire une architecture simple et du code concis donc maintenable.

Le livre fait la part belle à la pratique en proposant une méthode de migration de J2EE 1.4 vers Java EE 5 et de nombreux exemples de code (DAO générique, connecteur JCA générique…).

Categories: Java EE, Web Services - SOA Tags: , , , ,

Journée « L’Open Source SUN à l’honneur » : stratégie logicielle Open Source de Java à GlassFish et au-delà

Le but de ce billet est de donner un aperçu des nouveautés de Java EE 6 annoncées lors de la journée « L’Open Source SUN à l’honneur » qui s’est tenue à Paris le 12 décembre 2008.

La spécification Java EE 6 est prévue pour mi-2009.  Elle se veut résolument tournée vers la simplicité de développement.  Hormis la programmation orientée POJO grâce aux annotations, déjà présente dans JEE 5, Java EE 6 introduit la notion de profils. Un profil correspond à des sous-ensembles de spécifications répondant à un « use-case » précisément identifié, et pouvant donner lieu à une certification de compatibilité. Par exemple, le profil Web contiendrait le minimum de technologies nécessaires pour développer une application Web : Servlet 3.0, JSP 2.1, JSR-45, EL 1.2, JSTL 1.2, JSF 2.0, EJB Lite 3.1, JTA 1.1, JPA 2.0, JSR-250.  Les technologies JAX-RS 1.1 et Web Beans 1.0 sont encours de discussion.

En plus des profils, Java EE 6 introduit l’élagage (pruning) qui consiste à rendre certaines technologies optionnelles : les technologies élaguées sont rendues optionnelles dans la prochaine « release » et un état élagué est noté dans la Javadoc. Ainsi, les technologies JAX RPC, EJB Entity Bean, JAXR et JSR-88 seront élaguées, et donc probablement optionnelles dans la prochaine sortie de JavaEE 6.

La dernière nouveauté de Java EE 6 est l’extensibilité. L’extensibilité permet d’ajouter de nouveaux frameworks à son application (en déposant des fichiers jar dans un répertoire précis) sans se soucier d’apporter des modifications au fichier web.xml.

Ci-dessous est donnée une liste (non exhaustive) des nouveautés apportées à certaines technologies Java EE 6, présentées lors de la journée.

Nouveautés Servlet 3.0 :

  • Les Servlets deviennent faciles à développer grâce aux annotations. Avec les annotations, vous pouvez écrire vos Servlets sous forme de POJOs. Les annotations @Webservlet, @ServletFilter et @WebServletContextListener sont utilisées pour déclarer une Servlet, un filtre et un listener.
  • Toute classe annotée présente dans /WEB-INF/classes ou dans un jar de /WEB-INF/lib est automatiquement découverte et prise en compte. Le descripteur web.xml devient alors facultatif.
  • Le fichier de configuration web.xml devient modulaire en utilisant des fichiers fragments web-fragment.xml.
  • Une API pour un enregistrement dynamique des Servlets
  • Traitement asynchrone des Servlets (@WebServlet(asyncSupported=true)). Pour rentrer en mode asynchrone, il faut utiliser la méthode ServletRequest.startAsync(). Cette méthode renvoie un objet AsycContext qui permet de contrôler le mode asynchrone.
@WebServlet(urlMappings="/foo")
public class MyServlet extends HttpServlet {
     @Get
     public void handleGet(HttpServletRequest request, HttpServletResponse response) {
                ....
     }
}

Nouveautés EJB3.1 :

  • Il n’est plus nécessaire d’implémenter une interface locale pour écrire des Sessions Beans.
  • L’ajout d’un Singleton Bean qui correspond bien évidemment au classique Design Pattern Singleton dans un conteneur.
  • Une nouvelle annotation fait son apparition : @Schedule. Avec cette annotation, il est maintenant possible d’activer un scheduler similaire à la Crontab sous Unix.
  • Les méthodes des Sessions Beans peuvent désormais être appelées de façon asynchrone en utilisant l’annotation @Asynchronous. Lorsqu’un client appelle une méthode asynchrone, le container redonne aussitôt la main au client et continue l’appel de cette méthode asynchrone dans un autre thread.
  • Pour faciliter le déploiement, il est maintenant possible de déployer des composants EJB 3.1 dans une archive WAR. On peut désormais appeler des EJB directement dans un container de Servlets comme Tomcat. Tout tient dans une archive WAR.
  • Un nom JNDI global pour accéder aux Beans (Par exemple, java:global/com/od/HelloWorld).
  • Introduction de la notion EJB embarqué: il est possible de déclarer et de lancer programatiquement un conteneur EJB léger. Cela rend possible l’utilisation des EJB dans n’importe quel environnement («EJBs everywhere!»), par exemple lors des tests unitaires.

Nouveautés  JPA 2.0 :

  • JPA 2.0 est désormais doté de l’API Criteria, inspirée d’Hibernate.
  • Il est possible de mapper des collections d’éléments simples (List<String>, par exemple) à l’aide de l’annotation «CollectionOfElements».
  • La sauvegarde d’un ordre de tri en base, avec @OrderedBy(« lastLoginDate ») et @OrderColumn(« loginOrder »). JPA crée automatiquement une colonne supplémentaire en base pour conserver cet ordre.
Categories: Java EE Tags: , ,