Проблема поиска удаленного интерфейса в Glassfish3 - PullRequest
0 голосов
/ 21 мая 2010

Я развернул war-файл с классами действий и фасадом, а также jar-файл с компонентами ejb (bean-компонент без состояния, пару сущностей и файл persistence.xml) на 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, но это не должно быть необходимым. Есть кто-нибудь, кто может сказать мне, как решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 21 мая 2010

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

0 голосов
/ 29 сентября 2010

Вы пытались закомментировать все разделы, связанные с 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
0 голосов
/ 15 июня 2010

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

...