TxLogService is create via blueprint. TxLogParticipant calls TxLogService which is passed as a parameter to TxLogParticipant.
CoordinationFilter is create via DS. I don't know if it helps but entityManager.isOpen() returns true. Mihael 2015-10-08 13:56 GMT+02:00 Christian Schneider <[email protected]>: > Hi Mihael, > > I do not see any calls to txLogService in this snippet. Is it called in > coordinationFilter? > If yes then the question is how coordinationFilter is instantiated and how > the txLogService is injected into it. > > Christian > > > On 08.10.2015 13:49, Mihael Schmidt wrote: > > Hi, > > the coordination is handled on the same thread (as you can see in the log, > TxLogParticipant logs on the same thread, the participant calls the service > which persists data to the db). > > REST resource: > try { > // check permission > Coordination coordination = coordinator.peek(); > User user = (User) coordination.getVariables().get(User.class); > if (!user.getRoles().contains("xx.xx")) { > coordinationFilter.fail(new > WebApplicationException(Status.UNAUTHORIZED)); > throw new WebApplicationException(Status.UNAUTHORIZED); > } > > try { > SalesProspect updatedPospect = service.update(prospect); > return Response.ok(updatedPospect).build(); > } > catch(Exception e) { > logger.error("Fehler beim Aktualisieren des Interessenten > " + prospect.getName(), e); > coordinationFilter.fail(e); > throw new > WebApplicationException(Status.INTERNAL_SERVER_ERROR); > } > } > finally { > coordinationFilter.end(); > } > > My real question is: why isn't a new transaction created if none is > active. The transaction attribute is "Required": > <bean id="txlogService" class="sdm.txlog.TxLogService"> > <tx:transaction method="*" value="Required" /> > <jpa:context property="entityManager" unitname="sdmTxlog" /> > </bean> > > Best regards > > Mihael > > > 2015-10-08 13:14 GMT+02:00 Christian Schneider <[email protected]>: > >> Hi Mihael, >> >> difficult to say without the actual source. >> >> The problem occurs when the coordination ends. So maybe this happens in >> a different thread. >> See >> https://osgi.org/javadoc/r5/enterprise/org/osgi/service/coordinator/Participant.html#ended%28org.osgi.service.coordinator.Coordination%29 >> >> "Participants are required to be thread safe as notification can be made >> on any thread. " >> >> Can you paste the relevant code snippets of SalesProspectResource.update? >> >> It might also help to update to the new Aries JPA 2.2.0 version. (Would >> be a bigger switch though). >> >> Christian >> >> >> On 08.10.2015 12:37, Mihael Schmidt wrote: >> >> Hi, >> >> I got a rest service where I am using multiple persistence units and data >> sources to store data in different databases using multiple transactions (I >> don't need all in one transaction). It all happens on multiple threads. >> >> I am getting an exception on the last persist where I want to save some >> log in a database which happens on the same thread where the rest service >> starts (qtp18495206-81) . It seems that the EntityManager is cleared up >> before my call to persist. Is that the reason for the exception? >> >> 2015-10-08 12:20:46,025 | DEBUG | qtp18495206-81 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Created a new persistence context >> org.apache.openjpa.persistence.EntityManagerImpl@1d911f for transaction >> [Xid:globalId=f2e7446501006f72672e6170616368652e61726965732e7472616e73616374696f6e0000000000000000000000000000,length=64,branchId=0000000000000000000000000000000000000000000000000000000000000000,length=64]. >> 2015-10-08 12:20:46,183 | DEBUG | Thread-52 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Created a new persistence context >> org.apache.openjpa.persistence.EntityManagerImpl@1a615e2 for transaction >> [Xid:globalId=102e7446501006f72672e6170616368652e61726965732e7472616e73616374696f6e0000000000000000000000000000,length=64,branchId=0000000000000000000000000000000000000000000000000000000000000000,length=64]. >> 2015-10-08 12:20:46,186 | DEBUG | Thread-52 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Clearing up EntityManager >> org.apache.openjpa.persistence.EntityManagerImpl@1a615e2 as the >> transaction has completed. >> 2015-10-08 12:20:46,410 | DEBUG | Thread-52 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Created a new persistence context >> org.apache.openjpa.persistence.EntityManagerImpl@3fee6f for transaction >> [Xid:globalId=112e7446501006f72672e6170616368652e61726965732e7472616e73616374696f6e0000000000000000000000000000,length=64,branchId=0000000000000000000000000000000000000000000000000000000000000000,length=64]. >> 2015-10-08 12:20:46,413 | DEBUG | Thread-52 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Clearing up EntityManager >> org.apache.openjpa.persistence.EntityManagerImpl@3fee6f as the >> transaction has completed. >> 2015-10-08 12:20:46,491 | DEBUG | Thread-69 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Created a new persistence context >> org.apache.openjpa.persistence.EntityManagerImpl@c974a9 for transaction >> [Xid:globalId=122e7446501006f72672e6170616368652e61726965732e7472616e73616374696f6e0000000000000000000000000000,length=64,branchId=0000000000000000000000000000000000000000000000000000000000000000,length=64]. >> 2015-10-08 12:20:46,493 | DEBUG | Thread-69 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Clearing up EntityManager >> org.apache.openjpa.persistence.EntityManagerImpl@c974a9 as the >> transaction has completed. >> 2015-10-08 12:20:46,547 | DEBUG | qtp18495206-81 | context >> | 108 - org.apache.aries.jpa.container.context - 1.0.4 | >> Clearing up EntityManager >> org.apache.openjpa.persistence.EntityManagerImpl@1d911f as the >> transaction has completed. >> 2015-10-08 12:20:46,548 | DEBUG | qtp18495206-81 | CoordinationFilter >> | 178 - de.sgbs.sdm.rs - 1.3.0 | Coordination ends >> 2015-10-08 12:20:46,548 | ERROR | qtp18495206-81 | TxLogParticipant >> | 184 - de.sgbs.sdm.txlog - 1.3.0 | Error on saving custom log >> javax.persistence.TransactionRequiredException: There is no currently >> active transaction. >> at >> org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.ensureTransaction(JTAPersistenceContextRegistry.java:110) >> at >> org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.getExistingPersistenceContext(JTAPersistenceContextRegistry.java:82) >> at >> org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.getCurrentPersistenceContext(JTAPersistenceContextRegistry.java:139) >> at >> org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManagerHandler.getPersistenceContext(JTAEntityManagerHandler.java:104) >> at >> org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManagerHandler.invoke(JTAEntityManagerHandler.java:182) >> at com.sun.proxy.$Proxy21.persist(Unknown Source) >> at sdm.txlog.TxLogService.write(TxLogService.java:218) >> at sdm.txlog.TxLogParticipant$1.run(TxLogParticipant.java:28) >> at sdm.txlog.TxLogParticipant.ended(TxLogParticipant.java:31) >> at >> org.apache.felix.coordinator.impl.CoordinationImpl.end(CoordinationImpl.java:205) >> at >> org.apache.felix.coordinator.impl.CoordinationHolder.end(CoordinationHolder.java:55) >> at sdm.rs.CoordinationFilter.end(CoordinationFilter.java:144) >> at sdm.rs.crm.SalesProspectResource.update(SalesProspectResource.java:187) >> at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_75] >> at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_75] >> at >> org.apache.wink.server.internal.handlers.InvokeMethodHandler.handleRequest(InvokeMethodHandler.java:63)[133:org.amdatu.web.rest.wink:2.0.2] >> >> I am using transaction attribute "Required". >> >> I am running Apache Karaf 3.0.3 with Aries JTA and OpenJPA 2.2.2. >> >> Thanx in advance for any help or hint. >> >> Best regards >> >> Mihael >> >> Schulz Gebäudeservice GmbH & Co. KG >> Dr.-Max-Ilgner-Straße 17 >> 32339 Espelkamp >> Persönlich haftende Gesellschafterin: >> Gebäudereinigung Joachim Schulz >> Verwaltungsgesellschaft mbH >> Telefon: +49 5772 9100 <%2B49%205772%209100> 0 >> Telefax: +49 5772 9100 <%2B49%205772%209100> 11 >> Email: <[email protected]>[email protected] >> Internet: <http://www.sgbs.de>www.sgbs.de >> Geschäftsführer: Joachim und Dirk Schulz, Norbert Kosica >> Handelsregister Bad Oeynhausen: HRA 5902, HRB 8591 >> UST-Id-Nr.: DE 125752702 >> >> >> >> -- >> Christian Schneiderhttp://www.liquid-reality.de >> >> Open Source Architecthttp://www.talend.com >> >> > > > -- > Mihael Schmidt > Software und System-Entwicklung > > Schulz Gebäudeservice GmbH & Co. KG > Dr.-Max-Ilgner-Straße 17 > 32339 Espelkamp > Persönlich haftende Gesellschafterin: > Gebäudereinigung Joachim Schulz > Verwaltungsgesellschaft mbH > Telefon: +49 5772 9100 0 > Telefax: +49 5772 9100 11 > Email: <[email protected]>[email protected] > Internet: <http://www.sgbs.de/>www.sgbs.de > Geschäftsführer: Joachim und Dirk Schulz, Norbert Kosica > Handelsregister Bad Oeynhausen: HRA 5902, HRB 8591 > UST-Id-Nr.: DE 125752702 > > > > -- > Christian Schneiderhttp://www.liquid-reality.de > > Open Source Architecthttp://www.talend.com > > -- Mihael Schmidt Software und System-Entwicklung -- Schulz Gebäudeservice GmbH & Co. KG Dr.-Max-Ilgner-Straße 17 32339 Espelkamp Persönlich haftende Gesellschafterin: Gebäudereinigung Joachim Schulz Verwaltungsgesellschaft mbH Telefon: +49 5772 9100 0 Telefax: +49 5772 9100 11 Email: [email protected] Internet: www.sgbs.de Geschäftsführer: Joachim und Dirk Schulz, Norbert Kosica Handelsregister Bad Oeynhausen: HRA 5902, HRB 8591 UST-Id-Nr.: DE 125752702
