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();
}
}
正確にはわかりません。しかし、私はこれを直接 'operationDAO = new OperationDAO();という新しいものにしていると思いますが、あなたは** EntityManager **のコンテナの注入をトリガーしていません。コンテナには、**引数なしのコンストラクタで静的フィールドを上書きする代わりに、** OperationDAO **を常時挿入する必要がありますか? –
ああ、あなたはそこにいてはいけないのは正しいです。 – Carlos