openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pinaki Poddar <ppod...@apache.org>
Subject Re: [jira] Commented: (OPENJPA-260) Using FetchType.EAGER on OneToMany using jta data source causes result set is closed (DB2)
Date Mon, 07 Jul 2008 15:47:13 GMT

> So the method will be executed in a transaction. 
Yes. I am guessing from the reported symptoms that customer.getAddresses()
has been invoked *after* the persistence context has gone out of scope.
However, with eager fetching, OpenJPA should have fetched list of Address
with the Customer instance before the control being returned to the caller.  




JIRA jira@apache.org wrote:
> 
> 
>     [
> https://issues.apache.org/jira/browse/OPENJPA-260?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12611204#action_12611204
> ] 
> 
> Bogdan Stroe commented on OPENJPA-260:
> --------------------------------------
> 
> The work-around we found for the time being is to remove the annotation:
> @TransactionAttribute(value=TransactionAttributeType.NOT_SUPPORTED) from
> the method calling the DAO that leads to this error.
> So the method will be executed in a transaction.
> We are using WebSphere 6.1.0 with DB2 XA Driver.
> If I execute the same code out of container (in unit tests) it works fine.
> 
>> Using FetchType.EAGER on OneToMany using jta data source causes result
>> set is closed (DB2)
>> ------------------------------------------------------------------------------------------
>>
>>                 Key: OPENJPA-260
>>                 URL: https://issues.apache.org/jira/browse/OPENJPA-260
>>             Project: OpenJPA
>>          Issue Type: Bug
>>          Components: jpa
>>    Affects Versions: 0.9.7
>>         Environment: WebSphere Platform 6.1 [BASE 6.1.0.7 cf70711.17]
>> [WEBSERVICES 6.1.0.7 u0712.14] 
>> Host Operating System is Windows XP, version 5.1 build 2600 Service Pack
>> 2
>> Java version = J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32
>> j9vmwi3223ifx-20070323 (JIT enabled)
>> J9VM - 20070322_12058_lHdSMR
>> JIT  - 20070109_1805ifx3_r8
>> GC   - WASIFIX_2007, Java Compiler = j9jit23, Java VM name = IBM J9 VM
>>            Reporter: Justin Kilimnik
>>            Priority: Minor
>>         Attachments: log.txt
>>
>>
>> When adding "fetch=FetchType.EAGER" to a OneToMany field on an entity, I
>> get a org.apache.openjpa.persistence.PersistenceException:
>> [ibm][db2][jcc][10120][10898] Invalid operation: result set is closed.
>> exception. This is on a persistence unit that is configured to use JTA
>> Data Source (see config below) (running on WebSphere 6.1.0.7 with DB2 XA
>> Driver). This works when using RESOURCE_LOCAL transaction-type (direct to
>> DB2). The code also works if I remove the "fetch=FetchType.EAGER",
>> therefore I presume there is a bug with the handling of managed
>> transactions with EAGER fetching.
>> The work around was to add the eager fetching to the query (i.e. "join
>> fetch x.addresses") but I would think that this should work and might
>> need looking in.
>> persistence.xml:
>> 	<persistence-unit name="crs" transaction-type="JTA">
>> 	
>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>> 		<jta-data-source>java:comp/env/jdbc/crsDS</jta-data-source>
>> 		
>> 		<class>crs.bus.entity.Customer</class>
>>   		<class>crs.bus.entity.Address</class>
>> 		<class>crs.bus.entity.CustomerAddress</class>
>> 				
>> 		<properties>
>>  			<property name="openjpa.TransactionMode" value="managed" />
>> 			<property name="openjpa.ConnectionFactoryMode" value="managed" />
>> 			<property name="openjpa.jdbc.DBDictionary" value="db2" />
>> 		</properties>
>> Entity:
>> @Entity
>> @Table(name="Customer",
>> uniqueConstraints={@UniqueConstraint(columnNames="id")})
>> public class Customer implements Serializable  {
>> 	/** .*/
>> 	private static final long serialVersionUID = 4011736633726247664L;
>> 	@Id
>> 	@GeneratedValue(strategy=GenerationType.IDENTITY)
>> 	private long id;
>> 	@Basic
>> 	private String name;
>> 	@OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
>> 	private List<CustomerAddress> addresses;
>>     @Basic
>>     private Date created = new Date();	
>> ....
>> }
>> Exception:
>> Caused by: <0.9.7-incubating nonfatal general error>
>> org.apache.openjpa.persistence.PersistenceException:
>> [ibm][db2][jcc][10120][10898] Invalid operation: result set is closed.
>> 	at
>> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3784)
>> 	at
>> org.apache.openjpa.jdbc.sql.DB2Dictionary.newStoreException(DB2Dictionary.java:373)
>> 	at
>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
>> 	at
>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:83)
>> 	at
>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:59)
>> 	at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:260)
>> 	at
>> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
>> 	at
>> org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
>> 	at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:876)
>> 	at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:834)
>> 	at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:756)
>> 	at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:776)
>> 	at
>> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:257)
>> 	at
>> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2152)
>> 	at
>> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:251)
>> 	at
>> org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:59)
>> 	at
>> org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
>> 	at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1219)
>> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:987)
>> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:796)
>> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:766)
>> 	at
>> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:533)
>> 	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:227)
>> 	at
>> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:269)
>> 	at
>> crs.bus.impl.query.EntityQueries.queryFromPersonName(EntityQueries.java:18)
>> 	at
>> crs.bus.impl.CustomerQueryBean.findByPersonName(CustomerQueryBean.java:39)
>> 	at
>> crs.bus.proxies.CustomerQueryProxy.findByPersonName(CustomerQueryProxy.java:15)
>> 	at
>> crs.service.servant.CustomerQueryServant.findByPersonName(CustomerQueryServant.java:26)
>> 	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
>> com.ibm.ws.webservices.engine.dispatchers.java.JavaDispatcher.invokeMethod(JavaDispatcher.java:178)
>> 	at
>> com.ibm.ws.webservices.engine.dispatchers.java.JavaDispatcher.invokeOperation(JavaDispatcher.java:141)
>> 	at
>> com.ibm.ws.webservices.engine.dispatchers.SoapRPCProcessor.processRequestResponse(SoapRPCProcessor.java:448)
>> 	at
>> com.ibm.ws.webservices.engine.dispatchers.SoapRPCProcessor.processMessage(SoapRPCProcessor.java:413)
>> 	at
>> com.ibm.ws.webservices.engine.dispatchers.BasicDispatcher.processMessage(BasicDispatcher.java:134)
>> 	at
>> com.ibm.ws.webservices.engine.dispatchers.java.SessionDispatcher.invoke(SessionDispatcher.java:204)
>> 	... 31 more
>> Caused by: com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10120][10898]
>> Invalid operation: result set is closed.
>> 	at com.ibm.db2.jcc.c.wf.mb(wf.java:3193)
>> 	at com.ibm.db2.jcc.c.wf.j(wf.java:3164)
>> 	at com.ibm.db2.jcc.c.wf.getTimestamp(wf.java:750)
>> 	at
>> com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getTimestamp(WSJdbcResultSet.java:1994)
>> 	at
>> org.apache.openjpa.lib.jdbc.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:166)
>> 	at
>> org.apache.openjpa.jdbc.sql.DBDictionary.getTimestamp(DBDictionary.java:727)
>> 	at
>> org.apache.openjpa.jdbc.sql.DBDictionary.getDate(DBDictionary.java:594)
>> 	at
>> org.apache.openjpa.jdbc.sql.ResultSetResult.getDateInternal(ResultSetResult.java:303)
>> 	at
>> org.apache.openjpa.jdbc.sql.ResultSetResult.getObjectInternal(ResultSetResult.java:384)
>> 	at
>> org.apache.openjpa.jdbc.sql.AbstractResult.getObject(AbstractResult.java:662)
>> 	at
>> org.apache.openjpa.jdbc.meta.strats.HandlerStrategies.loadDataStore(HandlerStrategies.java:205)
>> 	at
>> org.apache.openjpa.jdbc.meta.strats.HandlerFieldStrategy.load(HandlerFieldStrategy.java:172)
>> 	at org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:788)
>> 	at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:833)
>> 	at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:785)
>> 	at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:336)
>> 	at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:255)
>> 	... 63 more
> 
> -- 
> This message is automatically generated by JIRA.
> -
> You can reply to this email to add a comment to the issue online.
> 
> 
> 

-- 
View this message in context: http://n2.nabble.com/-jira--Created%3A-%28OPENJPA-260%29-Using-FetchType.EAGER-on-OneToMany-using-jta-data-source-causes-result-set-is-closed-%28DB2%29-tp214413p363282.html
Sent from the OpenJPA Developers mailing list archive at Nabble.com.


Mime
View raw message