2016-03-23 14 views
1

ステートレスセッションBeanのプロパティにアクセスする際に問題が発生しています。これはこれまで私が試したことです。私が紛失しているものを捨ててください。同じパッケージ内でメインクラスからステートレスセッションBeanにアクセスする

私は私のように私のEJBを持って

グローバル/ ENVとしてIBMにバインディングネームスペースは8.5であった持っている:

@Singleton 
@Stateless(mappedName="envEJB") 
@LocalBean 
@ConcurrencyManagement 
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
public class EnvEJB { 

    @Resource(lookup="global/env") 
    protected String env; 


    @Lock(LockType.READ) 
    @AccessTimeout(1000) 
    public String getEnv() { 
     return env; 
    } 

そして、私のように私のメインクラスにアクセスしようとしています:

Hashtable<String, String> env = new Hashtable<String, String>(); 
pdEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); 
pdEnv.put(Context.PROVIDER_URL, "iiop://localhost:2890"); 

String str = "java:comp/env/envEJB"; 
Context context = new InitialContext(env); 
EnvironmentEJB ejb = (EnvironmentEJB) context.lookup(str); 

私がここで達成しようとしていることは、サーバーからいくつかの名前空間のバインディングにアクセスしようとしていることだけです。

私はString str = "java:app/appname/envEJB";は私に同じエラーを与えるとして呼び出す

javax.naming.ConfigurationException: Name space accessor for the java: name space has not been set. Possible cause is that the user is specifying a java: URL name in a JNDI Context method call but is not running in a J2EE client or server environment. 

を取得していますコールの上に行います。

UPDATE

Hashtable<String, String> pdEnv = new Hashtable<String, String>(); 
pdEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); 
pdEnv.put(Context.PROVIDER_URL, "iiop://localhost:2890"); 
Context context = new InitialContext(pdEnv);   
java.lang.Object ejbBusIntf = context.lookup("com.test.EnvironmentEJBRemote");   
EnvironmentEJB ejb = (EnvironmentEJB)javax.rmi.PortableRemoteObject.narrow(ejbBusIntf, EnvironmentEJB.class); 

として次の例外をしている間は

Exception in thread "P=925268:O=0:CT" java.lang.ClassCastException: cannot cast class org.omg.stub.java.rmi._Remote_Stub to class com.test.EnvironmentEJB 
at com.ibm.rmi.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:396) 
at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:148) 
at com.test.Test.main(Test.java:43) 
+0

私はちょうどサーバーに格納されているいくつかの変数にアクセスしたいです。 –

+0

ええ、エラーなしで展開します... –

+1

あなたのBeanを '@ Remote'に変更する必要があります。アプリケーションの外部でローカルBeanを使用することはできません。 – Gas

答えて

1

java:名前空間のみを管理された環境(アプリケーション・サーバーまたはアプリケーション・クライアント)でサポートされて発生します。シンクライアント(スタンドアロンJava SEメインクラス)ではサポートされていません。そのためには、java:という名前を使用する必要があります。非java:バインディングを見つけるには、SystemOut.logのCNTR0167Iメッセージを参照してください。

+0

それを指摘してくれてありがとうが、私もcontext.lookup( "ejb/ejbname")も試しましたが、運はありません。 –

+0

'ejb/ejbname'は' CNTR0167I'メッセージに表示される値ですか?検索しようとしているEJBのメッセージの出力を表示できますか? –

+0

EJBContainerI I CNTR0167I:サーバーは、TestEARアプリケーションのTest.warモジュールのenvEJBエンタープライズBeanのcom.test.EnvironmentEJBインターフェースをバインドしています。バインディングの場所は次のとおりです。ejblocal:TestEAR/Test.war/envEJB#com.test.EnvironmentEJB 2番目:バインディングの場所は次のとおりです。ejblocal:com.test.EnvironmentEJB 3番目:バインディングの場所はjava:global/TestEAR/Testです。 /envEJB!com.test.EnvironmentEJB –

関連する問題