Java 无法对类型为com.ibm.ws.naming.urlns.genericURLContextFactory的对象调用方法getObjectInstance在JNDI查找时出错

Java 无法对类型为com.ibm.ws.naming.urlns.genericURLContextFactory的对象调用方法getObjectInstance在JNDI查找时出错,java,jakarta-ee,websphere,jndi,websphere-7,Java,Jakarta Ee,Websphere,Jndi,Websphere 7,你知道我为什么会遇到这个例外吗 String url = "corbaloc:iiop:localhost:2809"; String initial = "com.ibm.websphere.naming.WsnInitialContextFactory"; String jndi = "ejblocal:my/ejb/PeriodoBO"; Hashtable<String, String> pdEnv = new Hashtable<String, String>

你知道我为什么会遇到这个例外吗

String url = "corbaloc:iiop:localhost:2809";
String initial = "com.ibm.websphere.naming.WsnInitialContextFactory";
String jndi = "ejblocal:my/ejb/PeriodoBO";

Hashtable<String, String> pdEnv = new Hashtable<String, String>();
pdEnv.put("java.naming.provider.url", url);
pdEnv.put("java.naming.factory.initial", initial);
Context initialContext = new InitialContext(pdEnv);

try{
    Object ejbHome = initialContext.lookup(jndi); // <-- here
    Object obj = PortableRemoteObject.narrow(ejbHome, PeriodoBO.class);
}catch(NamingException e){
    System.err.println(e.toString());
}

由于这段代码是从JavaEE应用程序客户机中调用的,而JavaEE应用程序客户机是由WAS库启动的,因此您在那里拥有的大部分代码都是不必要的,也可能是您出现问题的原因。试试这个:

String jndi = "ejblocal:my/ejb/PeriodoBO";
Context initialContext = new InitialContext();
Object ejbHome = initialContext.lookup(jndi);
Object obj = PortableRemoteObject.narrow(ejbHome, PeriodoBO.class);

编辑然后,添加@Gas的解决方案(它真正解决了问题的根源)。

由于此代码是从Java EE应用程序客户端中调用的,Java EE应用程序客户端是由WAS库启动的,因此您在其中的大部分代码都是多余的,也可能是您出现问题的原因。试试这个:

String jndi = "ejblocal:my/ejb/PeriodoBO";
Context initialContext = new InitialContext();
Object ejbHome = initialContext.lookup(jndi);
Object obj = PortableRemoteObject.narrow(ejbHome, PeriodoBO.class);

编辑然后,添加@Gas的解决方案(它真正解决了问题的根源)。

由于此代码是从Java EE应用程序客户端中调用的,Java EE应用程序客户端是由WAS库启动的,因此您在其中的大部分代码都是多余的,也可能是您出现问题的原因。试试这个:

String jndi = "ejblocal:my/ejb/PeriodoBO";
Context initialContext = new InitialContext();
Object ejbHome = initialContext.lookup(jndi);
Object obj = PortableRemoteObject.narrow(ejbHome, PeriodoBO.class);

编辑然后,添加@Gas的解决方案(它真正解决了问题的根源)。

由于此代码是从Java EE应用程序客户端中调用的,Java EE应用程序客户端是由WAS库启动的,因此您在其中的大部分代码都是多余的,也可能是您出现问题的原因。试试这个:

String jndi = "ejblocal:my/ejb/PeriodoBO";
Context initialContext = new InitialContext();
Object ejbHome = initialContext.lookup(jndi);
Object obj = PortableRemoteObject.narrow(ejbHome, PeriodoBO.class);

编辑然后添加@Gas的解决方案(它真正解决了问题的根源)。

ejblocal:my/ejb/PeriodoBO指向本地接口。Java EE应用程序客户端无法访问本地接口。你需要远程接口

将带有正确接口的@Remote添加到bean中。然后,在应用程序初始化期间,您将在SystemOut.log绑定名称中找到接口在JNDI中绑定到的名称。 然后在initialContext.lookup(jndi)中;使用该JNDI名称


希望它有帮助

ejblocal:my/ejb/PeriodoBO指向本地接口。Java EE应用程序客户端无法访问本地接口。你需要远程接口

将带有正确接口的@Remote添加到bean中。然后,在应用程序初始化期间,您将在SystemOut.log绑定名称中找到接口在JNDI中绑定到的名称。 然后在initialContext.lookup(jndi)中;使用该JNDI名称


希望它有帮助

ejblocal:my/ejb/PeriodoBO指向本地接口。Java EE应用程序客户端无法访问本地接口。你需要远程接口

将带有正确接口的@Remote添加到bean中。然后,在应用程序初始化期间,您将在SystemOut.log绑定名称中找到接口在JNDI中绑定到的名称。 然后在initialContext.lookup(jndi)中;使用该JNDI名称


希望它有帮助

ejblocal:my/ejb/PeriodoBO指向本地接口。Java EE应用程序客户端无法访问本地接口。你需要远程接口

将带有正确接口的@Remote添加到bean中。然后,在应用程序初始化期间,您将在SystemOut.log绑定名称中找到接口在JNDI中绑定到的名称。 然后在initialContext.lookup(jndi)中;使用该JNDI名称



希望对您有所帮助

您是通过哪种类型的程序拨打电话的?它是否来自独立的Java应用程序?JEE应用程序客户端?EJB?网络模块?什么?它来自JEE应用程序客户端。我将websphere从7.0.0.0更新到7.0.0.31,问题仍然存在。您从哪种类型的程序调用?它是否来自独立的Java应用程序?JEE应用程序客户端?EJB?网络模块?什么?它来自JEE应用程序客户端。我将websphere从7.0.0.0更新到7.0.0.31,问题仍然存在。您从哪种类型的程序调用?它是否来自独立的Java应用程序?JEE应用程序客户端?EJB?网络模块?什么?它来自JEE应用程序客户端。我将websphere从7.0.0.0更新到7.0.0.31,问题仍然存在。您从哪种类型的程序调用?它是否来自独立的Java应用程序?JEE应用程序客户端?EJB?网络模块?什么?它来自JEE应用程序客户端。我将websphere从7.0.0.0更新为7.0.0.31,问题仍然存在。对。加上Gas的建议,对。加上Gas的建议,对。加上Gas的建议,对。加上Gas的建议。谢谢Gas,至少我没有得到同样的错误。现在我有一个关于从存根接口转换到对象的问题(在lookup方法旁边的行中),我明天将发布这个问题。谢谢谢谢,现在一切正常,但你能解释一下为什么它是远程的吗?它不应该运行在本地接口的同一个JVM中,因为它位于ejb所在的同一个EAR中(如第一张图片所示)?@DanielFlores您写道您有一个JEE应用程序客户端-尽管应用程序客户端是通过调用EAR运行的,它在单独的JVM(客户机容器)中运行,客户机容器远程连接到应用程序服务器JVM和运行在那里的组件。本地接口只能在同一JVM中使用,并且不会发布到外部可访问的全局JNDI。因此,因为您在外部JVM中,所以必须使用远程JVM。感谢Gas,至少我没有收到相同的错误。现在我有一个关于从存根接口转换到对象的问题(在lookup方法旁边的行中),我明天将发布这个问题。谢谢谢谢,现在一切正常,但你能解释一下为什么它是远程的吗?它不应该运行在本地接口的同一个JVM中,因为它位于ejb所在的同一个EAR中(如第一张图片所示)?@DanielFlores您写道您有一个JEE应用程序客户端-尽管应用程序客户端是通过调用EAR运行的,它在单独的JVM(客户机容器)中运行,客户机容器远程连接到应用程序服务器JVM和运行的组件