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