Je suis nouveau à l'EJB et j'essayais "Hello World" type de programme Java EJB. Voici mon EJB:
Properties prop = new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); try { InitialContext ctx = new InitialContext(prop); ctx.lookup("ejb/BookRequestBean"); System.out.println("EJB Look-up successfull!!"); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); }
4 Réponses :
Il peut y avoir plusieurs raisons à ceci: p>
EJB code> n'est pas mappé sur jndi em> nom. Vous devez vérifier si votre
EJB code> est déployé avec succès et il est mappé sur jndi em> nom. Vous pouvez vérifier
GUI code>,
Connexion au serveur sur le démarrage code> ou utiliser
client de test universel code> pour voir si
EJB code> est mappé correctement . Remarque,
UTC code> ne montrera que exposé à distance em> éjbs. P>
EJB code> est uniquement exposé à application locale em>. Dans ce cas, appel à distance em> ou Appel d'application croisé em> (autre oreille, guerre ...) à votre
EJB code> échouera. Dans ce scénario, créez interface distante em> et l'expose. Interface locale EM> expose EJB aux appels locaux uniquement. Interface distante EM> expose EJB à Télécommande em> ou Appels d'application croisée em>. p>.
rmi / iop code> port em> peut être incorrect. Vous pouvez vérifier
Glassfish GUI code> ou
Startup Server LOG CODE> Pour voir ce que port em>
rmi / iop code> est attribué à. p>
En plus de Nice @Ravitrivei Réponse, voici quelques réflexions: p>
@Named code> Annotation ne doit pas être utilisé de cette façon li>
- n'utilise pas les deux
nom code> et MappeName code>, pour Glassfish, il suffit d'utiliser juste MappeName code> li>
- Votre EJB doit implémenter une interface distante li>
ul>
Légère interjection. Nom code> est utilisé pour identifier EJB here que
MappeName code> est le nom JNDI de EJB. Aussi
mappeName code> est spécifique au fournisseur. IE: Supports de gishfish, WebSphere non.
@Ravitrivedi Yep, c'est pourquoi j'ai noté que cela suffit pour les poissons de verre. Il ne doit pas être utilisé si vous souhaitez des applications entièrement portables.
Ajout à @Ravi Trivedi et @miljen Mikic, si vous utilisez Glassfish, vous devriez vérifier comment votre EJB est enregistré dans JNDI. Dans Glassfish, par exemple, tapez la commande suivante:
**This Remote interface (the only addition to your above code);** import javax.ejb.Remote; @Remote public interface BookRequestI { //Other codes here String getISBN(); } **your existing implementation spiced with my getISBN() to prove the point :)** import javax.ejb.Stateless; @Stateless(name="BookRequestBean", mappedName="ejb/BookRequestBean") public class BookRequest implements BookRequestI { //Other codes here @Override public String getISBN(){ return "ISBN 87 - 11 - 07559 - 7"; } } **your test as is with my getISBN and typing to interface Type.** import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Properties; public class BookRequestT { public static void main(String[] args) { Properties prop = new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); try { Context ctx = new InitialContext(prop); BookRequestI bookRequest = (BookRequestI) ctx.lookup("ejb/BookRequestBean"); System.out.println("EJB Look-up successfull!!" + bookRequest.getISBN()); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } output: EJB Look-up successfull!!ISBN 87 - 11 - 07559 - 7 Process finished with exit code 0
Full StackTrace aiderait. Assurez-vous également de regarder ceci: Glassfish.java.net/javaee5/ejb/ Ejb_faq.html # pojolocalejb