选定的bean不在同一个模块或企业应用程序中 [英] selected bean is not in the same module or enterprise application
问题描述
在黑暗中只是一个镜头,但是当我尝试通过Netbeans远程调用该bean时,需要一个本地界面来调用远程无状态EJB?
/ p>
Netbeans不允许在此bean上进行远程调用或任何调用。为什么不这样?
尝试手动执行,如下所示:
什么是jndi 全局
信息:访问未访问的引用
INFO :访问未访问的引用
INFO:EJB5181:EJB的可移植JNDI名称MyRemoteSessionClass:[java:global / RemoteSalutation-ejb / MyRemoteSessionClass!net.bounceme.dur.glassfish.MyRemoteSession,java:global / RemoteSalutation-ejb / MyRemoteSessionClass]
信息:RemoteSalutation-ejb已成功部署在941毫秒。
如果可能,我宁愿在属性文件中指定类,而不是硬编码。无论如何,不同的变化导致查找失败。以下是堆栈跟踪:
run-deploy:
将1个文件复制到/ home / thufir / NetBeansProjects / RemoteLookup / dist
将2个文件复制到/ home / thufir / NetBeansProjects / RemoteLookup / dist / RemoteLookupClient
警告:/ home / thufir / NetBeansProjects / RemoteLookup / dist / gfdeploy / RemoteLookup不存在。
2014年9月13日1:35:41 net.bounceme.dur.remote.RemoteLookup运行
INFO:java.naming.factory.initial com.sun.enterprise.naming.impl.SerialInitContextFactory
2014年9月13日1:35:41 net.bounceme.dur.remote.RemoteLookup运行
INFO:java.naming.factory.url.pkgs com.sun.enterprise.naming
Sep 13 ,2014 1:35:41 AM net.bounceme.dur.remote.RemoteLookup运行
INFO:java.naming.factory.state com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
2014年9月13日1:35:46 net.bounceme.dur.remote.RemoteLookup main
SEVERE:Lookup failed for'java:comp / env // RemoteSalutation-ejb / MyRemoteSessionClass!net / bounceme / dur / glassfish / MyRemoteSession'in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory,remote = net.bounceme.ix.Foo,org.omg.CORBA.ORBInitialHost = localhost,java .naming.security.principal = user,org.omg.CORBA.ORBInitialPort = 3700,java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDISt ateFactoryImpl,java.naming.provider.url = server.local:1199,java.naming.factory.url.pkgs = com.sun.enterprise.naming,java.naming.security.credentials = password}
javax。 naming.NamingException:SerialContext中的'java:comp / env // RemoteSalutation-ejb / MyRemoteSessionClass!net / bounceme / dur / glassfish / MyRemoteSession'的查找失败[myEnv = {java.naming.factory.initial = com.sun.enterprise .naming.impl.SerialInitContextFactory,remote = net.bounceme.ix.Foo,org.omg.CORBA.ORBInitialHost = localhost,java.naming.security.principal = user,org.omg.CORBA.ORBInitialPort = 3700,java.naming .factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.provider.url = server.local:1199,java.naming.factory.url.pkgs = com.sun.enterprise .naming,java.naming.security.credentials = password} [根异常是javax.naming.NameNotFoundException:java:comp]
在com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java: 491)
在com.sun.enterprise.naming.impl.Seri alContext.lookup(SerialContext.java:438)
在javax.naming.InitialContext.lookup(InitialContext.java:411)
在net.bounceme.dur.remote.RemoteLookup.run(RemoteLookup.java: 34)
at net.bounceme.dur.remote.RemoteLookup.main(RemoteLookup.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect。 NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:606)
在org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446)
在org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:166)
导致:javax.naming.NameNotFoundException:java:comp
在com.sun.enterprise.naming.impl.TransientContext.resolveContext(TransientContext.java:299)
在com.sun.enterprise。 naming.impl.TransientContex t.lookup(TransientContext.java:207)
在com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:66)
在com.sun.enterprise.naming.impl。 RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:606)
在com.sun.corba.ee.impl。 presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:143)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:173)
at com。 sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528)
在com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatc h(ServerRequestDispatcherImpl.java:199)
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549)
在com.sun.corba.ee.impl。 protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425)
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930)
在com.sun.corba。 ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496)
在com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222)
在com.sun.corba.ee.impl.threadpool.ThreadPoolImpl $ WorkerThread.performWork(ThreadPoolImpl.java:497)
在com.sun.corba.ee.impl.threadpool.ThreadPoolImpl $ WorkerThread.run (ThreadPoolImpl.java: 540)
运行:
BUILD SUCCESSFUL(总时间:17秒)
$ b $客户端代码:
package net.bounceme.dur.remote;
import java.util.Enumeration;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class RemoteLookup {
private static final Logger log = Logger.getLogger(RemoteLookup.class.getName());
private final MyProps p = new MyProps();
public static void main(String ... args){
try {
new RemoteLookup()。
} catch(NamingException ex){
Logger.getLogger(RemoteLookup.class.getName())。log(Level.SEVERE,ex.getExplanation(),ex);
}
}
private void run()throws NamingException {
属性jndi = p.getJNDI();
枚举e = jndi.propertyNames();
while(e.hasMoreElements()){
String key =(String)e.nextElement();
String val = jndi.getProperty(key);
log.info(key +\t+ val);
}
上下文ic = new InitialContext();
// Object o = ic.lookup(java:comp / env / RemoteSalutation-ejb / MyRemoteSessionClass);
Object o = ic.lookup(java:comp / env // RemoteSalutation-ejb / MyRemoteSessionClass!net / bounceme / dur / glassfish / MyRemoteSession);
}
}
远程EJB:
package net.bounceme.dur.glassfish;
import javax.ejb.Stateless;
// @ LocalBean
@Stateless(mappedName =salutationBean)
public class MyRemoteSessionClass实现MyRemoteSession {
@Override
public String SayHello(){
返回来自glassfish的你好..
}
@Override
public String SayBye(){
returngoodbye ..;
}
}
请注意,界面是 strong>,即:它实际上是一个Java类库。正确?这使得EJB远程。
引用:
https://netbeans.org/kb/docs/javaee/entappclient.html
尽管我改变了名字,但其实应该和教程一样。
尝试 Object o = ic.lookup(salutationBean);
请注意,mappedName指定要在JNDI中进行远程访问的名称。
Just a shot in the dark, but do I need a local interface to call a remote stateless EJB?
when I try call the bean remotely through Netbeans:
Netbeans doesn't allow a remote call, or any call, on this bean. Why not?
Trying to do it manually, as below:
What is the jndi global remote name for the Remote EJB which is deployed on glassfish?
INFO: visiting unvisited references
INFO: visiting unvisited references
INFO: EJB5181:Portable JNDI names for EJB MyRemoteSessionClass: [java:global/RemoteSalutation-ejb/MyRemoteSessionClass!net.bounceme.dur.glassfish.MyRemoteSession, java:global/RemoteSalutation-ejb/MyRemoteSessionClass]
INFO: RemoteSalutation-ejb was successfully deployed in 941 milliseconds.
If possible, I would rather specify the class in the properties file rather than hard-coded. In any event, different variations result in a lookup failure. Here's the stack-trace:
run-deploy:
Copying 1 file to /home/thufir/NetBeansProjects/RemoteLookup/dist
Copying 2 files to /home/thufir/NetBeansProjects/RemoteLookup/dist/RemoteLookupClient
Warning: /home/thufir/NetBeansProjects/RemoteLookup/dist/gfdeploy/RemoteLookup does not exist.
Sep 13, 2014 1:35:41 AM net.bounceme.dur.remote.RemoteLookup run
INFO: java.naming.factory.initial com.sun.enterprise.naming.impl.SerialInitContextFactory
Sep 13, 2014 1:35:41 AM net.bounceme.dur.remote.RemoteLookup run
INFO: java.naming.factory.url.pkgs com.sun.enterprise.naming
Sep 13, 2014 1:35:41 AM net.bounceme.dur.remote.RemoteLookup run
INFO: java.naming.factory.state com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
Sep 13, 2014 1:35:46 AM net.bounceme.dur.remote.RemoteLookup main
SEVERE: Lookup failed for ' java:comp/env//RemoteSalutation-ejb/MyRemoteSessionClass!net/bounceme/dur/glassfish/MyRemoteSession' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, remote=net.bounceme.ix.Foo, org.omg.CORBA.ORBInitialHost=localhost, java.naming.security.principal=user, org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.provider.url=server.local:1199, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.security.credentials=password}
javax.naming.NamingException: Lookup failed for ' java:comp/env//RemoteSalutation-ejb/MyRemoteSessionClass!net/bounceme/dur/glassfish/MyRemoteSession' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, remote=net.bounceme.ix.Foo, org.omg.CORBA.ORBInitialHost=localhost, java.naming.security.principal=user, org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.provider.url=server.local:1199, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.security.credentials=password} [Root exception is javax.naming.NameNotFoundException: java:comp]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at net.bounceme.dur.remote.RemoteLookup.run(RemoteLookup.java:34)
at net.bounceme.dur.remote.RemoteLookup.main(RemoteLookup.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446)
at org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:166)
Caused by: javax.naming.NameNotFoundException: java:comp
at com.sun.enterprise.naming.impl.TransientContext.resolveContext(TransientContext.java:299)
at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:207)
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:66)
at com.sun.enterprise.naming.impl.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:143)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:173)
at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528)
at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222)
at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
run:
BUILD SUCCESSFUL (total time: 17 seconds)
client code:
package net.bounceme.dur.remote;
import java.util.Enumeration;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class RemoteLookup {
private static final Logger log = Logger.getLogger(RemoteLookup.class.getName());
private final MyProps p = new MyProps();
public static void main(String... args) {
try {
new RemoteLookup().run();
} catch (NamingException ex) {
Logger.getLogger(RemoteLookup.class.getName()).log(Level.SEVERE, ex.getExplanation(), ex);
}
}
private void run() throws NamingException {
Properties jndi = p.getJNDI();
Enumeration e = jndi.propertyNames();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
String val = jndi.getProperty(key);
log.info(key + "\t" + val);
}
Context ic = new InitialContext();
// Object o = ic.lookup(" java:comp/env/RemoteSalutation-ejb/MyRemoteSessionClass");
Object o = ic.lookup(" java:comp/env//RemoteSalutation-ejb/MyRemoteSessionClass!net/bounceme/dur/glassfish/MyRemoteSession");
}
}
the remote EJB:
package net.bounceme.dur.glassfish;
import javax.ejb.Stateless;
//@LocalBean
@Stateless(mappedName = "salutationBean")
public class MyRemoteSessionClass implements MyRemoteSession {
@Override
public String SayHello() {
return "hello from glassfish..";
}
@Override
public String SayBye() {
return "goodbye..";
}
}
note that the interface is remote, ie: it's literally a Java class library. Correct? This makes the EJB remote.
referencing:
https://netbeans.org/kb/docs/javaee/entappclient.html
although I changed the names a bit..otherwise should be exactly as the tutorial.
Try Object o = ic.lookup("salutationBean");
Note that mappedName specifies the name to use in JNDI for a remote access.
这篇关于选定的bean不在同一个模块或企业应用程序中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!