I eventually made it work and I will share the solution I adopted.

The code I worked on implemented ConfiguredCommand inside a Dropwizard 
application. In order to connect to the DB, its run method configured 
Hibernate. This was done in 3 steps: 1) set up of the HibernateFactory and 
create an HibernateBundle, 2) configure Hibernate properties  
(configuration.getDataSourceFactory().getProperties().put(..)) and 3) 
initialization by using the hibernateBundle run method which received a 
newly created Environment object. The command's code then had to manage the 
transactions and commits explicitly instead of using @UnitOfWork.

It worth noting that another HibernateBundle was created by the application 
itself before running the command code. Either this or the initialization 
of Hibernate in the cli's run method altogether might have been the cause 
of the inability to use the @UnitOfWork annotation.

What I figured out is that Dropwizard provides another abstract class, 
EnvironmentCommand, whose constructor takes an Application instance other 
than the command name and description (as for the ConfiguredCommand). Its 
javadoc drily describes: "A command which executes with a configured {@link 
Environment}." . By extending such a class and passing to it the 
Application instance of which the command is part, the @UnitOfWork is able 
to use the HibernateBundle. As usual, this is possible only if the classes 
using such annotation are instantiated by a UnitOfWorkAwareProxyFactory.

My understanding is that the UnitOfWork and its factory uses the 
environment of the main application and wouldn't recognize other 
environement and bundles instantiated within the command. As a final note, 
I am not sure whether the EnvironmentCommand comes with components 
unnecessary for the execution of our command and if it were possible and 
recommendable to twist the previous ConfiguratedCommand approach so that 
the UnitOfWork used the new Environment and bundle.

-- 
You received this message because you are subscribed to the Google Groups 
"dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to