Я делаю корпоративное Java-приложение с maven и подмодулями.У меня есть следующее:
- EJB-модуль
- Военный модуль
- EAR-модуль
Мой EJB-модуль имеет:
@LocalBean
@Stateless(name = "serviceBeanEJB")
public class ServiceBean {
public ResponseBean foo(RequestBean request) {
// code here
}
}
Мой веб-модуль имеет:
@Stateless
@Path("rest-resource")
@Produces({ MediaType.APPLICATION_JSON })
public class TestResource {
@EJB(beanName = "serviceBeanEJB")
private ServiceBean serviceBean;
@POST
@Path("res1")
@Consumes({ MediaType.APPLICATION_JSON })
public Response resourceFunction(@Context HttpHeaders httpHeaders, RequestBean request) throws Exception {
ResponseBean response = serviceBean.foo(request);
String result = new ObjectMapper().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"))
.writerWithDefaultPrettyPrinter().writeValueAsString(response);
return Response.ok().entity(result).build();
}
}
Он упакован модулем EAR и правильно развернут на сервере 12.2.1.
Но когда я проверяю этоrest service, есть исключение nullpointer, так как serviceBean не инстанцируется в классе TestResource.
В моем модуле EAR у меня есть зависимости этих подмодулей и модулей в maven-ear-plugin.
Я пытался с weblogic-ejb-jar.xml с именем компонента:
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.5/weblogic-ejb-jar.xsd"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar">
<weblogic-enterprise-bean>
<ejb-name>serviceBeanEJB</ejb-name>
<stateless-session-descriptor/>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
Но все равно не работает.Это странно, потому что, если я создаю другой веб-модуль, такой как веб-служба SOAP, этот вызов локального EJB работает.