Ich verstehe nicht, wieso ich eine einfache Entity-Klasse (mit dem Namen Entity) nicht vermittels JPA persistieren kann. Der Apache-Log sagt:
Nun sieht die Sache bei mir so aus, dass ich eine PersistEntity-Klasse habe, in der ich eine persist-Methode aufrufe, der ein String übergeben ist. Jedoch scheitert es schon bei der Erschaffung der EntityManagerFactory:
Dabei habe ich eine persistence.xml, mit welcher das gehen müsste:
Die Struktur meines Webprojekts habe ich mal als Anhang angefügt.
15-Sep-2019 09:48:24.223 SEVERE [http-nio-8080-exec-20] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [DB] in context with path [/mave] threw exception
[ObjectDB 2.8.1] javax.persistence.PersistenceException
Persistence unit 'entities' is not found (by org.apache.catalina.loader.ParallelWebappClassLoader) (error 222)
at com.objectdb.jpa.Provider.createEntityManagerFactory(Provider.java:88)
at com.objectdb.jpa.Provider.createEntityManagerFactory(Provider.java:32)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:74)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:49)
at com.mavenproject.mave.PersistEntity.persist(PersistEntity.java:26)
at com.mavenproject.mave.DB.write(DB.java:152)
at com.mavenproject.mave.DB.doPost(DB.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
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.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: com.objectdb.o.UserException: Persistence unit 'entities' is not found (by org.apache.catalina.loader.ParallelWebappClassLoader)
at com.objectdb.o.MSG.a(MSG.java:64)
at com.objectdb.o.UNM.q(UNM.java:79)
at com.objectdb.jpa.Provider.createEntityManagerFactory(Provider.java:58)
... 30 more
Nun sieht die Sache bei mir so aus, dass ich eine PersistEntity-Klasse habe, in der ich eine persist-Methode aufrufe, der ein String übergeben ist. Jedoch scheitert es schon bei der Erschaffung der EntityManagerFactory:
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.mavenproject.mave;
import javax.persistence.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class PersistEntity {
private static final String PERSISTENCE_UNIT_NAME = "entities";
private static EntityManagerFactory factory;
private static final Logger LOGGER = Logger.getLogger(PersistEntity.class.getName());
void persist(String data) {
LOGGER.log(Level.SEVERE, "Create entity manager.");
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
// EntityManager em = factory.createEntityManager();
LOGGER.log(Level.SEVERE, "Entity manager created.");
. . .
}
}
Dabei habe ich eine persistence.xml, mit welcher das gehen müsste:
HTML:
<persistence>
<persistence-unit name="entities">
<class>com.mavenproject.mave.Entity</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/userdata;create=true"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="eclipselink.logging.level" value="SEVERE"/>
<property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
</properties>
</persistence-unit>
</persistence>
Die Struktur meines Webprojekts habe ich mal als Anhang angefügt.