Ejb3 GlassFish - не удалось выполнить поиск JNDI в SerialContext - NameNotFoundException - PullRequest
2 голосов
/ 21 февраля 2012

Я использую EJB3, GlassFish 3.0.1 и затмение helios

У меня есть удаленный EJB

@Stateless (mappedName="TestBean")
public class TestBean implements TestBeanRemote {
public int add(int a, int b){
return a+b;
}
}

и удаленный интерфейс

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

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" id="Application_ID" version="6">
  <application-name>ear.proj</application-name>
  <display-name>ear.proj</display-name>
  <module>
    <web>
      <web-uri>war.proj</web-uri>
      <context-root>/war</context-root>
    </web>
  </module>
  <module>
    <ejb>ejb.proj.jar</ejb>
  </module>
</application>

У меня есть пустой файл sun-ejb-jar.xml, и я не определил ejb-jar.xml, так как прочитал, что он необязательный, так как EJB3 Я помещаю свой EJB в EAR вместе с WEB

Я пытаюсь назвать этот EJB в классе POJO

InitialContext ic = new InitialContext();
ic.lookup("java:global/ear.proj/ejb.proj/TestBean");

я получаю следующее исключение javax.naming.NamingException: не удалось выполнить поиск для java: global / ear.proj / ejb.proj / TestBean 'в SerialContext [Исключением корня является javax.naming.NameNotFoundException: ear.proj]

Я полагаю, что проблема в настройке EJB в моем EAR, поскольку в FAQ по GlassFish EJB сказано, что каждое переносимое глобальное имя JNDI выводится на сервер в журнале во время развертывания, в то время как я не могу найти какое-либо переносимое ключевое слово в журнал

Вместо этого я вижу следующее ИНФОРМАЦИЯ: Не удается найти модуль ejb.proj.ejb.jar в комплекте приложений

Я что-то упускаю?

Ответы [ 2 ]

1 голос
/ 17 декабря 2013

Убедитесь, что при развертывании проекта EJB вы получите уведомление об этом в server.log

INFO: Portable JNDI names for EJB ${EJB_Name}: 
INFO: Glassfish-specific (Non-portable) JNDI names for EJB ${EJB_Name}:

Там вы увидите контекстные пути.

PS Для просмотра этих журналов, в зависимости от конфигурации, вам может потребоваться изменить настройки регистратора или даже вам придется просматривать файл server.log на сервере.

0 голосов
/ 24 марта 2012

Попробуйте использовать:

ic.lookup("java:global/*classesdirectory*/TestBean");

, где classesdirectory = каталог, который содержит классы (TestBean.class) в дереве вашего проекта в Eclipse.

InNetbeans вы можете попробовать

ic.lookup("java:global/classes/TestBean");

, потому что класс компиляции (даже пакет и подпакет ar)

...