2016-03-23 11 views
1

Vatansız oturumluk özelliklerine erişirken sorun yaşıyorum. Şimdiye kadar denediğim şeyler bunlar. Lütfen eksik olduğum şeyden biraz ışık tutalım. Vatansız oturum bean'in aynı sınıftaki bir ana sınıftan erişilmesi

Küresel/env 8.5 WAS IBM bağlanma adı alanına sahip

Ben benim ejb olarak:

@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; 
    } 

Ve benim ana sınıfı erişmeye çalışıyorum:

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); 

Buraya ulaşmaya çalıştığım tek şey, sunucudan bağlanan bazı ad boşluğuna erişmeye çalışıyor.

Ben String str = "java:app/appname/envEJB"; bana aynı hata veriyor olarak

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. 

çağrılması alıyorum çağrı yukarıda yapmak.

GÜNCELLEME

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); 

olarak aşağıdaki özel durum yaparken

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

Sadece bazı değişkenlerin sunucuda depolanmasını istiyorum. –

+0

Evet, hatasız dağıtıyor ... –

+1

Fasulyenizi '@ Remote' olarak değiştirmeniz gerekiyor, uygulamanın dışındaki yerel fasulyeleri kullanamazsınız. – Gas

cevap

1

java: ad yalnızca yönetilen bir ortamda (uygulama sunucusu veya uygulama istemci) desteklenir oluşur. İnce istemcilerde desteklenmezler (bağımsız Java SE ana sınıfları). Bunun için java: ismi kullanmanız gerekecek. java: bağlayıcılarını bulmak için SystemOut.log içinde CNTR0167I mesajlarına bakın.

+0

Bunu işaretlediğiniz için teşekkür ederim, ama ayrıca context.lookup ("ejb/ejbname") denedim ancak şans da denemedim. –

+0

'ejb/ejbname'' CNTR0167'' iletisinde basılan değer mi? Aramaya çalıştığınız EJB için bu mesajların çıktısını gösterebilir misiniz? –

+0

EJBContainerI I CNTR0167I: Sunucu, TestEAR uygulamasının Test.war modülündeki envEJB kuruluş fasulyesinin com.test.EnvironmentEJB arayüzünü bağlar. Bağlama yeri: ejblocal: TestEAR/Test.war/envEJB # com.test.EnvironmentEJB 2nd: Bağlama yeri: ejblocal: com.test.EnvironmentEJB 3rd: Bağlama yeri: java: global/TestEAR/Test /envEJB!com.test.EnvironmentEJB –

İlgili konular