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)