2012-02-21 2 views
2

Я использую EJB3, GlassFish 3.0.1 и затмить Гелиосejb3 GlassFish - JNDI Lookup потерпел неудачу в SerialContext - NameNotFoundException

У меня есть удаленный 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> 

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

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

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

Я получаю следующее исключение javax.naming.NamingException: Lookup Сбой Java: глобальный/ear.proj/ejb.proj/TestBean 'в SerialContext [ Исключение корня javax.naming.NameNotFoundException: ear.proj]

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

Вместо этого я могу видеть следующее INFO: Не удается найти модуль ejb.proj.ejb.jar в комплекте приложений

Есть ли что-то, что мне не хватает?

+0

Не могли бы вы подробнее рассказать о своем классе Pojo? Поскольку ваш код выше использует EJB3, есть ли конкретная причина, по которой вы не используете EJB3-инъекцию? @ EJB TestBeanRemote TestBeanRemote; –

ответ

0

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

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

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

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

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

потому компиляции Classe (даже пакет и подпакет ар)

1

Убедитесь при развертывании 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 на сервере.

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