我正在使用 EJB3、GlassFish 3.0.1 和 eclipse helios
我有一个远程EJB
@Stateless (mappedName="TestBean")
public class TestBean implements TestBeanRemote {
public int add(int a, int b){
return a+b;
}
}
和远程接口(interface)
@Remote
public interface TestBeanRemote {
public int add(int a, int b);
}
应用程序.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" id="Application_ID" version="6">
<application-name>ear.proj</application-name>
<display-name>ear.proj</display-name>
<module>
<web>
<web-uri>war.proj</web-uri>
<context-root>/war</context-root>
</web>
</module>
<module>
<ejb>ejb.proj.jar</ejb>
</module>
</application>
我有一个空的 sun-ejb-jar.xml 并且我没有定义 ejb-jar.xml 因为我读到它自 EJB3 以来是可选的 我将我的 EJB 与 WEB 一起放在 EAR 中
我试图在 POJO 类中调用这个 EJB
InitialContext ic = new InitialContext();
ic.lookup("java:global/ear.proj/ejb.proj/TestBean");
我得到以下异常 javax.naming.NamingException:在 SerialContext 中查找 java:global/ear.proj/ejb.proj/TestBean' 失败 [根异常是 javax.naming.NameNotFoundException: ear.proj]
我猜问题出在我的 EAR 中的 EJB 设置中,正如 GlassFish EJB FAQ 中所说,每个可移植的全局 JNDI 名称在部署期间都打印到 server.log,而我在日志
相反,我可以看到以下内容 信息:在应用程序包中找不到模块 ejb.proj.ejb.jar
有什么我想念的吗?
最佳答案
确保如果您正在部署 EJB 项目,您会在 server.log 中收到有关此的通知
INFO: Portable JNDI names for EJB ${EJB_Name}:
INFO: Glassfish-specific (Non-portable) JNDI names for EJB ${EJB_Name}:
在那里你会看到上下文路径。
PS 为了查看这些日志,根据配置,您可能需要更改记录器设置,甚至您将被迫浏览服务器上的 server.log
文件。
关于java - Ejb3 GlassFish - JNDI 查找在 SerialContext 中失败 - NameNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375468/