IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Projet modulaire & EJB


Sujet :

Java EE

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Projet modulaire & EJB
    Bonjour,

    j'ai besoin que quelqu'un me mette les idées dans le bonne ordre.

    Reprenant le développement de java jee avec la version 6, je me retrouve avec un certain nombre de question basique qui ne sont pas forcément traités ailleurs car trop logique sans doute.

    j'essaye de développer un projet de maniere modulaire

    de ce fait, j'adopte la structure suivante
    jsf (view) <-> managedBean (controller) <-> ejb <-> jpa (model)

    avec jsf et managedbean dans un war et ejb et jpa dans un autre jar

    dois je forcement déployer l'ensemble dans un ear avec de pouvoir appeler l'ejb dans le managedbean ?

    j'ai utilisé @Ejb ou jndi, je n'arrive à rien.

    ps : pour corser le tout , j ai eu la mauvaise idée de vouloir utiliser maven en meme temps, ne le maitrisant pas, il devient complexe de comprendre comment faire de plusieurs projet des sous modules d'un projet.

  2. #2
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 89
    Points
    89
    Par défaut
    Bonsoir,

    Tu n'es pas obligé de tout packager dans un même ear. Tu peux séparer les composants sur différents serveurs.

    On retrouve souvent la configuration suivante :
    • Un serveur pour les ressources statiques (images, sons, pages...)

    • Un serveur de présentation pour les ressources dynamiques (pages générées, dans ton cas les jsp ou xhtml selon la version de JSF)

    • Un serveur métier pour les traitements... métiers (ben tiens) : les EJB et la persistance.


    Dans ton cas, tu peux utiliser un simple conteneur de servlet pour la couche JSF + Managed Bean (Tomcat, Jetty, ...), un conteneur d'EJB pour la couche EJB + JPA (JBoss, JonAS, ...).

    Les liens suivants présentent le pattern ServiceLocator qui permet, comme son nom l'indique, de localiser un service distant :
    http://www.javalobby.org/articles/service-locator/
    http://java.sun.com/blueprints/corej...ceLocator.html

    Et j'ajoute cette discussion intéressante et qui donne des exemples concrets : http://www.developpez.net/forums/d56...rvice-locator/

    Pour Maven, tu peux te faire un petit packaging générant un war pour JSF (pages + managed beans), et un ear pour EJB+JPA.

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse

    celà m'eclaire pas mal.

    Pour le serviceLocator utilisant j2ee6 et ayant une petite archi, je vais essaé de m'en passé pour l instant par contre je ne reussi pas à packager le war car le fait de faire appel à l'ejb dans le managedBean provoque une erreur.

    si je montre le code ça sera plus simpleje pense

    voici le jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    		xmlns:f="http://java.sun.com/jsf/core"
    		xmlns:h="http://java.sun.com/jsf/html"
    		xmlns:tag="http://java.sun.com/jsf/composite/tag">
    	<head>
     		<title>Hello World</title>
    	</head>
    	<body>
    		<f:view>
    			<p>
    				<h:outputText value="Nombre de cliques : #{CompteurBean.compteur}" />
    			</p>
    			<h:form>
    				<h:commandButton action="#{CompteurBean.incrementer}" value="Incrémenter" />
    			</h:form>
    		</f:view>
        </body>
    </html>
    voici le managedbean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    @ManagedBean(name = "CompteurBean")
    public class CompteurBean {
     
    	@Inject
    	private static UserBean UserEJB;
     
    	private int compteur = 0;
     
    	public int getCompteur() {
    		return compteur;
    	}
     
    	public void incrementer() {
    		compteur++;
    	}
     
    }
    voici l'ejb (dans un autre jar)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    @Stateless
    public class UserBean implements UserRemote {
     
    	@PersistenceContext(unitName = "test") 
    	private EntityManager em;
     
    	public List<User> findUsers() { 
    		TypedQuery<User> query = em.createNamedQuery("findAllUsers", User.class); 
    		return query.getResultList();
    	}
     
    	public UserRemote findUserById(Long id) { 
    		return em.find(UserRemote.class, id);
    	}
    	public UserRemote createUser(UserRemote user) { 
    		em.persist(user); 
    		return user;
    	}
    	public void deleteUser(UserRemote user) { 
    		em.remove(em.merge(user));
    	}
    	public UserRemote updateUser(UserRemote user) { 
    		return em.merge(user);
    	}
    je vous passe l'entity et ne chercher pas la cohérence dans le projet c'est un premier jet pour comprendre.

    mais voici l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project teste: Compilation failure
    [ERROR] /Users/jim/Documents/workspace/teste/src/main/java/com/test/controller/CompteurBean.java:[15,16] cannot find symbol
    [ERROR] symbol  : class UserBean
    [ERROR] location: class com.test.controller.CompteurBean
    [ERROR] -> [Help 1]

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Généralement, lorsqu'on utilise des EJB, on créé une partie "client" et une partie implémentation.
    Dans la partie client, on retrouvera les interface, dto, entity (si pas de dto), les exceptions, etc...
    Ton projet vue doit intégrer ce jar.
    Pour le lien, si la partie métier est sur un autre serveur, il faudra certainement modifier les paramètres jndi ou utiliser un locator.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    une partie cliente pour ejb ? n'est ce pas seulement pour utiliser les ejb sans creation d'un projet trop complexe ?

    mon projet sera déployé sur le meme serveur.
    j'ai remis tout cela dans un seul projet et deployé en
    jar -> la partie war n'est pas pris en compte
    ear -> org.xml.sax.SAXParseException: The content of element type "application" is incomplete, it must match "(icon?,display-name,description?,module+,security-role*)".

    j'en sors pas.

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    bon ça avance

    en fait comme j'utilise maven je devais ajouter une dependency avec le scope provided pointant sur le jar en question

    le war se package désormais
    le déploiement du jar et de l'ejb session se fait bien par contre

    pour le deploiement du war

    com.sun.enterprise.admin.cli.CommandException: remote failure: Exception while loading the app : java.lang.RuntimeException: Unable to load EJB module. DeploymentContext does not contain any EJB Check archive to ensure correct packaging for /Users/alf/glassfish/glassfishv3/glassfish/domains/domain1/applications/tutu

Discussions similaires

  1. [Conception J2EE] Comment mettre en place un site/projet 'Modulaire'
    Par Wutintin31 dans le forum Plateformes réactives et architectures modulaires
    Réponses: 6
    Dernier message: 25/05/2012, 17h24
  2. [JBoss & EJB 3] Problème d'importation de projet dans un EJB
    Par tagsOf dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 06/01/2011, 19h07
  3. [C#]Conseils pour un projet modulaire
    Par ClaudeBg dans le forum C#
    Réponses: 3
    Dernier message: 03/04/2010, 16h17
  4. [EJB3] Problème déploiement projets Web et EJB
    Par tomy29 dans le forum Java EE
    Réponses: 0
    Dernier message: 14/12/2009, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo