Interceptor interceptor = new Interceptor(SimpleInterceptor.class);
ejbJar.addInterceptor(interceptor);
//Test SessionSynchronization interface
StatefulBean subBeanA = new StatefulBean(SubBeanA.class);
ejbJar.addEnterpriseBean(subBeanA);
assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanA, interceptor));
//Test configure session synchronization callback methods in deployment plan
StatefulBean subBeanB = new StatefulBean(SubBeanB.class);
subBeanB.setAfterBeginMethod(new NamedMethod(SubBeanB.class.getDeclaredMethod("afterBegin")));
subBeanB.setBeforeCompletionMethod(new NamedMethod(SubBeanB.class.getDeclaredMethod("beforeCompletion")));
subBeanB.setAfterCompletionMethod(new NamedMethod(SubBeanB.class.getDeclaredMethod("afterCompletion", boolean.class)));
ejbJar.addEnterpriseBean(subBeanB);
assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanB, interceptor));
//Test session synchronization methods via annotations
StatefulBean subBeanC = new StatefulBean(SubBeanC.class);
ejbJar.addEnterpriseBean(subBeanC);
assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanC, interceptor));
//Test override the annotations by deployment plan
StatefulBean subBeanD = new StatefulBean(SubBeanD.class);
subBeanD.setAfterBeginMethod(new NamedMethod(SubBeanD.class.getDeclaredMethod("afterBeginNew")));
subBeanD.setBeforeCompletionMethod(new NamedMethod(SubBeanD.class.getDeclaredMethod("beforeCompletionNew")));
subBeanD.setAfterCompletionMethod(new NamedMethod(SubBeanD.class.getDeclaredMethod("afterCompletionNew", boolean.class)));
ejbJar.addEnterpriseBean(subBeanD);
assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanD, interceptor));
//Test only one session synchronization method @AfterBegin
StatefulBean subBeanE = new StatefulBean(SubBeanE.class);
ejbJar.addEnterpriseBean(subBeanE);
assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanE, interceptor));
//Test only one session synchronization method @AfterCompletion
StatefulBean subBeanF = new StatefulBean(SubBeanF.class);
ejbJar.addEnterpriseBean(subBeanF);
assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanF, interceptor));
//Test only one session synchronization method @BeforeCompletion
StatefulBean subBeanG = new StatefulBean(SubBeanG.class);
ejbJar.addEnterpriseBean(subBeanG);
assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanG, interceptor));
//Test SessionSynchronization interface but methods are in the parent class
//Interceptor is declared on the bean method
StatefulBean subBeanH = new StatefulBean(SubBeanH.class);
ejbJar.addEnterpriseBean(subBeanH);
//Test SessionSynchronization interface but methods are in the parent class
//using @LocalBean
StatefulBean subBeanI = new StatefulBean(SubBeanI.class);
ejbJar.addEnterpriseBean(subBeanI);
EjbJarInfo ejbJarInfo = config.configureApplication(ejbJar);
assembler.createApplication(ejbJarInfo);
InitialContext context = new InitialContext();