Glassfish v3 / JNDI entrée ne peut pas être constaté de problèmes!
J'ai été d'avoir des problèmes en essayant d'appel d'un EJB de la méthode à partir d'une Application Java Client.
Voici le code.
EJB Remote Interface
package com.test;
import javax.ejb.Remote;
@Remote
public interface HelloBeanRemote {
public String sayHello();
}
EJB
package com.test;
import javax.ejb.Stateless;
@Stateless (name="HelloBeanExample" , mappedName="ejb/HelloBean")
public class HelloBean implements HelloBeanRemote {
@Override
public String sayHello(){
return "hola";
}
}
Classe principale (d'un autre projet)
import com.test.HelloBeanRemote;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Main {
public void runTest()throws Exception{
Context ctx = new InitialContext();
HelloBeanRemote bean = (HelloBeanRemote)ctx.lookup("java:global/Test/HelloBeanExample!com.test.HelloBeanRemote");
System.out.println(bean.sayHello());
}
public static void main(String[] args)throws Exception {
Main main = new Main();
main.runTest();
}
}
Bien, quel est mon problème? JNDI entrée pour cet EJB ne peut pas être trouvé!
java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at testdesktop.Main.runTest(Main.java:22)
at testdesktop.Main.main(Main.java:31) Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/Test/HelloBeanExample!com.test.HelloBeanRemote' in SerialContext [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at testdesktop.Main.runTest(Main.java:22)
at testdesktop.Main.main(Main.java:31) Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
... 3 more Caused by: java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
... 4 more Java Result: 1
J'ai essayé avec différents JNDI entrées, mais rien ne fonctionne (j'ai eu cette des entrées à partir de NetBeans de la console):
INFO: Portable noms JNDI pour EJB HelloBeanExample : [java:global/Test/HelloBeanExample, java:global/Test/HelloBeanExample!com.test.HelloBeanRemote]
INFO: Glassfish spécifiques (Non portable) noms JNDI pour EJB HelloBeanExample : [ejb/HelloBean, ejb/HelloBean#com.test.HelloBeanRemote]
J'ai donc essayé avec les entrées suivantes, mais j'ai eu la même exception :
- java:global/Test/HelloBeanExample
- java:global/Test/HelloBeanExample!com.test.HelloBeanRemote
- ejb/HelloBean
- ejb/HelloBean#com.test.HelloBeanRemote
Je suis à l'aide de Netbeans 6.8 et Glassfish v3!
OriginalL'auteur rudymatos | 2010-01-18
Vous devez vous connecter pour publier un commentaire.
En fait, votre problème est pas la recherche de la référence JNDI de votre haricot ou vous obtenez quelque chose comme ça:
Non, ici, je soupçonne un simple problème de classpath, vous êtes tout simplement pas certains jar dans le classpath de votre projet client. Avec GlassFish v3, ajoutant
$GF_HOME/modules/gf-client.jar
devrait être suffisant comme mentionné dans Comment puis-je accéder à une Distance composant EJB à partir d'un client java? dans GlassFish de l'EJB de la FAQ (ma compréhension est que ce pot est censé remplacer$GF_HOME/lib/appserv-rt.jar
qui est là pour des raisons de compatibilité avec GFv2). Il est toutefois important de se reporter auxgf-client.jar
à partir du répertoire d'installation de GlassFish ou les pots déclaré dans son manifeste, ne sera pas trouvé.Une fois que vous aurez cette fixe, vous devriez être capable de rechercher votre bean en utilisant les noms JNDI que GlassFish sorties dans les journaux. Je vous suggère d'utiliser le nouveau portable global noms JNDI de Java EE 6.
Juste au cas où, le Quelle est la syntaxe pour portable global noms JNDI dans EJB 3.1? entrée de la GlassFish EJB FAQ fournit un bon résumé de cette nouvelle convention. Et si vous voulez plus d'informations, consultez: http://blogs.oracle.com/MaheshKannan/entry/portable_global_jndi_names.
OriginalL'auteur Pascal Thivent
J'ai trouvé quelque chose! Je pense qu'il est un "particulier" pour ajouter et configurer des composants à l'aide de NetBeans! J'ai lu le netbeans tutoriels à partir de pages web et, apparemment, j'ai été faire les choses mal! Donc, ce n'est pas une véritable solution pour ce problème, mais peut-être si vous lisez l'un de ces http://netbeans.org/kb/trails/java-ee.html, vous trouverez votre aswers!
Ce qui concerne
OriginalL'auteur rudymatos
J'ai rencontré le même problème. Je googlé le web et suivi des tutoriels Oracle ligne par ligne, pour mettre en place un java autonome client, mais toujours rien ne fonctionne. Je suis tombé sur http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html et il a une information que j'ai déjà essayé de résoudre le problème.
Je vais redémarrer mon IDE, propre et construire le projet; peut-être aussi créer le projet de nouveau. Et qui sait, quand la lune est pleine, mon code peut s'exécuter sans problème 🙂 Alors peut-être vous voulez essayer que trop
OriginalL'auteur Abraham
Mon client autonome enfin courir! Le truc, tout le redémarrage de Netbeans IDE, annulé le déploiement de l'application et de son redéploiement. Cela devrait résoudre votre problème(en supposant qu'il existe pas d'autre erreur dans votre code et de configuration).
OriginalL'auteur Abraham