WAS 8.5.1.x에서 현재 작동하는 WAS 9.0.0.1에서 프로젝트를 실행하려고합니다. 문제는 entitymanager가 DAO에 주입되지 않는 것 같지만, 다른 모든 요청에서만 발생합니다. 그래서 em.createNamedQuery를 DAO에서 수행 할 때, em이 null이기 때문에 NullPointerException을 던지고 있습니다. 이상한 일을 설명했듯이, 다른 모든 요청과 같이 실패하는 것입니다. 어떤 아이디어?Websphere Application Server 9.0.0.1 - EntityManager는 다른 모든 요청마다 null입니다.
의 persistence.xml :
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="OperationsAPI" transaction-type="JTA">
<jta-data-source>jdbc/operations</jta-data-source>
<class>com.i3.operations.entities.Operation</class>
<properties>
<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
</properties>
</persistence-unit>
</persistence>
자원 클래스 :
는@Path("/operations")
@Api("Operations API")
@Stateless
public class OperationsService {
public static Logger logger = Logger.getLogger(OperationsService.class.getName());
@Context
UriInfo uriInfo;
@EJB
private static OperationDAO operationDAO;
public OperationsService() {
operationDAO = new OperationDAO();
}
@GET
@ApiOperation(value = "Gets all operations", response = Operation.class, responseContainer = "List")
@Produces(MediaType.APPLICATION_JSON)
public Response getOperationsAll() {
List<Operation> operations = operationDAO.getOperationsAll();
return Response.ok().entity(operations).build();
}
}
DAO :
@Stateless
public class OperationDAO {
public static Logger logger = Logger.getLogger(OperationDAO.class.getName());
@PersistenceContext(unitName="OperationsAPI")
private EntityManager em;
public List<Operation> getOperationsAll() {
logger.info("EntityManager: " + em);
TypedQuery<Operation> query = em.createNamedQuery("Operation.findAll", Operation.class);
return query.getResultList();
}
}
확실하지 않습니다. 그러나, 나는 이것을 직접 newing에서 'operationDAO = new OperationDAO();'라고 생각할 것입니다. 컨테이너의 ** EntityManager ** 주입을 트리거하지 않습니다. 컨테이너에 ** OperationDAO **를 대신 주입해야합니까? 대신 인수가없는 생성자에서 정적 필드를 덮어 쓰지 않으시겠습니까? –
아, 네가 맞다면 거기 있으면 안된다. – Carlos