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