По сути, я новичок в Tapestry, и мне нужно работать над проектом с этим фреймворком. Для этого я запустил учебные пособия по Tutorial Point и DoubleNegative.
До сих пор мне удалось завершить спящую часть Tutorial point, но у меня есть несколько трудностей с частью JPA. В настоящее время у меня есть проблема с интеграцией JPA, относительно реализации PersistenceProvider в среде выполнения.
Каждый раз, когда я собираю проект, он возвращает мне это сообщение об ошибке:
[ERROR] ioc.Registry java.lang.IllegalStateException: No PersistenceProvider implementation available in the runtime environment.
Но у меня есть файл persistence.xml, и он находится в правильном месте (src / main / resources / META-INF).
Поскольку моему проекту требуется Java 1.7, я использую последние версии для зависимостей tapestry-core
и tapestry-jpa
(${tapestry-release-version}
) и 5.1.17 для hibernate-core
.
(Здесь интеграция дерева зависимостей, соответствующая hibernate
[INFO] +- org.hibernate:hibernate-core:jar:5.1.17.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] | +- org.javassist:javassist:jar:3.20.0-GA:compile
[INFO] | +- antlr:antlr:jar:2.7.7:compile
[INFO] | +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
[INFO] | +- org.jboss:jandex:jar:2.0.3.Final:compile
[INFO] | +- com.fasterxml:classmate:jar:1.3.0:compile
[INFO] | +- org.dom4j:dom4j:jar:2.1.1:compile
[INFO] | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.19:compile
[INFO] | +- org.slf4j:slf4j-api:jar:1.7.19:compile
[INFO] | \- log4j:log4j:jar:1.2.17:compile
)
Пока у меня это без результата:
- изменить провайдера с org.hibernate.ejb.HibernatePersistence на текущую версию в файле постоянства
- заменить команды, используемые в постоянстве, в AppModule
- использовать сопоставление балансов в файле постоянства
- использовать функции addJarFileUrl в configurePersistenceUnitInfos (прокомментировано ниже, но бесполезно)
Это фрагмент моего файла persistence.xml:
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="ryuJPA" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.dialect" value="com.mysema.query.jpa.support.ExtendedHSQLDialect" />
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
<property name="hibernate.connection.url" value="jdbc:hsqldb:file:./localhost/ryu;shutdown=true" />
<property name="hibernate.connection.user" value="sa" />
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
Часть приложения AppModule.java соответствует:
@Contribute(EntityManagerSource.class)
public static void configurePersistenceUnitInfos(MappedConfiguration<String,PersistenceUnitConfigurer> cfg) {
PersistenceUnitConfigurer configurer = new PersistenceUnitConfigurer() {
public void configure(TapestryPersistenceUnitInfo unitInfo) {
unitInfo
//.addJarFileUrl("hibernate-release-5.1.17.Final\\lib\\jpa\\hibernate-entitymanager-5.1.17.Final.jar")
//.addJarFileUrl("org.hibernate.ejb.HibernatePersistence")
.addProperty("hibernate.archive.autodetection", "class")
.addProperty("hibernate.dialect", "com.mysema.query.jpa.support.ExtendedHSQLDialect")
.addProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver")
.addProperty("hibernate.connection.url", "jdbc:hsqldb:file:./localhost/ryu;shutdown=true")
.addProperty("hibernate.show_sql", "sa")
.addProperty("hibernate.show_sql", "true")
.addProperty("hibernate.hbm2ddl.auto", "update")
;
}
};
cfg.add("ryuJPA", configurer);
}
В настоящее время Jetty не может скомпилировать проект, возвращаемое значение:
[ERROR] ioc.Registry java.lang.IllegalStateException: No PersistenceProvider implementation available in the runtime environment.
В настоящее время у меня недостаточно опыта в этой среде, чтобы понять, как это решить, мне кажется, это правильно.
Спасибо за любую помощь.