Use this project instead:  http://filebin.ca/dwjkxk/DavidLeangen.zip

On Fri, Mar 27, 2009 at 10:59 AM, Kevin Sutter <kwsut...@gmail.com> wrote:

> Okay, I couldn't resist...  I tried your source code and it worked for
> me...  I did not use the maven plugin for building since I have maven 2.0.8
> and it seems to require 2.0.6.  It also looks like you have a special
> version of the plugin...  Anyway, I skipped the maven plugin.
>
> I created a simple Eclipse project with your Person and Persister classes.
> I also created a PersonTest main test class.  I'm using openjpa 1.2.0.  I'm
> using Postgres, like you have.
>
> I also modified your test slightly so that I wouldn't hit duplicate key.
>
> I ran it with both pre-enhancing the Person entity and by using the
> -javaagent option.  Both of them worked.
>
> BTW, I found out that our sub-classing support will not even kick in if you
> are using "final" types, so you're safe from that perspective.  You must be
> enhancing somehow or else you would be getting an error message from the
> sub-classing support.
>
> I posted my project here:  http://filebin.ca/zuquzp/DavidLeangen.zip
>
> You have the next move...  :-)
> Kevin
>
>
>
> On Fri, Mar 27, 2009 at 9:42 AM, Kevin Sutter <kwsut...@gmail.com> wrote:
>
>> Hi David,
>> Thanks for the additional information.  A couple of things to comment
>> on...
>>
>> For some reason, you are getting different exception text than the first
>> one you posted.  This exception text actually points back to your Person
>> entity, so that's good:
>>
>> <openjpa-1.2.0-r422266:683325 fatal user error>
>> org.apache.openjpa.persistence.ArgumentException: No table was given for
>> persistent type "net.leangen.expedition.openjpa.internal.Person".
>>
>> Since we seem to be tripping over the tables, is there any chance that
>> this problem is related to the other problem you've posted about the Schema
>> Tool not generating the tables as expected?  From your configuration and the
>> call stack, it looks like you are using the SynchronizeMappings property to
>> help create the tables.
>>
>> I see that you have the <enhancer> element specific in your pom.xml.  Have
>> you ensured that your entities are getting enhanced, either statically at
>> build time or dynamically via a javaagent?  The property
>> openjpa.RuntimeUnenhancedClasses set to "warn" or "unsupported" would help
>> isolate this situation.
>>
>> It looks like our metadata repository is not getting populated correctly
>> for this Person entity before we attempt to create the tables.  I'm not
>> seeing anything in what you have provided that jumps out at me as being a
>> problem.
>>
>> It sounds like you've tried stepping through the code.  What about TRACE?
>> Sometimes, the Trace output indicates an earlier condition that is now
>> affecting the current condition.
>>
>> If none of this helps isolate the problem, then we might have to actually
>> try to reproduce it...  :-)  Like I said, I don't see anything unique with
>> your setup.  Pretty vanilla.
>>
>> Kevin
>>
>>
>> On Thu, Mar 26, 2009 at 8:24 PM, David Leangen <k...@leangen.net> wrote:
>>
>>>
>>> Thank you, Kevin.
>>>
>>>
>>> On Thu, 2009-03-26 at 09:01 -0500, Kevin Sutter wrote:
>>> > Hi David,
>>> > I think we'll need a bit more information.
>>>
>>> Ok, no problem.
>>>
>>> I kept fiddling, but still no luck. I noticed that when stepping through
>>> the code, even with the @Table annotation, for some reason value for
>>> "given" is null.
>>>
>>> Anyway, here goes:
>>>
>>> Entity
>>> _______________________________________________
>>> package net.leangen.expedition.openjpa.internal;
>>>
>>> import javax.persistence.*;
>>>
>>> @Entity
>>> @Table( name="person" )
>>> public final class Person
>>> {
>>>    private static final long serialVersionUID = 1L;
>>>
>>>    private String sin;
>>>    private String name;
>>>
>>>    public Person(){}
>>>
>>>    public Person( String aSin, String aName )
>>>    {
>>>        sin = aSin;
>>>        name = aName;
>>>    }
>>>
>>>    @Id
>>>    public String getSin()
>>>    {
>>>        return sin;
>>>    }
>>>
>>>    public void setSin( String sin )
>>>    {
>>>        this.sin = sin;
>>>    }
>>>
>>>    @Basic
>>>    public String getName()
>>>    {
>>>        return name;
>>>    }
>>>
>>>    public void setName( String name )
>>>    {
>>>        this.name = name;
>>>    }
>>>
>>>    @Override
>>>    public String toString()
>>>    {
>>>        return getName();
>>>    }
>>>
>>>    @Override
>>>    public boolean equals( Object o )
>>>    {
>>>        if( this == o )
>>>            return true;
>>>
>>>        if( !( o instanceof Person ) )
>>>            return false;
>>>
>>>        final Person that = (Person)o;
>>>        return this.getSin().equals( that.getSin() );
>>>    }
>>>
>>>    @Override
>>>    public int hashCode()
>>>    {
>>>        return 17*getSin().hashCode();
>>>    }
>>> }
>>>
>>> persistence.xml (edited)
>>> _______________________________________________
>>> <?xml version="1.0"?>
>>> <persistence xmlns="http://java.sun.com/xml/ns/persistence";
>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>    version="1.0">
>>>  <persistence-unit name="openjpa">
>>>
>>>
>>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>>    <class>net.leangen.expedition.openjpa.internal.Person</class>
>>>    <properties>
>>>      <property name="openjpa.ConnectionURL"
>>> value="jdbc:postgresql://xxxxx/xxxxx"/>
>>>      <property name="openjpa.ConnectionDriverName"
>>> value="org.postgresql.Driver"/>
>>>      <property name="openjpa.ConnectionUserName" value="xxxxx"/>
>>>      <property name="openjpa.ConnectionPassword" value="xxxxx"/>
>>>      <property name="openjpa.Log" value="DefaultLevel=WARN,
>>> Tool=INFO"/>
>>>      <property name="openjpa.jdbc.SynchronizeMappings"
>>> value="buildSchema(ForeignKeys=true)"/>
>>>    </properties>
>>>  </persistence-unit>
>>> </persistence>
>>>
>>> "main" code
>>> _______________________________________________
>>>        final EntityManagerFactory entityManagerFactory =
>>> Persistence.createEntityManagerFactory( "openjpa" );
>>>
>>>        final Persister persister = new
>>> Persister( entityManagerFactory );
>>>        final Person person = new Person( "12345", "David Leangen" );
>>>        persister.createPerson( person );
>>>        final Collection<Person> people = persister.getAllPeople();
>>>        System.out.println("List of all people in db: ");
>>>        for( final Person nextDude: people )
>>>        {
>>>            System.out.println( nextDude.getName() );
>>>        }
>>>
>>>
>>> Thread.currentThread().setContextClassLoader( currentClassLoader );
>>>
>>>
>>> Persister code
>>> _______________________________________________
>>> package net.leangen.expedition.openjpa.internal;
>>>
>>> import java.util.*;
>>> import javax.persistence.*;
>>>
>>> public class Persister
>>> {
>>>        private final EntityManagerFactory entityManagerFactory;
>>>
>>>        public Persister( EntityManagerFactory anEntityManagerFactory )
>>>        {
>>>            entityManagerFactory = anEntityManagerFactory;
>>>        }
>>>
>>>        @SuppressWarnings("unchecked")
>>>    public Collection<Person> getAllPeople()
>>>        {
>>>            final EntityManager entityManager =
>>> entityManagerFactory.createEntityManager();
>>>                final EntityTransaction transaction =
>>> entityManager.getTransaction();
>>>                try
>>>                {
>>>                        transaction.begin();
>>>                        final List<Person> resultList =
>>> entityManager.createQuery( "select p
>>> from Persona p" ).getResultList();
>>>                        return resultList;
>>>                }
>>>                finally
>>>                {
>>>                        transaction.commit();
>>>                        entityManager.close();
>>>                }
>>>        }
>>>
>>>        public void createPerson( Person person )
>>>        {
>>>                final EntityManager entityManager =
>>> entityManagerFactory.createEntityManager();
>>>                final EntityTransaction transaction =
>>> entityManager.getTransaction();
>>>                try
>>>                {
>>>                        transaction.begin();
>>>                        entityManager.persist( person );
>>>                }
>>>                finally
>>>                {
>>>                        transaction.commit();
>>>                        entityManager.close();
>>>                }
>>>        }
>>> }
>>>
>>>
>>> pom.xml
>>> _______________________________________________
>>> <project>
>>>  ...
>>>
>>>  <build>
>>>    <plugins>
>>>      <plugin>
>>>        <groupId>org.codehaus.mojo</groupId>
>>>        <artifactId>openjpa-maven-plugin</artifactId>
>>>        <!-- use locally patched version for now -->
>>>        <version>1.1-SNAPSHOT</version>
>>>        <configuration>
>>>          <includes>src/main/java/**/*.class</includes>
>>>          <addDefaultConstructor>true</addDefaultConstructor>
>>>
>>> <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
>>>          <schemaAction>add</schemaAction>
>>>          <toolProperties>
>>>            <property>
>>>              <name>addDefaultConstructor</name>
>>>              <value>true</value>
>>>            </property>
>>>            <property>
>>>              <name>enforcePropertyRestrictions</name>
>>>              <value>true</value>
>>>            </property>
>>>            <property>
>>>              <name>properties</name>
>>>              <value>${basedir}/META-INF/persistence.xml</value>
>>>            </property>
>>>          </toolProperties>
>>>        </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>1.2.0</version>
>>>          </dependency>
>>>        </dependencies>
>>>      </plugin>
>>>    </plugins>
>>>  </build>
>>>
>>> </project>
>>>
>>>
>>> Exception
>>> _______________________________________________
>>> <openjpa-1.2.0-r422266:683325 fatal user error>
>>> org.apache.openjpa.persistence.ArgumentException: No table was given for
>>> persistent type "net.leangen.expedition.openjpa.internal.Person".
>>>         at
>>>
>>> org.apache.openjpa.jdbc.meta.MappingInfo.createTable(MappingInfo.java:437)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.ClassMappingInfo.getTable(ClassMappingInfo.java:241)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.ClassMappingInfo.getTable(ClassMappingInfo.java:259)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.strats.FullClassStrategy.map(FullClassStrategy.java:71)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.ClassMapping.setStrategy(ClassMapping.java:377)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:55)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:333)
>>>        at
>>>
>>> org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:662)
>>>        at
>>>
>>> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:549)
>>>        at
>>>
>>> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:308)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.MappingRepository.getMapping(MappingRepository.java:285)
>>>        at
>>> org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java:676)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java:748)
>>>        at
>>> org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:646)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:153)
>>>        at
>>>
>>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:119)
>>>        at
>>>
>>> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:189)
>>>        at
>>>
>>> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>>>        at
>>>
>>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
>>>        at
>>>
>>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
>>>        at
>>>
>>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
>>>        at
>>>
>>> net.leangen.expedition.openjpa.internal.Persister.createPerson(Persister.java:45)
>>>        at
>>>
>>> net.leangen.expedition.openjpa.internal.Activator.start(Activator.java:58)
>>>        at org.eclipse.osgi.framework.internal.core.BundleContextImpl
>>> $2.run(BundleContextImpl.java:1009)
>>>        at java.security.AccessController.doPrivileged(Native Method)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:1003)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:984)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:265)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:257)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:257)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at
>>>
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>        at
>>>
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>        at java.lang.reflect.Method.invoke(Method.java:585)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:150)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:302)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.FrameworkConsole.console(FrameworkConsole.java:287)
>>>        at
>>>
>>> org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:223)
>>>        at java.lang.Thread.run(Thread.java:595)
>>>
>>>
>>
>

Reply via email to