在上下文查找中未标识EJB类

时间:2012-11-19 12:55:08

标签: ejb-3.0

我编写了一个示例EJB类,如下所示:

@Stateless(mappedName = "BusinessSLSB")
@Local(BusinessLocal.class)
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public  class BusinessSLSB implements BusinessLocal{

            //body of the class

}

我在同一个项目中有一个非EJB类,我尝试按以下方式查找文件:

public class GetTransactionData {
private BusinessLocal business;
public GetTransactionDataForMercury(){
    notifier.info("Creating an object of GetTransactionData");
    try{
        InitialContext ctx = new InitialContext();
        business = (BusinessLocal) ctx.lookup("BusinessSLSB");
    }catch(Exception ne){
        notifier.error("Error occurred --> " + ne.getMessage());
    }
}

当我执行代码时,我收到以下异常:

Error occurred --> Unable to resolve BusinessSLSB. Resolved '

我在提供查找名称时出错了吗?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

不能使用mappedName。因此,您不能假设您通过该属性分配的名称将始终最终成为顶级JNDI名称。

您使用的是哪台服务器?如果它支持EJB 3.1,则删除mappedName并使用可移植JNDI名称。否则,无论如何都要删除mappedName,并找出您的服务器分配的专有JNDI名称。许多人会在启动时在日志中打印出来。

答案 1 :(得分:0)

我找到了解决这个问题的方法。解决方案是在web.xml文件中添加以下行:

<ejb-local-ref> 
    <ejb-ref-name>ejb/BusinessLocal</ejb-ref-name> 
    <local>dk.tdc.soa.smo.draco.ejb.BusinessLocal</local> 
 </ejb-local-ref>

以及GetTransactionData中的以下行:

public class GetTransactionData {
      private BusinessLocal business;
      public GetTransactionDataForMercury(){
      notifier.info("Creating an object of GetTransactionData");
      try{
         InitialContext ctx = new InitialContext();
         business = (BusinessLocal) ctx.lookup("java:comp/env/ejb/BusinessLocal");
         }catch(Exception ne){
      notifier.error("Error occurred --> " + ne.getMessage());
      }
}