У меня есть класс @WebService, который внедряет @EJB. EJB упакован в файл .jar, который находится в том же файле .war, что и классы веб-служб. Инъекция @EJB всегда дает сбой, но я могу выполнить поиск JNDI на EJB. Я пытался создать EJB и его интерфейс @Remote, но это не имело значения. Инъекция все еще не удается, и поиск JNDI все еще работает.
Я использую версию 3.0 web.xml. В файле ejb.jar нет дескриптора развертывания ejb, но это не имеет значения в EJB 3.1.
Я что-то упустил или это ошибка в Glassfish?
Вот мой код.
Класс EJB и интерфейс, упакованные в файл .jar в файле .war:
//@Remote
public interface ReportServiceI {
public String testAlive();
}
@Stateless
//@Remote (ReportServiceI.class)
public class ReportService implements ReportServiceI {...}
Класс веб-службы:
@WebService(
targetNamespace = "http://www.reps.corp.com/services/reports/ReportService",
portName="ReportPort",
serviceName="ReportService",
endpointInterface="com.corp.reps.reports.ws.server.ReportServiceWSI")
public class ReportServiceWS implements ReportServiceWSI {
public static Logger logger = Logger.getLogger(ReportServiceWS.class);
// These all fail
// @EJB
// @EJB(beanInterface=ReportServiceI.class)
// @EJB(lookup="java:global/repsreports/ReportService")
ReportServiceI reportService;
public String testAlive() {
// this works
try {
InitialContext context = new InitialContext();
reportService = (ReportServiceI)context.lookup("java:global/repsreports/ReportService");
}
catch (NamingException ex) {
logger.error(ex);
return "InitialContext.lookup() failed.";
}