[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