Are these the non-transactional connections that OpenJPA is using to find the id values for the entities? I think that's how it works.
On Feb 1, 2013, at 12:05 PM, Chris Wolf <cwolf.a...@gmail.com> wrote: > Kevin, > > I finally got past the issue of running out of connections - I simply > configured connections pooling via DBCP and the problem went away. I > still consider this a "work-around" because if I have a single > process/thread persisting entities, I would expect each step of the > way to complete in a synchronous fashion and be able to use just one > connection to do that. > > Before I tried configuring connection pooling, I was trying to isolate > the code in OpenJPA that was using up all the connections and it > appears to be occurring in the OpenJPA sequence generator code, in or > about: > > org.apache.openjpa.kernel.StateManagerImpl.assignObjectId() > org.apache.openjpa.kernel.JDBCStoreManager.assignObjectId() > org.apache.openjpa.kernel.AbstractJDBCSeq.next() > org.apache.openjpa.kernel.NativeJDBCSeq.nextInternal() > > My entity's annotations that invoke this are: > > @Id > @SequenceGenerator(name="MARKET_DATA_MARKETDATAID_GENERATOR", > sequenceName="MARKET_DATA_ID_SEQ") > @GeneratedValue(strategy=GenerationType.SEQUENCE, > generator="MARKET_DATA_MARKETDATAID_GENERATOR") > @Column(name="MARKET_DATA_ID", unique=true, nullable=false, > precision=19) > public long getMarketDataId() { > return this.marketDataId; > } > > > For now, I will just hope connection pooling will be sufficient to > solve this issue, but I am wondering if your unit tests are running > with pooling or not? If they are, you may be missing a problem. > > Thanks, > > Chris > > > > On Thu, Jan 31, 2013 at 5:59 PM, Chris Wolf <cwolf.a...@gmail.com> wrote: >> Kevin, >> >> Thanks again, I'll look into the logging thing later - you're right >> that I'm more focused on just getting persistence to work and so I'm >> using the debugger. For now, it's just a JSE app, so no JTA yet (but >> that's what's targeted). >> >> So in addition to the programmatic transaction management via Spring >> JpaTransactionManager, ( which >> suppressed the out-of-connections issue but silently didn't write to >> the DB), I tried a third approach - >> Spring-managed transactions via Spring's TransactionTemplate and >> callbacks, but that only got me back to where >> I started, which is the connections running out again, plus hideous >> code, as you can see, below. >> >> >> Ok, I'll keep hammering away at it. Thanks, >> >> -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 5:19 PM, Kevin Sutter <kwsut...@gmail.com> wrote: >>>> Not certain what you meant by "join EM to the transaction". >>> If an EM is created without knowledge of a containing JTA transaction, then >>> the EM and the JTA transaction won't automatically be linked. Thus, if you >>> start the transaction after the EM was created, you can use the >>> EM.joinTransaction() method to get the two hooked up. This is, of course, >>> assuming that the Spring-initiated transaction is a JTA transaction. If >>> it's not, then you'll have to reference the Spring documentation to figure >>> out how the EM and transaction are linked. >>> >>>> BTW, I don't know if you noticed my previous post about logging, but I >>> tried setting openjpa.Log = slf4j >>> Yes, I did notice. But, since you seemed to have been making progress, I >>> figured you had figured something out... I'm not a slf4j expert, but I do >>> know other users have had success with integrating openjpa with slf4j. I >>> would guess it's an issue with the properties you are setting and how they >>> get mapped to OpenJPA's properties. If you are setting properties like >>> this: >>> >>> log4j.category.openjpa.jdbc.JDBC=TRACE >>> >>> .. OpenJPA wouldn't know what to do with this. I would try setting the >>> properties for OpenJPA's logging in the same format for the persistence.xml: >>> >>> <property name="openjpa.Log" value="openjpa.jdbc.JDBC=TRACE"/> >>> >>> At least that's what I would expect. Somehow the configuration would still >>> have to map to properties that OpenJPA knows about. Otherwise, our tracing >>> code wouldn't know when or what to trace. I know there's some mapping code >>> like this for Log4J and WebSphere and maybe others. But, the combination >>> of slf4j and log4j might be throwing things off... Just an idea. >>> >>> Kevin >>> >>> >>> On Thu, Jan 31, 2013 at 3:43 PM, Chris Wolf <cwolf.a...@gmail.com> wrote: >>> >>>> On Thu, Jan 31, 2013 at 4:30 PM, Kevin Sutter <kwsut...@gmail.com> wrote: >>>>> So, which do you want? Lots of connections, or data getting to the >>>>> database? :-) >>>> >>>> Preferably the later. ;) >>>> >>>>> >>>>> Try starting the spring transaction before creating the EM. Either that, >>>>> or join the EM to the transaction. >>>> >>>> I tried the former - it didn't change the outcome. Not certain what >>>> you meant by "join EM to the transaction". >>>> >>>> >>>> >>>> BTW, I don't know if you noticed my previous post about logging, but I >>>> tried setting openjpa.Log = slf4j >>>> and that didn't work - no errors, just no addtional output. >>>> >>>> Thanks for helping so far... >>>> >>>>> >>>>> Kevin >>>>> >>>>> On Thu, Jan 31, 2013 at 3:26 PM, Chris Wolf <cwolf.a...@gmail.com> >>>> wrote: >>>>> >>>>>> Kevin, >>>>>> >>>>>> Someone on the us...@apache.camel.org mailing list suggested that I >>>>>> let Springframework manage the transactions, so I changed my code to >>>>>> look like: >>>>>> >>>>>> The apparent connection "leak" went away, and no exceptions are >>>>>> thrown, and I only see one connection being opened, as expected - >>>>>> however, nothing goes into the database. >>>>>> >>>>>> 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 3:49 PM, Chris Wolf <cwolf.a...@gmail.com> >>>> wrote: >>>>>>> Even more specifically, I drilled down into the guts of OpenJPA-2.1, >>>>>>> into the call to >>>>>>> EntityManager.getTransaction().begin(); >>>>>>> >>>>>>> The place were all the connections are opened until exhausted is in: >>>>>>> >>>>>>> org.apache.openjpa.kernel.BrokerImpl.flush(int reason) >>>>>>> >>>>>>> There is a loop where the connections are all being opened: >>>>>>> >>>>>>> Collection mobjs = null; >>>>>>> _flags |= FLAG_PRESTORING; >>>>>>> try { >>>>>>> if (flush) { >>>>>>> // call pre store on all currently transactional objs >>>>>>> for (Iterator itr = transactional.iterator(); >>>>>>> itr.hasNext();) //<=== EATING UP ALL CONNECTIONS >>>>>>> ((StateManagerImpl) >>>> itr.next()).beforeFlush(reason, >>>>>> _call); >>>>>>> >>>>>>> >>>>>>> Let me know if there's anything else I can to do help solve this >>>> issue. >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> -Chris >>>>>>> >>>>>>> On Thu, Jan 31, 2013 at 3:18 PM, Chris Wolf <cwolf.a...@gmail.com> >>>>>> wrote: >>>>>>>> Kevin, >>>>>>>> >>>>>>>> I isolated where all the connections are opened at once - upon >>>> calling >>>>>>>> entityManager.getTransaction().commit(); >>>>>>>> >>>>>>>> I assume this is correct from all the exampled I've seen so far... >>>>>>>> >>>>>>>> EntityManager entityManager = >>>>>>>> entityManagerFactory.createEntityManager(); // here is where just one >>>>>>>> connection is opened, as expected. (not using connection pool yet) >>>>>>>> entityManager.getTransaction().begin(); >>>>>>>> for (MdBaseData bd : data) { >>>>>>>> em.persist(bd); >>>>>>>> } >>>>>>>> entityManager.getTransaction().commit(); // here is where all the >>>>>>>> connections are opened ***** >>>>>>>> entityManager.close(); >>>>>>>> >>>>>>>> Note that the entity has a M2M to child entities (about 100 per >>>>>>>> MdBaseData) via a link table. >>>>>>>> >>>>>>>> Thanks for any ideas, >>>>>>>> >>>>>>>> -Chris >>>>>>>> >>>>>>>> On Thu, Jan 31, 2013 at 1:56 PM, Kevin Sutter <kwsut...@gmail.com> >>>>>> wrote: >>>>>>>>> Hi Chris, >>>>>>>>> Good to know your plans. Thanks. >>>>>>>>> >>>>>>>>> You can get almost all of the JDBC connection access via the JDBC >>>>>> channel >>>>>>>>> in our logging framework [1]. Unfortunately, I looked at the code >>>> and >>>>>> the >>>>>>>>> constructors don't seem to have a log entry... :-( But, you do get >>>>>> all of >>>>>>>>> the closes, commits, rollbacks, etc -- all of the normal operations >>>>>> through >>>>>>>>> a Connection object. So, I'd start with that. >>>>>>>>> >>>>>>>>> Updating the Ctor for additional logging would be very easy to do. >>>> I >>>>>> would >>>>>>>>> probably do it in the LoggingConnectionDecorator, like you thought. >>>>>> If you >>>>>>>>> have issues with building a version of OpenJPA for your testing, >>>> ping >>>>>> me >>>>>>>>> back with the version of OpenJPA that you are using and maybe I can >>>>>> find >>>>>>>>> time to do a quick update. But, try the JDBC log channel first and >>>>>> see if >>>>>>>>> that gives you enough information for your specific scenario. >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Kevin >>>>>>>>> >>>>>>>>> [1] >>>>>>>>> >>>>>> >>>> http://people.apache.org/~mikedd/nightly.builds/apache-openjpa-2.3.0-SNAPSHOT/docs/docbook/manual.html#ref_guide_logging_channels >>>>>>>>> >>>>>>>>> On Thu, Jan 31, 2013 at 12:02 PM, Chris Wolf <cwolf.a...@gmail.com> >>>>>> wrote: >>>>>>>>> >>>>>>>>>> I am fully aware that pooling is the way to go, but I want to just >>>>>>>>>> prove out the simple case first. Also the final deployment will >>>> be in >>>>>>>>>> a JEE container, so it will be doing the pooling. >>>>>>>>>> >>>>>>>>>> I really wish there was a logging setting to trace acquire/release >>>> of >>>>>>>>>> JDBC Connections - I looked at the source for (I forget now, >>>> something >>>>>>>>>> like JDBCDatStore) it had logging but not of acquire/release of >>>>>>>>>> Connections. >>>>>>>>>> >>>>>>>>>> What is this LoggingConnectionDecorator? would that help me log >>>>>>>>>> connection activity? If so, how is it configured? >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> >>>>>>>>>> -Chris >>>>>>>>>> >>>>>>>>>> On Thu, Jan 31, 2013 at 12:19 PM, Kevin Sutter <kwsut...@gmail.com >>>>> >>>>>> wrote: >>>>>>>>>>> Hi Chris, >>>>>>>>>>> Normally, OpenJPA will only request a connection "on demand" [1]. >>>>>> As >>>>>>>>>> each >>>>>>>>>>> database access is requested, a connection is obtained, but then >>>>>> it's >>>>>>>>>>> released when we're done with it. Unless there is some >>>> processing >>>>>> or >>>>>>>>>>> configuration that is telling OpenJPA to hang onto the >>>>>> connection... If >>>>>>>>>>> nothing jumps out at you, I would suggest tracing (maybe both >>>>>> OpenJPA and >>>>>>>>>>> database) to see why all of the connections are getting requested >>>>>> and >>>>>>>>>>> nothing is getting closed. >>>>>>>>>>> >>>>>>>>>>> As an aside, I would highly recommend the use of some type of >>>>>> connection >>>>>>>>>>> pooling. Overall, you will get much better performance if >>>>>> connections >>>>>>>>>> can >>>>>>>>>>> be re-used instead of constantly dropping and re-creating >>>>>> connections. >>>>>>>>>>> Whether you use DBCP or Oracle pooling or some application >>>> server's >>>>>>>>>>> connection pooling mechanism, it doesn't really matter. But, I >>>>>> would >>>>>>>>>>> suggest using some connection pooling. >>>>>>>>>>> >>>>>>>>>>> Good luck, >>>>>>>>>>> Kevin >>>>>>>>>>> >>>>>>>>>>> [1] >>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> http://people.apache.org/~mikedd/nightly.builds/apache-openjpa-2.3.0-SNAPSHOT/docs/docbook/manual.html#ref_guide_dbsetup_retain >>>>>>>>>>> >>>>>>>>>>> On Thu, Jan 31, 2013 at 10:51 AM, Chris Wolf < >>>> cwolf.a...@gmail.com> >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> If I process a small number of records, everything works, >>>> however >>>>>> when >>>>>>>>>>>> I try to process a "real-world" number of records, I get an >>>>>>>>>>>> "ORA-12519". At first, I thought it was an Oracle issue and >>>> after >>>>>>>>>>>> searching around and getting hits on "solutions" involving >>>>>> increasing >>>>>>>>>>>> Oracle sessions and processes (there are at least 125 >>>> configured), >>>>>> I >>>>>>>>>>>> was still getting "ORA-12519". I then tailed the TNS listener >>>> log >>>>>> and >>>>>>>>>>>> saw that everytime my OpenJPA process ran, it would consume all >>>> the >>>>>>>>>>>> JDBC connections as if it was using connection pooling with some >>>>>> high >>>>>>>>>>>> min-connections setting. >>>>>>>>>>>> >>>>>>>>>>>> In fact, as the stack trace shows, it's only using >>>>>>>>>>>> "SimpleDriveDataSource", which I thought didn't pool connections >>>>>> and I >>>>>>>>>>>> don't have the DBCP jar on my classpath, so why is OpenJPA >>>> opening >>>>>> all >>>>>>>>>>>> these JDBC connections? >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Thanks, >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Chris >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> 183 marketdata INFO [main] openjpa.Runtime - Starting >>>> OpenJPA >>>>>> 2.2.1 >>>>>>>>>>>> 214 marketdata INFO [main] openjpa.jdbc.JDBC - Using >>>> dictionary >>>>>>>>>>>> class "org.apache.openjpa.jdbc.sql.OracleDictionary". >>>>>>>>>>>> Exception in thread "main" <openjpa-2.2.1-r422266:1396819 fatal >>>>>> store >>>>>>>>>>>> error> org.apache.openjpa.persistence.RollbackException: >>>> Listener >>>>>>>>>>>> refused the connection with the following error: >>>>>>>>>>>> ORA-12519, TNS:no appropriate service handler found >>>>>>>>>>>> >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:594) >>>>>>>>>>>> at >>>>>> ms.algo.adapt.test.BeanIODemo.saveToDB(BeanIODemo.java:153) >>>>>>>>>>>> at >>>>>> ms.algo.adapt.test.BeanIODemo.beanIOTest(BeanIODemo.java:127) >>>>>>>>>>>> at >>>> ms.algo.adapt.test.BeanIODemo.main(BeanIODemo.java:50) >>>>>>>>>>>> Caused by: <openjpa-2.2.1-r422266:1396819 fatal general error> >>>>>>>>>>>> org.apache.openjpa.persistence.PersistenceException: Listener >>>>>> refused >>>>>>>>>>>> the connection with the following error: >>>>>>>>>>>> ORA-12519, TNS:no appropriate service handler found >>>>>>>>>>>> >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>> org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4958) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4918) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:110) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:62) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connect(JDBCStoreManager.java:971) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getConnection(JDBCStoreManager.java:240) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.getConnection(AbstractJDBCSeq.java:163) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.NativeJDBCSeq.allocateInternal(NativeJDBCSeq.java:217) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.NativeJDBCSeq.nextInternal(NativeJDBCSeq.java:201) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:60) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>> org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:160) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:144) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:778) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>> org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:493) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>> org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:469) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:762) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:135) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:600) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(SingleFieldManager.java:803) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.SingleFieldManager.preFlushPCs(SingleFieldManager.java:762) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:664) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:589) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:505) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:3028) >>>>>>>>>>>> at >>>>>>>>>>>> >>>> org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:44) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:1042) >>>>>>>>>>>> at >>>>>>>>>> org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2114) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2074) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1992) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81) >>>>>>>>>>>> at >>>>>>>>>>>> >>>> org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1516) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:933) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:570) >>>>>>>>>>>> ... 3 more >>>>>>>>>>>> Caused by: java.sql.SQLException: Listener refused the >>>> connection >>>>>> with >>>>>>>>>>>> the following error: >>>>>>>>>>>> ORA-12519, TNS:no appropriate service handler found >>>>>>>>>>>> >>>>>>>>>>>> at >>>>>>>>>> oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:517) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:557) >>>>>>>>>>>> at >>>>>>>>>> oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:233) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29) >>>>>>>>>>>> at >>>>>>>>>> oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getSimpleConnection(SimpleDriverDataSource.java:84) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.schema.AutoDriverDataSource.getConnection(AutoDriverDataSource.java:39) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getConnection(SimpleDriverDataSource.java:76) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:118) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:93) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:118) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.schema.DataSourceFactory$DefaultsDataSource.getConnection(DataSourceFactory.java:304) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connectInternal(JDBCStoreManager.java:982) >>>>>>>>>>>> at >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connect(JDBCStoreManager.java:967) >>>>>>>>>>>> ... 31 more >>>>>>>>>>>> Caused by: oracle.net.ns.NetException: Listener refused the >>>>>> connection >>>>>>>>>>>> with the following error: >>>>>>>>>>>> ORA-12519, TNS:no appropriate service handler found >>>>>>>>>>>> >>>>>>>>>>>> at oracle.net.ns.NSProtocol.connect(NSProtocol.java:457) >>>>>>>>>>>> at >>>>>>>>>>>> >>>> oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1625) >>>>>>>>>>>> at >>>>>>>>>> oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:365) >>>>>>>>>>>> ... 44 more >>>>>>>>>>>> >>>>>>>>>> >>>>>> >>>>