You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "Poggenpohl, Daniel" <Da...@isst.fraunhofer.de> on 2015/07/20 11:33:32 UTC

Deploying a Tapestry 5.3.8 app on Tomcat 7 - Dependency problems (probably)

Hello everyone,

We're trying to deploy our application to an Apache Tomcat 7 and are having problems visiting the app's pages because of JPA problems.

First: Deploying the application to an embedded Jetty 9.2 works. Using the app, too.

We've had problems deploying the app to Tomcat at first because we have a dependency to tapestry-jpa (which in turn depends on geronimo-jpa 2.0) and a dependency to hibernate-entitymanager (which in turn depends on hibernate-jpa 2.1), which depend on a different implementation of the JPA spec.

The error for the above was
ERROR] TapestryIOCModule.RegistryStartup Construction of service RegistryStartup failed: Error invoking service contribution method org.apache.tapestry5.jpa.JpaModule.startupEarly(EntityManagerManager, boolean): javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;
org.apache.tapestry5.ioc.internal.OperationException: Error invoking service contribution method org.apache.tapestry5.jpa.JpaModule.startupEarly(EntityManagerManager, boolean): javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

We excluded the geronimo-jpa dependency from tapestry-jpa (and removed the dependency to tapestry-test which seems to depend on geronimo-jpa, too) and then we were able to deploy the app.

But now we can't visit the app pages because of this error:

An unexpected application exception has occurred.Render queue error in BeginRender[Index:layout.if_1]: Failure reading parameter 'test' of component Index:layout.if_1: Exception constructing service 'SomeDAO': Unable to add method javax.persistence.EntityGraph createEntityGraph(java.lang.String) to class $EntityManager_14eaaa049ba: java.io.IOException: invalid constant type: 18

SomeDAO is a service accessing the database, injecting the EntityManager into the class.

What are we doing wrong?
Our setup:
<tapestry-release-version>5.3.8</tapestry-release-version>
<jquery-release-version>3.4.2</jquery-release-version>
<commons-release-version>1.3.3</commons-release-version>
<jetty-release-version>9.2.10.v20150310</jetty-release-version>
<hibernate-release-version>4.3.9.Final</hibernate-release-version>
<hibernate-validator-release-version>5.1.3.Final</hibernate-validator-release-version>
<mysql-connector-release-version>5.1.31</mysql-connector-release-version>

At the moment, Tapestry manages the transactions, we use @CommitAfter. Our persistence.xml looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
       version="2.0">
       <persistence-unit name="unit" transaction-type="RESOURCE_LOCAL">
             <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
             <properties>
                    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
                    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://our.host:3306/db"/>
                    <property name="javax.persistence.jdbc.user" value="user"/>
                    <property name="javax.persistence.jdbc.password" value="pw"/>
<!--
                    <property name="javax.persistence.schema-generation.database.action" value="update"/>
       -->
                    <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>

                    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />

                    <property name="hibernate.hbm2ddl.auto" value="create" />

                    <property name="hibernate.show_sql" value = "true" />
                    <property name="hibernate.format_sql" value = "true" />
             </properties>
       </persistence-unit>
</persistence>

Do we have to let Tomcat manage transactions? Do we have to let Tomcat manage the db connections? Do we need to have a Data Source?

Regards,
Daniel P.


AW: Deploying a Tapestry 5.3.8 app on Tomcat 7 - Dependency problems (probably)

Posted by "Poggenpohl, Daniel" <Da...@isst.fraunhofer.de>.
Hello,

we finally found the culprit via "invalid constant type: 18".
We have two dependencies to javassist (3.12 and 3.18) via the same two different jpa implementations. Excluding the older javassist did the trick. It seems some Java 1.8 compiled class didn't work...? Perhaps javassist 3.18 is compiled with 1.8 and as we are running 1.7 compliance it broke?

Anyway, thanks for listening.

Regards,
Daniel P.


-----Ursprüngliche Nachricht-----
Von: Poggenpohl, Daniel [mailto:Daniel.Poggenpohl@isst.fraunhofer.de] 
Gesendet: Montag, 20. Juli 2015 11:34
An: users@tapestry.apache.org
Betreff: Deploying a Tapestry 5.3.8 app on Tomcat 7 - Dependency problems (probably)

Hello everyone,

We're trying to deploy our application to an Apache Tomcat 7 and are having problems visiting the app's pages because of JPA problems.

First: Deploying the application to an embedded Jetty 9.2 works. Using the app, too.

We've had problems deploying the app to Tomcat at first because we have a dependency to tapestry-jpa (which in turn depends on geronimo-jpa 2.0) and a dependency to hibernate-entitymanager (which in turn depends on hibernate-jpa 2.1), which depend on a different implementation of the JPA spec.

The error for the above was
ERROR] TapestryIOCModule.RegistryStartup Construction of service RegistryStartup failed: Error invoking service contribution method org.apache.tapestry5.jpa.JpaModule.startupEarly(EntityManagerManager, boolean): javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;
org.apache.tapestry5.ioc.internal.OperationException: Error invoking service contribution method org.apache.tapestry5.jpa.JpaModule.startupEarly(EntityManagerManager, boolean): javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

We excluded the geronimo-jpa dependency from tapestry-jpa (and removed the dependency to tapestry-test which seems to depend on geronimo-jpa, too) and then we were able to deploy the app.

But now we can't visit the app pages because of this error:

An unexpected application exception has occurred.Render queue error in BeginRender[Index:layout.if_1]: Failure reading parameter 'test' of component Index:layout.if_1: Exception constructing service 'SomeDAO': Unable to add method javax.persistence.EntityGraph createEntityGraph(java.lang.String) to class $EntityManager_14eaaa049ba: java.io.IOException: invalid constant type: 18

SomeDAO is a service accessing the database, injecting the EntityManager into the class.

What are we doing wrong?
Our setup:
<tapestry-release-version>5.3.8</tapestry-release-version>
<jquery-release-version>3.4.2</jquery-release-version>
<commons-release-version>1.3.3</commons-release-version>
<jetty-release-version>9.2.10.v20150310</jetty-release-version>
<hibernate-release-version>4.3.9.Final</hibernate-release-version>
<hibernate-validator-release-version>5.1.3.Final</hibernate-validator-release-version>
<mysql-connector-release-version>5.1.31</mysql-connector-release-version>

At the moment, Tapestry manages the transactions, we use @CommitAfter. Our persistence.xml looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
       version="2.0">
       <persistence-unit name="unit" transaction-type="RESOURCE_LOCAL">
             <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
             <properties>
                    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
                    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://our.host:3306/db"/>
                    <property name="javax.persistence.jdbc.user" value="user"/>
                    <property name="javax.persistence.jdbc.password" value="pw"/>
<!--
                    <property name="javax.persistence.schema-generation.database.action" value="update"/>
       -->
                    <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>

                    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />

                    <property name="hibernate.hbm2ddl.auto" value="create" />

                    <property name="hibernate.show_sql" value = "true" />
                    <property name="hibernate.format_sql" value = "true" />
             </properties>
       </persistence-unit>
</persistence>

Do we have to let Tomcat manage transactions? Do we have to let Tomcat manage the db connections? Do we need to have a Data Source?

Regards,
Daniel P.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org