[jboss-user] [EJB 3.0] - Re: Make a default interceptor the inner interceptor

pete.muir@jboss.org do-not-reply at jboss.com
Fri Mar 13 06:15:09 EDT 2009


Sorry guys, I was being super confusing here ;-)

First of all, I'm working on the Web Beans interceptor not Seam.

Second, I was just representing the way we add the interceptor as XML, actually we add it programatically in a deployer by manipulating the metadata:

public class WBEjbInterceptorMetadataDeployer extends WebBeansAwareMetadataDeployer<JBossMetaData>
  | {
  |    private static final String INTERCEPTOR_CLASS_NAME = "org.jboss.webbeans.ejb.SessionBeanInterceptor";
  | 
  |    private InterceptorMetaData SBI;
  |    private InterceptorBindingMetaData IBMD;
  | 
  |    public WBEjbInterceptorMetadataDeployer()
  |    {
  |       super(JBossMetaData.class);
  |       
  |       addInput(DeployersUtils.WEB_BEANS_FILES);
  |       addInput("merged." + JBossMetaData.class.getName());
  |       setStage(DeploymentStages.POST_CLASSLOADER);
  | 
  |       // create interceptor metadata instance
  |       SBI = new InterceptorMetaData();
  |       SBI.setInterceptorClass(INTERCEPTOR_CLASS_NAME);
  | 
  |       // create interceptor binding metadata instance
  |       IBMD = new InterceptorBindingMetaData();
  |       InterceptorClassesMetaData interceptorClasses = new InterceptorClassesMetaData();
  |       interceptorClasses.add(INTERCEPTOR_CLASS_NAME);
  |       IBMD.setInterceptorClasses(interceptorClasses);
  |       IBMD.setEjbName("*");
  |    }
  | 
  |    protected void internalDeploy(VFSDeploymentUnit unit, JBossMetaData jbmd, VirtualFile wbXml) throws DeploymentException
  |    {
  |       InterceptorsMetaData interceptors = jbmd.getInterceptors();
  |       if (interceptors == null)
  |       {
  |          InterceptorsMetaData imd = new InterceptorsMetaData();
  |          imd.add(SBI);
  |          EjbJar3xMetaData ejmd = new EjbJar30MetaData();
  |          ejmd.setInterceptors(imd);
  | 
  |          jbmd.merge(null, ejmd);
  |       }
  |       else
  |       {
  |          interceptors.add(SBI); // clone?
  |       }
  | 
  |       JBossAssemblyDescriptorMetaData assemblyDescriptor = jbmd.getAssemblyDescriptor();
  |       if (assemblyDescriptor == null)
  |       {
  |          assemblyDescriptor = new JBossAssemblyDescriptorMetaData();
  |          jbmd.setAssemblyDescriptor(assemblyDescriptor);
  |       }
  |       InterceptorBindingsMetaData interceptorBindings = assemblyDescriptor.getInterceptorBindings();
  |       if (interceptorBindings == null)
  |       {
  |          interceptorBindings = new InterceptorBindingsMetaData();
  |          assemblyDescriptor.setInterceptorBindings(interceptorBindings);
  |       }
  |       // Add this as the first binding in the list so that it is called first...
  |       interceptorBindings.add(0, IBMD); // clone?
  |       
  |       // Check to see there is a defined order; if we aren't first, warn
  |       for (InterceptorBindingMetaData interceptorBinding : interceptorBindings)
  |       {
  |          if (interceptorBinding.getInterceptorOrder() != null && ! interceptorBinding.getInterceptorOrder().isEmpty())
  |          {
  |             if (!INTERCEPTOR_CLASS_NAME.equals(interceptorBinding.getInterceptorOrder().iterator().next()))
  |             {
  |                log.warn("The Web Beans SessionnBeanInterceptor is not the inner most EJB interceptor in this deployment. JSR299 injection may not work correctly. Specify " + INTERCEPTOR_CLASS_NAME + " as the first interceptor in the interceptor ordering for " + interceptorBinding.getEjbName());
  |             }
  |             // TODO automagically make ours the first?
  |          }
  |       }
  |    }
  | }

This includes adding our interceptor as the 0th interceptor, and ommitting a warn if people order interceptors, and ours isn't first.
This includes the change I wrote about -

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4217776#4217776

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4217776



More information about the jboss-user mailing list