Author: julien(a)jboss.com
Date: 2008-06-01 11:04:10 -0400 (Sun, 01 Jun 2008)
New Revision: 10886
Modified:
modules/common/trunk/build/pom.xml
modules/common/trunk/mc/pom.xml
modules/common/trunk/mc/src/main/java/org/jboss/portal/common/mc/bootstrap/WebBootstrap.java
Log:
update mc bootstrap to inject the ServletContext as an MC bean as it could be injected in
dependant services
Modified: modules/common/trunk/build/pom.xml
===================================================================
--- modules/common/trunk/build/pom.xml 2008-06-01 15:03:26 UTC (rev 10885)
+++ modules/common/trunk/build/pom.xml 2008-06-01 15:04:10 UTC (rev 10886)
@@ -21,6 +21,7 @@
<version.log4j>1.2.14</version.log4j>
<version.apache.commons-httpclient>3.0.1</version.apache.commons-httpclient>
<version.jboss.microcontainer>2.0.0.Beta13</version.jboss.microcontainer>
+ <version.jboss.man>2.0.0.Beta12</version.jboss.man>
<version.cargo>0.8</version.cargo>
<version.junit>3.8.1</version.junit>
<version.ant>1.6.5</version.ant>
@@ -138,6 +139,12 @@
<version>${version.jboss.microcontainer}</version>
</dependency>
+ <dependency>
+ <groupId>org.jboss.man</groupId>
+ <artifactId>jboss-managed</artifactId>
+ <version>${version.jboss.man}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
Modified: modules/common/trunk/mc/pom.xml
===================================================================
--- modules/common/trunk/mc/pom.xml 2008-06-01 15:03:26 UTC (rev 10885)
+++ modules/common/trunk/mc/pom.xml 2008-06-01 15:04:10 UTC (rev 10886)
@@ -19,6 +19,11 @@
</dependency>
<dependency>
+ <groupId>org.jboss.man</groupId>
+ <artifactId>jboss-managed</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>apache-log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
Modified:
modules/common/trunk/mc/src/main/java/org/jboss/portal/common/mc/bootstrap/WebBootstrap.java
===================================================================
---
modules/common/trunk/mc/src/main/java/org/jboss/portal/common/mc/bootstrap/WebBootstrap.java 2008-06-01
15:03:26 UTC (rev 10885)
+++
modules/common/trunk/mc/src/main/java/org/jboss/portal/common/mc/bootstrap/WebBootstrap.java 2008-06-01
15:04:10 UTC (rev 10886)
@@ -28,6 +28,10 @@
import org.jboss.kernel.spi.event.KernelEvent;
import org.jboss.kernel.spi.registry.KernelRegistry;
import org.jboss.kernel.spi.registry.KernelRegistryEntry;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractConstructorMetaData;
import org.apache.log4j.Logger;
import javax.servlet.ServletContext;
@@ -37,12 +41,17 @@
import java.net.MalformedURLException;
/**
- * A kernel bootstrap with a life cycle triggered by the
<code>ServletContextListener</code> interface.
+ * <p>A kernel bootstrap with a life cycle triggered by the
<code>ServletContextListener</code> interface.
* All beans will be injected as servlet context attributes. The bean xml file must be
available as
- * a servlet context resource under the path
<i>/WEB-INF/jboss-beans.xml</i>.
+ * a servlet context resource under the path
<i>/WEB-INF/jboss-beans.xml</i>.</p>
*
+ * <p>A special bean with the name <code>ServletContext</code> is
injected in the kernel before the deployment
+ * of the beans from the xml file are deployed. Thus it is possible to inject the servlet
context as a bean
+ * into other beans.</p>
+ *
* @todo specify an alternative logger name
* @todo implement the specification of an alternative xml file path
+ * @todo implement kernel validate ?
*
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
* @version $Revision: 1.1 $
@@ -93,6 +102,9 @@
/** . */
private ActualBootstrap bootstrap;
+ /** . */
+ private KernelControllerContext servletContextControllerContext;
+
public void contextInitialized(ServletContextEvent event)
{
servletContext = event.getServletContext();
@@ -125,6 +137,12 @@
}
//
+ if (servletContextControllerContext != null)
+ {
+ bootstrap.getKernel().getController().uninstall("ServletContext");
+ }
+
+ //
if (registered)
{
registered = false;
@@ -152,23 +170,28 @@
if (context instanceof String)
{
String key = (String)context;
- String type = event.getType();
- if ("KERNEL_REGISTRY_REGISTERED".equals(type))
+
+ // We add/remove every bean except the servlet context itself...
+ if (!"ServletContext".equals(key))
{
- KernelRegistryEntry entry =
bootstrap.getKernel().getRegistry().getEntry(context);
- Object target = entry.getTarget();
- servletContext.setAttribute(key, target);
+ String type = event.getType();
+ if ("KERNEL_REGISTRY_REGISTERED".equals(type))
+ {
+ KernelRegistryEntry entry =
bootstrap.getKernel().getRegistry().getEntry(context);
+ Object target = entry.getTarget();
+
+ servletContext.setAttribute(key, target);
+ }
+ else if ("KERNEL_REGISTRY_UNREGISTERED".equals(type))
+ {
+ servletContext.removeAttribute(key);
+ }
}
- else if ("KERNEL_REGISTRY_UNREGISTERED".equals(type))
- {
- servletContext.removeAttribute(key);
- }
}
}
void boostrap() throws Throwable
{
- //
bootstrap.getKernel().getRegistry().registerListener(WebBootstrap.this, null,
"ABC");
registered = true;
@@ -176,6 +199,14 @@
deployer = new BeanXMLDeployer(bootstrap.getKernel());
//
+ AbstractBeanMetaData beanMD = new AbstractBeanMetaData("ServletContext",
ServletContext.class.getName());
+ AbstractConstructorMetaData ctorMD = new AbstractConstructorMetaData();
+ ctorMD.setFactory(new AbstractValueMetaData(new
ServletContextFactory(servletContext)));
+ ctorMD.setFactoryMethod("getInstance");
+ beanMD.setConstructor(ctorMD);
+ servletContextControllerContext =
bootstrap.getKernel().getController().install(beanMD);
+
+ //
URL url = getBeansURL();
//
Show replies by date