У меня есть класс @WebService, который вводит @EJB. EJB упакован в файл .jar, который находится в том же файле .war, что и классы веб-сервисов. Инъекция @EJB всегда терпит неудачу, но я могу сделать JNDI-поиск в EJB. Я пробовал сделать EJB и его интерфейс @Remote, но это не имело значения. Инъекция все еще не работает, и поиск JNDI по-прежнему работает.@EJB инъекции не удается, но поиск JNDI работает в классе веб-службы в Glassfish
Я использую версию 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.";
}
Вы пытались использовать '@ Inject' (и предоставляли' beans.xml' на свой путь к классам) или аннотировали компонент '@ WebService' как' @ Stateless' (что делает его EJB)? –
Нет для обоих. beans.xml - это файл CDI, и я использую Glassfish в качестве контейнера для инъекций. Я попробую сделать код @ WebService bean code @ stateless - это единственное, что я не пробовал, но это не обязательно. –
1. Если вы хотите протестировать '@ Inject', вы должны использовать' beans.xml'. Правильно - я хотел проверить, будет ли CDI правильно вводить ваш bean-компонент в WebService. 2. Прочтите спецификацию EJB и документацию сервера приложений, чтобы убедиться, что вы можете вводить/использовать '@ EJB' в веб-сервисах, которые не являются EJB. –