[jboss-user] [JBoss AOP] - Advice not getting called
pablogmuller
do-not-reply at jboss.com
Tue May 13 15:10:25 EDT 2008
Hi,
I want to extract the Hibernate transaction generation to an aspect, so I did this:
package com.tme.evsp.facade.impl;
|
| import com.tme.evsp.domain.EntidadDO;
| import com.tme.evsp.facade.EntidadFacade;
| import com.tme.evsp.facade.TransactionalFacade;
| import com.tme.evsp.service.EntidadService;
|
| public class EntidadFacadeImpl extends TransactionalFacade implements EntidadFacade {
|
| private EntidadService entidadService;
|
| public EntidadFacadeImpl(EntidadService entidadService){
| this.entidadService = entidadService;
| }
|
| public void delete(EntidadDO entidad) throws Exception {
| }
|
| public void insertar(EntidadDO entidad) throws Exception {
| try {
| entidadService.insert(entidad);
| } catch (Throwable t) {
| t.printStackTrace();
| throw new RuntimeException(t);
| }
| }
| ...
| ...
|
With this jboss-aop.xml:
| <?xml version="1.0" encoding="UTF-8"?>
| <aop>
|
| <aspect class="com.tme.evsp.aop.TransactionAspect"/>
|
| <bind pointcut="execution(* com.tme.evsp.facade.impl.EntidadFacadeImpl->*(..))">
| <advice name="transaction" aspect="com.tme.evsp.aop.TransactionAspect"/>
| </bind>
|
| <bind pointcut="execution(* $instanceof{com.tme.evsp.facade.EntidadFacade}->*(..))">
| <advice name="transaction" aspect="com.tme.evsp.aop.TransactionAspect"/>
| </bind>
|
|
| </aop>
and this is the aspect class
| package com.tme.evsp.aop;
|
| import org.hibernate.Session;
| import org.jboss.aop.joinpoint.Invocation;
|
| import com.tme.evsp.util.HibernateUtil;
|
| public class TransactionAspect {
|
| public void transaction(Invocation invocation) throws Throwable {
| System.out.println("HELLO!!!!");
| Session sesion = HibernateUtil.getSession();
| try {
| sesion.beginTransaction();
| Object o = invocation.invokeNext(); // proceed to next advice or actual call
| sesion.getTransaction().commit();
|
| }catch(Exception e){
| e.printStackTrace();
| sesion.getTransaction().rollback();
|
| }finally {
|
| }
| }
| }
When I build, the class is comiled by apoc:
[aopc] [no comp needed] C:\Documents and Settings\pamuller\My Documents\workspace\telefonica\web\WEB-INF\classes\com\tme\evsp\domain\GrupoFuncionalDO.class
| [aopc] [no comp needed] C:\Documents and Settings\pamuller\My Documents\workspace\telefonica\web\WEB-INF\classes\com\tme\evsp\facade\TransactionalFacade.class
| [aopc] [compiled] C:\Documents and Settings\pamuller\My Documents\workspace\telefonica\web\WEB-INF\classes\com\tme\evsp\facade\impl\EntidadFacadeImpl.class
| [aopc] [no comp needed] C:\Documents and Settings\pamuller\My Documents\workspace\telefonica\web\WEB-INF\classes\com\tme\evsp\facade\TransactionalFacade.class
| [aopc] [no comp needed] C:\Documents and Settings\pamuller\My Documents\workspace\telefonica\web\WEB-INF\classes\com\tme\evsp\facade\impl\AdministracionFacadeImpl.class
|
but I get the following exception:
insert com.tme.evsp.domain.OperadorDeTelefoniaDO
| org.hibernate.HibernateException: save is not valid without active transaction
| at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:297)
| at $Proxy4.save(Unknown Source)
| at com.tme.evsp.dao.EntidadDAOImpl.makePersistence(EntidadDAOImpl.java:32)
| at com.tme.evsp.service.impl.OperadorDeTelefoniaServiceImpl.insert(OperadorDeTelefoniaServiceImpl.java:21)
| at com.tme.evsp.facade.impl.EntidadFacadeImpl.com$tme$evsp$facade$impl$EntidadFacadeImpl$insertar$aop(EntidadFacadeImpl.java:21)
| at com.tme.evsp.facade.impl.EntidadFacadeImpl$EntidadFacadeImplAdvisor.insertar_N_6157956559412051353(EntidadFacadeImpl$EntidadFacadeImplAdvisor.java)
| at com.tme.evsp.facade.impl.EntidadFacadeImpl.insertar(EntidadFacadeImpl.java)
| at com.tme.evsp.web.actions.EntidadAction.agregar(EntidadAction.java:46)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
| at java.lang.reflect.Method.invoke(Unknown Source)
| at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
| at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
| at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
| at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
| at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
| at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
| at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
| at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
| at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
| at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
| at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
| at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
| at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
| at java.lang.Thread.run(Unknown Source)
As you can see in the stacktrace, the generated classes are called, but the advice is never executed.
I've tried every combination for the jboss-aop.xml that I thought it could work, but it didn't.
If someone has any idea of what could be wrong it will be welcome.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4150501#4150501
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4150501
More information about the jboss-user
mailing list