Author: mstruk
Date: 2009-11-16 11:59:51 -0500 (Mon, 16 Nov 2009)
New Revision: 703
Added:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInjectionMode.java
Removed:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java
Modified:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java
kernel/branches/mc-int-branch/pom.xml
Log:
removed some uncooked code, added field injection support
Modified:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java
===================================================================
---
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java 2009-11-16
16:55:59 UTC (rev 702)
+++
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java 2009-11-16
16:59:51 UTC (rev 703)
@@ -21,4 +21,11 @@
* @return true if we should enable AOP, false otherwise
*/
boolean enableAOP() default false;
+
+ /**
+ * Injection mode
+ *
+ * @return MCInjectionMode enumeration constant representing injection mode
+ */
+ MCInjectionMode injectionMode() default MCInjectionMode.STANDARD;
}
Modified:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java
===================================================================
---
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java 2009-11-16
16:55:59 UTC (rev 702)
+++
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java 2009-11-16
16:59:51 UTC (rev 703)
@@ -2,6 +2,7 @@
import java.lang.ref.WeakReference;
+import org.jboss.beans.info.spi.BeanAccessMode;
import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
import org.jboss.dependency.plugins.helpers.StatelessController;
import org.jboss.dependency.spi.ControllerState;
@@ -76,6 +77,7 @@
builder.ignoreStart();
builder.ignoreStop();
builder.ignoreDestroy();
+ builder.setAccessMode(getInjectionMode(interceptMC));
KernelControllerContext ctx = new AbstractKernelControllerContext(null,
builder.getBeanMetaData(), null);
try
@@ -102,6 +104,21 @@
}
}
+ private BeanAccessMode getInjectionMode(InterceptMC interceptMC)
+ {
+ MCInjectionMode mode = interceptMC.injectionMode();
+
+ switch(mode)
+ {
+ case ALL:
+ return BeanAccessMode.ALL;
+ case FIELDS:
+ return BeanAccessMode.FIELDS;
+ default:
+ return BeanAccessMode.STANDARD;
+ }
+ }
+
public void verify(PicoContainer container) throws PicoIntrospectionException
{
delegate.verify(container);
Added:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInjectionMode.java
===================================================================
---
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInjectionMode.java
(rev 0)
+++
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInjectionMode.java 2009-11-16
16:59:51 UTC (rev 703)
@@ -0,0 +1,16 @@
+package org.exoplatform.container.mc;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public enum MCInjectionMode
+{
+ /** Field and method injections */
+ ALL,
+
+ /** Disable field injections (default) */
+ FIELDS,
+
+ /** Try setter injection first, if no setter found, fallback to field */
+ STANDARD
+}
Deleted:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java
===================================================================
---
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java 2009-11-16
16:55:59 UTC (rev 702)
+++
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java 2009-11-16
16:59:51 UTC (rev 703)
@@ -1,71 +0,0 @@
-package org.exoplatform.container.mc;
-
-import java.security.ProtectionDomain;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.CtMethod;
-import javassist.LoaderClassPath;
-import org.jboss.beans.metadata.api.annotations.Inject;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.kernel.Kernel;
-import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants;
-import org.jboss.util.loading.Translator;
-import org.jboss.mc.common.ThreadLocalUtils;
-
-public class RootContainerVDFDecoratorInjector implements Translator
-{
- @SuppressWarnings({"UnusedDeclaration"})
- private Kernel kernel;
- private ClassLoaderSystem system;
-
- private static final String RC_CLASSNAME =
"org.exoplatform.container.RootContainer";
- private boolean found;
-
- public void start()
- {
- system.addTranslator(this);
- }
-
- public void stop()
- {
- system.removeTranslator(this);
- }
-
- protected byte[] decorate() throws Exception
- {
- ClassPool pool = ClassPool.getDefault();
- pool.insertClassPath(new
LoaderClassPath(Thread.currentThread().getContextClassLoader()));
- CtClass cc = pool.get(RC_CLASSNAME);
- CtMethod m = cc.getDeclaredMethod("getInstance");
- m.insertBefore(ThreadLocalUtils.class.getName() + ".putKernel(kernel);\ntry
{\n");
- m.insertAfter("\n } finally { \n" + ThreadLocalUtils.class.getName() +
".removeKernel();\n }");
- return cc.toBytecode();
- }
-
- public byte[] transform(ClassLoader classLoader, String s, Class<?> aClass,
ProtectionDomain protectionDomain, byte[] bytes) throws Exception
- {
- if (found == false && RC_CLASSNAME.equals(s))
- {
- found = true;
- return decorate();
- }
- return bytes;
- }
-
- public void unregisterClassLoader(ClassLoader classLoader)
- {
- }
-
- @Inject(bean = KernelConstants.KERNEL_NAME)
- public void setKernel(Kernel kernel)
- {
- this.kernel = kernel;
- }
-
- @Inject
- public void setSystem(ClassLoaderSystem system)
- {
- this.system = system;
- }
-}
Modified:
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java
===================================================================
---
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java 2009-11-16
16:55:59 UTC (rev 702)
+++
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java 2009-11-16
16:59:51 UTC (rev 703)
@@ -1,6 +1,7 @@
package org.exoplatform.kernel.demos.mc;
import org.exoplatform.container.mc.InterceptMC;
+import org.exoplatform.container.mc.MCInjectionMode;
import org.jboss.beans.metadata.api.annotations.EntryValue;
import org.jboss.beans.metadata.api.annotations.Inject;
import org.jboss.beans.metadata.api.annotations.MapValue;
@@ -20,7 +21,8 @@
*
* @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
*/
-@InterceptMC
+// Enable field injection by setting injectionMode
+@InterceptMC(injectionMode= MCInjectionMode.ALL)
public class InjectingBean implements org.picocontainer.Startable
{
private static final Logger log = Logger.getLogger(InjectingBean.class);
@@ -28,6 +30,7 @@
private InjectedBean bean1;
private KernelConfigurator configurator;
+ // Avoid using field injection, it's an anti-pattern
@Inject(bean = "InjectedBean")
private InjectedBean injectedBean;
Modified: kernel/branches/mc-int-branch/pom.xml
===================================================================
--- kernel/branches/mc-int-branch/pom.xml 2009-11-16 16:55:59 UTC (rev 702)
+++ kernel/branches/mc-int-branch/pom.xml 2009-11-16 16:59:51 UTC (rev 703)
@@ -39,7 +39,7 @@
<exo.product.name>exo-kernel</exo.product.name>
<exo.product.specification>2.2</exo.product.specification>
<org.jboss.mc>2.0.6.GA</org.jboss.mc>
- <org.jboss.mc-int>2.2.0-SNAPSHOT</org.jboss.mc-int>
+ <org.jboss.mc-int>2.2.0.Alpha2</org.jboss.mc-int>
<version.jboss.classloader>2.0.7.GA</version.jboss.classloader>
<forkMode>always</forkMode>
</properties>
Show replies by date