Sure, send it out. Thanks, Rick
On Fri, Mar 23, 2012 at 8:22 AM, Matthew Adams <matt...@matthewadams.me>wrote: > Note: Sorry for the delay. Forgot to hit send on this > email...thought I'd sent it long ago... > > I can't really boil it down (partly because I'm not sure what the > problem is, exactly), but it's a pretty small project -- only a few > persistent classes. I'd be happy to send you the whole project off > the list. Let me know, ok? > > Thanks, > Matthew > > On Fri, Mar 16, 2012 at 11:25 AM, Rick Curtis <curti...@gmail.com> wrote: > > Matthew - > > > >> Rick, if you want me to send you the whole project offline, I'd be happy > > to. > > Is it possible that you could boil this scenario down to a small unit > test? > > Sorry about the slow replies, I'm swamped with other work. > > > > Thanks, > > Rick > > > > On Thu, Mar 15, 2012 at 8:51 AM, Matthew Adams <matt...@matthewadams.me > >wrote: > > > >> Note: I fixed the "down level" entity by updating the version of > >> openjpa used by the enhancer. Exception remains, though. > >> > >> Rick, if you want me to send you the whole project offline, I'd be happy > >> to. > >> > >> -matthew > >> > >> On Thu, Mar 15, 2012 at 8:39 AM, Matthew Adams <matt...@matthewadams.me > > > >> wrote: > >> > Sure thing. I just noticed something suspicious: "A down level > >> > Entity was detected and logged". Could that have something to do with > >> > the problem? > >> > > >> > 19:00:31,348 INFO ClassPathXmlApplicationContext:495 - Refreshing > >> > > >> > org.springframework.context.support.ClassPathXmlApplicationContext@2f833eca > >> : > >> > startup date [Wed Mar 14 19:00:31 CDT 2012]; root of context hierarchy > >> > 19:00:31,417 INFO XmlBeanDefinitionReader:315 - Loading XML bean > >> > definitions from file > >> > > >> > [/home/matthew/dev/statthing/statthing/backend/model/target/classes/META-INF/spring/applicationContext.xml] > >> > 19:00:31,964 INFO PropertySourcesPlaceholderConfigurer:177 - Loading > >> > properties file from file > >> > > >> > [/home/matthew/dev/statthing/statthing/backend/model/target/classes/META-INF/spring/database.properties] > >> > 19:00:31,985 INFO DefaultListableBeanFactory:557 - Pre-instantiating > >> > singletons in > >> > org.springframework.beans.factory.support.DefaultListableBeanFactory@11dfc8a0 > >> : > >> > defining beans > >> > [org.springframework.context.support.PropertySourcesPlaceholderConfigurer#0,org.springframework.context.config.internalBeanConfigurerAspect,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,transactionManager,org.springframework.transaction.config.internalTransactionAspect,dataSource,entityManagerFactory,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; > >> > root of factory hierarchy > >> > 19:00:32,146 INFO LocalContainerEntityManagerFactoryBean:253 - > >> > Building JPA container EntityManagerFactory for persistence unit > >> > 'persistenceUnit' > >> > 20 persistenceUnit WARN [main] openjpa.Runtime - An error occurred > >> > while registering a ClassTransformer with PersistenceUnitInfo: name > >> > 'persistenceUnit', root URL > >> > > >> > [file:/home/matthew/dev/statthing/statthing/backend/model/target/classes/]. > >> > The error has been consumed. To see it, set your openjpa.Runtime log > >> > level to TRACE. Load-time class transformation will not be available. > >> > 82 persistenceUnit INFO [main] openjpa.Runtime - OpenJPA > >> > dynamically loaded a validation provider. > >> > 156 persistenceUnit INFO [main] openjpa.Runtime - Starting OpenJPA > >> 2.2.0 > >> > 187 persistenceUnit INFO [main] openjpa.jdbc.JDBC - Using > >> > dictionary class "org.apache.openjpa.jdbc.sql.MySQLDictionary". > >> > 1087 persistenceUnit INFO [main] openjpa.Runtime - The Entity > >> > "com.statthing.model.volleyball.FloorRegionList" was enhanced at level > >> > "1,055,128", but the current level of enhancement is "1,241,207". > >> > 1090 persistenceUnit INFO [main] openjpa.Runtime - A down level > >> > Entity was detected and logged. Please enable RUNTIME trace to see all > >> > down level Entities. > >> > Exception in thread "main" > >> > org.springframework.orm.jpa.JpaSystemException: The transaction has > >> > been rolled back. See the nested exceptions for details on the errors > >> > that occurred.; nested exception is <openjpa-2.2.0-r422266:1244990 > >> > fatal general error> > >> > org.apache.openjpa.persistence.PersistenceException: The transaction > >> > has been rolled back. See the nested exceptions for details on the > >> > errors that occurred. > >> > at > >> > org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:326) > >> > at > >> > org.springframework.orm.jpa.DefaultJpaDialect.translateExceptionIfPossible(DefaultJpaDialect.java:120) > >> > at > >> > org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:516) > >> > at > >> > org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) > >> > at > >> > org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) > >> > at > >> > org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393) > >> > at > >> > org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$afterReturning$org_springframework_transaction_aspectj_AbstractTransactionAspect$3$2a73e96c(AbstractTransactionAspect.aj:78) > >> > at > >> > com.statthing.model.volleyball.FloorConfiguration_Roo_Jpa_ActiveRecord.ajc$interMethod$com_statthing_model_volleyball_FloorConfiguration_Roo_Jpa_ActiveRecord$com_statthing_model_volleyball_FloorConfiguration$persist(FloorConfiguration_Roo_Jpa_ActiveRecord.aj:44) > >> > at > >> > com.statthing.model.volleyball.FloorConfiguration.persist(FloorConfiguration.java:1) > >> > at > >> > com.statthing.model.volleyball.FloorConfiguration_Roo_Jpa_ActiveRecord.ajc$interMethodDispatch1$com_statthing_model_volleyball_FloorConfiguration_Roo_Jpa_ActiveRecord$com_statthing_model_volleyball_FloorConfiguration$persist(FloorConfiguration_Roo_Jpa_ActiveRecord.aj) > >> > at > >> com.statthing.model.volleyball.seeder.Seeder.seed(Seeder.java:78) > >> > at > >> com.statthing.model.volleyball.seeder.Seeder$1.doInJpa(Seeder.java:43) > >> > at > >> org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:187) > >> > at > >> org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:150) > >> > at > >> com.statthing.model.volleyball.seeder.Seeder.execute(Seeder.java:38) > >> > at > >> com.statthing.model.volleyball.seeder.Seeder.main(Seeder.java:24) > >> > Caused by: <openjpa-2.2.0-r422266:1244990 fatal general error> > >> > org.apache.openjpa.persistence.PersistenceException: The transaction > >> > has been rolled back. See the nested exceptions for details on the > >> > errors that occurred. > >> > at > >> > org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2337) > >> > at > >> org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2174) > >> > at > >> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2072) > >> > at > >> > org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1990) > >> > at > >> > org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81) > >> > at > >> org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1514) > >> > at > >> > org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:933) > >> > at > >> > org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:570) > >> > at > >> > org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512) > >> > ... 13 more > >> > Caused by: <openjpa-2.2.0-r422266:1244990 fatal user error> > >> > org.apache.openjpa.persistence.InvalidStateException: Attempt to set > >> > column "FloorRegion.version" to two different values: (null)"null", > >> > (class java.lang.Integer)"1" This can occur when you fail to set both > >> > sides of a two-sided relation between objects, or when you map > >> > different fields to the same column, but you do not keep the values of > >> > these fields in synch. > >> > at > >> org.apache.openjpa.jdbc.sql.PrimaryRow.setObject(PrimaryRow.java:344) > >> > at > org.apache.openjpa.jdbc.sql.RowImpl.setObject(RowImpl.java:510) > >> > at > >> > org.apache.openjpa.jdbc.meta.strats.ColumnVersionStrategy.insert(ColumnVersionStrategy.java:192) > >> > at > org.apache.openjpa.jdbc.meta.Version.insert(Version.java:293) > >> > at > >> > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:236) > >> > at > >> > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:162) > >> > at > >> > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:95) > >> > at > >> > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:76) > >> > at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:713) > >> > at > >> > org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131) > >> > ... 21 more > >> > > >> > > >> > On Thu, Mar 15, 2012 at 8:09 AM, Rick Curtis <curti...@gmail.com> > wrote: > >> >> Matthew- > >> >> > >> >> Could you post the full exception stack? > >> >> > >> >> Thanks, > >> >> Rick > >> >> > >> >> On Wed, Mar 14, 2012 at 7:19 PM, Matthew Adams < > matt...@matthewadams.me > >> >wrote: > >> >> > >> >>> Hi all, > >> >>> > >> >>> Vitals: Maven 3.0.3, Roo 1.2.1.RELEASE, OpenJPA 2.2.0, MySQL 5.1.x, > >> >>> Ubuntu 11.10 64-bit, JDK 6 (1.6.0_30) 64-bit > >> >>> > >> >>> I'm getting an error with OpenJPA 2.2.0 that seems to have popped > up a > >> >>> fair bit with other folks out on the Internet over the years. Can > >> >>> anyone see anything in my mappings that is either wrong or would > cause > >> >>> this exception? I've been struggling with this for hours, trying > all > >> >>> sorts of different mappings and nothing seems to help! > >> >>> > >> >>> Here's the exception snippet: > >> >>> ===== > >> >>> <openjpa-2.2.0-r422266:1244990 fatal user error> > >> >>> org.apache.openjpa.persistence.InvalidStateException: Attempt to set > >> >>> column "FloorRegion.version" to two different values: (null)"null", > >> >>> (class java.lang.Integer)"1" This can occur when you fail to set > both > >> >>> sides of a two-sided relation between objects, or when you map > >> >>> different fields to the same column, but you do not keep the values > of > >> >>> these fields in synch. > >> >>> ===== > >> >>> > >> >>> The class in question, FloorRegion, is the target of a > unidirectional > >> >>> one-to-many relationship, owned by class FloorRegionList. Here's > the > >> >>> relevant part of FloorRegionList: > >> >>> ===== > >> >>> @Table(name = "FloorRegionList") > >> >>> public class FloorRegionList implements HasCourtSize { > >> >>> > >> >>> @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.DETACH, > >> >>> CascadeType.MERGE, CascadeType.REFRESH }) > >> >>> // unidirectional one-to-many using join column > >> >>> @JoinColumn(name = "owner", referencedColumnName = "id", > nullable = > >> >>> true) > >> >>> protected List<FloorRegion> regions = new > ArrayList<FloorRegion>(); > >> >>> ===== > >> >>> > >> >>> The FloorRegion class doesn't know anything whatsoever about > >> >>> FloorRegionList; it just has a couple of ints and five embedded > >> >>> FloorPoint instances: > >> >>> ===== > >> >>> @Table(name = "FloorRegion") > >> >>> public class FloorRegion implements HasCourtSize { > >> >>> > >> >>> @Column(nullable = false) > >> >>> protected int width; > >> >>> > >> >>> @Column(nullable = false) > >> >>> protected int length; > >> >>> > >> >>> @Embedded > >> >>> @AttributeOverrides({ > >> >>> @AttributeOverride(name = "w", column = @Column(name = > >> >>> "lfw", nullable = false)), > >> >>> @AttributeOverride(name = "l", column = @Column(name = > >> >>> "lfl", nullable = false)) }) > >> >>> protected FloorPoint leftFront; > >> >>> > >> >>> @Embedded > >> >>> @AttributeOverrides({ > >> >>> @AttributeOverride(name = "w", column = @Column(name = > >> >>> "lbw", nullable = false)), > >> >>> @AttributeOverride(name = "l", column = @Column(name = > >> >>> "lbl", nullable = false)) }) > >> >>> protected FloorPoint leftBack; > >> >>> > >> >>> @Embedded > >> >>> @AttributeOverrides({ > >> >>> @AttributeOverride(name = "w", column = @Column(name = > >> >>> "rfw", nullable = false)), > >> >>> @AttributeOverride(name = "l", column = @Column(name = > >> >>> "rfl", nullable = false)) }) > >> >>> protected FloorPoint rightFront; > >> >>> > >> >>> @Embedded > >> >>> @AttributeOverrides({ > >> >>> @AttributeOverride(name = "w", column = @Column(name = > >> >>> "rbw", nullable = false)), > >> >>> @AttributeOverride(name = "l", column = @Column(name = > >> >>> "rbl", nullable = false)) }) > >> >>> protected FloorPoint rightBack; > >> >>> > >> >>> @Embedded > >> >>> @AttributeOverrides({ > >> >>> @AttributeOverride(name = "w", column = @Column(name = > >> >>> "cw", nullable = false)), > >> >>> @AttributeOverride(name = "l", column = @Column(name = > >> >>> "cl", nullable = false)) }) > >> >>> protected FloorPoint center; > >> >>> ===== > >> >>> > >> >>> Here's my persistence.xml (note addition of foreign key > constraints): > >> >>> ===== > >> >>> <?xml version="1.0" encoding="UTF-8" standalone="no"?> > >> >>> <persistence > >> >>> xmlns="http://java.sun.com/xml/ns/persistence" > >> >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > >> >>> version="2.0" > >> >>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence > >> >>> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> > >> >>> <persistence-unit > >> >>> name="persistenceUnit" > >> >>> transaction-type="RESOURCE_LOCAL"> > >> >>> > >> >>> > >> > <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> > >> >>> <properties> > >> >>> <property > >> >>> name="openjpa.jdbc.DBDictionary" > >> >>> value="org.apache.openjpa.jdbc.sql.MySQLDictionary" > /> > >> >>> <!-- value="buildSchema" to runtime forward map the DDL > SQL; > >> >>> value="validate" makes no changes to the database --> > >> >>> <property > >> >>> name="openjpa.jdbc.SynchronizeMappings" > >> >>> value="validate" /> > >> >>> <property > >> >>> name="openjpa.RuntimeUnenhancedClasses" > >> >>> value="unsupported" /> > >> >>> <property > >> >>> name="openjpa.jdbc.MappingDefaults" > >> >>> value="ForeignKeyDeleteAction=restrict, > >> >>> JoinForeignKeyDeleteAction=restrict" /> > >> >>> </properties> > >> >>> </persistence-unit> > >> >>> </persistence> > >> >>> ===== > >> >>> > >> >>> Here's a snippet from my pom.xml that has to do with OpenJPA > >> >>> enhancement. It enhances, generates a clean schema DDL file, a > >> >>> differential one, connects to the database & refreshes it (during > the > >> >>> process-classes phase), and then during the post-integration-test > >> >>> phase, runs a main class that seeds the database with an initial set > >> >>> of entities. > >> >>> ===== > >> >>> <plugin> > >> >>> <groupId>org.codehaus.mojo</groupId> > >> >>> <artifactId>openjpa-maven-plugin</artifactId> > >> >>> <version>1.2</version> > >> >>> <executions> > >> >>> <execution> > >> >>> <id>enhance-classes</id> > >> >>> <phase>process-classes</phase> > >> >>> <goals> > >> >>> <goal>enhance</goal> > >> >>> </goals> > >> >>> <configuration> > >> >>> > >> >>> <includes>${statthing.entities.ant.pathspec}</includes> > >> >>> <excludes>**/*_Roo_*.class</excludes> > >> >>> > >> >>> <addDefaultConstructor>true</addDefaultConstructor> > >> >>> </configuration> > >> >>> </execution> > >> >>> <execution> > >> >>> <id>generate-ddl-file-complete</id> > >> >>> <phase>process-classes</phase> > >> >>> <goals> > >> >>> <goal>sql</goal> > >> >>> </goals> > >> >>> <configuration> > >> >>> > >> >>> <includes>${statthing.entities.ant.pathspec}</includes> > >> >>> <excludes>**/*_Roo_*.class</excludes> > >> >>> <sqlAction>build</sqlAction> > >> >>> <foreignKeys>true</foreignKeys> > >> >>> > >> >>> <sqlFile>${statthing.db.ddl.file.complete}</sqlFile> > >> >>> </configuration> > >> >>> </execution> > >> >>> <execution> > >> >>> <id>generate-ddl-file-diff</id> > >> >>> <phase>process-classes</phase> > >> >>> <goals> > >> >>> <goal>sql</goal> > >> >>> </goals> > >> >>> <configuration> > >> >>> > >> >>> <includes>${statthing.entities.ant.pathspec}</includes> > >> >>> <excludes>**/*_Roo_*.class</excludes> > >> >>> <sqlAction>refresh</sqlAction> > >> >>> <foreignKeys>true</foreignKeys> > >> >>> > >> <sqlFile>${statthing.db.ddl.file.diff}</sqlFile> > >> >>> > >> >>> <connectionDriverName>${statthing.db.connection.driver.name > >> >>> }</connectionDriverName> > >> >>> > >> >>> > >> >>> > >> > <connectionDriverName>com.mchange.v2.c3p0.ComboPooledDataSource</connectionDriverName> > >> >>> > >> >>> > >> >>> > >> > <connectionProperties>${statthing.db.connection.properties}</connectionProperties> > >> >>> </configuration> > >> >>> </execution> > >> >>> <execution> > >> >>> <id>generate-ddl-db</id> > >> >>> <phase>process-classes</phase> > >> >>> <goals> > >> >>> <goal>sql</goal> > >> >>> </goals> > >> >>> <configuration> > >> >>> > >> >>> <includes>${statthing.entities.ant.pathspec}</includes> > >> >>> <excludes>**/*_Roo_*.class</excludes> > >> >>> <sqlAction>refresh</sqlAction> > >> >>> <foreignKeys>true</foreignKeys> > >> >>> <modifyDatabase>true</modifyDatabase> > >> >>> > >> >>> <connectionDriverName>${statthing.db.connection.driver.name > >> >>> }</connectionDriverName> > >> >>> > >> >>> > >> >>> > >> > <connectionDriverName>com.mchange.v2.c3p0.ComboPooledDataSource</connectionDriverName> > >> >>> > >> >>> > >> >>> > >> > <connectionProperties>${statthing.db.connection.properties}</connectionProperties> > >> >>> </configuration> > >> >>> </execution> > >> >>> </executions> > >> >>> <dependencies> > >> >>> <dependency> > >> >>> <groupId>org.apache.openjpa</groupId> > >> >>> <artifactId>openjpa</artifactId> > >> >>> <version>2.1.1</version> > >> >>> <exclusions> > >> >>> <exclusion> > >> >>> <groupId>commons-logging</groupId> > >> >>> > <artifactId>commons-logging</artifactId> > >> >>> </exclusion> > >> >>> <exclusion> > >> >>> > >> <groupId>org.apache.geronimo.specs</groupId> > >> >>> > >> >>> <artifactId>geronimo-jms_1.1_spec</artifactId> > >> >>> </exclusion> > >> >>> </exclusions> > >> >>> </dependency> > >> >>> </dependencies> > >> >>> </plugin> > >> >>> <plugin> > >> >>> <groupId>org.codehaus.mojo</groupId> > >> >>> <artifactId>exec-maven-plugin</artifactId> > >> >>> <version>1.2.1</version> > >> >>> <executions> > >> >>> <execution> > >> >>> <id>seed-database</id> > >> >>> <goals> > >> >>> <goal>exec</goal> > >> >>> </goals> > >> >>> <phase>post-integration-test</phase> > >> >>> </execution> > >> >>> </executions> > >> >>> <configuration> > >> >>> <executable>java</executable> > >> >>> <classpathScope>test</classpathScope> > >> >>> <arguments> > >> >>> <argument>-Xdebug</argument> > >> >>> > >> >>> > >> >>> > >> > <argument>-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005</argument> > >> >>> <argument>-classpath</argument> > >> >>> <classpath /> > >> >>> > >> >>> <argument>com.statthing.model.volleyball.seeder.Seeder</argument> > >> >>> </arguments> > >> >>> </configuration> > >> >>> </plugin> > >> >>> > >> >>> ===== > >> >>> > >> >>> Thanks, > >> >>> Matthew > >> >>> > >> >>> -- > >> >>> @matthewadams12 > >> >>> mailto:matt...@matthewadams.me > >> >>> skype:matthewadams12 > >> >>> yahoo:matthewadams > >> >>> aol:matthewadams12 > >> >>> google-talk:matthewadam...@gmail.com > >> >>> msn:matt...@matthewadams.me > >> >>> http://matthewadams.me > >> >>> http://www.linkedin.com/in/matthewadams > >> >>> > >> >> > >> >> > >> >> > >> >> -- > >> >> *Rick Curtis* > >> > > >> > > >> > > >> > -- > >> > @matthewadams12 > >> > mailto:matt...@matthewadams.me > >> > skype:matthewadams12 > >> > yahoo:matthewadams > >> > aol:matthewadams12 > >> > google-talk:matthewadam...@gmail.com > >> > msn:matt...@matthewadams.me > >> > http://matthewadams.me > >> > http://www.linkedin.com/in/matthewadams > >> > >> > >> > >> -- > >> @matthewadams12 > >> mailto:matt...@matthewadams.me > >> skype:matthewadams12 > >> yahoo:matthewadams > >> aol:matthewadams12 > >> google-talk:matthewadam...@gmail.com > >> msn:matt...@matthewadams.me > >> http://matthewadams.me > >> http://www.linkedin.com/in/matthewadams > >> > > > > > > > > -- > > *Rick Curtis* > > > > -- > @matthewadams12 > mailto:matt...@matthewadams.me > skype:matthewadams12 > yahoo:matthewadams > aol:matthewadams12 > google-talk:matthewadam...@gmail.com > msn:matt...@matthewadams.me > http://matthewadams.me > http://www.linkedin.com/in/matthewadams > -- *Rick Curtis*