Hi Ivan As you can imagine, it's impossible for me to tell where the problem is, so either create a JIRA and attach a test project or do some debugging
thanks, Sergey On Thu, Mar 24, 2011 at 2:58 PM, Ivan Vitoria Sanchez <[email protected] > wrote: > Hi Sergey, > > I guess you're referencing to javax.ws.rs.core.Context, aren't you? > > The MobilityUserRestService extends from "GenericRestServiceImpl<T extends > GenericBean, PK extends Long>", which implements "IRestService<T, PK>". The > MobilityUserRestService has just one more method, and now I've created an > interface with this method in order to have all methods within an interface > (IRestService included) with the @Context annotation, but it still fails... > > > > Ivan > > -----Mensaje original----- > De: Sergey Beryozkin [mailto:[email protected]] > Enviado el: jueves, 24 de marzo de 2011 13:51 > Para: [email protected] > Asunto: Re: CXF Services and Transactions > > Hi Ivan > > On Thu, Mar 24, 2011 at 12:38 PM, Ivan Vitoria Sanchez < > [email protected]> wrote: > > > Hi Sergey, > > > > > > > > I've tried through both AOP and annotation-driven techniques but the > result > > is the same. What do you mean with "no root resources have been found"? > > > > > I thought the problem could be to do with the fact that the > MobilityUserRestService was not recognized after being proxified. > > > > > > > > This is the piece of the spring context configuration (DAO/Hibernate/JAXB > > beans are omitted): > > > > > > > It appears the problem occurs during the initial injection of the TL > context > proxies. Does MobilityUserRestService has some @Context annotated fields or > methods ? You just have to introduce a dedicated interface and have > @Context > methods on that interface - this usually works with AOP, in your case it > should... > > Let me know please if you can make it work > Sergey > > > > > > <!-- Annotation Driven Technique > > > > <tx:annotation-driven transaction-manager="mobilityTransactionManager" > /> > > > > --> > > > > > > > > <bean id="mobilityTransactionManager" > > class="org.springframework.orm.hibernate3.HibernateTransactionManager"> > > > > <property name="sessionFactory" ref="mobilitySessionFactory" /> > > > > </bean> > > > > > > > > <!-- AOP Technique --> > > > > <tx:advice id="txAdvice" > > transaction-manager="mobilityTransactionManager"> > > > > <tx:attributes> > > > > <tx:method name="*" propagation="REQUIRED" /> > > > > </tx:attributes> > > > > </tx:advice> > > > > <aop:config> > > > > <aop:pointcut id="serviceMethods" expression="execution(* > > com.ica.mobility.mobile.service.generic.GenericRestServiceImpl.*(..))"/> > > > > <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/> > > > > </aop:config> > > > > > > > > > > > > <!-- Generic JAX-RS server--> > > > > <jaxrs:server id="genericServer" > > modelRef="classpath:/WEB-INF/model/GenericModel.xml" abstract="true"> > > > > <jaxrs:features> > > > > <cxf:logging/> > > > > </jaxrs:features> > > > > <jaxrs:inInterceptors> > > > > <ref bean="gzipInInterceptor" /> > > > > </jaxrs:inInterceptors> > > > > <jaxrs:outInterceptors> > > > > <ref bean="gzipOutInterceptor" /> > > > > </jaxrs:outInterceptors> > > > > <jaxrs:properties> > > > > <entry key="attachment-directory" value="/temp/mobility"/> > > > > <entry key="attachment-memory-threshold" value="409600"/> > > > > </jaxrs:properties> > > > > <jaxrs:providers> > > > > <ref bean="jaxbElementProvider" /> > > > > </jaxrs:providers> > > > > </jaxrs:server> > > > > > > > > <!-- Generic Service --> > > > > <bean id="genericService" > > class="com.ica.mobility.mobile.service.generic.GenericRestServiceImpl" > > abstract="true"> > > > > <property name="daoFactory" ref="daoFactory" /> > > > > </bean> > > > > > > > > <!-- Specific REST server --> > > > > <bean id="userServer" parent="genericServer"> > > > > <property name="modelRef" > > value="classpath:/WEB-INF/model/MobilityUserModel.xml" /> > > > > <property name="address" value="/mobilityusers" /> > > > > <property name="serviceBeans"> > > > > <bean id="userService" > > class="com.ica.mobility.mobile.service.MobilityUserRestService" > > parent="genericService"> > > > > <constructor-arg > > value="com.ica.mobility.model.bean.MobilityUser"/> > > > > </bean> > > > > </property> > > > > </bean> > > > > > > > > And the whole log of the exception: > > > > > > > > org.springframework.beans.factory.BeanCreationException: Error creating > > bean > > with name 'userServer' defined in ServletContext resource > > [/WEB-INF/applicationContext.xml]: Invocation of init method failed; > nested > > exception is org.apache.cxf.service.factory.ServiceConstructionException > > > > at > > > > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory > > .initializeBean(AbstractAutowireCapableBeanFactory.java:1412) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory > > .doCreateBean(AbstractAutowireCapableBeanFactory.java:519) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory > > .createBean(AbstractAutowireCapableBeanFactory.java:456) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(Ab > > stractBeanFactory.java:291) > > > > at > > > > > > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSi > > ngleton(DefaultSingletonBeanRegistry.java:222) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Abst > > ractBeanFactory.java:288) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abstra > > ctBeanFactory.java:190) > > > > at > > > > > > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInst > > antiateSingletons(DefaultListableBeanFactory.java:574) > > > > at > > > > > > org.springframework.context.support.AbstractApplicationContext.finishBeanFac > > toryInitialization(AbstractApplicationContext.java:895) > > > > at > > > > > > org.springframework.context.support.AbstractApplicationContext.refresh(Abstr > > actApplicationContext.java:425) > > > > at > > > > > > org.springframework.web.context.ContextLoader.createWebApplicationContext(Co > > ntextLoader.java:276) > > > > at > > > > > > org.springframework.web.context.ContextLoader.initWebApplicationContext(Cont > > extLoader.java:197) > > > > at > > > > > > org.springframework.web.context.ContextLoaderListener.contextInitialized(Con > > textLoaderListener.java:47) > > > > at > > > > > > org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java: > > 3972) > > > > at > > org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) > > > > at > > > > > > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:7 > > 91) > > > > at > > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) > > > > at > > org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) > > > > at > > > > > > org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637) > > > > at > > org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:521) > > > > at > > org.apache.catalina.startup.HostConfig.check(HostConfig.java:1359) > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > > > at > > > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 > > ) > > > > at > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl > > .java:25) > > > > at java.lang.reflect.Method.invoke(Method.java:597) > > > > at > > > > > > org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297 > > ) > > > > at > > > > > > com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanSer > > verInterceptor.java:836) > > > > at > > com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761) > > > > at > > > org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1500) > > > > at > > > org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:849) > > > > at > > org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:351) > > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) > > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application > > FilterChain.java:290) > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh > > ain.java:206) > > > > at > > > > > > org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter > > .java:199) > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application > > FilterChain.java:235) > > > > at > > > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh > > ain.java:206) > > > > at > > > > > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja > > va:233) > > > > at > > > > > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja > > va:191) > > > > at > > > > > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase > > .java:558) > > > > at > > > > > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127 > > ) > > > > at > > > > > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102 > > ) > > > > at > > > > > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java > > :109) > > > > at > > > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) > > > > at > > > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) > > > > at > > > > > > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http > > 11Protocol.java:588) > > > > at > > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) > > > > at java.lang.Thread.run(Thread.java:619) > > > > Caused by: org.apache.cxf.service.factory.ServiceConstructionException > > > > at > > > > > > org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.ja > > va:132) > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > > > at > > > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 > > ) > > > > at > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl > > .java:25) > > > > at java.lang.reflect.Method.invoke(Method.java:597) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory > > .invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1536) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory > > .invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) > > > > at > > > > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory > > .initializeBean(AbstractAutowireCapableBeanFactory.java:1409) > > > > ... 48 more > > > > Caused by: javax.ws.rs.WebApplicationException > > > > at > > > > > > org.apache.cxf.jaxrs.utils.InjectionUtils.reportServerError(InjectionUtils.j > > ava:378) > > > > at > > > > > > org.apache.cxf.jaxrs.utils.InjectionUtils.injectThroughMethod(InjectionUtils > > .java:264) > > > > at > > > > > > org.apache.cxf.jaxrs.utils.InjectionUtils.injectContextProxies(InjectionUtil > > s.java:787) > > > > at > > > > > > org.apache.cxf.jaxrs.JAXRSServerFactoryBean.injectContexts(JAXRSServerFactor > > yBean.java:219) > > > > at > > > > > > org.apache.cxf.jaxrs.JAXRSServerFactoryBean.updateClassResourceProviders(JAX > > RSServerFactoryBean.java:240) > > > > at > > > > > > org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.ja > > va:91) > > > > ... 55 more > > > > > > > > Ivan > > > > > > > > De: Sergey Beryozkin [mailto:[email protected]] > > Enviado el: jueves, 24 de marzo de 2011 13:03 > > Para: [email protected] > > CC: Ivan Vitoria Sanchez > > Asunto: Re: CXF Services and Transactions > > > > > > > > Hi Ivan > > > > I've seen users doing it successfully. Is it a model-driven case ? I'm > > presuming the exception is to do with the fact no root resources have > been > > found ? What does the log say ? > > > > Cheers, Sergey > > > > On Thu, Mar 24, 2011 at 11:45 AM, Ivan Vitoria Sanchez > > <[email protected]> wrote: > > > > Hello, > > > > > > > > I have some JAX-RS servers configured through Spring. Also, i'm using > > Hibernate DAOs and the OpenSessionInViewFilter of Spring-ORM. I have no > > problem when I add the @Transactional annotation to the DAO layer, but i > > would like to have the REST methods in the same transaction, so i've > > annoated the services. But I can't do it, neither annotating the > interface > > nor the classes. A ServiceConstructionException is throwed as soon as I > > add > > the @Transactional to the service... > > > > > > > > CXF Version: 2.3.2 > > > > Spring version: 3.0.3 > > > > Hibernate version: 3 > > > > > > > > Thanks in advance! > > > > > > > > Ivan > > > > > > > > > > -- > > Sergey Beryozkin > > > > Application Integration Division of Talend <http://www.talend.com> > > http://sberyozkin.blogspot.com > > > > > > > -- > Sergey Beryozkin > > Application Integration Division of Talend <http://www.talend.com> > http://sberyozkin.blogspot.com > -- Sergey Beryozkin Application Integration Division of Talend <http://www.talend.com> http://sberyozkin.blogspot.com
