先週、「WildFly 10 を試してみよう!」と言いました。そして、基本的な構成と HelloWorld の作業の後、永続化がどのように機能するかを確認したいと思いました。Aは、HibernateがSQLiteで使用されるJPAモジュールを持つ私の古いABC EARを取りました。net.kemitixが提供する方言を設定します。
そのため、POM ファイルで依存関係を設定します。
<dependency>
<groupId>net.kemitix</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>0.1.0</version>
</dependency>
パッケージ化後の EAR は次のようになります。
ABC_Ear-0.0.1-SNAPSHOT.ear
lib
ABC_Jpa-0.0.1-SNAPSHOT.jar
sqlite-dialect-0.1.0.jar
sqlite-jdbc-3.8.11.2.jar
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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">
<persistence-unit name="ABC_Jpa" transaction-type="JTA">
<class>abc.jpa.User</class>
<class>abc.jpa.Group</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:C:/sqlite/ABC.db"/>
<property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/AbcEntityManagerFactory" />
<property name="jboss.entity.manager.jndi.name" value="java:/AbcEntityManager"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
デプロイ中に次の例外が発生します。
INFO [org.jboss.as.jpa] (ServerService Thread Pool -- 67) WFLYJPA0010: Starting Persistence Unit (phase 2 of 2) Service 'ABC_Jpa-0.0.1-SNAPSHOT.jar#ABC_Jpa'
WARN [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator] (ServerService Thread Pool -- 67) HHH000342: Could not obtain connection to query metadata : Unable to resolve name [org.hibernate.dialect.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]
ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 67) MSC000001: Failed to start service jboss.persistenceunit."ABC_Jpa-0.0.1-SNAPSHOT.jar#ABC_Jpa": org.jboss.msc.service.StartException in service jboss.persistenceunit."ABC_Jpa-0.0.1-SNAPSHOT.jar#ABC_Jpa": org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:172)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117)
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154)
... 7 more
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]
ドライバー自体と一緒に方言を含む JAR もロードしようとしましたが、同じ結果になりました。
C:\wildfly-10.0.0.Final\modules\system\layers\base\org\xerial\sqlite-jdbc\main\module.xml
<module xmlns="urn:jboss:module:1.3" name="org.xerial.sqlite-jdbc">
<resources>
<resource-root path="sqlite-dialect-0.1.0.jar"/>
<resource-root path="sqlite-jdbc-3.8.11.2.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
誰かがこの問題の有効な解決策を持っていますか? それまでの間、WildFly ドキュメントの関連セクションをもう一度読み直します :-)
敬具、 KérdezösködőIndián