2014-12-27 5 views
2

Возможно ли получить доступ к ejb, который находится внутри файла уха, из войны с использованием локального интерфейса?
Оба развертываются на одном сервере приложений.Доступ к ejb в ухе от войны через локальный интерфейс

EJB-:

@Stateless(name="FirstDemoEJB",mappedName = "FirstDemoEJB/Local") 
public class FirstSessionBean implements FirstSessionBeanRemote, FirstSessionBeanLocal { 
} 

Теперь в тестовом сервлета (война):

InitialContext context = new InitialContext();   
Object ob = context.lookup("java:comp/env/FirstDemoEJB/Local"); 

терпит неудачу на:

javax.naming.NameNotFoundException: При попытке посмотреть comp/env/FirstDemoEJB/Local in/app/webapp/FirstWebEJBTest/12292093 .;

Но удаленный поиск работает отлично:

Object ob = context.lookup("FirstDemoEJB/Local#org.weblogic.FirstSessionBeanRemote"); 
+0

В WebLogic (насколько я помню) вы можете использовать 'RemoteInterface' там. Контейнер проверяет, действительно ли это «LocalInterface» и использует его как можно по возможности. В спецификации не допускается обратное. –

+0

Я знаю, что у JBoss AS7 были проблемы с этим. Просто отметив это, чтобы показать, что это может быть проблемой на их конце. – keyser

ответ

1

вы должны использовать injecction контейнер зависимостей для доступа к EJB из сервлета. скорее всего, проблема в том, что неверный путь поиска jndi неверен. использование инъекции зависимости контейнера освобождает вас от знания схемы именования jndi.

public class MyServlet extends HttpServlet { 
    @EJB(mappedName = "FirstDemoEJB/Local") 
    private FirstSessionBeanLocal firstSessionBeanLocal; 
} 
+0

Просто добавив выше аннотацию? – Tirmean

+0

Я думаю, вам также может понадобиться пустой файл beans.xml в папке meta-inf, возможно, нет. для получения дополнительной информации см .: http://www.oracle.com/technetwork/articles/java/cdi-javaee-bien-225152.html –

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