[
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.