При использовании JPA 2.1 в нашем текущем приложении мы сталкиваемся с внутренней ошибкой 500 при отправке запроса веб-службы.Проблема устраняется, и JPA работает правильно только после перезагрузки управляемого сервера приложения.Я использую eclipselink в качестве поставщика JPA, поскольку это то, что предоставляется на сервере.Мое текущее развертывание распаковывает файл ear и развертывает разнесенный файл, который содержит META-INF (application.xml, MANIFEST.MF, weblogic-application.xml) и файл war, который содержит классы и файл persistence.xml.В настоящее время я использую сценарий wldeploy ant с redeploy в качестве действия.
JPA работает только после первоначального развертывания или отказов управляемого сервера, если я должен был повторно развернуть.
Может ли это быть проблемой с моим развертыванием или структурой, файлами EAR и WAR илиМожет ли это быть проблемой реализации с JPA?
Я включил аннотацию @RequestScoped в класс веб-службы.
Я включил файл beans.xml в свою веб-папку вместе сследующая строка:
bean-discovery-mode="annotated">
Моя веб-папка содержит следующее:
web/WEB-INF/classes/persistence.xml
web/beans.xml
web/web.xml
web/weblogic.xml
Persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="DB" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/PublicAPI</jta-data-source>
</persistence-unit>
</persistence>
Beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated">
</beans>
weblogic.xml
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-
app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app
http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd">
<context-root>/PublicAPI/</context-root>
WebService
@ApplicationPath("")
@Path("inventory/")
@Api(value = "Engineering Public API")
@RequestScoped
public class SsmcResource {
@Inject
private SsmcListProcedure ssmcListProcedure;
@POST
@Path("GetSSMCList")
@Produces(MediaType.APPLICATION_JSON)
public SsmcResponse getSSMCList(SsmcRequest ssmcRequest)
{
SsmcResponse response = null;
response = new SsmcResponse();
SsmcList ssmc = ssmcRequest.getSsmc();
CallerStatus callerStatus = ssmcRequest.getCallerStatus();
InitializeCallerStatus(callerStatus);
response.setSsmc(ssmcListProcedure.getSSMCList(ssmc.getSeries(), ssmc.getStyle(), ssmc.getMaterial(), ssmc.getColor()));
return response;
}
}
JPA Класс:
@Dependent
@Default
public class SsmcListProcedure implements SsmcDAO {
@PersistenceContext(unitName = "DB")
private EntityManager em;
@Override
public List<SsmcList> getSSMCList(String seriesInd, String styleInd, String materialInd, String colorInd)
{
Query q = em.createNamedStoredProcedureQuery("SsmcList");
q.setParameter("p_series_ind", seriesInd);
q.setParameter("p_style_ind", styleInd);
q.setParameter("p_material_ind", materialInd);
q.setParameter("p_color_ind", colorInd);
return (List<SsmcList>) q.getResultList();
}
}
После повторного развертывания я получаю следующие ошибкив логах при отправке POST-запроса:
WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 3
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl