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 :

[Migration] Phase de cohabitation EJB2 / EJB3


Sujet :

Java EE

  1. #1
    Invité(e)
    Invité(e)
    Par défaut [Migration] Phase de cohabitation EJB2 / EJB3
    Bonjour,

    voila je travail sur un projet de migration d'une application codé avec des ejb2 vers des des ejb3.

    ma configuration:
    serveur: JBoss-4.2.2GA

    mon soucis est le suivant:

    +Est ce que ces deux types d'ejb peuvent cohabiter au sein de la même application ?

    +Est ce que ces deux types d'ejb peuvent cohabiter au sein du même ear.

    +J'ai lu beaucoup de documentation sur les ejb2 et 3, apparament la version 3 permet une rétrocompatibilité avec les version précédentent, mais alors comment cela fonctionne t-il ?

    j'ai effectuer différents test:

    un ejb3 seul dans un jar
    -> appel client de cet ejb réussi

    un ejb2 seul dans un jar
    -> appel client de cet ejb réussi

    un ejb3 et un ejb2 dans le même jar
    -> appel client de l'ejb3 ok
    -> appel client de l'ejb2 echec


    mes clients:

    client ejb2:
    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
     
    package client_test;
     
    import interfaces.InterfaceHome;
    import interfaces.InterfaceLocale;
     
    import javax.naming.Context;
    import javax.naming.InitialContext;
     
     
    public class ClientEjb2 {
    public static void main(String[] args) throws Exception {
     
    		Context context = new InitialContext();
     
    		Object obj = context.lookup("ejbtest");
     
    		InterfaceHome home = (InterfaceHome)javax.rmi.PortableRemoteObject.narrow(obj, InterfaceHome.class);
    		InterfaceLocale locale = home.create();
    		System.out.println(locale.getMessage());
     
    	}
    }
    client ejb3:
    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
     
    package client_test;
     
    import java.rmi.RemoteException;
     
    import interfaces.InterfaceBean;
    import javax.ejb.CreateException;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
     
    public class Client_test {
     
       public static void main(String[] args) throws RemoteException, CreateException {
     
    	   try {
             Context context = new InitialContext();
             InterfaceBean beanRemote = (InterfaceBean)context.lookup("Bean/remote");
             System.out.println(beanRemote.message("Mon ejb 3 me renvoit le message"));
    	   } catch (NamingException e) {
             e.printStackTrace();
          }
       }
    }
    code pour l'ejb2:

    Bean:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    package bean;
     
    import java.rmi.RemoteException;
    import javax.ejb.CreateException;
    import javax.ejb.EJBException;
    import javax.ejb.SessionContext;
     
    public class BeanEjb2 implements javax.ejb.SessionBean {
     
     
    	private static final long serialVersionUID = -3536373096372630637L;
     
    	public void ejbCreate() throws CreateException{
     
    	}
     
    	public String getMessage(){
    		return "coucou";
    	}
     
    	public void ejbActivate() throws EJBException, RemoteException {
     
    	}
     
    	public void ejbPassivate() throws EJBException, RemoteException {
     
    	}
     
    	public void ejbRemove() throws EJBException, RemoteException {
     
    	}
     
    	public void setSessionContext(SessionContext ctx) throws EJBException,
    			RemoteException {		
    	}
    }
    InterfaceHome
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    package interfaces;
     
    public interface InterfaceHome extends javax.ejb.EJBHome{
     
    	InterfaceLocale create() throws java.rmi.RemoteException,javax.ejb.CreateException;
    }
    interfaceRemote (qui s'appelle InterfaceLocale suite à différents test):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package interfaces;
     
    public interface InterfaceLocale extends javax.ejb.EJBObject{
    	public String getMessage() throws java.rmi.RemoteException;
    }
    enfin, le fichier de déploiement:
    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
     
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise
    JavaBeans 2.0//EN" " http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar>
    	<enterprise-beans>
    		<session>
    			<display-name>ejbtest</display-name> 
    			<ejb-name>ejbtest</ejb-name>
    			<home>interfaces.InterfaceHome</home>
    			<remote>interfaces.InterfaceLocale</remote>
    			<ejb-class>bean.BeanEjb2</ejb-class>
    			<session-type>Stateless</session-type>
    			<transaction-type>Container</transaction-type>
    		</session>
    	</enterprise-beans>
    </ejb-jar>
    erreur pour l'ejb2 lorsque l'ejb2 et l'ejb3 se trouvent dans la même archive jar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in thread "main" java.lang.ClassCastException
    	at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:229)
    	at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
    	at client_test.ClientEjb2.main(ClientEjb2.java:24)
    Caused by: java.lang.ClassCastException: $Proxy0
    	at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:212)
    	... 2 more
    questions:
    Que devient le fichier de déploiement ejb-jar.xml de notre ejb2 lorsque dans la même archive jar se trouve un ejb3 avec annotations ?
    Pourquoi une erreur de cast est elle relevée lorsque les deux types d'ejb cohabitent?

    j'espère avoir apporté assez de précision !

    merci beaucoup
    Dernière modification par Invité(e) ; 03/06/2008 à 10h42.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    bon et bien après différents tests, je ne suis pas parvenu à utiliser deux ejb de version différentes dans la même archive jar.

    j'ai donc opté pour séparer mes deux versions d'ejb dans deux jar différents.

    En revanche comment les utiliser dans le même ear ??

    lorsque je veux déployer mon application ear (contenant le jar ejb2 et le jar ejb3), le déploiement se déroule bien en revanche seul les ejb2 sont "bindé" référencés dans le jndi ! du coup même si mon jar ejb3 est déployé, je ne peux le récupérer via un lookup!

    l'erreur relevée est : Bean not bound
    "Bean étant le nom donné à mon bean dans l'annotation Stateless(mappedName="Bean")

    quelqu'un aurait une idée ?

    merci beaucoup

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    bon et bien j'ai finalement mis un jar ejb2 et un jar ejb3 dans le même ear.j'ai spécifié dans le fichier application.xml la présence de mes deux jar dans l'ear

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE application PUBLIC
    	"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    	"http://java.sun.com/dtd/application_1_3.dtd">
    <application>
    	<module>
    		<ejb>EJB3.jar</ejb>
    	</module>
    	<module>
    		<ejb>EJB2.jar</ejb>
    	</module>
    </application>
    puis dans chaque jar de mes ejb dans le répertoire Meta-inf j'ai ajouté un ejb-jar.xml

    le tout fonctionne

Discussions similaires

  1. [EJB3] Cohabitation entre EJB2 et EJB3
    Par Pyroxn dans le forum Java EE
    Réponses: 1
    Dernier message: 25/09/2010, 18h29
  2. [EJB] Faire cohabiter des ejb2 et ejb3 dans un seul jar
    Par fahugues dans le forum Java EE
    Réponses: 3
    Dernier message: 12/05/2009, 15h13
  3. [EJB] outil de migration ejb2 vers ejb3
    Par fahugues dans le forum Java EE
    Réponses: 3
    Dernier message: 23/03/2009, 17h01
  4. [EJB] EJB3 qui appelle EJB2
    Par ericw78 dans le forum Java EE
    Réponses: 3
    Dernier message: 01/10/2008, 00h24
  5. [EJB] Différences BMP EJB2/EJB3
    Par skrosoft dans le forum Java EE
    Réponses: 2
    Dernier message: 10/05/2007, 10h37

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