gpt4 book ai didi

java - Glassfish v3/JNDI 入口找不到问题!

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:46 27 4
gpt4 key购买 nike

我一直在尝试从 Java 应用程序客户端调用 EJB 的方法时遇到问题。这是代码。

EJB 远程接口(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";

}

}

主类(另一个项目)

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();

}

}

那么,我的问题是什么?找不到此 EJB 的 JNDI 条目!

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

我尝试使用不同的 JNDI 条目,但没有任何效果(我从 NetBeans 控制台获得了这些条目):

信息:EJB HelloBeanExample 的可移植 JNDI 名称:[java:global/Test/HelloBeanExample, java:global/Test/HelloBeanExample!com.test.HelloBeanRemote]

信息:EJB HelloBeanExample 的 Glassfish 特定(不可移植)JNDI 名称:[ejb/HelloBean, ejb/HelloBean#com.test.HelloBeanRemote]

所以我尝试了以下条目,但我得到了同样的异常:

  1. java:global/Test/HelloBeanExample
  2. java:global/Test/HelloBeanExample!com.test.HelloBeanRemote
  3. ejb/HelloBean
  4. ejb/HelloBean#com.test.HelloBeanRemote

我正在使用 Netbeans 6.8 和 Glassfish v3!

最佳答案

实际上,您的问题不是查找您的 bean 的 JNDI 引用,否则您会得到类似的结果:

Caused by: javax.naming.NameNotFoundException: ejb/HelloBean not found

不,在这里,我怀疑是一个简单的类路径问题,您只是在您的客户端项目的类路径中丢失了一些 jar。使用 GlassFish v3,添加 $GF_HOME/modules/gf-client.jar 应该就足够了,如 How do I access a Remote EJB component from a stand-alone java client? 中所述在 GlassFish 的 EJB FAQ 中(我的理解是这个 jar 应该替换 $GF_HOME/lib/appserv-rt.jar ,这是出于与 GFv2 的兼容性原因)。但是,从 GlassFish 安装目录引用 gf-client.jar 很重要,否则将找不到在其 list 中声明的​​ jar。

gf-client.jar refers to many other .jars from the GlassFish installation directory so it is best to refer to it from within the installation directory itself rather than copying it (and all the other .jars) to another location.

修复此问题后,您应该能够使用 GlassFish 在日志中输出的 JNDI 名称来查找您的 bean。我建议使用 Java EE 6 中新的可移植全局 JNDI 名称。

以防万一,What is the syntax for portable global JNDI names in EJB 3.1? GlassFish EJB FAQ 中的条目很好地总结了这一新约定。如果您想了解更多信息,请查看:http://blogs.oracle.com/MaheshKannan/entry/portable_global_jndi_names .

关于java - Glassfish v3/JNDI 入口找不到问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2087938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com