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