2015-02-05 3 views
1

У меня есть EAP, созданный с Eclipse, содержащий два модуля: динамическое веб-приложение и модуль EJB.NULL EJB referece

application.xml ЕПД:

<?xml version="1.0" encoding="UTF-8"?> 
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" id="Application_ID" version="7"> 
    <display-name>JExecuterEAP</display-name> 
    <module> 
    <ejb>JExecuterEJB.jar</ejb> 
    </module> 
    <module> 
    <web> 
     <web-uri>JExecuter.war</web-uri> 
     <context-root>JExecuter</context-root> 
    </web> 
    </module> 
</application> 

Модуль EJB:

package myp; 

import javax.ejb.Stateless; 

@Stateless 
public class ExecutionEngineBean implements IExecutionEngine { 

    public ExecutionEngineBean() { 

    } 

    @Override 
    public void test() { 
     System.out.println("Test EJB"); 
    } 

} 


package myp; 

import javax.ejb.Remote; 

@Remote 
public interface IExecutionEngine { 
    public void test(); 
} 

Веб-приложения:

import myp.IExecutionEngine; 


@ServerEndpoint(value = "/executerendpoint") 
public class ExecuterEndpoint { 

    @EJB 
    IExecutionEngine bean; 

    private static final Logger logger =  Logger.getLogger("ExecuterEndpoint"); 


    @OnOpen 
    public void openConnection(Session sesion) { 
     logger.log(Level.INFO, "open conection"); 

     //Here the EJB is NULL 

    } 

    @OnMessage 
    public void onMessage(Session session, String msg) {   
    } 

}

Я делаю развертывание в GlassFi sh 4.1.

ответ

0

На самом деле, пробовав много вещей, он работал, когда я аннотировал класс ExecuterEndpoint с @Stateless.

Я очень ценю, если у кого-то есть хорошее объяснение.

1

Похоже, что проблема связана с EAR.

Если вы поместите тот же код в файл WAR, он должен работать, но я не уверен в причине.

Это может быть связано с реализацией WebSocket Tyrus, которая поставляется с Glassfish. Я думаю, что чего-то не хватает, что необходимо для работы в EAR.

Взгляните на этот вопрос:

Ответ предполагает использование @Inject и проверить Tyrus CDI samples & tests, они содержат примеры того, что возможно с текущей версией Тир. Существует тест под названием InjectToStatefulEndpoint.java, который вводит EJB через @Inject, но похоже, что тест также работает внутри структуры WAR.

Я также видел еще один рабочий пример (источник можно найти here on GitHub), который использует EAR и комментирует компонент с @LocalBean, но я не мог заставить его работать в моем собственном проекте.

Смотрите также:

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