Do you have a gist of your test scaffold?  I'm curious now :)

On Thu, Jan 31, 2013 at 2:59 PM, Chris Wolf <cwolf.a...@gmail.com> wrote:
> Sure, I can look into that.
>
> I also narrowed down the issue while stepping through my code while
> tailing the TNS listener log - when
> EntityManager.getTransaction().commit(); is called - is when all those
> 120 connections are opened.
>
> (Again, this is in my standalone JPA test scaffold, not including
> Camel now)  I have been communicating this issue on the OpenJPA
> list...
>
>
>
> On Thu, Jan 31, 2013 at 2:45 PM, James Carman
> <ja...@carmanconsulting.com> wrote:
>> Well, it looks like you're also managing your own transactions.
>> Perhaps just use Spring for the transaction management.
>>
>>
>> On Thu, Jan 31, 2013 at 2:35 PM, Chris Wolf <cwolf.a...@gmail.com> wrote:
>>> Right, I looked into that but the Spring docs say that JpaTemplate is
>>> deprecated in favor of native JPA APIs.
>>>
>>> http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/orm/jpa/JpaTemplate.html
>>>
>>> I am using OpenJPA-2.1
>>>
>>> Thanks,
>>>
>>>    -Chris
>>>
>>> On Thu, Jan 31, 2013 at 2:29 PM, James Carman
>>> <ja...@carmanconsulting.com> wrote:
>>>> Well, you're managing your entity manager yourself, right?  You could
>>>> have a bug in there that's leaving it open?  Can you use Spring or
>>>> some other technology to do this for you in a way where you can be
>>>> sure everything gets cleaned up?
>>>>
>>>>
>>>> On Thu, Jan 31, 2013 at 2:28 PM, Chris Wolf <cwolf.a...@gmail.com> wrote:
>>>>> Howdy Matthias,
>>>>>
>>>>> Yes, in an earlier post to this thread, I mentioned that 120
>>>>> connections were being opened (the max). So, yes, the max connections
>>>>> limit is being hit.
>>>>>
>>>>> I observe this by tailing the TNS listener log
>>>>>
>>>>> c:/app/<userId>/diag/tnslsnr/<userId>/listener/trace/listener.log
>>>>>
>>>>> (Oracle-11g on Windows7)
>>>>>
>>>>>
>>>>> The question is why?  Unless I have a connection leak.
>>>>>
>>>>>    -Chris
>>>>>
>>>>>
>>>>> On Thu, Jan 31, 2013 at 2:21 PM, Matthias Lüneberg
>>>>> <matthias.lueneb...@googlemail.com> wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Is it possible that the oracle database has reached its max 
>>>>>> connections/processes limit?
>>>>>>
>>>>>> I found an article: 
>>>>>> http://www.dadbm.com/2011/11/oracle-listener-refused-connection-ora-12519-troubleshooting/
>>>>>>
>>>>>> Maybe its a database failure. Can you have a look at this?
>>>>>>
>>>>>> HTH, Matthias
>>>>>>
>>>>>> Am 31.01.2013 um 18:48 schrieb Chris Wolf <cwolf.a...@gmail.com>:
>>>>>>
>>>>>>> James,
>>>>>>>
>>>>>>> Here is what it looks like.  At first, I was using the "jpa://"
>>>>>>> endpoint, but then I needed to implement a custom processor to handle
>>>>>>> additional logic.  Thanks for having a look...
>>>>>>>
>>>>>>>   -Chris
>>>>>>>
>>>>>>> from("file:/tmp/local/data?filter=#filter&preMove=/tmp/local/holding/${file:onlyname}.${id}&move=/tmp/local/archive&moveFailed=/tmp/local/errors&readLock=changed")
>>>>>>> .unmarshal(cpmdfileFormat)
>>>>>>> .processRef("dataStore")
>>>>>>> //.to("jpa:?persistenceUnit=marketdata")
>>>>>>> .beanRef("oneshotPoller", "resumeJpaConsumer"); // signal consumer
>>>>>>> route to begin
>>>>>>>
>>>>>>>
>>>>>>> Bean for "dataStore":
>>>>>>>
>>>>>>> public class CPMDPersister implements Processor {
>>>>>>>       private static final transient Logger log =
>>>>>>> LoggerFactory.getLogger(CPMDPersister.class);
>>>>>>>       IGenericDAO<MdBaseData> mdBaseDataDAO;
>>>>>>>       IGenericDAO<MdCurveData> mdCurveDataDAO;
>>>>>>>
>>>>>>>       public CPMDPersister(){}
>>>>>>>
>>>>>>>    public CPMDPersister(IGenericDAO<MdBaseData> mdBaseDataDAO,
>>>>>>> IGenericDAO<MdCurveData> mdCurveDataDAO) {
>>>>>>>       this.mdBaseDataDAO = mdBaseDataDAO;
>>>>>>>       this.mdCurveDataDAO = mdCurveDataDAO;
>>>>>>>    }
>>>>>>>
>>>>>>>       @Override
>>>>>>>       public void process(Exchange exchange) throws Exception {
>>>>>>>               Message inMsg = exchange.getIn();
>>>>>>>
>>>>>>>               @SuppressWarnings("unchecked")
>>>>>>>               List<MdBaseData> mdBaseData =
>>>>>>> (ArrayList<MdBaseData>)inMsg.getBody(ArrayList.class);
>>>>>>>
>>>>>>>               IntervalElapsedTimer avg = new IntervalElapsedTimer();
>>>>>>>               avg.start();
>>>>>>>               mdBaseDataDAO.begin();
>>>>>>>
>>>>>>>               for (MdBaseData md : mdBaseData) {
>>>>>>>                       setParentReferences(md);
>>>>>>>                       mdBaseDataDAO.save(md);
>>>>>>>                   avg.lap();
>>>>>>>                   log.debug("JPA Persist MD: {}, {}",
>>>>>>>                       new Object[] {md.toString(), avg.toString()});
>>>>>>>               }
>>>>>>>
>>>>>>>               mdBaseDataDAO.commit();
>>>>>>>
>>>>>>>               log.debug("JPA Persist: {}", avg.toString());
>>>>>>>               int a = 0;
>>>>>>>       }
>>>>>>>
>>>>>>>       void setParentReferences(MdBaseData md) {
>>>>>>>               for (MdCurveData cd : md.getMdCurveData()) {
>>>>>>>                       if (cd.getMdBaseData() == null)
>>>>>>>                               cd.setMdBaseData(new 
>>>>>>> ArrayList<MdBaseData>());
>>>>>>>                       if (!cd.getMdBaseData().contains(md))
>>>>>>>                               cd.getMdBaseData().add(md);
>>>>>>>               }
>>>>>>>       }
>>>>>>> }
>>>>>>>
>>>>>>> The DAOs, are a thin wrapper around EntityManager, like:
>>>>>>>
>>>>>>>       @SuppressWarnings("unchecked")
>>>>>>>       public List<T> findAll() {
>>>>>>>               return entityManager.createQuery("from " + 
>>>>>>> entityType.getName())
>>>>>>>                               .getResultList();
>>>>>>>       }
>>>>>>>       public void begin() {
>>>>>>>               this.entityManager.getTransaction().begin();
>>>>>>>       }
>>>>>>>
>>>>>>>       public void commit() {
>>>>>>>               this.entityManager.getTransaction().commit();
>>>>>>>               this.entityManager.clear();
>>>>>>>       }
>>>>>>>
>>>>>>>       public void rollback() {
>>>>>>>               this.entityManager.getTransaction().rollback();
>>>>>>>       }
>>>>>>>
>>>>>>> On Thu, Jan 31, 2013 at 12:34 PM, James Carman
>>>>>>> <ja...@carmanconsulting.com> wrote:
>>>>>>>> What does your route look like?
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Jan 31, 2013 at 11:58 AM, Chris Wolf <cwolf.a...@gmail.com> 
>>>>>>>> wrote:
>>>>>>>>> I have further determined that it's an OpenJPA issue (or user error,
>>>>>>>>> but how can that be?) ;)
>>>>>>>>>
>>>>>>>>> I will report back when I get to the bottom of it.  Thanks a lot,
>>>>>>>>>
>>>>>>>>> Chris
>>>>>>>>>
>>>>>>>>> On Sat, Jan 26, 2013 at 2:47 AM, Willem Jiang 
>>>>>>>>> <willem.ji...@gmail.com> wrote:
>>>>>>>>>> Can you share us your camel route? It is important for us to find 
>>>>>>>>>> out the key reason of your issue.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 发自我的 iPhone
>>>>>>>>>>
>>>>>>>>>> 在 2013-1-26,上午5:22,Chris Wolf <cwolf.a...@gmail.com> 写道:
>>>>>>>>>>
>>>>>>>>>>> On Fri, Jan 25, 2013 at 3:55 PM, Chris Wolf <cwolf.a...@gmail.com> 
>>>>>>>>>>> wrote:
>>>>>>>>>>>> I ask because when I use jpa:  in producer mode, I get this error:
>>>>>>>>>>>> Caused by: oracle.net.ns.NetException: Listener refused the 
>>>>>>>>>>>> connection
>>>>>>>>>>>> with the following error:
>>>>>>>>>>>> ORA-12519, TNS:no appropriate service handler found
>>>>>>>>>>>>
>>>>>>>>>>>> Strangely, using  jpa: in consumer mode, this does not happen.  In 
>>>>>>>>>>>> the
>>>>>>>>>>>> tnslsnr.log, I observe 120 connections being opened when
>>>>>>>>>>>> running the route with jpa: in producer mode.  If I instead use a
>>>>>>>>>>>> custom Processor and do my own JPA persistence code,
>>>>>>>>>>>> the issue does not occur.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks for any advice,
>>>>>>>>>>>>
>>>>>>>>>>>> Chris
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> I stepped through with the debugger and the problem went away.  The
>>>>>>>>>>> point at which a lot of connections were opened was
>>>>>>>>>>> after I stepped over:
>>>>>>>>>>>
>>>>>>>>>>>               return jpaTemplate.execute(new JpaCallback<Object>() {
>>>>>>>>>>>                   public Object doInJpa(EntityManager entityManager)
>>>>>>>>>>> throws PersistenceException {
>>>>>>>>>>>                       return callback.doInJpa(entityManager);
>>>>>>>>>>>                   }
>>>>>>>>>>>
>>>>>>>>>>> ..and when running in real time (not debugging) it seems to be 
>>>>>>>>>>> running
>>>>>>>>>>> in an AsyncProcessor - I wonder if it's too many worker
>>>>>>>>>>> threads eating up the connections?  BTW, this is mt first project
>>>>>>>>>>> using Camel, so forgive the lack of experience...
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] UnmarshallingContext           
>>>>>>>>>>> DEBUG
>>>>>>>>>>> EOF reached at line 2007
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] SendProcessor                  
>>>>>>>>>>> DEBUG
>>>>>>>>>>>>>>> Endpoint[jpa://?persistenceUnit=marketdata] Exchange[null]
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] JpaTransactionManager          
>>>>>>>>>>> DEBUG
>>>>>>>>>>> Creating new transaction with name [null]:
>>>>>>>>>>> PROPAGATION_REQUIRED,ISOLATION_DEFAULT
>>>>>>>>>>> 8505  marketdata  INFO   [Camel (camel-1) thread #1 -
>>>>>>>>>>> file:///tmp/local/data] openjpa.Runtime - Starting OpenJPA 2.2.1
>>>>>>>>>>> 8535  marketdata  INFO   [Camel (camel-1) thread #1 -
>>>>>>>>>>> file:///tmp/local/data] openjpa.jdbc.JDBC - Using dictionary class
>>>>>>>>>>> "org.apache.openjpa.jdbc.sql.OracleDictionary".
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] JpaTransactionManager          
>>>>>>>>>>> DEBUG
>>>>>>>>>>> Opened new EntityManager
>>>>>>>>>>> [org.apache.openjpa.persistence.EntityManagerImpl@798b429b] for JPA
>>>>>>>>>>> transaction
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] JpaTransactionManager          
>>>>>>>>>>> DEBUG
>>>>>>>>>>> Initiating transaction commit
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] JpaTransactionManager          
>>>>>>>>>>> DEBUG
>>>>>>>>>>> Committing JPA transaction on EntityManager
>>>>>>>>>>> [org.apache.openjpa.persistence.EntityManagerImpl@798b429b]
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] JpaTransactionManager          
>>>>>>>>>>> DEBUG
>>>>>>>>>>> Closing JPA EntityManager
>>>>>>>>>>> [org.apache.openjpa.persistence.EntityManagerImpl@798b429b] after
>>>>>>>>>>> transaction
>>>>>>>>>>> [ad #1 - file:///tmp/local/data] EntityManagerFactoryUtils      
>>>>>>>>>>> DEBUG
>>>>>>>>>>> Closing JPA EntityManager
>>>>>>

Reply via email to