3 Replies Latest reply: May 24, 2012 3:51 AM by 栗原 政彦 RSS

    UserTransactionをlookup出来ない問題

    栗原 政彦 Newbie

      JBossAS7.1.0 FinalのEJBを呼び出すJavaの単体のプログラムを作成している
      のですが、その中で、UserTransactionがlookup出来ない問題が発生しています。

       

      その原因が分からず、苦戦しております

       

      ・lookupする際のJNDI名の指定が悪いのか
      ・関連するプロパティファイルの設定が悪いのか
      ・そもそもUserTransactionはlookup出来ないのか


      環境


      Red Hat Enterprise Linux Server release 5.5 Beta (Tikanga)
      JBossAS7.1.0 Final
      java version "1.7.0_02"
      Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
      Java HotSpot(TM) Server VM (build 22.0-b10, mixed mode)

       

      JBossAS7.1.0に添付されている

      jboss-client-7.1.0.Final.jarを使って、Remote EJBにアクセスしようとしています。


      問題のソース


      final Properties env = new Properties();
      env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
      env.put(Context.PROVIDER_URL,"remote://localhost:4447");
      env.put(Context.SECURITY_PRINCIPAL, "apuser");
      env.put(Context.SECURITY_CREDENTIALS, "apuserpass");
      context = new InitialContext(env);

      UserTransaction userTransaction = (UserTransaction) context.lookup("java:comp/UserTransaction");

      lookupの際、下記の例外が発生する。

      jboss.naming.context.java.jboss.exported.comp.UserTransaction
      のJNDIが解釈されているようです。

      javax.naming.NameNotFoundException: comp/UserTransaction -- service jboss.naming.context.java.jboss.exported.comp.UserTransaction
              at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
              at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:177)
              at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:124)
              at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.java:70)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
              at java.lang.Thread.run(Thread.java:722)

       

      補足事項

      Securityについては、add-user.shにて、アプリケーション利用者として、追加済み。
      apuser/apuserpass

       

      参考にしたURL

      EJB invocations from a remote client using JNDI
      https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI

      Examples of JNDI mappings in previous releases and how they might look now

      https://docs.jboss.org/author/display/AS71/How+do+I+migrate+my+application+from+AS5+or+AS6+to+AS7

      UserTransaction
      New Namespaces

      java:comp/UserTransaction
      java:jboss/UserTransaction

       

      どちらもlookup出来ません。

        • 1. Re: UserTransactionをlookup出来ない問題
          Takayoshi Kimura Novice

          とりあえず英語でクロスポストされているURLを記録しておきます。 https://community.jboss.org/thread/199831

          • 2. Re: UserTransactionをlookup出来ない問題
            栗原 政彦 Newbie

            補足です。

             

            当方でリモートクライアントの検証結果を書き出させていただきます。

             


            1.レクチャーに沿って検証した結果

             

            https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
            に従って、進める。

             

            コマンドライン
            java test -classpath=./jndi.properties:./jboss-ejb-client.properties:. -Djboss.ejb.client.properties.file.path=./jboss-ejb-client.properties

             

            コンソール出力結果

            javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
                    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
                    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
                    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
                    at javax.naming.InitialContext.lookup(InitialContext.java:411)
                    at test.main(test.java:20)

            InitialContext自体生成が出来ていない感じです。
            プロパティファイルへの参照が出来ていない?

             

            2.Binding & Remote Lookup of Custom Objects in JNDI tree of JBoss AS7.1.1を参考にした結果

            http://middlewaremagic.com/jboss/?tag=jbossas7


            コマンドライン
            java test2

            コンソール出力結果

            5 21, 2012 10:01:47 午前 org.xnio.Xnio <clinit>
            INFO: XNIO Version 3.0.3.GA
            5 21, 2012 10:01:47 午前 org.xnio.nio.NioXnio <clinit>
            INFO: XNIO NIO Implementation Version 3.0.3.GA
            5 21, 2012 10:01:47 午前 org.jboss.remoting3.EndpointImpl <clinit>
            INFO: JBoss Remoting version 3.2.2.GA
            javax.naming.NameNotFoundException: jboss/UserTransaction -- service jboss.naming.context.java.jboss.exported.jboss.UserTransaction
            at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
            at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:177)
            at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:124)
            at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.java:70)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
            at java.lang.Thread.run(Thread.java:722)

            JBossサーバー側コンソール

            10:01:48,178 ERROR [org.jboss.remoting.remote.connection] (Remoting "s2013g002p" read-1) JBREM000200: Remote connection failed: java.io.IOException: 既存の接続はリモート ホストに強制的に切断されました。
            10:01:48,178 INFO  [org.jboss.as.naming] (Remoting "s2013g002p" task-4) JBAS011806: Channel end notification received, closing channel Channel ID 18c22329 (inbound) of Remoting connection 01964f4b to null

            直接記述してみると、接続にはいっているようであるが、lookup失敗。

            • 3. Re: UserTransactionをlookup出来ない問題
              栗原 政彦 Newbie

              お世話になっております。

               

              補足追記いたします。

               

              UserTransactionを使っての既存処理がWebLogic環境で動いているのですが、

              それをJBossに載せ換えしようとしていまして、JTAの仕様に沿ってプログラムが

              できているのですが、JBossAS7.1.0Finalでは、EJBリモートクライアントとして、動作させたい場合、

              クラスパス上に、jboss-client-7.1.0.Final.jarを追加し、

              jndi.propertiesを配置し、さらに、Javaの起動の引数で、-Djboss.ejb.client.properties.file.path=.\jboss-ejb-client.properties

              を加えるという指示のもと、lookupをかけようとしてうまくいかないというのが、当投稿の趣旨です。

               

              (参考)WebLogicの開発ガイドのURL

              http://otndnld.oracle.co.jp/document/products/wls/docs92/jta/gstrx.html#wp1067380