我是EJB和JBoss世界的新手,在尝试通过远程接口执行无状态bean时遇到了问题。Jboss 7.1 Ejb3 Struts2和EAR无法使用JNDI执行EJB
我在Struts ActionSupport的这样做:
public String inscrire() {
System.out.println("########### Inscrire Action #############");
Candidat c = new Candidat(nom, prenom, mail, telephone, ecole);
try {
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,
org.jboss.naming.remote.client.InitialContextFactory.class
.getName());
env.put(Context.PROVIDER_URL, "remote://localhost:4447");
env.put(Context.SECURITY_PRINCIPAL, "UserApp");
//env.put("jboss.naming.client.ejb.context", "true");
env.put(Context.SECURITY_CREDENTIALS, "password");
InitialContext remoteContext = new InitialContext(env);
System.out.println("########## Initial Context OK ##########");
servicecandidat = (CandidatSessionRemote) remoteContext
.lookup("java:global/EtestEAProject/EtestMetier/CandidatSession!sessions.candidat.CandidatSessionRemote");
System.out.println("########## LookUp OK ##########");
if (servicecandidat.inscrireCandidat(c))
return SUCCESS;
else
return ERROR;
}catch (Exception lookupError) {
System.out.println("########## LookUp EcheC##########");
lookupError.printStackTrace();
return ERROR;
}
控制台使试图执行梅索德
15:01:45,474 INFO [stdout] (http-localhost-127.0.0.1-8080-1) ########## Initial Context OK ##########
15:01:45,680 INFO [stdout] (http-localhost-127.0.0.1-8080-1) ########## LookUp ExcheC##########
15:01:45,682 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) javax.naming.NameNotFoundException: global/EtestEAProject/EtestMetier/CandidatSession!sessions.candidat.CandidatSessionRemote -- service jboss.naming.context.java.jboss.exported.global.EtestEAProject.EtestMetier."CandidatSession!sessions.candidat.CandidatSessionRemote"
15:01:45,685 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
15:01:45,687 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
...........................
和EJB JAR部署时,如下因素命名exeption说:
java:global/EtestEAProject/EtestMetier/CandidatSession!sessions.candidat.CandidatSessionRemote
java:app/EtestMetier/CandidatSession!sessions.candidat.CandidatSessionRemote
java:module/CandidatSession!sessions.candidat.CandidatSessionRemote
java:jboss/exported/EtestEAProject/EtestMetier/CandidatSession!sessions.candidat.CandidatSessionRemote
java:global/EtestEAProject/EtestMetier/CandidatSession!sessions.candidat.CandidatSessionLocal
java:app/EtestMetier/CandidatSession!sessions.candidat.CandidatSessionLocal
java:module/CandidatSession!sessions.candidat.CandidatSessionLocal
您是否从不同的JVM进行远程处理?或者在同一个JVM中只是一个不同的部署(或子部署)? – jyore
感谢jyore为你回答我是从Web应用程序中使用另一个JVM的Web应用程序的远程处理,我想... –
我会试图澄清,在同一个jboss实例中的应用程序?他们是否在同一个EAR?或者他们在一起在单独的机器上?相信与否,这决定了您使用的是哪个JNDI名称。 – jyore