You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Lionel <ls...@axway.com> on 2014/10/03 10:52:58 UTC

Moving from OpenJPA 2.0.1 to 2.3.0: fields not found

Hello,

I had a working project using OpenJPA 2.0.1
We had to change the project to a maven build so we are now enhancing the
classes this way:
            <plugin>
                <groupId>org.apache.openjpa</groupId>
                <artifactId>openjpa-maven-plugin</artifactId>
                <version>2.3.0</version>
                <configuration>
                   
<persistenceXmlFile>${project.basedir}/src/main/configuration/META-INF/persistence.xml</persistenceXmlFile>
                    <addDefaultConstructor>true</addDefaultConstructor>
                   
<enforcePropertyRestrictions>true</enforcePropertyRestrictions>
                </configuration>
                <executions>
                    <execution>
                        <id>enhancer</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>enhance</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.openjpa</groupId>
                        <artifactId>openjpa</artifactId>
                        <version>2.3.0</version>
                    </dependency>
                </dependencies>
            </plugin>

The problem occurs at runtime during the commit for classes that have
inheritance:
<openjpa-2.3.0-r422266:1540826 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:2370)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2207)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2105)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1876)
	at org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:973)
	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:853)
	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
	at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:275)
	at
org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:291)
	at
com.axway.passport.schema.AbstractObject.getByPrimaryKey(AbstractObject.java:323)
	at
com.axway.passport.schema.common.Organization.getOrganization(Organization.java:715)
	at
com.axway.passport.upgrade.am.DataInitializer.createDefaultOrganizations(DataInitializer.java:138)
	at
com.axway.passport.upgrade.am.DataInitializer.execute(DataInitializer.java:334)
	at
com.axway.passport.persistence.upgrade.DataInitExecuter.executeInit(DataInitExecuter.java:80)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.initData(SchemaInstaller.java:205)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:101)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:71)
	at
com.axway.passport.service.PassportStartupThread.startCoreServices(PassportStartupThread.java:124)
	at
com.axway.passport.service.PassportStartupThread.primRun(PassportStartupThread.java:84)
	at com.axway.passport.util.EventedThread.run(EventedThread.java:66)
Caused by: <openjpa-2.3.0-r422266:1540826 fatal user error>
org.apache.openjpa.persistence.ArgumentException:
"com.axway.passport.schema.pki.Entity.certificateAliases" declared that it
is mapped by "parent", but that is a not a field of the related type.
	at
org.apache.openjpa.meta.FieldMetaData.getMappedByMetaData(FieldMetaData.java:867)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.getMapField(RelationFieldStrategy.java:341)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.setMapKey(RelationFieldStrategy.java:304)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.insert(RelationFieldStrategy.java:294)
	at org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:623)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:238)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:165)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:96)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:77)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
	at
org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:661)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
	... 20 more
NestedThrowables:
<openjpa-2.3.0-r422266:1540826 fatal user error>
org.apache.openjpa.persistence.ArgumentException:
"com.axway.passport.schema.common.Domain.caServices" declared that it is
mapped by "domains", but that is a not a field of the related type.
	at
org.apache.openjpa.meta.FieldMetaData.getMappedByMetaData(FieldMetaData.java:867)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.getMapField(RelationFieldStrategy.java:341)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.setMapKey(RelationFieldStrategy.java:304)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.insert(RelationFieldStrategy.java:294)
	at org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:623)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:238)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:165)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:96)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:77)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
	at
org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:661)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2207)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2105)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1876)
	at org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:973)
	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:853)
	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
	at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:275)
	at
org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:291)
	at
com.axway.passport.schema.AbstractObject.getByPrimaryKey(AbstractObject.java:323)
	at
com.axway.passport.schema.common.Organization.getOrganization(Organization.java:715)
	at
com.axway.passport.upgrade.am.DataInitializer.createDefaultOrganizations(DataInitializer.java:138)
	at
com.axway.passport.upgrade.am.DataInitializer.execute(DataInitializer.java:334)
	at
com.axway.passport.persistence.upgrade.DataInitExecuter.executeInit(DataInitExecuter.java:80)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.initData(SchemaInstaller.java:205)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:101)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:71)
	at
