Итак, в школе я работаю над RESTFUL-webapi. До недавнего времени я использовал только 1 хранилище. Теперь, когда у нас наконец есть 2+, я изменил способ, которым мы назвали EntityManagerFactory и т. Д. Я изменил его на абстрактный класс, чтобы его можно было вызывать оттуда для каждого отдельного хранилища.
public abstract class EntityController {
protected static EntityManagerFactory entityManagerFactory = null;
protected static EntityManager entityManager = null;
protected static EntityTransaction entityTransaction = null;
public void entityStart(){
entityManagerFactory = Persistence.createEntityManagerFactory("research");
entityManager = entityManagerFactory.createEntityManager();
entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
}
public void entityCommitAndClose(Boolean doCommit){
if (doCommit){
entityTransaction.commit();
}
entityManager.close();
entityManagerFactory.close();
}
}
Теперь я получаю следующую ошибку:
Поставщик сохраняемости пытается использовать свойства в файле persistence.xml для разрешения источника данных. Драйвер Java Database Connectivity (JDBC) или имя класса источника данных должны быть указаны в свойстве openjpa.ConnectionDriverName или javax.persistence.jdbc.driver. В конфигурации доступны следующие свойства: "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@dfd7dd11".
Я немного погуглил, и большинство людей сказали, что это связано с проблемой БД. Однако менеджеры Entity работали хорошо, прежде чем я поместил их в абстрактный класс.
Это мой файл persistence.xml, расположенный в правильном месте (resources / meta-inf)
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="research" transaction-type="RESOURCE_LOCAL">
<properties>
<!-- JPA standard -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/groepswerk" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="javax.persistence.schema-generation.database.action" value="create" /> <!--drop-and-create-->
<property name="openjpa.MetaDataRepository" value="Preload=true" />
<!-- Hibernate specific -->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.xxx" value="xxx"/>
</properties>
</persistence-unit>
</persistence>
Так что я надеялся, что некоторые из вас могут осветить меня тем, что я сделал неправильно?
Edit:
Исходный код 1 из репозиториев:
пакет app.repositories;
import app.models.Student;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.persistence.*;
import java.util.List;
public class StudentRepository extends EntityController implements IStudentRepository {
final static Logger LOGGER = LogManager.getLogger(ExamRepository.class);
// to get a student by name
@Override
public Student getStudentByNumber(String number) {
try {
entityStart();
TypedQuery<Student> query = entityManager.createQuery("SELECT s FROM Student as s WHERE s.studentNumber=?1", Student.class);
query.setParameter(1, number);
return query.getSingleResult();
} catch (IllegalArgumentException exception){
LOGGER.error(exception);
} finally {
entityCommitAndClose(false);
}
return null;
}
// to get a list of all students
@Override
public List<Student> getAllStudents() {
try {
entityStart();
TypedQuery<Student> query = entityManager.createQuery("SELECT s FROM Student as s", Student.class);
return query.getResultList();
} catch (IllegalArgumentException exception){
LOGGER.error(exception);
} finally {
entityCommitAndClose(false);
}
return null;
}
// if student logs in, a student gets created
@Override
public void createStudent(Student student) {
entityStart();
Student newStudent = new Student(student);
entityManager.persist(newStudent);
entityCommitAndClose(true);
}
@Override
public void changeDownloadStatus(Student user, Boolean status){
entityStart();
Student student = entityManager.find(Student.class, user.getId());
student.setDownloaded(status);
entityCommitAndClose(true);
}
@Override
public void changeUploadStatus(Student user, Boolean status){
entityStart();
Student student = entityManager.find(Student.class, user.getId());
student.setUploaded(status);
entityCommitAndClose(true);
}
}
редактировать Каталина Логи:
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at app.repositories.EntityController.entityCommitAndClose(EntityController.java:26)
at app.repositories.StudentRepository.getAllStudents(StudentRepository.java:42)
at app.services.StudentService.getAllStudents(StudentService.java:16)
at app.controllers.StudentController.getAllStudents(StudentController.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.openejb.server.cxf.rs.PojoInvoker.performInvocation(PojoInvoker.java:43)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
... 38 more
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at app.repositories.EntityController.entityCommitAndClose(EntityController.java:26)
at app.repositories.StudentRepository.getAllStudents(StudentRepository.java:42)
at app.services.StudentService.getAllStudents(StudentService.java:16)
at app.controllers.StudentController.getAllStudents(StudentController.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.openejb.server.cxf.rs.PojoInvoker.performInvocation(PojoInvoker.java:43)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
... 38 more
07-May-2018 14:46:12.347 SEVERE [http-nio-8080-exec-10] org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage Error occurred during error handling, give up!
org.apache.cxf.interceptor.Fault
at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:191)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)
at org.apache.openejb.server.cxf.rs.AutoJAXRSInvoker.invoke(AutoJAXRSInvoker.java:68)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.doInvoke(CxfRsHttpListener.java:253)
at org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:94)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:423)
at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:169)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at app.repositories.EntityController.entityCommitAndClose(EntityController.java:26)
at app.repositories.StudentRepository.getAllStudents(StudentRepository.java:42)
at app.services.StudentService.getAllStudents(StudentService.java:16)
at app.controllers.StudentController.getAllStudents(StudentController.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.openejb.server.cxf.rs.PojoInvoker.performInvocation(PojoInvoker.java:43)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
... 38 more