2016-09-08 4 views
0

Привет, я работаю с openEJB на сервере Tomee jaxrs (1.7.4), у меня есть веб-проект и проект EJB, работающий на том же TomEE sever.JNDI LOOKUP Ошибка Tomee OpenEJB NameNotFoundException

Я развернул проект EJB в папке webapps сервера TomEE и вижу, что EJB запускаются при запуске сервера.

INFO: Enterprise application "C:\Apache_Software\OPEN_EJB\Server\webapps\OpenEjbServer" loaded. 
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.Assembler createApplication 
INFO: Assembling app: C:\Apache_Software\OPEN_EJB\Server\webapps\OpenEjbServer 
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.JndiBuilder bind 
INFO: Jndi(name=calcRemote) --> Ejb(deployment-id=calc) 
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.JndiBuilder bind 
INFO: Jndi(name=global/OpenEjbServer/calc!org.superbiz.stateless.basic.CalculatorBeanRemote) --> Ejb(deployment-id=calc) 
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.JndiBuilder bind 
INFO: Jndi(name=global/OpenEjbServer/calc) --> Ejb(deployment-id=calc) 
Sep 08, 2016 10:08:39 AM org.apache.openejb.cdi.CdiBuilder initSingleton 

Ниже один из @Stateless бобов в EJB проекта

@Remote 
public interface CalculatorBeanRemote { 
    public int add(int a, int b); 
} 

@Stateless 
public class CalculatorBean implements CalculatorBeanRemote { 
    @Override 
    public int add(int a, int b) { 
     return a + b; 
    } 
} 

из EJB проекта с использованием сервлетов я могу сделать JNDI Lookup, используя следующий код.

Properties p = new Properties(); 
p.put("java.naming.factory.initial","org.apache.openejb.client.LocalInitialContextFactory"); 
p.put("java.naming.provider.url", "ejbd://localhost:4201"); 
Context remoteContext = new InitialContext(p); 
    try { 
     Object ojb = remoteContext.lookup("calcRemote"); 
    }catch(Exception e){} 

При попытке сделать то же вызов, когда EJB является развертывание отдельно я получаю

javax.naming.NameNotFoundException: Name "calcRemote" not found. 
at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:197) 
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:151) 
at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115) 
at javax.naming.InitialContext.lookup(InitialContext.java:392) 

Как я могу сделать локальный или удаленный JNDI Lookup с веб-проекта в EJB, когда он развернут на тот же сервер TomEE или другой TomEE Server?

Что может быть причиной этой ошибки? Цените помощь

ответ

0

вы используете Local для удаленного боба так он не работает, вместо LocalInitialContextFactory переключателя на пульте один, проверьте http://tomee.apache.org/clients.html для детали

+0

я попытался с RemoteInitialContextFactory и в этом случае я я получаю другую ошибку. ** ПРЕДУПРЕЖДЕНИЕ: RequestFailed {server = http: // localhost: 8080} JNDI_LOOKUP:/calc {error = Не удается открыть входной поток на сервер:} org.apache.openejb.client.ClientRuntimeException: Неверный ответ с сервера: -1 * * – user3676359

+0

почему один? Примечание: вы также можете использовать имя global/OpenEjbServer/calc! org.superbiz.stateless.basic.CalculatorBeanRemote (от EE 6) –

+0

, как вы предположили, я попытался все равно получить такую ​​же ошибку: ПРЕДУПРЕЖДЕНИЕ: RequestFailed {server = http: // localhost: 8080} JNDI_LOOKUP: global/OpenEjbServer/calc! org.superbiz.stateless.basic.CalculatorBeanRemote {error = Не удается открыть входной поток на сервер:} org.apache.openejb.client.ClientRuntimeException: Неверный ответ с сервера: -1 – user3676359

Смежные вопросы