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

Wildfly/JBoss Java Discussion :

[JBOSS] [ejb3] Deployer un stateless ?


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut [JBOSS] [ejb3] Deployer un stateless ?
    Bonjour
    J'ai besoin de votre aide svp

    Ca fait plusieurs jours que j'essaie de créer ma première application j2ee ejb3
    Mais je n'arrive pas à deployer mon stateless (je ne le vois pas dans JNDIview)


    J'ai installé mysql et Jboss 4.0.5 GA (avec le jar)

    Voici le code de mon application

    AddUserServler.java
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    package servlet;
     
    import java.io.IOException;
    import java.io.*;
     
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpServlet;
    import javax.naming.InitialContext;
    import javax.naming.Context;
    import java.util.Properties;
    import java.util.*;
    import ejb.User;
    import ejb.UserBean;
    import ejb.UserLocal;
     
     
    public class AddUserServlet extends HttpServlet {
     
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // get parameters
    	UserLocal userLocal;int i=0;
    	RequestDispatcher rd = null;
    	try{
    		final Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY,
                    "org.jnp.interfaces.NamingContextFactory");
            env.put(Context.URL_PKG_PREFIXES,
                    "org.jboss.naming:org.jnp.interfaces");
            env.put(Context.PROVIDER_URL, "localhost:1099");
     
     
     
     
    		Context ctx = new InitialContext(env);
     
    		userLocal = (UserLocal)ctx.lookup("UserBean/local");
     
    		User user = new User();
    		user.setNom(request.getParameter("nom"));
     
    		User newUser = userLocal.createUser(user);
    		i=newUser.getId();
     
    		if(i > 0) {
    			rd = request.getRequestDispatcher("userAdded.jsp");
    		}
    		else {
    			rd = request.getRequestDispatcher("userNotAdded.jsp");
    		}
    		}catch(Exception e){rd = request.getRequestDispatcher("erreur.jsp");e.printStackTrace();}
    		rd.forward(request, response);
    	}
    }
    UserBean.java
    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
    package ejb;
     
    import javax.persistence.EntityManager;
    import javax.ejb.Stateless;
    import javax.persistence.PersistenceContext;
     
    @Stateless
    public class UserBean implements UserRemote, UserLocal{
     
    	@PersistenceContext (unitName = "UserDS")
    	protected EntityManager em;
     
    	public User createUser(User user){
    		em.persist(user);
    		return user;
    	}
    }
    UserLocal.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    package ejb;
     
    import javax.ejb.Local;
     
    @Local
    public interface UserLocal{
    	User createUser(User user);
    }
    UserRemote.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    package ejb;
     
    import javax.ejb.Remote;
     
    @Remote
    public interface UserRemote{
    	User createUser(User user);
    }
    User.java
    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
    38
    39
     
    package ejb;
     
    import javax.persistence.Entity;
    import javax.persistence.Table;
    import javax.persistence.Id;
    import javax.persistence.Column;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
     
    @Entity
    @Table(name = "t_user")
    public class User{
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	private int id;
     
    	@Column(nullable = false, length = 45)
    	private String nom;
     
    	public User(){}
     
    	public int getId(){
    		return id;
    	}
     
    	public String getNom(){
    		return nom;
    	}
     
    	public void setId(int id){
    		this.id = id;
    	}
     
    	public void setNom(String nom){
    		this.nom = nom;
    	}
    }
    persistence.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    < xml version="1.0"  encoding="UTF-8"?>
    <persistence version="1.0">
        <persistence-unit name="UserDS">
        <jta-data-source>java:/UserDS</jta-data-source>
        <properties>
     <property name="hibernate.hbm2ddl.auto"
     value="create-drop"/>
     </properties>
        </persistence-unit>
    </persistence>
    User-ds.xml
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <!-- $Id: mysql-ds.xml 41016 2006-02-07 14:23:00Z acoliver $ -->
    <!--  Datasource config for MySQL using 3.0.9 available from:
    http://www.mysql.com/downloads/api-jdbc-stable.html
    -->
     
    <datasources>
      <local-tx-datasource>
        <jndi-name>UserDS</jndi-name>
        <connection-url>jdbc:mysql://localhost:3306/test1</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <user-name>root</user-name>
        <password>password</password>
        <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
        <!-- should only be used on drivers after 3.22.1 with "ping" support
        <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
        -->
        <!-- sql to call when connection is created
        <new-connection-sql>some arbitrary sql</new-connection-sql>
          -->
        <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
        <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
          -->
     
        <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
        <metadata>
           <type-mapping>mySQL</type-mapping>
        </metadata>
      </local-tx-datasource>
    </datasources>
    La structure de mon ear :

    +-hellouser.ear
    | +-lib
    | | +-ejb.jar
    | | +-ejb
    | | | +-User.class
    | | | +-UserBean.class
    | | | +-UserLocal.class
    | | | +-UserRemote.class
    | | +-META-INF
    | | | +-ejb-jar.xml
    | +-helloear.war
    | | +-WEB-INF
    | | | +-classes
    | | | | +-servlet
    | | | | | +-AddUserServlet.class
    | | | +-web.xml
    | | +-*.jsp
    | +-META-INF
    | | +-application.xml


    En fait, j'ai l'erreur a l'exécution :

    javax.naming.NameNotFoundException: UserBean not Bound
    Je ne vois même pas UserBean dans le JNDI View
    Vous pouvez m'aider svp car je vais finir par m'arracher les cheveux

    Merci de me lire

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Salut,

    L'erreur que tu as est très classique: le nom que tu fourni lors du lookup n'est pas le bon ...


    Déjà, il faut savoir que le nom du bean, lors de sa publication, est le nom de la class OU la valeur que tu fourni au paramètre "name" de l'annotation Stateless ...

    Puis pour en venir en fait, l'erreur se trouve surement dans ton lookup ... En effet, tu précise uniquement "BEAN/INTERFACE" alors qu'il faut normalement préciser "EAR/BEAN/INTERFACE" ...
    En gros, modifie ton lookup en "hellouser/UserBean/local" ...


    Ah, cela risque à nouveau de ne pas fonctionner ... Il faut que tu utilise l'annotation Remote (juste en dessous de stateless) OU Local histoire de préciser quel est le nom de la class de l'interface... Donc @Local(UserLocal.class)



    Test pour voir

    Dernier point: si tu reste en localhost ... je te conseil de ne pas modifier le contexte ... ainsi, tu es sur que les valeurs par défaut son bonne (pour l'utilisation en localhost) et que ca doit fonctionner (du moins, si tu n'a pas modifier les configs de jboss).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    J'ai rajouté dans Userbean en dessous de @Stateless ce que tu m 'as dit
    @Local(UserLocal.class)

    Ca ne marche toujours pas
    Je ne comprend toujours pas pourquoi mon UserBean n'apparait pas dans JNDIView

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    tu as bien modifié ton lookup comme indiqué ?


    As tu vérifié qu'il n'y ai pas d'autre erreur ?


    IL faut que tu regardes les logs de JBoss ... Tout y est affiché (déployement, démarrage de l'application, etc).. tu as peut etr eun problème de librairie, ce qui fait que ton bean ne peut pas etre démarré => il ne se trouve pas dans l'arbre du jndi ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    J'ai toujours mon problème

    Dans le server.log, je trouve cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2008-01-07 19:41:13,921 DEBUG [org.jboss.deployment.EARDeployer] Extracted non-deployable content: lib/ejb.jar
    Apparemment, mon fichier ejb.jar qui contient mon stateless et mes entity n'est pas déployable

    Quelqu'un sait pourquoi?

    PS: J'ai aussi essayé en modiant mon lookup mais ca ne change rien

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Hum, étrange ...


    Tu utilise quelle version de JBoss ? Comment l'a tu installé ? Si c'est via un installateur, as-tu bien selectionné le profile "ejb3" ???

  7. #7
    Membre éclairé Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Points : 821
    Points
    821
    Par défaut
    Tu peux nous uploader ton exemple ? C'est surement un petit détail.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    J'ai installé Jboss 4.0.5 GA avec le jar et j'ai bien précisé le profil EJB3 lors de l'installation

    XmasRock : tu veux que je t'envoie mon fichier ear?

    Je crois que le problème vient lorsque je package mon application avec ant

    Voici mon fichier Build.xml :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    <?xml version="1.0"?>
     
    <project name="HelloWorld" default="core">
     
        <property name="application.name" value="hellouser"/>
     
        <property name="home.dir" value="."/>
        <property name="hello.home" value="${home.dir}/hello"/>
     
        <property name="hello.build.dir" value="${hello.home}/build"/>
        <property name="hello.config.dir" value="${hello.home}/config"/>
        <property name="hello.src.dir" value="${hello.home}/src"/>
        <property name="hello.web.dir" value="${hello.home}/resources"/>
        <property name="hello.web-inf.dir" value="${hello.home}/web-inf"/>
        <property name="hello.generated.src.dir" value="${hello.home}/generated"/>
        <property name="hello.classes.dir" value="${hello.home}/classes"/>
        <property name="hello.lib.dir" value="${hello.home}/lib"/>
        <property name="hello.meta-inf.dir" value="${hello.home}/meta-inf"/>
     
        <property name="hello.ejb.jar" value="${hello.build.dir}/lib/ejb.jar"/>
        <property name="hello.war" value="${hello.build.dir}/${application.name}.war"/>
        <property name="hello.ear" value="${hello.build.dir}/${application.name}.ear"/>
     
        <path id="classpath">
            <pathelement location="D:\jboss-4.0.5.GA\server\default\lib\ejb3-persistence.jar"/>
            <fileset dir="D:\jboss-4.0.5.GA\server\default\deploy\ejb3.deployer"> <include name="**/*.jar"/>
        		</fileset>
            <fileset dir="D:\jboss-4.0.5.GA\server\default\lib"> <include name="**/*.jar"/>
        		</fileset>
        </path>
     
    		<path id="hello-classpath">
            <pathelement location="${hello.classes.dir}"/>
            <pathelement location="${hello.lib.dir}/*.jar"/>
        </path>
     
        <target name="clean">
            <antcall target="hello-clean"/>
        </target>
     
        <target name="hello-clean">
            <echo message="Cleans the Yaps environment"/>
            <delete dir="${hello.home}/classes"/>
            <delete dir="${hello.build.dir}"/>
        </target>
     
        <target name="prepare">
            <antcall target="hello-prepare"/>
        </target>
     
        <target name="hello-prepare">
            <echo message="Setup the Yaps environment"/>
            <mkdir dir="${hello.classes.dir}"/>
            <mkdir dir="${hello.build.dir}/lib"/>
             <mkdir dir="${hello.build.dir}/META-INF"/>
        </target>
     
        <target name="compile" depends="prepare">
            <antcall target="hello-compile"/>
        </target>
     
        <target name="hello-compile" depends="hello-prepare">
            <echo message="Compile the hello classes"/>
            <javac srcdir="${hello.src.dir}"
                   destdir="${hello.classes.dir}"
                   deprecation="on">
                <compilerarg value="-Xlint:unchecked"/>
                <classpath refid="classpath"/>
                <classpath refid="hello-classpath"/>
            </javac>
        </target>
     
        <target name="build" depends="compile">
            <antcall target="hello-build"/>
        </target>
     
        <target name="hello-build"
                depends="hello-compile,hello-build-ejb-jar,hello-build-war,hello-build-ear"/>
     
        <target name="hello-build-ejb-jar">
            <echo message="Creates the Client jar"/>
            <jar jarfile="${hello.ejb.jar}">
            	 <metainf dir="${hello.config.dir}/META-INF" />
                <fileset dir="${hello.classes.dir}">
                    <include name="ejb/**/*.class"/>
                </fileset>
            </jar>
        </target>
     
        <target name="hello-build-war">
            <echo message="Creates the PetStore Web Application"/>
            <war destfile="${hello.war}" webxml="${hello.web-inf.dir}/web.xml">
                <fileset dir="${hello.web.dir}">
                    <include name="**/*.jsp"/>
                    <include name="**/*.jspf"/>
                    <include name="**/*.gif"/>
                    <include name="**/*.jpg"/>
                    <include name="**/*.css"/>
                </fileset>
                <classes dir="${hello.classes.dir}">
                    <include name="servlet/*.class"/>
                </classes>
            </war>
        </target>
     
        <target name="hello-build-ear">
            <echo message="Creates the PetStore Enterprise Application"/>
            <delete file="${hello.ear}"/>
            <copy todir="${hello.build.dir}/META-INF">
    					<fileset dir="${hello.meta-inf.dir}" includes="application.xml" /> 
    				</copy>
            <jar jarfile="${hello.ear}" basedir="${hello.build.dir}" excludes="${application.name}.jar"/>
        </target>
    </project>

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    J'ai ajouté ca dans mon fichier application.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <module>
        <ejb>lib/ejb.jar</ejb>
    </module>
    Voici l'erreur que j'ai maintenant lors du démarrage du serveur

    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
     
    2008-01-15 18:42:10,906 DEBUG [org.jboss.ejb3.Ejb3AnnotationHandler] found EJB3: ejbName=UserBean, class=ejb.UserBean, type=STATELESS
    2008-01-15 18:42:10,921 DEBUG [org.jboss.ejb3.ProxyDeployer] no declared remote bindings for : UserBean
    2008-01-15 18:42:10,937 DEBUG [org.jboss.ejb3.ProxyDeployer] there is remote interfaces for UserBean
    2008-01-15 18:42:10,937 DEBUG [org.jboss.ejb3.ProxyDeployer] default remote binding has jndiName of hellouser/UserBean/remote
    2008-01-15 18:42:10,953 ERROR [org.hibernate.ejb.packaging.PersistenceXmlLoader] Error parsing XML: XML InputStream(1) The markup in the document preceding the root element must be well-formed.
    2008-01-15 18:42:10,968 DEBUG [org.jboss.ejb3.Ejb3Module] Initialization failed jboss.j2ee:service=EJB3,module=ejb.jar
    org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed.
    	at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    	at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    	at org.hibernate.ejb.packaging.PersistenceXmlLoader.loadURL(PersistenceXmlLoader.java:64)
    	at org.hibernate.ejb.packaging.PersistenceXmlLoader.deploy(PersistenceXmlLoader.java:73)
    	at org.jboss.ejb3.Ejb3Deployment.initializePersistenceUnits(Ejb3Deployment.java:444)
    	at org.jboss.ejb3.Ejb3Deployment.create(Ejb3Deployment.java:307)
    	at org.jboss.ejb3.Ejb3Module.createService(Ejb3Module.java:77)
    	at org.jboss.system.ServiceMBeanSupport.jbossInternalCreate(ServiceMBeanSupport.java:260)
    	at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:243)
    	at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

  10. #10
    Membre éclairé Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Points : 821
    Points
    821
    Par défaut
    Attaches_là ici, comme ça tous ceux qui se sentent l'âme d'un samaritain pourront essayer

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    C'est y est j'ai trouvé pour le parse error
    Il manquait un "?" dans mon persistence.xml

    Et maintenant tout fonctionne comme je le souhaite

    Merci de m'avoir aider

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [jboss] hébergement JBOSS-EJB3
    Par Invité(e) dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 24/11/2008, 19h12
  2. netbeans 6 jboss ejb3
    Par cocoyot dans le forum NetBeans
    Réponses: 3
    Dernier message: 23/12/2007, 19h26
  3. [EJB3] Deployer sur JBOSS un EJB(3.0) avec Oracle
    Par metalpetsFR dans le forum Wildfly/JBoss
    Réponses: 11
    Dernier message: 16/08/2007, 09h42
  4. debutant sur jboss comment deployer une application sur jboss?
    Par chakala dans le forum Wildfly/JBoss
    Réponses: 11
    Dernier message: 06/03/2007, 11h51
  5. [JBOSS][EJB3] Warnings à corriger
    Par nramariavelo dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 22/09/2006, 11h12

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