Ok, right, so even if I got the log4j or slf4j LogFactory to work, the finest grain category would still map to one of their "channels", rather then per-class. I wish they hadn't chosen to implement a log-adapter-adapter...
On Fri, Feb 1, 2013 at 11:02 AM, James Carman <jcar...@carmanconsulting.com> wrote: > The problem you're facing is that they use a limited set of "channels" for > their logging: > > http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_logging.html#ref_guide_logging_channels > > So, you're kind of stuck with those knobs to turn. It is rather verbose, > I'll agree. Unfortunately, for a lot of the channels, you have to jack them > all the way up to TRACE to get them to give you anything. > > On Feb 1, 2013, at 10:51 AM, Chris Wolf <cwolf.a...@gmail.com> wrote: > >> Just to clarify, for me, these logging settings work: >> >> <property name="openjpa.Log" value="openjpa.jdbc.JDBC=TRACE"/> >> >> >> -= or, for SQL =- >> >> <property name="openjpa.Log" value="SQL=TRACE"/> >> <property name="openjpa.ConnectionFactoryProperties" >> value="PrettyPrint=true, PrettyPrintLineLength=72"/> >> <property name="openjpa.ConnectionFactoryProperties" >> value="printParameters=true"/> >> >> But the first one (JDBC logging) is too verbose - it's either all or >> nothing, which is why I wanted to setup the slf4j or log4j backend to >> be able to have more fine-grained settings. If you've been able to >> figure that out, that would be great. I've already posted on the >> openjpa users list about that, but nothing from there yet... >> >> >> >> On Fri, Feb 1, 2013 at 10:39 AM, Chris Wolf <cwolf.a...@gmail.com> wrote: >>> James, >>> >>> I just replied to your message from last night - I got it working by >>> using your latest suggestion plus enabling DBCP connection pooling, >>> although I don't know why pooling should matter. >>> >>> I notice that you were able to get OpenJPA logging to work - I'd sure >>> be interested in seeing your persistence.xml settings for that - I >>> have not been able to get any logging from OpenJPA and I tried the >>> default, the log4j and slf4j backends - all to no avail... >>> >>> As for my final implementation, I think this latest code from you is >>> the cleanest (for my purposes). Again, thanks so much for the help. >>> >>> -Chris >>> >>> On Fri, Feb 1, 2013 at 6:32 AM, James Carman >>> <jcar...@carmanconsulting.com> wrote: >>>> Chris, >>>> >>>> Here's my complete class: >>>> >>>> public class JpaTest >>>> { >>>> public static void main(String[] args) >>>> { >>>> ClassPathXmlApplicationContext ctx = new >>>> ClassPathXmlApplicationContext("classpath:/META-INF/spring-beans.xml"); >>>> final EntityManagerFactory factory = >>>> ctx.getBean(EntityManagerFactory.class); >>>> final JpaTransactionManager transactionManager = new >>>> JpaTransactionManager(factory); >>>> >>>> TransactionTemplate template = new >>>> TransactionTemplate(transactionManager); >>>> template.execute(new TransactionCallbackWithoutResult() >>>> { >>>> @Override >>>> protected void doInTransactionWithoutResult(TransactionStatus >>>> status) >>>> { >>>> EntityManager em = >>>> EntityManagerFactoryUtils.getTransactionalEntityManager(factory); >>>> for (int i = 0; i < 10; ++i) >>>> { >>>> MyEntity entity = new MyEntity(); >>>> entity.setName("name"); >>>> em.persist(entity); >>>> } >>>> } >>>> }); >>>> >>>> } >>>> } >>>> >>>> >>>> Here's the output I see when I turn up OpenJPA's logging: >>>> >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 1546366616 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 702383716 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 245507253 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 924315284 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 70275790 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 9196680 INSERT INTO MyEntity (id, name) VALUES (?, ?) [params=?, >>>> ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 2097261823 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 2030360950 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 761335820 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> executing >>>> prepstmnt 1063557914 INSERT INTO MyEntity (id, name) VALUES (?, ?) >>>> [params=?, ?] >>>> 02-01@06:30:54 TRACE (SQL) - <t 2063246672, conn 936619118> [0 ms] >>>> spent >>>> 02-01@06:30:54 TRACE (JDBC) - <t 2063246672, conn 936619118> [1 ms] >>>> commit >>>> 02-01@06:30:54 TRACE (JDBC) - <t 2063246672, conn 936619118> [0 ms] >>>> close >>>> >>>> >>>> It looks like it'll use the same connection object for each insert and >>>> commit and close it at the end (I'm using DriverManagerDataSource just to >>>> make sure it won't pool). >>>> >>>> >>>> On Jan 31, 2013, at 9:14 PM, James Carman <jcar...@carmanconsulting.com> >>>> wrote: >>>> >>>>> Try this: >>>>> >>>>> JpaTransactionManager transactionManager = new >>>>> JpaTransactionManager(factory); >>>>> >>>>> TransactionTemplate template = new >>>>> TransactionTemplate(transactionManager); >>>>> template.execute(new TransactionCallbackWithoutResult() >>>>> { >>>>> @Override >>>>> protected void doInTransactionWithoutResult(TransactionStatus >>>>> status) >>>>> { >>>>> EntityManager em = >>>>> EntityManagerFactoryUtils.getTransactionalEntityManager(factory); >>>>> MyEntity entity = new MyEntity(); >>>>> em.persist(entity); >>>>> } >>>>> }); >>>>> >>>>> On Jan 31, 2013, at 5:49 PM, Chris Wolf <cwolf.a...@gmail.com> wrote: >>>>> >>>>>> James, >>>>>> >>>>>> Ok, now using TransactionTemplate, but I'm back to where I was - the >>>>>> same apparent connection "leak", only now >>>>>> the code is hideous with all those nested anonymous classes and >>>>>> whatnot... ;) >>>>>> >>>>>> >>>>>> -Chris >>>>>> >>>>>> static void saveToDB(final List<MdBaseData> data) throws Exception { >>>>>> EntityManagerFactory emf = Persistence >>>>>> .createEntityManagerFactory("marketdata"); >>>>>> >>>>>> final JpaTemplate jpaTempl = new JpaTemplate(emf); >>>>>> jpaTempl.afterPropertiesSet(); >>>>>> >>>>>> JpaTransactionManager jpaTxMgr = new >>>>>> JpaTransactionManager(emf); >>>>>> jpaTxMgr.afterPropertiesSet(); >>>>>> >>>>>> final TransactionTemplate txTmpl = new >>>>>> TransactionTemplate(jpaTxMgr); >>>>>> txTmpl.afterPropertiesSet(); >>>>>> >>>>>> TransactionStrategy txStrategy = new TransactionStrategy() { >>>>>> @SuppressWarnings("deprecation") >>>>>> public Object execute(final JpaCallback<?> callback) >>>>>> { >>>>>> return txTmpl.execute(new >>>>>> TransactionCallback<Object>() { >>>>>> public Object >>>>>> doInTransaction(TransactionStatus status) { >>>>>> return jpaTempl.execute(new >>>>>> JpaCallback<Object>() { >>>>>> public Object >>>>>> doInJpa(EntityManager entityManager) >>>>>> >>>>>> throws PersistenceException { >>>>>> return >>>>>> callback.doInJpa(entityManager); >>>>>> } >>>>>> }); >>>>>> } >>>>>> }); >>>>>> } >>>>>> }; >>>>>> >>>>>> txStrategy.execute(new JpaCallback<Object>() { >>>>>> @Override >>>>>> public Object doInJpa(EntityManager em) throws >>>>>> PersistenceException { >>>>>> for (MdBaseData bd : data) { >>>>>> em.persist(bd); >>>>>> } >>>>>> return null; // writing to db, not reading... >>>>>> } >>>>>> }); >>>>>> } >>>>>> >>>>>> >>>>>> On Thu, Jan 31, 2013 at 4:42 PM, James Carman >>>>>> <jcar...@carmanconsulting.com> wrote: >>>>>>> Try using TransactionTemplate. >>>>>>> >>>>>>> On Jan 31, 2013, at 4:19 PM, Chris Wolf <cwolf.a...@gmail.com> wrote: >>>>>>> >>>>>>>> James, >>>>>>>> >>>>>>>> As per your suggestion, I let Spring manage the transactions and the >>>>>>>> apparent connection "leak" went away and I only see one connection >>>>>>>> being opened per session, as expected. >>>>>>>> >>>>>>>> Unfortunately, nothing got inserted into the database. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> >>>>>>>> -Chris >>>>>>>> >>>>>>>> My modified code looks like: >>>>>>>> >>>>>>>> >>>>>>>> static void saveToDB(List<MdBaseData> data) throws Exception { >>>>>>>> EntityManagerFactory emf = Persistence >>>>>>>> .createEntityManagerFactory("marketdata"); >>>>>>>> JpaTransactionManager jpaTxMgr = new >>>>>>>> JpaTransactionManager(emf); >>>>>>>> >>>>>>>> >>>>>>>> EntityManager em = >>>>>>>> >>>>>>>> jpaTxMgr.getEntityManagerFactory().createEntityManager(); >>>>>>>> TransactionStatus txStatus = >>>>>>>> jpaTxMgr.getTransaction(new >>>>>>>> DefaultTransactionDefinition()); >>>>>>>> try { >>>>>>>> //em.getTransaction().begin(); >>>>>>>> for (MdBaseData bd : data) { >>>>>>>> em.persist(bd); >>>>>>>> } >>>>>>>> //em.getTransaction().commit(); >>>>>>>> jpaTxMgr.commit(txStatus); >>>>>>>> } catch (Exception e) { >>>>>>>> jpaTxMgr.rollback(txStatus); >>>>>>>> e.printStackTrace(); >>>>>>>> } finally { >>>>>>>> //em.close(); >>>>>>>> } >>>>>>>> } >>>>>>>> >>>>>>>> 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 >>>>>>>>>>>>> >>>>>>> >>>>> >>>> >