0

いくつかのデータ挿入を行っているときにUserTransactionを取得していますが、jbossでアプリケーションを実行するとコードは正常に機能します。ただし、Ecpliseで実行すると、JUnitテストで失敗します。

javax.naming.NameNotFoundException: Name java:comp is not bound in this Context.

トランザクションを取得するための私のコードは以下のとおりです

public static UserTransaction getUserTransation() throws CommonServiceException{
        Context context = null;
         UserTransaction ut = null;
        try {
            context = new InitialContext();
            ut = (UserTransaction)
            context.lookup("java:comp/UserTransaction");
        } catch (NamingException e) {
            throw new CommonServiceException(XMLReader.getErrorCode("Connector:getUserTransation"), e.getMessage(), e);
        }

          return ut;
    }

java:compが見つかりません。Junitテストクラスでうまく機能させるために特にすべきことはありますか?

追加した:

以下のコードをテストクラスに追加しましたが、上記のエラーは発生しませんでした。しかし、後でトランザクションがないと言ってコミットを実行すると失敗しました。

            ic = new InitialContext();

            ic.createSubcontext("java:");
            ic.createSubcontext("java:comp");
            ut = new UserTransactionImpl();  
            ic.bind("java:comp/UserTransaction",ut);
4

1 に答える 1

0

新しい UserTransactionImpl を作成するだけでは問題を解決できないと思います。より良い方法は、モック化された UserTransaction 実装を作成し、それを jndi にバインドすることです。

あなたが現在バインドしているものは、おそらくコンテナの外では利用できない他の「魔法」に依存しています

于 2013-01-24T07:59:06.910 に答える