Ejb3 GlassFish - 在SerialContext中JNDI Lookup失败 - NameNotFoundException

时间:2012-02-21 09:58:08

标签: java java-ee ejb-3.0 glassfish-3

我正在使用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;
}
}

远程接口

@Remote
public interface TestBeanRemote {
    public int add(int a, int b);
}

application.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:查找失败的java:global / ear.proj / ejb.proj / TestBean'在SerialContext中[根异常是javax.naming.NameNotFoundException:ear.proj]

我想这个问题出现在我的EAR中的EJB设置中,因为在GlassFish EJB FAQ中说每个可移植的全局JNDI名称在部署期间打印到server.log而我找不到任何可移植的关键字。日志

相反,我可以看到以下内容 信息:无法在应用程序包

中找到模块ejb.proj.ejb.jar

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:1)

确保您是否正在部署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文件。

答案 1 :(得分:0)

尝试使用:

ic.lookup("java:global/*classesdirectory*/TestBean");

其中 classesdirectory = Eclipse中项目树中包含类(TestBean.class)的目录。

在Netbeans中,您可以尝试

ic.lookup("java:global/classes/TestBean");

因为编译classe(甚至包和子包ar)