2016-03-23 4 views
1

У меня возникла проблема с доступом к свойствам сеанса без состояния. Это то, что я пробовал до сих пор. Прошу пролить свет, что мне не хватает.Доступ к сессионному компоненту без состояния из основного класса с одним и тем же пакетом

У меня есть пространство имен связыванием в IBM WAS 8,5 как глобальный/окр

У меня есть EJB, как:

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

Единственное, чего я пытаюсь достичь здесь, это попытка получить доступ к некоторому связыванию пространства имен с сервера.

Doing выше вызов я получаю

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. 

Вызов в String str = "java:app/appname/envEJB"; дает мне ту же ошибку.

ОБНОВЛЕНИЕ

Во время выполнения, как

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

Вы должны изменить свой компонент на '@ Remote', вы не можете использовать локальные компоненты вне приложения. – Gas

ответ

1

java: пространства имен поддерживаются только в управляемой среде (сервера приложений или клиентское приложение). Они не поддерживаются в тонких клиентах (автономные основные классы Java SE). Для этого вам нужно будет использовать имя не java:. См. Сообщения CNTR0167I в SystemOut.log, чтобы найти привязки не java:.

+0

Спасибо, что указали это, но я также попробовал context.lookup («ejb/ejbname»), но не повезло. –

+0

Значение 'ejb/ejbname', напечатанное в сообщении' CNTR0167I'? Можете ли вы показать вывод этих сообщений для EJB, который вы пытаетесь найти? –

+0

EJBContainerI I CNTR0167I: сервер связывает интерфейс com.test.EnvironmentEJB корпоративного компонента envEJB в модуле Test.war приложения TestEAR. Место привязки: ejblocal: TestEAR/Test.war/envEJB # com.test.EnvironmentEJB 2nd: Место привязки: ejblocal: com.test.EnvironmentEJB 3rd: Место привязки: java: global/TestEAR/Test /envEJB !com.test.EnvironmentEJB –