In a Resource Local Persistence Unit, when I create a second
EntityManagerFactory, I lose the db2 database specific settings that I need
(for ZOS DB2 V8) and which I got with the Entity Managers created from the
first EntityManagerFactory that I created a
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: OPENJPA-276
URL: https://issues.apache.org/jira/browse/OPENJPA-276
Project: OpenJPA
Issue Type: Bug
Environment: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal user error>
Reporter: George Hongell
Fix For: 1.1.0
In a Resource Local Persistence Unit, when I create a second
EntityManagerFactory, I lose the db2 database specific settings that I need
(for ZOS DB2 V8) and which I got with the Entity Managers created from the
first EntityManagerFactory that I created and now I get the default db2
properties.
NOTE that this only happens when I use the openjpa specific connection
properties. When I use openjpa.ConnectionProperties with dbcp, it does not
happen, I always get the correct properties.
NOTE that this casting behavour also happens with join columns.
In the following test case, the first EntityManagerFactory and EntityManager is
created in setUp(). In testSQLQuery(), the same EntityManagerFactory is used
to create a new EntityManager and the casting behavior of the int literal in
the generated sql is correct (DECIMAL 31,0).
1640 mdd TRACE [main] openjpa.jdbc.SQL - <t 1094861122, conn 569516530>
executing prepstmnt 489168168 SELECT t0.id, t0.age, t0.firstName, t0.lastName
FROM jpaquer.XYZ t0 WHERE (CAST(t0.age AS DECIMAL(31,0)) = CAST(? AS
DECIMAL(31,0))) optimize for 1 row [params=(long) 20]
In testSQLQuery2(), a new EntityManagerFactory is used to create a new
EntityManager and the casting behavior of the int literal in the generated sql
is incorrect (BIGINT) which fails because the database does not support the
bigint type.
<1.0.0-SNAPSHOT-SNAPSHOT nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: DB2 SQL error: SQLCODE: -204,
SQLSTATE: 42704, SQLERRMC: BIGINT {prepstmnt 325325668 SELECT t0.id, t0.age,
t0.firstName, t0.lastName FROM jpaquer.XYZ t0 WHERE (CAST(t0.age AS BIGINT) =
CAST(? AS BIGINT)) optimize for 1 row [params=(long) 20]} [code=-204,
state=42704]
<?xml version="1.0"?>
<persistence 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_1_0.xsd"
version="1.0">
<persistence-unit name="mdd" transaction-type="RESOURCE_LOCAL">
<class>com.ibm.ws.query.entities.annotated.Person</class>
<properties>
<!--
<property name="openjpa.ConnectionDriverName"
value="org.apache.commons.dbcp.BasicDataSource" />
<property name="openjpa.ConnectionProperties"
value="DriverClassName=com.ibm.db2.jcc.DB2Driver,Url=jdbc:db2://localhost:50000/myzdb28,Username=hongell,Password=hts24las"
/>
-->
<property name="openjpa.ConnectionDriverName"
value="com.ibm.db2.jcc.DB2Driver"/>
<property name="openjpa.ConnectionURL"
value="jdbc:db2://localhost:50000/MYZDB28"/>
<property name="openjpa.ConnectionUserName" value="hongell"/>
<property name="openjpa.ConnectionPassword" value="las25tgl"/>
<!--SynchronizeMappings must be turned off for zdb28 - currently no stored proc
SQLCOLUMNS, SQLFOREIGNKEYS -->
<!--
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)" />
-->
<property name="openjpa.Log"
value="Enhance=TRACE,Query=TRACE,SQL=TRACE" />
</properties>
</persistence-unit>
</persistence>
<1.0.0-SNAPSHOT-SNAPSHOT nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: DB2 SQL error: SQLCODE: -204,
SQLSTATE: 42704, SQLERRMC: BIGINT {prepstmnt 325325668 SELECT t0.id, t0.age,
t0.firstName, t0.lastName FROM jpaquer.XYZ t0 WHERE (CAST(t0.age AS BIGINT) =
CAST(? AS BIGINT)) optimize for 1 row [params=(long) 20]} [code=-204,
state=42704]
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:805)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:766)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:762)
at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:517)
at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:230)
at
org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:292)
at
com.ibm.ws.query.tests.JUEntityManagerFactoryTest.testSQLQuery2(JUEntityManagerFactoryTest.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at
org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: DB2 SQL error:
SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: BIGINT {prepstmnt 325325668 SELECT
t0.id, t0.age, t0.firstName, t0.lastName FROM jpaquer.XYZ t0 WHERE (CAST(t0.age
AS BIGINT) = CAST(? AS BIGINT)) optimize for 1 row [params=(long) 20]}
[code=-204, state=42704]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:191)
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:56)
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:843)
at
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1372)
at
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:252)
at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:368)
at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:326)
at
org.apache.openjpa.jdbc.sql.LogicalUnion$UnionSelect.execute(LogicalUnion.java:407)
at
org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:218)
at
org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:208)
at
org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.open(SelectResultObjectProvider.java:94)
at org.apache.openjpa.kernel.QueryImpl.singleResult(QueryImpl.java:1275)
at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1212)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:987)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:796)
... 25 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.