com.axway.passport.service.PassportStartupThread.startCoreServices(PassportStartupThread.java:124)
	at
com.axway.passport.service.PassportStartupThread.primRun(PassportStartupThread.java:84)
	at com.axway.passport.util.EventedThread.run(EventedThread.java:66)
<openjpa-2.3.0-r422266:1540826 fatal user error>
org.apache.openjpa.persistence.ArgumentException:
"com.axway.passport.schema.common.Domain.caServices" declared that it is
mapped by "domains", but that is a not a field of the related type.
	at
org.apache.openjpa.meta.FieldMetaData.getMappedByMetaData(FieldMetaData.java:867)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.getMapField(RelationFieldStrategy.java:341)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.setMapKey(RelationFieldStrategy.java:304)
	at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.insert(RelationFieldStrategy.java:294)
	at org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:623)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:238)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:165)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:96)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:77)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
	at
org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:661)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2207)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2105)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1876)
	at org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:973)
	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:853)
	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
	at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:275)
	at
org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:291)
	at
com.axway.passport.schema.AbstractObject.getByPrimaryKey(AbstractObject.java:323)
	at
com.axway.passport.schema.common.Organization.getOrganization(Organization.java:715)
	at
com.axway.passport.upgrade.am.DataInitializer.createDefaultOrganizations(DataInitializer.java:138)
	at
com.axway.passport.upgrade.am.DataInitializer.execute(DataInitializer.java:334)
	at
com.axway.passport.persistence.upgrade.DataInitExecuter.executeInit(DataInitExecuter.java:80)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.initData(SchemaInstaller.java:205)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:101)
	at
com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:71)
	at
com.axway.passport.service.PassportStartupThread.startCoreServices(PassportStartupThread.java:124)
	at
com.axway.passport.service.PassportStartupThread.primRun(PassportStartupThread.java:84)
	at com.axway.passport.util.EventedThread.run(EventedThread.java:66)




And here is the classes and mapping that we have:
1) for the nested throwable
@MappedSuperclass
public abstract class AbstractObject implements IAbstractObject,
IProvisioningObject
{
    @Column(name = SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)
    @Id
    @GeneratedValue
    private long id;
    public static final String _idFieldName = "id";
...
}

@MappedSuperclass
public abstract class ExtendedAbstractObject extends AbstractObject
implements IExtendedAbstractObject
{
...
}

@Table(name = SchemaConstants.DOMAIN_TABLE)
public class Domain extends ExtendedAbstractObject implements
IAbstractObject, Comparable<Domain>
{
    @ManyToMany(mappedBy = CAService._domainFieldName, fetch =
FetchType.LAZY, cascade = {CascadeType.REFRESH}, targetEntity =
CAService.class)
    private Collection<CAService> caServices = new ArrayList<CAService>();
...
}

@javax.persistence.Entity
@Table(name = SchemaConstants.CASERVICE_TABLE)
public class CAService extends AbstractObject implements
Comparable<CAService>, CertificateVersionContainer
{
    @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE,
CascadeType.REFRESH})
    @JoinTable(name = SchemaConstants.CASERVICE_DOMAIN_JOIN_TABLE,
                     joinColumns = {@JoinColumn(name =
SchemaConstants.CASERVICE_DOMAIN_INVERSE_JOIN_COLUMN, referencedColumnName =
SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)},
            inverseJoinColumns = {@JoinColumn(name =
SchemaConstants.CASERVICE_DOMAIN_JOIN_COLUMN, referencedColumnName =
SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)})
    private Collection<Domain> domains = new ArrayList<Domain>();
    public static final String _domainFieldName = "domains";
...
}

2) for the exception itself:
@javax.persistence.Entity
@Table(name = ENTITY_TABLE)
public class Entity extends AbstractObject implements Comparable<Entity>,
PublicKeyContainer
{
    @OneToMany(targetEntity = CertificateAlias.EntityCertificateAlias.class,
mappedBy = CertificateAlias.EntityCertificateAlias._entityFieldName, fetch =
FetchType.LAZY, cascade = {CascadeType.ALL})
    @ElementDependent
    private Collection<CertificateAlias> certificateAliases = new
ArrayList<CertificateAlias>();
    public static final String _certAliasListFieldName =
"certificateAliases";
    ...
}

