2015-12-11 4 views
0

У меня есть среда, в которой один EJB запускается при запуске сервера, код внутренне вызывает другой факт без состояния, который внутренне запускает поток через Executor Service. В этом потоке, запущенном через службу Executor, всякий раз, когда я выполняю поиск jndi (java: global/testing/NetworkConnectionChecker! Com.testing.common.NetworkConnectionChecker) внутри метода run, я получаю javax.naming.NameNotFoundException, но если я поставлю thread.sleep в течение примерно 60 секунд в методе run этого потока, jndi lookup дает мне объект, и никакое исключение не выбрасывается. Еще один интересный момент в том, что когда я выполняю поиск в конструкторе Thread, который я начал, я сразу же получаю объект через jndi-поиск, не помещая ни одного Thread.sleep EJB, который я пытаюсь получить через jndi lookup аннотируется как @Singleton и @Startup. Может кто-нибудь предложить мне, что я делаю неправильно, я также вижу журналы, созданные при запуске сервера, упоминающие привязку jndi. Журнал выглядит следующим образомРазрешение имени JNDI не работает в новой теме в tomee

(name=global/testing/NetworkConnectionChecker!com.testing.common.NetworkConnectionChecker) 

я вижу следующее исключение при JNDI поиск неудачен

javax.naming.NameNotFoundException: Name [global/testing/NetworkConnectionChecker!com.testing.common.NetworkConnectionChecker] is not bound in this Context. Unable to find [global]. 
at org.apache.naming.NamingContext.lookup(NamingContext.java:819) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:167) 
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156) 
at javax.naming.InitialContext.lookup(InitialContext.java:417) 
at com.testing.main.AbstractServiceFactory.getNetworkConnectionChecker(AbstractServiceFactory.java:85) 

Я использую Java 8 и tomee версии 1.7

Пожалуйста, дайте мне знать, если любой из вас требуют больше информации. Я провел целый день, пытаясь понять это.

ответ

0

Использование потоков для EJB - не очень хорошая идея. Пожалуйста, посмотрите на этот пример: http://examples.javacodegeeks.com/enterprise-java/ejb3/timer/ejb-timer-service-example/

+0

Привет, Мне нужно запустить долго выполняющуюся задачу, когда я получаю запрос, поэтому я использую потоки. Если вы можете предложить мне другой способ справиться с этим, я открыт для этого – vishva