选定的bean不在同一个模块或企业应用程序中 [英] selected bean is not in the same module or enterprise application

查看:200
本文介绍了选定的bean不在同一个模块或企业应用程序中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在黑暗中只是一个镜头,但是当我尝试通过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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