Question

J'ai eu du mal pour ce pour un certain temps maintenant.

Je suis en train de préparer EJB 3.0.Je suis à l'aide de JBoss 5.1.0 GA comme mon serveur d'application.J'ai commencé avec de très simple stateless session bean avec l'interface locale et une simple jsp-servlet client qui invoque une session bean méthode.Tout cela alors que je suis en train d'essayer d'utiliser @EJB annotation à injecter bean de session dans la classe de servlet.

public class SampleServlet extends HttpServlet {

    @EJB
    private PersonLocal person;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        System.out.println("In servlet");       
        response.getWriter().write("Person Name : "+person.getName());
        System.out.println(person.getName());       
    }
}

Je suis à l'aide de JBoss 5.1.0 GA avec l' par défaut la configuration.(J'ai aussi essayé avec tous la configuration)

Cependant, j'ai utilisé pour obtenir une référence null à la session bean injection.Après avoir lutté pendant un jour ou deux, j'ai finalement essayé le laid EJB 2.x recherche JNDI méthode au lieu de @EJB annotation avec configuration jndi spécifié dans le jndi.properties fichier et cela a fonctionné sans aucun autre changement!

Maintenant, j'ai essayé de trouver dans le JBoss docs si JBoss 5.1.0 GA ne ou ne prend pas en charge l'injection avec @EJB l'annotation, mais ne pouvait pas trouver une réponse concrète.Si quelqu'un peut me dire si c'est le cas?cause, je préférerais vraiment annotation sur recherche JNDI (je veux dire, qui ne va pas?).Ai-je raté quelque chose..?

Devrait probablement avoir mis cela dans la JBoss forums, mais..Je suis accro à cet endroit ;-)

Était-ce utile?

La solution

Ce n'est certainement pris en charge par JBoss 5.x, car il est de Java EE 5 certifié.

En fait, je vous conseille de visiter le Le chapitre 11.Introduction aux EJB injection dans les Servlets de la JBoss EJB3 Tutoriels, ils décrivent de façon détaillée et exemple étape par étape.

Et à prêter une attention particulière à la note suivante:

Pour l'injection de prendre place dans un module web, votre web.xml devrait utiliser la version 2.5 de l'application web xsd:

<web-app version="2.5"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

Autres conseils

J'ai eu un problème similaire à l'aide d'un EJB distant, mais il n'était pas due à la web-app version, mais plutôt de la façon dont mon client est à la recherche de la EJB.

Voici ce qui a fonctionné pour moi:

//bean
@Stateless(name="xxxxService")
@Remote(xxxxRemote.class)
public class xxxxService implements xxxxRemote {

//interface - note that no annnotation is required
public interface xxxxRemote {

//in the client
  @EJB(mappedName="myJndiNameForxxxx") //for a local ejb, you could use 'beanName='
  private xxxxRemote xxxx;

Pour mon projet (construit avec Maven), le client est dans une webapp, et de l'EJB est dans un EJB projet qui est ensuite enveloppé dans une OREILLE projet.Le JNDI de la cartographie se produit dans jboss.xml qui vit dans le projet EJB (dans mon projet, src/main/resources/META-INF), et ressemble à ceci:

<?xml version="1.0" encoding="UTF-8"?>
<jboss xmlns:xs="http://www.jboss.org/j2ee/schema"
       xs:schemaLocation="http://www.jboss.org/j2ee/schema/jboss_5_0.xsd"
       version="5.0">
  <enterprise-beans>
  <session>
      <ejb-name>xxxxService</ejb-name>
      <jndi-name>myJndiNameForxxxx</jndi-name>
  </session>
  </enterprise-beans>
</jboss>

C'est tout ce qu'il a pris, et maintenant je peux accéder à l'EJB de la part du client.Espérons que cela aide quelqu'un.

Si vous rencontrez toujours des problèmes, vous pouvez regarder dans la console JMX pour s'assurer de la JNDI entrée s'affiche.Regardez sous "jboss'>'service=JNDIview'>'liste' et cliquez sur 'appeler' bouton.Si votre service est déployé correctement, vous devriez voir le nom JNDI (dans mon exemple, myJndiNameForxxxx) sous ProxyFactory'.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top