And here is the callstack: http://pastebin.com/raw.php?i=d6QVTA6B
:-)
Op vrijdag 18 oktober 2013 11:29:15 UTC+2 schreef Dirk Vranckaert:
>
> Here is my entire callstack of all the threads, the second thread
> (indicating running) is the one I'm working on. In the entire callstack I
> don't see anything related to JpaLocalTxnInterceptor.
> So my config is wrong at some point?
>
> Op vrijdag 18 oktober 2013 11:18:13 UTC+2 schreef scl:
>>
>> could you place a break point inside the persistUser() method and check
>> the callstack to see if there is a JpaLocalTxnInterceptor.
>> This class is responsible for handling the @Transactional annotation.
>>
>>
>> On 10/18/2013 11:06 AM, Dirk Vranckaert wrote:
>>
>> I'm building a backend application for one of my Android applications.
>> My setup is Hibernate as ORM, MySQL as DB, Guice as DI and Guice-Persist
>> for the link between ORM and DI.
>>
>> My webservice-endpoint class looks like this:
>>
>> @Path("test")
>> public class TestEndpoint {
>> @Inject
>> private UserDao userDao;
>>
>> @GET
>> @Path("persistUser")
>> @Produces(MediaType.TEXT_PLAIN)
>> @Transactional
>> public String persistUser() {
>> User user = new User();
>> user.setEmail("[email protected]");
>> user.setFirstName("FirstName");
>> user.setLastName("LastName");
>> user = userDao.persist(user);
>> return "ok";
>> }
>> }
>>
>> When I manually manage the transaction it works and my entity is
>> persisted:
>>
>> @Path("test")
>> public class TestEndpoint {
>> @Inject
>> private UserDao userDao;
>>
>> @Inject
>> private Provider<EntityManager> em;
>>
>> @GET
>> @Path("persistUser")
>> @Produces(MediaType.TEXT_PLAIN)
>> public String persistUser() {
>>
>> ((HibernateEntityManager)em.get()).getSession().getTransaction().begin();
>>
>> User user = new User();
>> user.setEmail("[email protected]");
>> user.setFirstName("FirstName");
>> user.setLastName("LastName");
>> user = userDao.persist(user);
>>
>>
>> ((HibernateEntityManager)em.get()).getSession().getTransaction().commit();
>>
>> return "ok";
>> }
>> }
>>
>> My UseDaoImpl that is injected via UserDao looks like this:
>>
>> public abstract class UserDaoImpl {
>> @Inject
>> private Provider<EntityManager> em;
>>
>> public EntityManager getEntityManager() {
>> return em.get();
>> }
>> public User persist(User instance) {
>> getEntityManager().persist(instance);
>> return instance;
>> }
>>
>> public User findById(String id) {
>> return getEntityManager().find(User.class, id);
>> }
>> }
>>
>> My GuiceContextListener looks like this:
>> public class GuiceContextListener extends GuiceServletContextListener {
>> @Override
>> protected Injector getInjector() {
>> Injector injector = Guice.createInjector(
>> new DatabaseModule(),
>> new GuiceDaoModule(),
>> new GuiceServiceModule(),
>> new ServletModule()
>> );
>> return injector;
>> }
>> }
>>
>> The DatabaseModule:
>> public class DatabaseModule extends AbstractModule {
>> private static final String JPA_UNIT = "myDB";
>>
>> @Override
>> protected void configure() {
>> install(new JpaPersistModule(JPA_UNIT));
>> }
>> }
>>
>> The GuiceDaoModule:
>> public class GuiceDaoModule implements Module {
>> @Override
>> public void configure(Binder binder) {
>> binder.bind(UserDao.class).to(UserDaoImpl.class);
>> }
>> }
>>
>> And this is my web.xml configuration:
>> <?xml version="1.0" encoding="ISO-8859-1"?>
>> <web-app
>> xmlns="http://java.sun.com/xml/ns/javaee"<http://java.sun.com/xml/ns/javaee>
>>
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<http://www.w3.org/2001/XMLSchema-instance>
>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
>> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"<http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd>
>> version="2.5">
>> <display-name>MyApp</display-name>
>>
>> <listener>
>>
>> <listener-class>eu.vranckaert.test.guice.GuiceContextListener</listener-class>
>> </listener>
>>
>> <!-- GUICE -->
>> <filter>
>> <filter-name>guiceFilter</filter-name>
>> <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
>> </filter>
>>
>> <filter-mapping>
>> <filter-name>guiceFilter</filter-name>
>> <url-pattern>/*</url-pattern>
>> </filter-mapping>
>> </web-app>
>>
>>
>> When I do findById(..) I can also retrieve my record, so my DB
>> connection is working, I'm just not able to use the @Transactional
>> annotation...
>> So I found something about wrong scope of my EntityManager, but I have no
>> clue how I can change the entity manager's scope...
>>
>> You guys have any idea what is wrong with my setup that the annotation
>> does not work?
>>
>> Dirk
>> --
>> You received this message because you are subscribed to the Google Groups
>> "google-guice" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/google-guice.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.