Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] OracleDataSource and threading (?) problems

This seems to be a bug in the query retry logic not checking if the exception
accessor is null,

>> databaseException.getAccessor().reestablishConnection(this);

This is masking the real exception that you are getting.  Please log a bug
for this.  Also include in the bug that the original exception should be
logged before the retry.

If you can put a breakpoint or debug in the DatabaseException class, you
should be able to see the real database exception that you are getting.



David Parker-8 wrote:
> 
> Thank you very much for the informative response.
> 
> We have no kind of container at all - not even tomcat, so the  
> DataSource being used is just created by the application, then the  
> various jdbc parameters are set on it. Perhaps my problem is with the  
> DataSource config rather than with eclipselink? I suspect I am doing  
> something ignorant there.....
> 
> I am running with eclipselink 1.0.2, btw.
> 
> Originally I made the EntityManagerFactory a static, which was working  
> OK. I tried making it a local thinking that that was causing the  
> problems, but it didn't make any difference.
> 
> The code that creates the EntityManagerFactory looks like this:
> 
>      protected EntityManagerFactory getEntityManagerFactory() {
>          if (emf == null || !emf.isOpen()) {
>              synchronized (emf_lock) {
>                  if (emf == null) {
>                      DataSource ds = getDataSource(emfProps);
>                      HashMap newprop = new HashMap();
>                       
> newprop.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, ds);
>                      emf =  
> Persistence.createEntityManagerFactory(puName, newprop);
>                  }
>              }
>          }
>          return emf;
>      }
> 
> The getDataSource is simple:
> 
>     private DataSource getDataSource(Map<String, String> props) {
>          try {
>              OracleDataSource ds = new OracleDataSource();
> 
>              //String driver = props.get(DBConstants.JPA_DRIVER_PROP);
>              String url = props.get(DBConstants.JPA_URL_PROP);
>              String user = props.get(DBConstants.JPA_USER_PROP);
>              String password = props.get(DBConstants.JPA_PASSWORD_PROP);
> 
>              //ds.setDriverType(driver);
>              ds.setURL(url);
>              ds.setUser(user);
>              ds.setPassword(password);
> 
>              return ds;
> 
>          } catch (SQLException ex) {
>              System.err.println("getDataSoure failed");
>              return null;
>          }
>      }
> 
> Here is one of the stacks.
> 
> [EL Info]: 2009.02.26 16:23:40.526--UnitOfWork(803339)--Communication  
> failure detected when attempting to perform read query outside of a  
> transaction. Attempting to retry query.
> java.lang.NullPointerException[EL Warning]: 2009.02.26 16:23:40.526-- 
> UnitOfWork(1643286)--java.lang.NullPointerException
> 
> at  
> org 
> .eclipse 
> .persistence 
> .internal.sessions.AbstractSession.executeQuery(AbstractSession.java: 
> 1219)
> at  
> org 
> .eclipse 
> .persistence 
> .internal.sessions.AbstractSession.executeQuery(AbstractSession.java: 
> 1162)
> at  
> org 
> .eclipse 
> .persistence 
> .internal 
> .indirection 
> .QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:77)
> at  
> org 
> .eclipse 
> .persistence 
> .internal 
> .indirection 
> .QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:67)
> [EL Info]: 2009.02.26 16:23:40.528--UnitOfWork(803339)--Communication  
> failure detected when attempting to perform read query outside of a  
> transaction. Attempting to retry query.
> at  
> org 
> .eclipse 
> .persistence 
> .internal 
> .indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:83)
> at  
> org 
> .eclipse 
> .persistence 
> .internal 
> .indirection 
> .UnitOfWorkValueHolder.instantiateImpl(UnitOfWorkValueHolder.java:161)
> at  
> org 
> .eclipse 
> .persistence 
> .internal 
> .indirection 
> .UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:230)
> at  
> org 
> .eclipse 
> .persistence 
> .internal 
> .indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:83)
> at  
> org 
> .eclipse 
> .persistence.indirection.IndirectMap.buildDelegate(IndirectMap.java:110)
> at  
> org 
> .eclipse 
> .persistence.indirection.IndirectMap.getDelegate(IndirectMap.java:314)
> at  
> org.eclipse.persistence.indirection.IndirectMap.get(IndirectMap.java: 
> 301)
> 
> 
> 
> On Mar 2, 2009, at 6:34 PM, Michael O'Brien wrote:
> 
>> David,
>>   Hi,
>>   1) Yes, EclipseLink is able to run in both container-managed (JTA)  
>> and application managed (RESOURCE_LOCAL) modes on any specific full  
>> JEE container.
>>   Also, using a datasource from Tomcat within an SE JPA application  
>> has been tested.
>>   Check that you are specifying the jta-data-source/non-jta-data- 
>> source property and that you are ok with the fact that the  
>> transaction-type defaults to JTA if not specified -when deployed to  
>> the server and RESOURCE_LOCAL when on an SE client - this will  
>> affect whether the datasource or db properties are used - if they  
>> are still specified.
>>
>>   For example, for details on setting up an Oracle datasource on  
>> WebLogic see...
>>      
>> http://wiki.eclipse.org/EclipseLink/Examples/JPA/WebLogic_Web_Tutorial#JNDI_Datasource_Setup
>>
>>   Depending on the container that your datasource is running on -  
>> you will need extra configuration steps.  I assume that your  
>> datasource is NOT application managed and that you are using a  
>> globally defined datasource (no need for a deploy).
>>   For example when targeting Tomcat, you will need to reference the  
>> catalina and ds support jars, set your InitialContext  factory and  
>> prefixes, modify persistence.xml to use a non-jta-data-source and  
>> setup the datasource on the server.
>>
>>   2) For the NPE's, post the stacktrace and we will advise.
>>   Note: that the default behavior for picking up entities also  
>> changes on/off the server and you may need to specify a combination  
>> of <class> entries and/or <exclude-unlisted-classes> to pickup or  
>> fine tune which entities are picked up.
>>
>>   If you would like examples of how to configure your application  
>> for a specific server, you may refer to the following examples by  
>> server.  Most of the examples are using an Oracle JTA datasource.
>> http://wiki.eclipse.org/EclipseLink/Examples/JPA#JPA_Web_Application_Tutorials
>>
>>   There are specific instructions for running an application managed  
>> datasource for WebLogic
>> http://wiki.eclipse.org/EclipseLink/Examples/JPA/WLS_AppScoped_DataSource
>>
>>   and in your particular situation, an example SE JPA app that uses  
>> the JTA datasource on Tomcat 6.
>> http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Using_JNDI_outside_the_Tomcat_container_for_J2SE_Applications
>>
>>   For reference here is a RESOURCE_LOCAL SE JPA app that does not  
>> use a datasource.
>> http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/examples/org.eclipse.persistence.example.jpa.server.common.ddlgen/
>>
>>   Also, be aware that Catalina based server will require a  
>> SessionCustomizer that modifies the lookupType on the connector to a  
>> String type, see..
>> http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Session_Customizer
>>
>>   If you post a copy of your persistence.xml as well as your  
>> overriding properties and the stack trace/log we will triage this  
>> issue.
>>    - config details (Application server, Database, EclipseLink  
>> version) part of persistence.xml and the logs
>>    - persistence.xml
>>    - property overrides
>>    - application managed *-oracle-ds.xml datasource definition
>>    - globally defined datasource definition
>>    - stacktrace
>>    - some specific example client code if you can (especially if  
>> your client is multi-threaded)
>>    - EclipseLink [EL] logs on FINEST if possible (both Client and  
>> Server if possible)
>>
>>   thank you
>>   /michael
>>
>> David Parker wrote:
>>> We are using eclipselink in a server application, but there is no  
>>> container (j2ee, spring, etc) involved: our persistence environment  
>>> is completely application-managed.
>>>
>>> The server has a single static EntityManagerFactory, and each serve  
>>> thread gets its own EntityManager.
>>>
>>> This was all working fine when we were passing the low-level jdbc  
>>> properties (driver, url, user, password) in the map to create the  
>>> EntityManager, but we started having problems
>>> when we tried to switch to using an OracleDataSource (we want to be  
>>> able to take advantage of Oracle RAC eventually).
>>>
>>> The code now creates an EntityManager with a single item in the  
>>> property map, a pre-constructed DataSource object.
>>>
>>> Unfortunately, we are now seeing random NPE's from deep in the  
>>> eclipselink stack. It has all the earmarks of a threading problem,  
>>> but all that has changed is the use of the DataSource.
>>>
>>> Is DataSource usage fully supported in a non-containter  
>>> environment? Are there additional configuration steps that need to  
>>> be taken. Is anybody using OracleDataSource with eclipselink?
>>>
>>> Thanks in advance for any clues.
>>>
>>> ===========================================
>>> David Parker
>>> david@xxxxxxxxxxxxxx
>>> (401) 263-1782
>>>
>>>
> 
> 


-----
---
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink 
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
http://wiki.oracle.com/page/TopLink TopLink 
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
http://www.nabble.com/EclipseLink-f26430.html EclipseLink 
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
-- 
View this message in context: http://www.nabble.com/OracleDataSource-and-threading-%28-%29-problems-tp22298139p22310433.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top