You are right. I made a mistake in my code to simulate an error + rollback

On 16/11/10 12:21, Valentin Mahrwald wrote:
I am a bit confused by the scenario. If I understand this correctly the 
saveIncident method throws an exception and catches it inside the method 
itself. So the transaction that spans around the saveIncident method would be 
unaffected ?!

What are you trying to simulate?

Just looking over it there is not a lot of trace. However, 
org.apache.aries.transaction.TxInterceptorImpl logs (at debug) when 
transactions start and if they fail.

On 16 Nov 2010, at 10:37, Charles Moulliard wrote:

That does not work. In fact I'm not even sure that a transaction has been 
initiated

I have made the following modification

1) DAO

<bean id="incidentDAO"
        
class="org.apache.camel.example.reportincident.dao.impl.IncidentDAOImpl">
<!--<tx:transaction method="*" value="Required" />  -->
<jpa:context property="entityManager" unitname="ReportIncident" />
</bean>

2) Service

<bean id="incidentService" 
class="org.apache.camel.example.reportincident.service.impl.IncidentServiceImpl">

<tx:transaction method="*" value="Required" />

<property name="incidentDAO">
<reference interface="org.apache.camel.example.reportincident.dao.IncidentDAO"/>
</property>

</bean>

3) Simulation of an error

public class IncidentServiceImpl implements IncidentService {

    private static final transient Log LOG = 
LogFactory.getLog(IncidentServiceImpl.class);

    /** The incident dao. */
    private IncidentDAO incidentDAO;

    public void saveIncident(Incident incident) {

        try {
            getIncidentDAO().saveIncident(incident);
            throw new Exception(">>  Generate Error to simulate RollBack");
        } catch (RuntimeException e) {
            e.printStackTrace();
        }  catch (Exception ex) {
            ex.printStackTrace();
        }

    }

Is there a way to trace in log the Aries Transaction ?

Regards,

Charles

On 16/11/10 10:49, Valentin Mahrwald wrote:
On 16 Nov 2010, at 09:42, Charles Moulliard wrote:

There was a conflict with another ServiceMix bundle providing too jndi context. 
I have remove it and restart my project. Everything works fine.

This is easier to configure compare to Spring + Hibernate stuffs on OSGI. I 
will produce a tutorial with camel + aries + jpa + transaction + wicket about 
that and show How Aries JPA/Transaction simplifies our lives on OSGI platform.

Question : In all the examples (Blog, AriesTrader), the transaction is defined 
in the DAO layer (= layer containing the entityManager). Could it be possible 
that I define the tx within the Service layer (in charge to call the DAO) ?
Yes, for all I know that should work. The JPA and Transaction extensions are 
entirely independent. The transaction extensions manages the transaction bound 
to the current thread while the JPA extension manages EntityManagers (and 
-Factories) that access
the transaction currently active on the thread.

Regards,

Charles

On 16/11/10 10:26, Alasdair Nottingham wrote:
That is very odd. Something has not worked because the stack trace shows the 
InitialContextFactoryBuilder has not been registered.

Could there be a timing issue? Perhaps the jndi bundle starts after your test. 
Certainly the jndi bundle has the highest id.

Alasdair Nottingham

On 16 Nov 2010, at 09:11, Charles Moulliard<[email protected]>    wrote:

Yes. The Aries JNDI bundle is started

[ 178] [Active     ] [            ] [       ] [   60] Apache Aries JNDI Bundle 
(0.2.0.incubating)




On 16/11/10 09:52, Alasdair Nottingham wrote:
Hi,

Have you deployed and started the jndi bundle?

Alasdair

On 16 Nov 2010, at 08:18, Charles Moulliard<[email protected]>     wrote:

Hi,

Based on the Blog example of Aries, I have created a small project that I 
deploy on Fuse ESB (=Apache ServiceMix 4). The project includes a DAO layer 
(=JPA), Service layer, Camel route (where a bean calls my service layer).

The following error is reported :

Caused by: java.lang.RuntimeException: The DataSource 
osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/reportincidentdb)
 could not be used.
    at 
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getDs(DelayedLookupDataSource.java:47)
    at 
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getConnection(DelayedLookupDataSource.java:60)
    at 
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:137)
    at 
org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:112)
    at 
org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:239)
    ... 100 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name 
in environment or system property, or as an applet parameter, or in an 
application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at 
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)[:1.6.0_22]
    at 
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)[:1.6.0_22]
    at javax.naming.InitialContext.lookup(InitialContext.java:392)[:1.6.0_22]
    at 
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getDs(DelayedLookupDataSource.java:43)

Here is the bundle that I deploy to use Aries

[   7] [Active     ] [Created     ] [       ] [   20] Apache Aries Blueprint 
Bundle (0.2.0.incubating)
[  49] [Active     ] [            ] [       ] [   60] Apache Aries Transaction 
Manager (0.2.0.incubating)
[ 167] [Active     ] [Created     ] [       ] [   60] Aries JPA Container 
blueprint integration for Aries blueprint (0.2.0.incubating)
[ 170] [Active     ] [Created     ] [       ] [   60] Apache Aries Transaction 
Blueprint (0.2.0.incubating)
[ 171] [Active     ] [            ] [       ] [   60] Aries JPA Container 
(0.2.0.incubating)
[ 172] [Active     ] [            ] [       ] [   60] Apache Aries Util 
(0.2.0.incubating)
[ 175] [Active     ] [            ] [       ] [   60] Aries JPA Container 
Managed Contexts (0.2.0.incubating)
[ 178] [Active     ] [            ] [       ] [   60] Apache Aries JNDI Bundle 
(0.2.0.incubating)

[ 166] [Active     ] [Created     ] [       ] [   60] Reportincident :: 
Persistence JPA :: Aries (1.0.0.SNAPSHOT)
[ 176] [Active     ] [Created     ] [       ] [   60] Reportincident :: Service 
Bundle :: Aries (1.0.0.SNAPSHOT)

What is the reason ? Is there a bundle that I miss to deploy ?

Regards,

Charles M.
Apache Committer (Camel, Servicmix and Karaf)

Reply via email to