If you take a look at jndi.properties from my first email on this topic,
you'll notice that I'm using in memory hsqldb for tests.
I've added non-jta data source just to try if it will change anything in
regard to failing tests. Only jta datasource is used in actual deployment,
Oracle, which can be seen also from my first email on the topic, in
persistence.xml. Hibernate is persistence provider, provided by JBoss AS
7.1.1. So OpenEJB+OpenJPA+HSQLDB for tests, JBoss+Hibernate+Oracle in
actual runtime.
One passing test also fails for same reason when using eager schema
initialization - when lazily initializing schema, test probably isn't
actually using db so it passes.
Wanted to debug what's going on openejb when schema is about to be created,
which connection is it trying to use.
Since [4] is thrown, tried to put break point in MappingTool.record:505,
but found out openjpa-asm-shaded-2.2.0-sources.jar is rather slim, just one
class in there.
I wonder what's in the openjpa-asm-shaded-2.2.0 patch, and if it would be
safe to exclude it and replace it with plain openjpa 2.2.0 dependency.
Kind regards,
Stevo Slavić.
[4] exception stacktrace
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: user lacks
privilege or object not found: PUBLIC.ENTITY2 {stmnt 853296383 ALTER TABLE
ENTITY2 ADD COLUMN ID NUMERIC} [code=-5501, state=42501]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:247)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:231)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:72)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingStatement.executeUpdate(LoggingConnectionDecorator.java:942)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at
org.apache.openjpa.lib.jdbc.DelegatingStatement.executeUpdate(DelegatingStatement.java:114)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.schema.SchemaTool.executeSQL(SchemaTool.java:1224)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.schema.SchemaTool.addColumn(SchemaTool.java:1057)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java:506)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java:366)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:343)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
at
org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:505)
~[openjpa-asm-shaded-2.2.0.jar:2.2.0]
... 19 common frames omitted
On Wed, Jun 27, 2012 at 2:11 PM, Romain Manni-Bucau
<[email protected]>wrote:
> yep just a kind of template don't worry
>
> does the jta and non jta datasource use the same real database?
>
> - Romain
>
>
> 2012/6/27 Stevo Slavić <[email protected]>
>
> > Tried.
> >
> > 13:22:58.892 [main] INFO OpenEJB.startup.config - Configuring
> > PersistenceUnit(name=a_foo)
> > 13:22:58.893 [main] INFO OpenEJB.startup.config - Auto-creating a
> Resource
> > with id 'jdbc/acme_fooNonJta' of type 'DataSource for 'a_foo'.
> > 13:22:58.893 [main] INFO OpenEJB.startup.config - Configuring
> > Service(id=jdbc/acme_fooNonJta, type=Resource, provider-id=jdbc/acme_foo)
> > 13:22:58.893 [main] INFO OpenEJB.startup.config - Adjusting
> > PersistenceUnit a_foo <non-jta-data-source> to Resource ID
> > 'jdbc/acme_fooNonJta' from 'null'
> > 13:22:58.893 [main] INFO OpenEJB.startup.config - Configuring
> > PersistenceUnit(name=a_bar)
> > 13:22:58.894 [main] INFO OpenEJB.startup.config - Auto-creating a
> Resource
> > with id 'jdbc/acme_barNonJta' of type 'DataSource for 'a_bar'.
> > 13:22:58.894 [main] INFO OpenEJB.startup.config - Configuring
> > Service(id=jdbc/acme_barNonJta, type=Resource, provider-id=jdbc/acme_bar)
> > 13:22:58.894 [main] INFO OpenEJB.startup.config - Adjusting
> > PersistenceUnit a_bar <non-jta-data-source> to Resource ID
> > 'jdbc/acme_barNonJta' from 'null'
> >
> > It seems to have cleaned up wiring persistence unit to data source but
> > tests still fail with same infamous "user lacks privileges..." error. As
> if
> > connection/database is not actually there when schema is about to be
> > created.
> > Persistence unit references only jta data source. I wonder why are only
> > unmanaged non-jta data sources mentioned in openejb logs. And if I
> > understand logs well, only unmanaged sources are created and "wired" to
> > persistence units.
> >
> > It didn't help adding
> > "<non-jta-data-source>jdbc/acme_fooNonJta</non-jta-data-source>" and
> > "<non-jta-data-source>jdbc/acme_barNonJta</non-jta-data-source>" to
> > persistence.xml
> >
> > Logs after adding non-jta-data-source look like
> >
> > 13:58:32.299 [main] INFO OpenEJB.startup.config - Configuring
> > Service(id=jdbc/acme_bar, type=Resource, provider-id=Default JDBC
> Database)
> > 13:58:32.300 [main] INFO OpenEJB.startup.config - Configuring
> > Service(id=jdbc/acme_foo, type=Resource, provider-id=Default JDBC
> Database)
> > ...
> > 13:58:33.408 [main] INFO OpenEJB.startup.config - Configuring
> > PersistenceUnit(name=a_foo)
> > 13:58:33.409 [main] INFO OpenEJB.startup.config - Auto-creating a
> Resource
> > with id 'jdbc/acme_fooNonJta' of type 'DataSource for 'a_foo'.
> > 13:58:33.409 [main] INFO OpenEJB.startup.config - Configuring
> > Service(id=jdbc/acme_fooNonJta, type=Resource, provider-id=jdbc/acme_foo)
> > 13:58:33.409 [main] INFO OpenEJB.startup.config - Configuring
> > PersistenceUnit(name=a_bar)
> > 13:58:33.410 [main] INFO OpenEJB.startup.config - Auto-creating a
> Resource
> > with id 'jdbc/acme_barNonJta' of type 'DataSource for 'a_bar'.
> > 13:58:33.410 [main] INFO OpenEJB.startup.config - Configuring
> > Service(id=jdbc/acme_barNonJta, type=Resource, provider-id=jdbc/acme_bar)
> > ...
> >
> > I don't understand there "provider-id=Default JDBC Database". I guess
> it's
> > some sort of shared parent template datasource/metadata.
> >
> > Kind regards,
> > Stevo Slavić.
> >
> > On Wed, Jun 27, 2012 at 1:20 PM, Romain Manni-Bucau
> > <[email protected]>wrote:
> >
> > > Hi,
> > >
> > > can you try removing java: in persistence.xml?
> > >
> > >
> > > - Romain
> > >
> > >
> > > 2012/6/27 Stevo Slavić <[email protected]>
> > >
> > > > Hello OpenEJB community,
> > > >
> > > > I'm migrating a legacy system to Java EE 6 and JBoss AS 7.1.1
> > > > With the upgrade came "updated" JBoss AS 7.1.1 provided CXF version
> > > > (2.4.6). This broke and revealed all yet rare openejb tests. Then I
> > > > upgraded openejb too, from 3.1.4 to 4.0.0 but not all tests are
> > passing.
> > > > To be more specific there is 1 passing, and 2 failing tests, all in
> > same
> > > > module using shared jndi.properties, persistence.xml, and ejb-jar.xml
> > > > In jndi.properties (see [1]) two data sources are configured for
> > openejb
> > > to
> > > > create.
> > > > In persistence.xml there are two persistence units. Each PU
> references
> > a
> > > > single data source.
> > > >
> > > > Test that passes, has EntityManager instance injected
> > > > (@PersistenceContext(name="a_bar", unitName="a_bar" )) and
> successfully
> > > > executes queries, like select on Entity2.
> > > > Tests that fail, fail late, when createQuery is issued on other
> > injected
> > > > EntityManager instance (@PersistenceContext(name="a_foo",
> > > > unitName="a_foo")) - HSLQDB reports "user lacks privilege or object
> not
> > > > found: PUBLIC.ENTITY2 {stmnt 1836093446 ALTER TABLE ENTITY2 ADD
> COLUMN
> > ID
> > > > NUMERIC} [code=-5501, state=42501]"
> > > >
> > > > There seems to be an issue with schema creation. To fail earlier, I
> > > > uncomment configuring openjpa.InitializeEagerly to true.
> > > >
> > > > Then in openejb log output I noticed openejb is doing some unwanted
> > stuff
> > > > with data sources (see [3]), associating wrong data sources with
> > > > persistence units, and creating non-jta data sources which aren't
> > > > needed/referenced.
> > > >
> > > > It smells to me that some openejb convention is not followed well.
> > Maybe
> > > > it's just HSQLDB configuration (2.2.4 is referenced by openejb, but I
> > > also
> > > > tried with 2.2.8).
> > > >
> > > > I did my "homework", found lots of entries online about "user lacks
> > > > privilege or object not found" and configuring openejb, but neither
> of
> > > them
> > > > helped.
> > > >
> > > > Does anyone see what could be wrong here?
> > > >
> > > > I'd like to preserve persistence.xml as-is, while jndi.properties can
> > be
> > > > changed or even replaced entirely with openejb.xml if needed.
> > > >
> > > > Kind regards,
> > > > Stevo Slavić.
> > > >
> > > >
> > > > [1] jndi.properties
> > > >
> > > >
> > > >
> > >
> >
> java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
> > > > openejb.embedded.remotable=true
> > > > openejb.altdd.prefix=test.
> > > >
> > > > jdbc/acme_foo=new://Resource?type=DataSource
> > > > jdbc/acme_foo.JdbcUrl=jdbc:hsqldb:mem:acme_foo
> > > > jdbc/acme_foo.JdbcDriver=org.hsqldb.jdbcDriver
> > > > jdbc/acme_foo.Username=sa
> > > > jdbc/acme_foo.Password=
> > > > jdbc/acme_foo.JtaManaged=true
> > > >
> > > > jdbc/acme_bar=new://Resource?type=DataSource
> > > > jdbc/acme_bar.JdbcUrl=jdbc:hsqldb:mem:acme_bar
> > > > jdbc/acme_bar.JdbcDriver=org.hsqldb.jdbcDriver
> > > > jdbc/acme_bar.Username=sa
> > > > jdbc/acme_bar.Password=
> > > > jdbc/acme_bar.JtaManaged=true
> > > >
> > > >
> > > > [2] persistence.xml
> > > >
> > > > <?xml version="1.0" encoding="UTF-8"?>
> > > > <persistence version="2.0"
> > > > xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="
> > > > http://www.w3.org/2001/XMLSchema-instance"
> > > > xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> > > > http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
> > > >
> > > > <persistence-unit name="a_foo" transaction-type="JTA">
> > > > <jta-data-source>java:jdbc/acme_foo</jta-data-source>
> > > >
> > > > <class>a.foo.model.Entity1</class>
> > > > <exclude-unlisted-classes>true</exclude-unlisted-classes>
> > > >
> > > > <properties>
> > > > <property name="hibernate.dialect"
> > > > value="org.hibernate.dialect.Oracle10gDialect"/>
> > > > <property name="hibernate.show_sql" value="true"/>
> > > > <property
> name="hibernate.transaction.manager_lookup_class"
> > > >
> > > > value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
> > > >
> > > > <property name="openjpa.jdbc.SynchronizeMappings"
> > > > value="buildSchema(ForeignKeys=true)"/>
> > > > <!--
> > > > <property name="openjpa.InitializeEagerly" value="true"/>
> > > > -->
> > > > </properties>
> > > > </persistence-unit>
> > > >
> > > > <persistence-unit name="a_bar" transaction-type="JTA">
> > > > <jta-data-source>java:jdbc/acme_bar</jta-data-source>
> > > >
> > > > <class>a.bar.model.Entity2</class>
> > > > <exclude-unlisted-classes>true</exclude-unlisted-classes>
> > > >
> > > > <properties>
> > > > <property name="hibernate.dialect"
> > > > value="org.hibernate.dialect.Oracle10gDialect"/>
> > > > <property name="hibernate.show_sql" value="true"/>
> > > > <property
> name="hibernate.transaction.manager_lookup_class"
> > > >
> > > > value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
> > > >
> > > > <property name="openjpa.jdbc.SynchronizeMappings"
> > > > value="buildSchema(ForeignKeys=true)"/>
> > > > <!--
> > > > <property name="openjpa.InitializeEagerly" value="true"/>
> > > > -->
> > > > </properties>
> > > > </persistence-unit>
> > > > </persistence>
> > > >
> > > >
> > > > [3] openejb container startup log fragment
> > > >
> > > > 11:50:07.459 [main] INFO OpenEJB.startup.config - Configuring
> > > > PersistenceUnit(name=a_foo)
> > > > 11:50:07.462 [main] INFO OpenEJB.startup.config - Auto-creating a
> > > Resource
> > > > with id 'jdbc/acme_barNonJta' of type 'DataSource for 'a_foo'.
> > > > 11:50:07.462 [main] INFO OpenEJB.startup.config - Configuring
> > > > Service(id=jdbc/acme_barNonJta, type=Resource,
> > provider-id=jdbc/acme_bar)
> > > > 11:50:07.462 [main] INFO OpenEJB.startup.config - Adjusting
> > > > PersistenceUnit a_foo <jta-data-source> to Resource ID
> 'jdbc/acme_bar'
> > > from
> > > > 'java:jdbc/acme_foo'
> > > > 11:50:07.462 [main] INFO OpenEJB.startup.config - Adjusting
> > > > PersistenceUnit a_foo <non-jta-data-source> to Resource ID
> > > > 'jdbc/acme_barNonJta' from 'null'
> > > > 11:50:07.462 [main] INFO OpenEJB.startup.config - Configuring
> > > > PersistenceUnit(name=a_bar)
> > > > 11:50:07.463 [main] INFO OpenEJB.startup.config - Adjusting
> > > > PersistenceUnit a_bar <jta-data-source> to Resource ID
> 'jdbc/acme_bar'
> > > from
> > > > 'java:jdbc/acme_bar'
> > > > 11:50:07.463 [main] INFO OpenEJB.startup.config - Adjusting
> > > > PersistenceUnit a_bar <non-jta-data-source> to Resource ID
> > > > 'jdbc/acme_barNonJta' from 'null'
> > > >
> > >
> >
>