2010-05-21 2 views
0

Я развернул военный файл с actionclasses и фасадом и jar-файл с ejb-компонентами (безфактум, пару сущностей и persistence.xml) на glassfish3 , Моя проблема в том, что я не могу найти мой удаленный интерфейс для фаната без состояния с моего фасада.Проблема с удаленным интерфейсом в Glassfish3

Мой боб и интерфейс выглядит следующим образом:

@Remote 
public interface RecordService {... 


@Stateless(name="RecordServiceBean", mappedName="ejb/RecordServiceJNDI") 
public class RecordServiceImpl implements RecordService { 

@PersistenceContext(unitName="record_persistence_ctx") 
private EntityManager em;... 

и если я смотрю в server.log портативный JNDI выглядит следующим образом:

Portable JNDI names for EJB RecordServiceBean : [java:global/recordEjb/RecordServiceBean, java:global/recordEjb/RecordServiceBean!domain.service.RecordService]|#] 

и мой фасад:

...InitialContext ctx= new InitialContext(); 
    try{ 
     recordService = (RecordService) ctx.lookup("java:global/recordEjb/RecordServiceBean!domain.service.RecordService"); 
     } 
     catch(Throwable t){ 
     System.out.println("ooops"); 
     try{ 
     recordService = (RecordService)ctx.lookup("java:global/recordEjb/RecordServiceImpl"); 
     } 
     catch(Throwable t2){ 
     System.out.println("noooo!"); 
     }... 



    } 

, и когда фасад совершает первый вызов, возникает это исключение:

javax.naming.NamingException: Lookup failed for 'java:global/recordEjb/RecordServiceBean!domain.service.RecordService' in SerialContext [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacedomain.service.RecordService [Root exception is java.lang.ClassNotFoundException: domain.service.RecordService]] 

и второй вызов:

javax.naming.NamingException: Lookup failed for 'java:global/recordEjb/RecordServiceBean' in SerialContext [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacedomain.service.RecordService [Root exception is java.lang.ClassNotFoundException: domain.service.RecordService]] 

Я также протестировали впрыснуть боб с @ EJB-аннотаций:

@EJB(name="RecordServiceBean") 
private RecordService recordService; 

Но это не работает либо. Что я пропустил? Я пробовал с ejb-jar.xml, но это не должно быть необходимым. Есть ли кто-нибудь, кто может сказать мне, как решить эту проблему?

ответ

2

Я нашел решение этой проблемы. Если я упакую файл интерфейса в jarfile и отброшу его в WEB-INF/lib в warfile, проблема будет решена.

0

При запуске сервера в консоли отображаются глобальные имена интерфейсов jndi. Используйте эти интерфейсы для поиска вместо того, чтобы пытаться вызвать их, указав имена явно.

0

Вы пробовали закомментировав все EJB-связанные разделы ваших XML-файлы, а затем, используя только

@Stateless 
public class RecordServiceImpl implements RecordService { 

and then 

@EJB 
private RecordService recordService; 

Они пытались сделать процесс достаточно мертвым мозгом в EJB 3.1 Кроме того, в то время как JNDI просмотр не попал в gf 3.0, вы можете выкопать некоторую информацию с

asadmin list-jndi-entries --context java:global/yourAppName 
Смежные вопросы