EJB3 Glassfish JNDI 查找

2024-04-17

我正在使用 Glassfish 捆绑的 Eclipse IDE。我编写了一个简单的 EJB 应用程序。但它不起作用。

@Stateless
@Remote(CalculatorRemote.class) 
@Local(CalculatorLocal.class) 
public class Calculator implements CalculatorRemote, CalculatorLocal {
    @Override
    public String sayHello(String name) {
        System.out.println("ejb:"+name);
        return null;
    }
}

----

@Remote
public interface CalculatorRemote {
    public String sayHello(String name);

}
-------

@Local
public interface CalculatorLocal {
    public String sayHello(String name);
}

我写了一个独立的客户端来测试,但失败了。找不到 JNDI。

public class Main {

    public static void main(String[] args) throws Exception {        
        InitialContext ctx = new InitialContext();      
        CalculatorRemote bean = (CalculatorRemote) ctx.lookup("java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote");
        bean.sayHello("Billy Bob");

    }

}

在服务器日志中,它说

INFO: Portable JNDI names for EJB Calculator : [java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote, java:global/TestEAR/TEjb/Calculator!com.CalculatorLocal]
INFO: Glassfish-specific (Non-portable) JNDI names for EJB Calculator : [com.CalculatorRemote, com.CalculatorRemote#com.CalculatorRemote]

另外,我也尝试过

ctx.lookup("com.CalculatorRemote")

还是不行。

错误消息是

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 com.Main.main(Main.java:9)
Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote' 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 com.Main.main(Main.java:9)
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)
    ... 2 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)
    ... 3 more

请帮我。


您可以只添加上面几行吗:

  Properties props = new Properties();
 props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
 props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
 // glassfish default port value will be 3700,
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(props);

 CalculatorRemote bean = (CalculatorRemote) ctx.lookup("java:global/TestEAR/TEjb/Calculator!    com.CalculatorRemote");

我在这里使用 EJB3x 和 Glassfish v3 创建了一篇博客文章。http://anirbanchowdhury.wordpress.com/2012/06/07/ejb-3-application-in-glassfish-3x/ http://anirbanchowdhury.wordpress.com/2012/06/07/ejb-3-application-in-glassfish-3x/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EJB3 Glassfish JNDI 查找 的相关文章

随机推荐