私はあなたのケースでは、あなたのEclipseLinkは、テーブルを作成しても、DBに接続するためのコマンドを受信していないことを意味EntityManagerFactory
を初期化しないと仮定します。
あなたの場合はファイルで再登録する必要があるServletContextListener
を使用することができます。
クイック例:あなただけweb.xml
に@WebListener代わりに注釈登録を使用することができますサーブレット3.0の起動
web.xmlの
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<listener>
<listener-class>
com.mberazouski.stackoverflow.AppServletContextListener
</listener-class>
</listener>
</web-app>
。
AppServletContextListener.java
package com.mberazouski.stackoverflow;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class AppServletContextListener implements ServletContextListener {
private static EntityManagerFactory emf;
public void contextInitialized(ServletContextEvent event) {
emf = Persistence.createEntityManagerFactory("default");
createEntityManager();
}
public void contextDestroyed(ServletContextEvent event) {
emf.close();
}
public static EntityManager createEntityManager() {
if (emf == null) {
throw new IllegalStateException("Context is not initialized yet.");
}
return emf.createEntityManager();
}
}
だからあなたpersistence.xml
は絶対に有効です。あなたはRESOURCE_LOCAL
を通して、あなたの接続を設定することができます
RESOURCE_LOCAL
:私のドメインモデルのファイルへの適応のように見えます。この場合
<?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="default" transaction-type="RESOURCE_LOCAL">
<class>com.mberazouski.stackoverflow.domain.Cards</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/rsreu"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
JTAデータ・ソース
すべての設定は、あなたのTomcatからResource
ブロックから行われます:Tomcatのの
<?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="default" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:comp/env/jdbc/EclispeLinkDB</jta-data-source>
<class>com.mberazouski.stackoverflow.domain.Cards</class>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
出力が開始:
しかし、私はまたあなたに方向を見ることをお勧めしますspring
。イニシャライザ手法を使用すると、コンフィギュレーションファイルから直接EntityManagerFactory
を初期化できます。
applicationContext.xmlを
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="emf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean ">
<property name="persistenceUnitName" value="default"/>
</bean>
</beans>
は、これが役立つことを願っています。
永続プロバイダとは何ですか?休止状態?データベースには既にカードテーブルが含まれていますが、毎回削除して置き換えることを期待していますか? –
私の持続性プロバイダはeclipselinkです。しかし、私はそれを冬眠に変えました。同じ問題が残っていました。 –
なぜあなたのjpaプロバイダーのログを見ていないのですか? – DN1