interceptor in ejb-jar.xml doesn't works
juangiovanolli Jan 4, 2007 12:30 PMHi:
i created a new interceptor and i add it in ejb-jar.xml. this interceptor is a global interceptor, as you can see in my ejb-jar.xml shown below.
The problem is that the interceptor is never reached, That is, the workflowinterceptor is never loaded.
Any ideas???
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> <interceptors> <interceptor> <interceptor-class> org.jboss.seam.ejb.SeamInterceptor </interceptor-class> </interceptor> <interceptor> <interceptor-class> com.santex.darwin.service.interceptor.WorkflowInterceptor </interceptor-class> </interceptor> </interceptors> <assembly-descriptor> <interceptor-binding> <ejb-name>*</ejb-name> <interceptor-class> org.jboss.seam.ejb.SeamInterceptor </interceptor-class> <interceptor-class> com.santex.darwin.service.interceptor.WorkflowInterceptor </interceptor-class> </interceptor-binding> </assembly-descriptor> </ejb-jar>
my workflowInterceptor is:
package com.santex.darwin.service.interceptor; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; import org.jboss.seam.contexts.Contexts; /** * * @author Juan Giovanolli * 29/12/2006 */ public class WorkflowInterceptor { @AroundInvoke public Object manageWorkflowRuntime(final InvocationContext invocation) throws Exception { if (invocation.getMethod().isAnnotationPresent(StartActivity.class)) { System.out.println("tiene el start"); } if (invocation.getMethod().isAnnotationPresent(EndActivity.class)) { System.out.println("tiene el end"); } return invocation.proceed(); } }
and my startActivity and endactivity annotations are
/** * */ package com.santex.darwin.service.interceptor; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.interceptor.Interceptors; /** * @author Juan Giovanolli * 02/01/2007 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) //@Interceptors(WorkflowInterceptor.class) public @interface StartActivity { }
/** * */ package com.santex.darwin.service.interceptor; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.interceptor.Interceptors; /** * @author Juan Giovanolli * 02/01/2007 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) //@Interceptors(WorkflowInterceptor.class) public @interface EndActivity { }
the class where i testing this is this:
package com.santex.darwin.example; import javax.ejb.Remove; import javax.interceptor.Interceptors; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.CreateProcess; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.EndTask; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.StartTask; import org.jboss.seam.core.TaskInstance; import org.jboss.seam.ejb.SeamInterceptor; import com.santex.darwin.core.workflow.Task; import com.santex.darwin.service.core.workflow.WorkflowManager; import com.santex.darwin.service.interceptor.EndActivity; import com.santex.darwin.service.interceptor.StartActivity; import com.santex.darwin.service.interceptor.WorkflowActivity; import com.santex.darwin.service.interceptor.WorkflowInterceptor; /** * * @author Juan Giovanolli 29/11/2006 */ @Name("taskManager") //@WorkflowActivity //@Interceptors(WorkflowInterceptor.class) public class TaskBeanExample implements Task { private String description; @In(create = true) WorkflowManager workflowManager; @Out(scope = ScopeType.BUSINESS_PROCESS) private String a = "S S"; @In(create = true, required = false) org.jbpm.taskmgmt.exe.TaskInstance taskInstance; public String getA() { return a; } public void setA(String a) { this.a = a; } /** * @return the description */ public String getDescription() { return description; } /** * @param description * the description to set */ public void setDescription(String pDescription) { this.description = pDescription; } @StartTask @StartActivity public String startTask() { // System.out.println(workflowManagerImpl.getPendingTasks("sdfg")); System.out.println("ddddddddddddddddddddddddddddddddd" + a); a = ">>>>>VAR IN START<<<<<"; try { System.out.println(">>>>>>>>>>startTask1" + taskInstance.getId() + " VARIABLES: " + taskInstance.getVariables().toString()); taskInstance.setVariable("a1", a); System.out.println(">>>>>>>>>>startTask2" + taskInstance.getId() + " VARIABLES: " + taskInstance.getVariables().toString()); } catch (Exception e) { e.printStackTrace(); } return ""; } @EndTask @EndActivity public String endTask() { System.out.println("ddddddddddddddddddddddddddddddddd" + a); a = ">>>>>VAR IN END<<<<<"; try { System.out.println(">>>>>>>>>>endTask1" + taskInstance.getId() + " VARIABLES: " + taskInstance.getVariables().toString()); taskInstance.setVariable("a2", a); System.out.println(">>>>>>>>>>endTask2" + taskInstance.getId() + " VARIABLES: " + taskInstance.getVariables().toString()); } catch (Exception e) { e.printStackTrace(); } return ""; } @Remove @Destroy public void destroy() { } @CreateProcess(definition = "ProcessAbstract") public String startProcess() { return ""; } }