Add @AroundConstruct test case to mimic what the TCK does. See if people can jump and help on this one.
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/interceptors/EjbModuleOnlyInterceptorsTest.java b/container/openejb-core/src/test/java/org/apache/openejb/interceptors/EjbModuleOnlyInterceptorsTest.java
new file mode 100644
index 0000000..b27d039
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/interceptors/EjbModuleOnlyInterceptorsTest.java
@@ -0,0 +1,196 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.interceptors;
+
+import org.apache.openejb.core.OpenEJBInitialContextFactory;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testng.PropertiesBuilder;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.interceptor.AroundConstruct;
+import javax.interceptor.ExcludeDefaultInterceptors;
+import javax.interceptor.Interceptors;
+import javax.interceptor.InvocationContext;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(ApplicationComposer.class)
+@Classes(innerClassesAsBean = true) // don't activate CDI here because on TCK it won't get activated
+public class EjbModuleOnlyInterceptorsTest {
+
+ @EJB
+ private InterceptorBean interceptorBean;
+
+ @EJB
+ private HistorySingletonBean historySingletonBean;
+
+ @Before
+ public void setUp() throws Exception {
+ final Context ctx = new InitialContext(new PropertiesBuilder()
+ .p(Context.INITIAL_CONTEXT_FACTORY,
+ OpenEJBInitialContextFactory.class.getName())
+ .build());
+ ctx.bind("inject", this);
+ }
+
+ @Test
+ public void allInterceptorsUsed() throws Exception {
+ assertNotNull(interceptorBean);
+ final List<String> postConstructRecordsFor = historySingletonBean.getPostConstructRecordsFor();
+
+ // todo, when we have an idea about the fix, we can add asserts so build does not fail for now
+ // this is a placeholder for people to jump in and help, because I'm getting a bit stuck on this one.
+ System.out.println(postConstructRecordsFor);
+ }
+
+ @Singleton
+ @Startup
+ @ExcludeDefaultInterceptors
+ @Interceptors({
+ InterceptorColor.class,
+ InterceptorJuice.class
+ })
+ public static class InterceptorBean extends InterceptorBeanBase {
+ private static final String simpleName = "InterceptorBean";
+
+ @PostConstruct
+ protected void postConstruct() {
+ this.historySingletonBean.addPostConstructRecordFor(simpleName);
+ }
+
+ }
+
+ public static abstract class InterceptorBeanBase {
+ private static final String simpleName = "InterceptorBeanBase";
+
+ @EJB
+ protected HistorySingletonBean historySingletonBean;
+
+ @PostConstruct
+ protected void postConstructInInterceptorBeanBase() {
+ this.historySingletonBean.addPostConstructRecordFor(simpleName);
+ }
+
+ public HistorySingletonBean getHistorySingletonBean() {
+ return this.historySingletonBean;
+ }
+ }
+
+ public static class InterceptorColor extends InterceptorJuice {
+ private static final String simpleName = "InterceptorColor";
+
+ @AroundConstruct
+ private void aroundConstruct(InvocationContext ic) {
+ Object savedTarget = ic.getTarget();
+ try {
+ ic.proceed();
+
+ } catch (final Exception ex) {
+ this.historySingletonBean.addPostConstructRecordFor(ex.toString());
+ return;
+ }
+ if (savedTarget != null) {
+ this.historySingletonBean.addPostConstructRecordFor("NotNullTargetBeforeProceed");
+ return;
+ }
+ this.historySingletonBean.addPostConstructRecordFor(simpleName);
+ }
+ }
+
+ public static class InterceptorJuice extends InterceptorBase {
+ private static final String simpleName = "InterceptorJuice";
+
+ @AroundConstruct
+ private void aroundConstruct(InvocationContext ic) {
+ Object savedTarget = ic.getTarget();
+ try {
+ ic.proceed();
+
+ } catch (final Exception ex) {
+ this.historySingletonBean.addPostConstructRecordFor(ex.toString());
+ return;
+ }
+ if (savedTarget != null) {
+ this.historySingletonBean.addPostConstructRecordFor("NotNullTargetBeforeProceed");
+ return;
+ }
+ this.historySingletonBean.addPostConstructRecordFor(simpleName);
+ }
+ }
+
+ public static abstract class InterceptorBase extends InterceptorBaseBase {
+ private static final String simpleName = "InterceptorBase";
+
+ @PostConstruct
+ private void postConstruct(InvocationContext inv) {
+ this.historySingletonBean.addPostConstructRecordFor(simpleName);
+ try {
+ inv.proceed();
+
+ } catch (final Exception ex) {
+ this.historySingletonBean.addPostConstructRecordFor(ex.toString());
+ }
+ }
+ }
+
+ public static abstract class InterceptorBaseBase {
+ private static final String simpleName = "InterceptorBaseBase";
+
+ @EJB
+ protected HistorySingletonBean historySingletonBean;
+
+ @PostConstruct
+ protected void postConstructInInterceptorBaseBase(InvocationContext inv) {
+ this.historySingletonBean.addPostConstructRecordFor(simpleName);
+ try {
+ inv.proceed();
+
+ } catch (final Exception ex) {
+ this.historySingletonBean.addPostConstructRecordFor(ex.toString());
+ }
+ }
+
+ }
+
+ @Startup
+ @Singleton
+ @ExcludeDefaultInterceptors
+ public static class HistorySingletonBean {
+ private List<String> postConstructRecordsMap = new ArrayList<>();
+
+ public List<String> getPostConstructRecordsFor() {
+ return Collections.unmodifiableList(postConstructRecordsMap);
+ }
+
+ public void addPostConstructRecordFor(final String aEntry) {
+ postConstructRecordsMap.add(aEntry);
+ }
+
+ }
+}