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 '

ルックアップ名の指定が間違っていますか?この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

マップされた名前の使用法はこれまで移植可能ではありません。したがって、その属性を介して割り当てる名前が常に最上位のJNDI名になるとは限りません。

どのサーバーを使用していますか?EJB 3.1をサポートしている場合は、mappedNameを削除し、ポータブルJNDI名を使用します。それ以外の場合は、とにかくmappedNameを削除して、サーバーが割り当てている独自のJNDI名を見つけてください。多くの人は、起動時にこれをログに出力します。

于 2012-11-20T09:55:36.140 に答える
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());
      }
}
于 2012-11-28T10:44:53.693 に答える