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

Info on getting the source is at,

http://wiki.eclipse.org/EclipseLink/Source

There is an Eclipse project (well several) checked in with the source that
can be used.


David Parker-8 wrote:
> 
> Thanks. 2 more questions:
> 
> 1) Is there a place to get the src for the 1.0.2 release specifically?
> 
> 2) Does anybody have a netbeans project definition that works with the  
> src tree? I can probably get it set up, but it always takes me a bit
> of fiddling to get those things to work....
> 
> Thanks again.
> 
> - DAP
> 
> On Mar 3, 2009, at 10:07 AM, James Sutherland wrote:
> 
>>
>> 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.
>>>>>
> 
> 


-----
---
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-tp22298139p22329488.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top