[weld-commits] Weld SVN: r4827 - in extensions/trunk/servlet: int/src/main/java/org/jboss/weld/environment/servlet and 4 other directories.
weld-commits at lists.jboss.org
weld-commits at lists.jboss.org
Sun Nov 8 22:56:45 EST 2009
Author: dan.j.allen
Date: 2009-11-08 22:56:44 -0500 (Sun, 08 Nov 2009)
New Revision: 4827
Added:
extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/util/ForwardingELResolver.java
Modified:
extensions/trunk/servlet/int/pom.xml
extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/Listener.java
extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/AbstractScanner.java
extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/URLScanner.java
extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/jsf/WeldApplication.java
extensions/trunk/servlet/tests/pom.xml
Log:
WELDX-44
Introduce a delegating ELResolver that plugs in the ELResolver when it becomes available
Remove weld-logging dependencies in favor of slf4j
Modified: extensions/trunk/servlet/int/pom.xml
===================================================================
--- extensions/trunk/servlet/int/pom.xml 2009-11-09 03:55:27 UTC (rev 4826)
+++ extensions/trunk/servlet/int/pom.xml 2009-11-09 03:56:44 UTC (rev 4827)
@@ -39,11 +39,6 @@
</dependency>
<dependency>
- <groupId>org.jboss.weld</groupId>
- <artifactId>weld-logging</artifactId>
- </dependency>
-
- <dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>catalina</artifactId>
<version>6.0.18</version>
@@ -67,6 +62,23 @@
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jcl</artifactId>
+ <version>1.5.8</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+ <scope>runtime</scope>
+ </dependency>
</dependencies>
Modified: extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/Listener.java
===================================================================
--- extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/Listener.java 2009-11-09 03:55:27 UTC (rev 4826)
+++ extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/Listener.java 2009-11-09 03:56:44 UTC (rev 4827)
@@ -17,7 +17,6 @@
package org.jboss.weld.environment.servlet;
import javax.el.ELContextListener;
-import javax.enterprise.inject.spi.BeanManager;
import javax.servlet.ServletContextEvent;
import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspFactory;
@@ -32,19 +31,19 @@
import org.jboss.weld.environment.servlet.util.Reflections;
import org.jboss.weld.environment.tomcat.WeldAnnotationProcessor;
import org.jboss.weld.injection.spi.ResourceInjectionServices;
-import org.jboss.weld.log.Log;
-import org.jboss.weld.log.Logging;
import org.jboss.weld.manager.api.WeldManager;
import org.jboss.weld.servlet.api.ServletListener;
import org.jboss.weld.servlet.api.ServletServices;
import org.jboss.weld.servlet.api.helpers.ForwardingServletListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* @author Pete Muir
*/
public class Listener extends ForwardingServletListener
-{
- private static final Log log = Logging.getLog(Listener.class);
+{
+ private static final Logger log = LoggerFactory.getLogger(Listener.class);
private static final String BOOTSTRAP_IMPL_CLASS_NAME = "org.jboss.weld.bootstrap.WeldBootstrap";
private static final String WELD_LISTENER_CLASS_NAME = "org.jboss.weld.servlet.WeldListener";
@@ -55,7 +54,7 @@
private final transient ServletListener weldListener;
private WeldManager manager;
- public Listener()
+ public Listener()
{
try
{
@@ -79,7 +78,6 @@
public void contextDestroyed(ServletContextEvent sce)
{
bootstrap.shutdown();
- sce.getServletContext().removeAttribute(BeanManager.class.getName());
sce.getServletContext().removeAttribute(WeldAnnotationProcessor.class.getName());
super.contextDestroyed(sce);
}
@@ -90,8 +88,6 @@
BeanStore applicationBeanStore = new ConcurrentHashMapBeanStore();
sce.getServletContext().setAttribute(APPLICATION_BEAN_STORE_ATTRIBUTE_NAME, applicationBeanStore);
-
-
ServletDeployment deployment = new ServletDeployment(sce.getServletContext());
try
{
@@ -100,11 +96,11 @@
}
catch (NoClassDefFoundError e)
{
- // Support GAE
+ // Support GAE
log.warn("@Resource injection not available in simple beans");
}
- deployment.getServices().add(ServletServices.class,
+ deployment.getServices().add(ServletServices.class,
new ServletServicesImpl(deployment.getWebAppBeanDeploymentArchive()));
bootstrap.startContainer(Environments.SERVLET, deployment, applicationBeanStore).startInitialization();
@@ -115,7 +111,7 @@
{
Reflections.classForName("org.apache.AnnotationProcessor");
}
- catch (IllegalArgumentException e)
+ catch (IllegalArgumentException e)
{
log.info("JSR-299 injection will not be available in Servlets, Filters etc. This facility is only available in Tomcat");
tomcat = false;
@@ -130,14 +126,13 @@
Object annotationProcessor = clazz.getConstructor(WeldManager.class).newInstance(manager);
sce.getServletContext().setAttribute(WeldAnnotationProcessor.class.getName(), annotationProcessor);
}
- catch (Exception e)
+ catch (Exception e)
{
log.error("Unable to create Tomcat AnnotationProcessor. JSR-299 injection will not be available in Servlets, Filters etc.", e);
}
}
// Push the manager into the servlet context so we can access in JSF
- sce.getServletContext().setAttribute(BeanManager.class.getName(), manager);
if (JspFactory.getDefaultFactory() != null)
{
@@ -151,7 +146,7 @@
newInstance("org.jboss.weld.el.WeldELContextListener"));
// Push the wrapped expression factory into the servlet context so that Tomcat or Jetty can hook it in using a container code
- sce.getServletContext().setAttribute(EXPRESSION_FACTORY_NAME,
+ sce.getServletContext().setAttribute(EXPRESSION_FACTORY_NAME,
manager.wrapExpressionFactory(jspApplicationContext.getExpressionFactory()));
}
@@ -159,8 +154,6 @@
super.contextInitialized(sce);
}
-
-
@Override
protected ServletListener delegate()
{
Modified: extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/AbstractScanner.java
===================================================================
--- extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/AbstractScanner.java 2009-11-09 03:55:27 UTC (rev 4826)
+++ extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/AbstractScanner.java 2009-11-09 03:56:44 UTC (rev 4827)
@@ -18,8 +18,8 @@
import java.net.URL;
-import org.jboss.weld.log.Log;
-import org.jboss.weld.log.Logging;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Abstract base class for {@link Scanner} providing common functionality
@@ -32,7 +32,8 @@
public abstract class AbstractScanner implements Scanner
{
- private static final Log log = Logging.getLog(Scanner.class);
+ private static final Logger log = LoggerFactory.getLogger(Scanner.class);
+
private final ClassLoader classLoader;
private final WebAppBeanDeploymentArchive webAppBeanDeploymentArchive;
Modified: extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/URLScanner.java
===================================================================
--- extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/URLScanner.java 2009-11-09 03:55:27 UTC (rev 4826)
+++ extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/deployment/URLScanner.java 2009-11-09 03:56:44 UTC (rev 4827)
@@ -29,8 +29,8 @@
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
-import org.jboss.weld.log.Log;
-import org.jboss.weld.log.Logging;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Implementation of {@link Scanner} which can scan a {@link URLClassLoader}
@@ -43,7 +43,7 @@
*/
public class URLScanner extends AbstractScanner
{
- private static final Log log = Logging.getLog(URLScanner.class);
+ private static final Logger log = LoggerFactory.getLogger(URLScanner.class);
public URLScanner(ClassLoader classLoader, WebAppBeanDeploymentArchive webBeanDiscovery)
{
Modified: extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/jsf/WeldApplication.java
===================================================================
--- extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/jsf/WeldApplication.java 2009-11-09 03:55:27 UTC (rev 4826)
+++ extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/jsf/WeldApplication.java 2009-11-09 03:56:44 UTC (rev 4827)
@@ -9,7 +9,7 @@
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
@@ -17,39 +17,69 @@
package org.jboss.weld.environment.servlet.jsf;
import javax.el.ELContextListener;
+import javax.el.ELResolver;
import javax.el.ExpressionFactory;
import javax.enterprise.inject.spi.BeanManager;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
+import org.jboss.weld.environment.servlet.util.ForwardingELResolver;
import org.jboss.weld.environment.servlet.util.Reflections;
/**
- * @author pmuir
- *
+ * @author Pete Muir
+ * @author Dan Allen
*/
public class WeldApplication extends ForwardingApplication
{
+ /**
+ * The BeanManager may not have been initialized at the time JSF is initializing. Therefore,
+ * we stick in an ELResolver that delegates to the BeanManager ELResolver, which will
+ * be plugged in when it's available. If the ELResolver is invoked before the BeanManager
+ * is available, an IllegalStateException is thrown (is this the desired behavior?)
+ */
+ private static class LazyBeanManagerIntegrationELResolver extends ForwardingELResolver
+ {
+ private ELResolver delegate = null;
+
+ public void beanManagerReady(BeanManager beanManager)
+ {
+ this.delegate = beanManager.getELResolver();
+ }
+
+ @Override
+ protected ELResolver delegate()
+ {
+ if (delegate == null) {
+ throw new IllegalStateException("Attempt to use JSR-299 ELResolver before BeanManager initialized.");
+ }
+ return delegate;
+ }
+ }
- private static final ELContextListener[] EMPTY_LISTENERS = {};
-
private final Application application;
+ private LazyBeanManagerIntegrationELResolver elResolver;
private ExpressionFactory expressionFactory;
private BeanManager beanManager;
public WeldApplication(Application application)
{
this.application = application;
+ // QUESTION should the context listener be registered in init() instead?
+ application.addELContextListener(Reflections.<ELContextListener>newInstance("org.jboss.weld.el.WeldELContextListener"));
+ elResolver = new LazyBeanManagerIntegrationELResolver();
+ application.addELResolver(elResolver);
}
private void init()
{
- if (expressionFactory == null && application.getExpressionFactory() != null && beanManager() != null)
+ ExpressionFactory expressionFactory = null;
+ BeanManager beanManager = null;
+ if (expressionFactory == null && (expressionFactory = application.getExpressionFactory()) != null && (beanManager = beanManager()) != null)
{
- application.addELContextListener(Reflections.<ELContextListener>newInstance("org.jboss.weld.el.WeldELContextListener"));
- application.addELResolver(beanManager().getELResolver());
- this.expressionFactory = beanManager().wrapExpressionFactory(application.getExpressionFactory());
+ elResolver.beanManagerReady(beanManager);
+ this.expressionFactory = beanManager.wrapExpressionFactory(expressionFactory);
}
}
@@ -90,8 +120,8 @@
}
this.beanManager = (BeanManager) ctx.getAttribute(BeanManager.class.getName());
}
+
return beanManager;
-
}
}
Added: extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/util/ForwardingELResolver.java
===================================================================
--- extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/util/ForwardingELResolver.java (rev 0)
+++ extensions/trunk/servlet/int/src/main/java/org/jboss/weld/environment/servlet/util/ForwardingELResolver.java 2009-11-09 03:56:44 UTC (rev 4827)
@@ -0,0 +1,88 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed 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
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 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.jboss.weld.environment.servlet.util;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+
+/**
+ * Copied from Weld core. Consider putting this class in the SPI?
+ *
+ * @author Dan Allen
+ */
+public abstract class ForwardingELResolver extends ELResolver
+{
+ protected abstract ELResolver delegate();
+
+ @Override
+ public Class<?> getCommonPropertyType(ELContext context, Object base)
+ {
+ return delegate().getCommonPropertyType(context, base);
+ }
+
+ @Override
+ public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base)
+ {
+ return delegate().getFeatureDescriptors(context, base);
+ }
+
+ @Override
+ public Class<?> getType(ELContext context, Object base, Object property)
+ {
+ return delegate().getType(context, base, property);
+ }
+
+ @Override
+ public Object getValue(ELContext context, Object base, Object property)
+ {
+ return delegate().getValue(context, base, property);
+ }
+
+ @Override
+ public boolean isReadOnly(ELContext context, Object base, Object property)
+ {
+ return delegate().isReadOnly(context, base, property);
+ }
+
+ @Override
+ public void setValue(ELContext context, Object base, Object property, Object value)
+ {
+ delegate().setValue(context, base, property, value);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ return this == obj || delegate().equals(obj);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return delegate().hashCode();
+ }
+
+ @Override
+ public String toString()
+ {
+ return delegate().toString();
+ }
+
+}
Modified: extensions/trunk/servlet/tests/pom.xml
===================================================================
--- extensions/trunk/servlet/tests/pom.xml 2009-11-09 03:55:27 UTC (rev 4826)
+++ extensions/trunk/servlet/tests/pom.xml 2009-11-09 03:56:44 UTC (rev 4827)
@@ -115,7 +115,13 @@
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
</dependency>
-
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<build>
More information about the weld-commits
mailing list