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] <mailto:[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
    <http://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 <tel:%2B49%205772%209100> 0
    Telefax: +49 5772 9100 <tel:%2B49%205772%209100> 11
    Email: [email protected] <mailto:[email protected]>
    Internet: www.sgbs.de <http://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 Schneider
    http://www.liquid-reality.de

    Open Source Architect
    http://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] <mailto:[email protected]>
Internet: www.sgbs.de <http://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 Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com

Reply via email to