Author: pete.muir(a)jboss.org
Date: 2008-11-20 00:46:31 -0500 (Thu, 20 Nov 2008)
New Revision: 333
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/Bootstrap.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java
Log:
Changes to bootstrap for keeping servlet bootstrap inside ServletLifecycle
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/Bootstrap.java
===================================================================
---
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/Bootstrap.java 2008-11-20
03:20:08 UTC (rev 332)
+++
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/Bootstrap.java 2008-11-20
05:46:31 UTC (rev 333)
@@ -6,7 +6,6 @@
import java.util.Arrays;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import org.jboss.webbeans.ManagerImpl;
@@ -21,12 +20,11 @@
public class Bootstrap
{
- private LogProvider log = Logging.getLogProvider(Bootstrap.class);
+ public static String WEB_BEAN_DISCOVERY_PROPERTY_NAME =
"org.jboss.webbeans.bootstrap.webBeanDiscovery";
- private static String WEB_BEAN_DISCOVERY_PROPERTY_NAME =
"org.jboss.webbeans.bootstrap.webBeanDiscovery";
+ private static LogProvider log = Logging.getLogProvider(Bootstrap.class);
private ManagerImpl manager;
- private DeploymentProperties deploymentProperties;
public Bootstrap()
{
@@ -36,53 +34,8 @@
protected Bootstrap(ManagerImpl manager)
{
this.manager = manager;
- this.deploymentProperties = new
DeploymentProperties(Thread.currentThread().getContextClassLoader());
}
- protected List<String> getWebBeanDiscoveryClassNames()
- {
- return deploymentProperties.getPropertyValues(WEB_BEAN_DISCOVERY_PROPERTY_NAME);
- }
-
- public void discoverBeans()
- {
- WebBeanDiscovery webBeanDiscovery = null;
- for (String className : getWebBeanDiscoveryClassNames())
- {
- Class<WebBeanDiscovery> webBeanDiscoveryClass = null;
- try
- {
- webBeanDiscoveryClass = (Class<WebBeanDiscovery>)
Class.forName(className);
- }
- catch (ClassNotFoundException e)
- {
- log.debug("Unable to load WebBeanDiscovery provider " + className,
e);
- }
- catch (NoClassDefFoundError e) {
- log.warn("Unable to load WebBeanDiscovery provider " + className +
" due classDependencyProblem", e);
- }
-
- try
- {
- webBeanDiscovery = webBeanDiscoveryClass.newInstance();
- break;
- }
- catch (InstantiationException e)
- {
- log.warn("Error creating WebBeanDiscovery provider" + className,
e);
- }
- catch (IllegalAccessException e)
- {
- log.warn("Error creating WebBeanDiscovery provider" + className,
e);
- }
- }
- if (webBeanDiscovery == null)
- {
- throw new IllegalStateException("No WebBeanDiscovery provider found, you
need to implement the org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery interface, and
tell the RI to use it by specifying -D" + WEB_BEAN_DISCOVERY_PROPERTY_NAME +
"=<classname>");
- }
- registerBeans(webBeanDiscovery.discoverWebBeanClasses());
- }
-
/**
* Register any beans defined by the provided classes with the manager
*/
@@ -130,9 +83,49 @@
beans.add(producerMethodBean);
manager.getResolver().addInjectionPoints(producerMethodBean.getInjectionPoints());
}
-
+ log.info("Web Bean: " + bean);
}
return beans;
}
+
+ public void boot(WebBeanDiscovery webBeanDiscovery)
+ {
+ log.info("Starting Web Beans RI " + getVersion());
+ if (webBeanDiscovery == null)
+ {
+ throw new IllegalStateException("No WebBeanDiscovery provider found, you
need to implement the org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery interface, and
tell the RI to use it by specifying -D" + Bootstrap.WEB_BEAN_DISCOVERY_PROPERTY_NAME
+ "=<classname>");
+ }
+ registerBeans(webBeanDiscovery.discoverWebBeanClasses());
+ }
+ public static String getVersion()
+ {
+ Package pkg = Bootstrap.class.getPackage();
+ return pkg != null ? pkg.getImplementationVersion() : null;
+ }
+
+
+ public static Set<Class<? extends WebBeanDiscovery>>
getWebBeanDiscoveryClasses()
+ {
+ Set<Class<? extends WebBeanDiscovery>> webBeanDiscoveryClasses = new
HashSet<Class<? extends WebBeanDiscovery>>();
+ for (String className : new
DeploymentProperties(Thread.currentThread().getContextClassLoader()).getPropertyValues(WEB_BEAN_DISCOVERY_PROPERTY_NAME))
+ {
+ Class<WebBeanDiscovery> webBeanDiscoveryClass = null;
+ try
+ {
+ webBeanDiscoveryClasses.add((Class<WebBeanDiscovery>)
Class.forName(className));
+ }
+ catch (ClassNotFoundException e)
+ {
+ log.debug("Unable to load WebBeanDiscovery provider " + className,
e);
+ }
+ catch (NoClassDefFoundError e) {
+ log.warn("Unable to load WebBeanDiscovery provider " + className +
" due classDependencyProblem", e);
+ }
+ }
+ return webBeanDiscoveryClasses;
+ }
+
+
+
}
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java
===================================================================
---
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java 2008-11-20
03:20:08 UTC (rev 332)
+++
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java 2008-11-20
05:46:31 UTC (rev 333)
@@ -1,23 +1,36 @@
package org.jboss.webbeans.servlet;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.webbeans.SessionScoped;
import org.jboss.webbeans.ManagerImpl;
+import org.jboss.webbeans.bootstrap.Bootstrap;
+import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
import org.jboss.webbeans.contexts.SessionContext;
+import org.jboss.webbeans.log.LogProvider;
+import org.jboss.webbeans.log.Logging;
import org.jboss.webbeans.util.JNDI;
+import org.jboss.webbeans.util.Reflections;
public class ServletLifecycle
{
+
+ private static LogProvider log = Logging.getLogProvider(ServletLifecycle.class);
+
private static final String MANAGER_JNDI_KEY = "java:comp/Manager";
private static ServletContext servletContext;
public static void beginApplication(ServletContext context)
{
- servletContext = context;
+ servletContext = context;
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.boot(getWebBeanDiscovery());
}
public static void endApplication() {
@@ -45,4 +58,40 @@
return servletContext;
}
+ // TODO move some of this bootstrap for reuse outside Servlet
+ private static WebBeanDiscovery getWebBeanDiscovery()
+ {
+ WebBeanDiscovery webBeanDiscovery = null;
+
+ for (Class<? extends WebBeanDiscovery> clazz :
Bootstrap.getWebBeanDiscoveryClasses())
+ {
+ Constructor<? extends WebBeanDiscovery> constructor =
Reflections.getConstructor(clazz, ServletContext.class);
+ if (constructor != null)
+ {
+ try
+ {
+ webBeanDiscovery = constructor.newInstance(servletContext);
+ break;
+ }
+ catch (InstantiationException e)
+ {
+ log.warn("Error creating WebBeanDiscovery provider" +
clazz.getName(), e);
+ }
+ catch (IllegalAccessException e)
+ {
+ log.warn("Error creating WebBeanDiscovery provider" +
clazz.getName(), e);
+ }
+ catch (IllegalArgumentException e)
+ {
+ log.warn("Error creating WebBeanDiscovery provider" +
clazz.getName(), e);
+ }
+ catch (InvocationTargetException e)
+ {
+ log.warn("Error creating WebBeanDiscovery provider" +
clazz.getName(), e);
+ }
+ }
+ }
+ return webBeanDiscovery;
+ }
+
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java
===================================================================
---
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java 2008-11-20
03:20:08 UTC (rev 332)
+++
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java 2008-11-20
05:46:31 UTC (rev 333)
@@ -1,10 +1,8 @@
package org.jboss.webbeans.test;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -25,7 +23,6 @@
import org.jboss.webbeans.test.beans.Tiger;
import org.jboss.webbeans.test.beans.Tuna;
import org.jboss.webbeans.test.ejb.model.valid.Hound;
-import org.jboss.webbeans.test.mock.MockBootstrap;
import org.jboss.webbeans.test.mock.MockWebBeanDiscovery;
import org.testng.annotations.Test;
@@ -187,24 +184,13 @@
@Test(groups="bootstrap", expectedExceptions=IllegalStateException.class)
public void testDiscoverFails()
{
- bootstrap = new MockBootstrap(manager)
- {
-
- @Override
- protected List<String> getWebBeanDiscoveryClassNames()
- {
- return new ArrayList<String>();
- }
-
- };
- bootstrap.discoverBeans();
+ bootstrap.boot(null);
}
@Test(groups="bootstrap")
public void testDiscover()
{
- MockWebBeanDiscovery.webBeanClasses = new
HashSet<Class<?>>(Arrays.asList(Hound.class, Elephant.class, Panther.class,
Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class));
- bootstrap.discoverBeans();
+ bootstrap.boot(new MockWebBeanDiscovery(new
HashSet<Class<?>>(Arrays.asList(Hound.class, Elephant.class, Panther.class,
Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class)), null, null));
assert manager.getBeans().size() == 9;
Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>,
Bean<?>>();
Modified:
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java
===================================================================
---
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java 2008-11-20
03:20:08 UTC (rev 332)
+++
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java 2008-11-20
05:46:31 UTC (rev 333)
@@ -1,22 +1,11 @@
package org.jboss.webbeans.test.mock;
-import java.util.Arrays;
-import java.util.List;
-
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.bootstrap.Bootstrap;
public class MockBootstrap extends Bootstrap
-{
-
- private static final List<String> MOCK_WEB_BEAN_DISCOVERY_CLASS_NAMES =
Arrays.asList(MockWebBeanDiscovery.class.getName());
+{
- @Override
- protected List<String> getWebBeanDiscoveryClassNames()
- {
- return MOCK_WEB_BEAN_DISCOVERY_CLASS_NAMES;
- }
-
public MockBootstrap(ManagerImpl manager)
{
super(manager);
Modified:
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java
===================================================================
---
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java 2008-11-20
03:20:08 UTC (rev 332)
+++
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java 2008-11-20
05:46:31 UTC (rev 333)
@@ -12,12 +12,20 @@
public class MockWebBeanDiscovery implements WebBeanDiscovery
{
- public static Set<Class<?>> webBeanClasses = new
HashSet<Class<?>>();
+ private Set<Class<?>> webBeanClasses = new
HashSet<Class<?>>();
- public static Set<URL> webBeansXmlFiles = new HashSet<URL>();
+ private Set<URL> webBeansXmlFiles = new HashSet<URL>();
- public static Map<Class<?>, EjbDescriptor<?>> ejbs = new
HashMap<Class<?>, EjbDescriptor<?>>();
+ private Map<Class<?>, EjbDescriptor<?>> ejbs = new
HashMap<Class<?>, EjbDescriptor<?>>();
+ public MockWebBeanDiscovery(Set<Class<?>> webBeanClasses, Set<URL>
webBeansXmlFiles, Map<Class<?>, EjbDescriptor<?>> ejbs)
+ {
+ super();
+ this.webBeanClasses = webBeanClasses;
+ this.webBeansXmlFiles = webBeansXmlFiles;
+ this.ejbs = ejbs;
+ }
+
public Iterable<Class<?>> discoverWebBeanClasses()
{
return webBeanClasses;