@javax.persistence.Entity
@Table(name = CERTALIAS_TABLE)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name =
com.axway.passport.schema.pki.SchemaConstants.CERTALIAS_DISCRIMINATOR_COLUMN,
discriminatorType = DiscriminatorType.STRING)
public abstract class CertificateAlias extends AbstractObject implements
Comparable<CertificateAlias>, CertificateVersionContainer
{

    @javax.persistence.Entity
   
@DiscriminatorValue(com.axway.passport.schema.pki.SchemaConstants.DISCRIMINATOR_ENTITY)
    public static class EntityCertificateAlias extends CertificateAlias
    {
        @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.REFRESH})
        @JoinColumn(name = CERTALIAS_PARENT_JOIN_COLUMN,
referencedColumnName =
com.axway.passport.schema.common.SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)
        private Entity parent;
        public static final String _entityFieldName = "parent";
        ...
    }
    ...
}


And finally the persistence.xml (don't know if this is important or not...)
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
	<persistence-unit name="passport">
		
	
<provider>com.axway.passport.persistence.providers.jpa.PassportPersistenceProvider</provider>

		
		<class>com.axway.passport.schema.AbstractObject</class>
       
<class>com.axway.passport.schema.common.ExtendedAbstractObject</class>
        <class>com.axway.passport.schema.common.Domain</class>
        <class>com.axway.passport.schema.pki.Entity</class>
        <class>com.axway.passport.schema.pki.CertificateAlias</class>
	
<class>com.axway.passport.schema.pki.CertificateAlias$EntityCertificateAlias</class>
        <class>com.axway.passport.schema.pki.CAService</class>
	</persistence-unit>
</persistence>


As I found on some thread this advice, I can confirm that we have no method
"final" (getter or setter).

I didn't manage to figure out why when classes are read the first time, the
fields are well found but second time during the commit, something goes
wrong and they are not in the map.
Does anyone has an idea that could help us?
Maybe more data are needed... You can also contact me directly by email if
needed.
Thanks a lot in advance for you help.

Just to let you know, I also run the test to just replace the openjpa lib on
a working running environment and I had the same issue (so it's probably not
link to the way we enhance the classes)

Lionel.



--
View this message in context: http://openjpa.208410.n2.nabble.com/Moving-from-OpenJPA-2-0-1-to-2-3-0-fields-not-found-tp7587168.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: Moving from OpenJPA 2.0.1 to 2.3.0: fields not found

Posted by Kevin Sutter <kw...@gmail.com>.
Lionel,
Related to my comment about the earlier messages in the log...  Have you
looked at the earlier messages?  Do you get any errors when doing the build
time enhancement?  Any errors when the Entities are first loaded into your
application?

Are you running OpenJPA as part of an Application Server, or as part of a
standalone Java SE application?

If the latter, any other OpenJPA properties getting set on the Java
invocation?

Just trying to figure out if there's some hiccup related to the enhancement
processing where some of the Entities in your project are getting enhanced,
while others are not.

Kevin

On Tue, Oct 7, 2014 at 5:43 PM, Kevin Sutter <kw...@gmail.com> wrote:

> Lionel,
> I would suggest trying to turn on Trace, but there doesn't seem to be a
> lot of tracing in this particular area of the code...  :-(  It still might
> be worth a shot.  Maybe an earlier log entry might shed some light on why
> this is going awry...
>
> I'm going to suggest one quick change just to see if it makes a
> difference.  It shouldn't, but I stumbled on this the first time I read
> your code, so maybe the OpenJPA code is making the same mistake...
>
> Instead of referencing a final String field for your mappedBy field, what
> happens if you just insert the actual string?  For example, instead of...
>     mappedBy = CAService._domainFieldName,
> do this...
>     mappedBy = "domains",
>
> I know it shouldn't make a difference, but it might isolate the source of
> the error if this does work.
>
> Thanks, Kevin
>
> On Tue, Oct 7, 2014 at 10:49 AM, Lionel <ls...@axway.com> wrote:
>
>> Hello,
>>
>> First, thanks a lot for your answer. :)
>>
>> In the past, we were using an ant build the project so also to run the JPA
>> enhancer but for a company strategy reason we are moving to a maven build
>> process.
>> And when I did it, we've seen that there is a maven plugin to do the JPA
>> enhancer.
>> So that's why :)
>>
>> I just put back the default PersistenceProviderImpl and sadly, I had the
>> same result. :(
>>
>>
>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>
>>
>>
>> To try to isolate the issue and, tonight, we will just replace the JPA
>> version inside the existing project (built with ant) just to validate that
>> has really no link with the enhancement.
>>
>> I will also try to upgrade openJPA version one by one to be sure from
>> which
>> the error appears and give additionnal data tomorrow.
>>
>>
>>
>> --
>> View this message in context:
>> http://openjpa.208410.n2.nabble.com/Moving-from-OpenJPA-2-0-1-to-2-3-0-fields-not-found-tp7587168p7587176.html
>> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>>
>
>

Re: Moving from OpenJPA 2.0.1 to 2.3.0: fields not found

Posted by Kevin Sutter <kw...@gmail.com>.
Lionel,
I would suggest trying to turn on Trace, but there doesn't seem to be a lot
of tracing in this particular area of the code...  :-(  It still might be
worth a shot.  Maybe an earlier log entry might shed some light on why this
is going awry...

I'm going to suggest one quick change just to see if it makes a
difference.  It shouldn't, but I stumbled on this the first time I read
your code, so maybe the OpenJPA code is making the same mistake...

Instead of referencing a final String field for your mappedBy field, what
happens if you just insert the actual string?  For example, instead of...
    mappedBy = CAService._domainFieldName,
do this...
    mappedBy = "domains",

I know it shouldn't make a difference, but it might isolate the source of
the error if this does work.

Thanks, Kevin

On Tue, Oct 7, 2014 at 10:49 AM, Lionel <ls...@axway.com> wrote:

> Hello,
>
> First, thanks a lot for your answer. :)
>
> In the past, we were using an ant build the project so also to run the JPA
> enhancer but for a company strategy reason we are moving to a maven build
> process.
> And when I did it, we've seen that there is a maven plugin to do the JPA
> enhancer.
> So that's why :)
>
> I just put back the default PersistenceProviderImpl and sadly, I had the
> same result. :(
>
> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>
>
>
> To try to isolate the issue and, tonight, we will just replace the JPA
> version inside the existing project (built with ant) just to validate that
> has really no link with the enhancement.
>
> I will also try to upgrade openJPA version one by one to be sure from which
> the error appears and give additionnal data tomorrow.
>
>
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/Moving-from-OpenJPA-2-0-1-to-2-3-0-fields-not-found-tp7587168p7587176.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>

Re: Moving from OpenJPA 2.0.1 to 2.3.0: fields not found

Posted by Lionel <ls...@axway.com>.
Hello,

First, thanks a lot for your answer. :)

In the past, we were using an ant build the project so also to run the JPA
enhancer but for a company strategy reason we are moving to a maven build
process.
And when I did it, we've seen that there is a maven plugin to do the JPA
enhancer.
So that's why :)

I just put back the default PersistenceProviderImpl and sadly, I had the
same result. :(
	
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
		


To try to isolate the issue and, tonight, we will just replace the JPA
version inside the existing project (built with ant) just to validate that
has really no link with the enhancement.

I will also try to upgrade openJPA version one by one to be sure from which
the error appears and give additionnal data tomorrow.



--
View this message in context: http://openjpa.208410.n2.nabble.com/Moving-from-OpenJPA-2-0-1-to-2-3-0-fields-not-found-tp7587168p7587176.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: Moving from OpenJPA 2.0.1 to 2.3.0: fields not found

Posted by Kevin Sutter <kw...@gmail.com>.
Lionel,
Nothing is jumping out at me, but I do have a couple of observations and
questions...

>  I had a working project using OpenJPA 2.0.1
>  We had to change the project to a maven build so we are now enhancing the
>  classes this way:

How did you perform entity enhancement in 2.0.1?  Why did moving to Maven
require a change in the method of entity enhancement?

>
<provider>com.axway.passport.persistence.providers.jpa.PassportPersistenceProvider</provider>

What is this?  You must be extending OpenJPA in some manner...  Have you
tried specifying the OpenJPA provider or just removing this element?

Maybe the answers to these questions will shed more light for me or others
to help with this question.

Kevin



On Fri, Oct 3, 2014 at 3:52 AM, Lionel <ls...@axway.com> wrote:

> Hello,
>
> I had a working project using OpenJPA 2.0.1
> We had to change the project to a maven build so we are now enhancing the
> classes this way:
>             <plugin>
>                 <groupId>org.apache.openjpa</groupId>
>                 <artifactId>openjpa-maven-plugin</artifactId>
>                 <version>2.3.0</version>
>                 <configuration>
>
>
> <persistenceXmlFile>${project.basedir}/src/main/configuration/META-INF/persistence.xml</persistenceXmlFile>
>                     <addDefaultConstructor>true</addDefaultConstructor>
>
> <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
>                 </configuration>
>                 <executions>
>                     <execution>
>                         <id>enhancer</id>
>                         <phase>process-classes</phase>
>                         <goals>
>                             <goal>enhance</goal>
>                         </goals>
>                     </execution>
>                 </executions>
>                 <dependencies>
>                     <dependency>
>                         <groupId>org.apache.openjpa</groupId>
>                         <artifactId>openjpa</artifactId>
>                         <version>2.3.0</version>
>                     </dependency>
>                 </dependencies>
>             </plugin>
>
> The problem occurs at runtime during the commit for classes that have
> inheritance:
> <openjpa-2.3.0-r422266:1540826 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:2370)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2207)
>         at
> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2105)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1876)
>         at
> org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:973)
>         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:853)
>         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
>         at
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
>         at
> org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:275)
>         at
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:291)
>         at
>
> com.axway.passport.schema.AbstractObject.getByPrimaryKey(AbstractObject.java:323)
>         at
>
> com.axway.passport.schema.common.Organization.getOrganization(Organization.java:715)
>         at
>
> com.axway.passport.upgrade.am.DataInitializer.createDefaultOrganizations(DataInitializer.java:138)
>         at
>
> com.axway.passport.upgrade.am.DataInitializer.execute(DataInitializer.java:334)
>         at
>
> com.axway.passport.persistence.upgrade.DataInitExecuter.executeInit(DataInitExecuter.java:80)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.initData(SchemaInstaller.java:205)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:101)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:71)
>         at
>
> com.axway.passport.service.PassportStartupThread.startCoreServices(PassportStartupThread.java:124)
>         at
>
> com.axway.passport.service.PassportStartupThread.primRun(PassportStartupThread.java:84)
>         at com.axway.passport.util.EventedThread.run(EventedThread.java:66)
> Caused by: <openjpa-2.3.0-r422266:1540826 fatal user error>
> org.apache.openjpa.persistence.ArgumentException:
> "com.axway.passport.schema.pki.Entity.certificateAliases" declared that it
> is mapped by "parent", but that is a not a field of the related type.
>         at
>
> org.apache.openjpa.meta.FieldMetaData.getMappedByMetaData(FieldMetaData.java:867)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.getMapField(RelationFieldStrategy.java:341)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.setMapKey(RelationFieldStrategy.java:304)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.insert(RelationFieldStrategy.java:294)
>         at
> org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:623)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:238)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:165)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:96)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:77)
>         at
>
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
>         at
>
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>         at
>
> org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:661)
>         at
>
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>         ... 20 more
> NestedThrowables:
> <openjpa-2.3.0-r422266:1540826 fatal user error>
> org.apache.openjpa.persistence.ArgumentException:
> "com.axway.passport.schema.common.Domain.caServices" declared that it is
> mapped by "domains", but that is a not a field of the related type.
>         at
>
> org.apache.openjpa.meta.FieldMetaData.getMappedByMetaData(FieldMetaData.java:867)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.getMapField(RelationFieldStrategy.java:341)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.setMapKey(RelationFieldStrategy.java:304)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.insert(RelationFieldStrategy.java:294)
>         at
> org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:623)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:238)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:165)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:96)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:77)
>         at
>
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
>         at
>
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>         at
>
> org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:661)
>         at
>
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2207)
>         at
> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2105)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1876)
>         at
> org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:973)
>         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:853)
>         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
>         at
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
>         at
> org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:275)
>         at
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:291)
>         at
>
> com.axway.passport.schema.AbstractObject.getByPrimaryKey(AbstractObject.java:323)
>         at
>
> com.axway.passport.schema.common.Organization.getOrganization(Organization.java:715)
>         at
>
> com.axway.passport.upgrade.am.DataInitializer.createDefaultOrganizations(DataInitializer.java:138)
>         at
>
> com.axway.passport.upgrade.am.DataInitializer.execute(DataInitializer.java:334)
>         at
>
> com.axway.passport.persistence.upgrade.DataInitExecuter.executeInit(DataInitExecuter.java:80)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.initData(SchemaInstaller.java:205)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:101)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:71)
>         at
>
> com.axway.passport.service.PassportStartupThread.startCoreServices(PassportStartupThread.java:124)
>         at
>
> com.axway.passport.service.PassportStartupThread.primRun(PassportStartupThread.java:84)
>         at com.axway.passport.util.EventedThread.run(EventedThread.java:66)
> <openjpa-2.3.0-r422266:1540826 fatal user error>
> org.apache.openjpa.persistence.ArgumentException:
> "com.axway.passport.schema.common.Domain.caServices" declared that it is
> mapped by "domains", but that is a not a field of the related type.
>         at
>
> org.apache.openjpa.meta.FieldMetaData.getMappedByMetaData(FieldMetaData.java:867)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.getMapField(RelationFieldStrategy.java:341)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.setMapKey(RelationFieldStrategy.java:304)
>         at
>
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.insert(RelationFieldStrategy.java:294)
>         at
> org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:623)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:238)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:165)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:96)
>         at
>
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:77)
>         at
>
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
>         at
>
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>         at
>
> org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:661)
>         at
>
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2207)
>         at
> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2105)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1876)
>         at
> org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:973)
>         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:853)
>         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
>         at
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
>         at
> org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:275)
>         at
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:291)
>         at
>
> com.axway.passport.schema.AbstractObject.getByPrimaryKey(AbstractObject.java:323)
>         at
>
> com.axway.passport.schema.common.Organization.getOrganization(Organization.java:715)
>         at
>
> com.axway.passport.upgrade.am.DataInitializer.createDefaultOrganizations(DataInitializer.java:138)
>         at
>
> com.axway.passport.upgrade.am.DataInitializer.execute(DataInitializer.java:334)
>         at
>
> com.axway.passport.persistence.upgrade.DataInitExecuter.executeInit(DataInitExecuter.java:80)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.initData(SchemaInstaller.java:205)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:101)
>         at
>
> com.axway.passport.persistence.upgrade.SchemaInstaller.installSchema(SchemaInstaller.java:71)
>         at
>
> com.axway.passport.service.PassportStartupThread.startCoreServices(PassportStartupThread.java:124)
>         at
>
> com.axway.passport.service.PassportStartupThread.primRun(PassportStartupThread.java:84)
>         at com.axway.passport.util.EventedThread.run(EventedThread.java:66)
>
>
>
>
> And here is the classes and mapping that we have:
> 1) for the nested throwable
> @MappedSuperclass
> public abstract class AbstractObject implements IAbstractObject,
> IProvisioningObject
> {
>     @Column(name = SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)
>     @Id
>     @GeneratedValue
>     private long id;
>     public static final String _idFieldName = "id";
> ...
> }
>
> @MappedSuperclass
> public abstract class ExtendedAbstractObject extends AbstractObject
> implements IExtendedAbstractObject
> {
> ...
> }
>
> @Table(name = SchemaConstants.DOMAIN_TABLE)
> public class Domain extends ExtendedAbstractObject implements
> IAbstractObject, Comparable<Domain>
> {
>     @ManyToMany(mappedBy = CAService._domainFieldName, fetch =
> FetchType.LAZY, cascade = {CascadeType.REFRESH}, targetEntity =
> CAService.class)
>     private Collection<CAService> caServices = new ArrayList<CAService>();
> ...
> }
>
> @javax.persistence.Entity
> @Table(name = SchemaConstants.CASERVICE_TABLE)
> public class CAService extends AbstractObject implements
> Comparable<CAService>, CertificateVersionContainer
> {
>     @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE,
> CascadeType.REFRESH})
>     @JoinTable(name = SchemaConstants.CASERVICE_DOMAIN_JOIN_TABLE,
>                      joinColumns = {@JoinColumn(name =
> SchemaConstants.CASERVICE_DOMAIN_INVERSE_JOIN_COLUMN, referencedColumnName
> =
> SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)},
>             inverseJoinColumns = {@JoinColumn(name =
> SchemaConstants.CASERVICE_DOMAIN_JOIN_COLUMN, referencedColumnName =
> SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)})
>     private Collection<Domain> domains = new ArrayList<Domain>();
>     public static final String _domainFieldName = "domains";
> ...
> }
>
> 2) for the exception itself:
> @javax.persistence.Entity
> @Table(name = ENTITY_TABLE)
> public class Entity extends AbstractObject implements Comparable<Entity>,
> PublicKeyContainer
> {
>     @OneToMany(targetEntity =
> CertificateAlias.EntityCertificateAlias.class,
> mappedBy = CertificateAlias.EntityCertificateAlias._entityFieldName, fetch
> =
> FetchType.LAZY, cascade = {CascadeType.ALL})
>     @ElementDependent
>     private Collection<CertificateAlias> certificateAliases = new
> ArrayList<CertificateAlias>();
>     public static final String _certAliasListFieldName =
> "certificateAliases";
>     ...
> }
>
> @javax.persistence.Entity
> @Table(name = CERTALIAS_TABLE)
> @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
> @DiscriminatorColumn(name =
>
> com.axway.passport.schema.pki.SchemaConstants.CERTALIAS_DISCRIMINATOR_COLUMN,
> discriminatorType = DiscriminatorType.STRING)
> public abstract class CertificateAlias extends AbstractObject implements
> Comparable<CertificateAlias>, CertificateVersionContainer
> {
>
>     @javax.persistence.Entity
>
>
> @DiscriminatorValue(com.axway.passport.schema.pki.SchemaConstants.DISCRIMINATOR_ENTITY)
>     public static class EntityCertificateAlias extends CertificateAlias
>     {
>         @ManyToOne(fetch = FetchType.EAGER, cascade =
> {CascadeType.REFRESH})
>         @JoinColumn(name = CERTALIAS_PARENT_JOIN_COLUMN,
> referencedColumnName =
> com.axway.passport.schema.common.SchemaConstants.ABSTRACTOBJECT_OID_COLUMN)
>         private Entity parent;
>         public static final String _entityFieldName = "parent";
>         ...
>     }
>     ...
> }
>
>
> And finally the persistence.xml (don't know if this is important or not...)
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
>         <persistence-unit name="passport">
>
>
>
> <provider>com.axway.passport.persistence.providers.jpa.PassportPersistenceProvider</provider>
>
>
>                 <class>com.axway.passport.schema.AbstractObject</class>
>
> <class>com.axway.passport.schema.common.ExtendedAbstractObject</class>
>         <class>com.axway.passport.schema.common.Domain</class>
>         <class>com.axway.passport.schema.pki.Entity</class>
>         <class>com.axway.passport.schema.pki.CertificateAlias</class>
>
>
> <class>com.axway.passport.schema.pki.CertificateAlias$EntityCertificateAlias</class>
>         <class>com.axway.passport.schema.pki.CAService</class>
>         </persistence-unit>
> </persistence>
>
>
> As I found on some thread this advice, I can confirm that we have no method
> "final" (getter or setter).
>
> I didn't manage to figure out why when classes are read the first time, the
> fields are well found but second time during the commit, something goes
> wrong and they are not in the map.
> Does anyone has an idea that could help us?
> Maybe more data are needed... You can also contact me directly by email if
> needed.
> Thanks a lot in advance for you help.
>
> Just to let you know, I also run the test to just replace the openjpa lib
> on
> a working running environment and I had the same issue (so it's probably
> not
> link to the way we enhance the classes)
>
> Lionel.
>
>
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/Moving-from-OpenJPA-2-0-1-to-2-3-0-fields-not-found-tp7587168.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>