[webbeans-commits] Webbeans SVN: r3794 - in extensions/trunk/wicket: src/main and 3 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Mon Sep 28 17:44:26 EDT 2009


Author: cpopetz
Date: 2009-09-28 17:44:25 -0400 (Mon, 28 Sep 2009)
New Revision: 3794

Added:
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/BeanManagerLookup.java
   extensions/trunk/wicket/src/main/resources/
   extensions/trunk/wicket/src/main/resources/META-INF/
   extensions/trunk/wicket/src/main/resources/META-INF/beans.xml
Modified:
   extensions/trunk/wicket/pom.xml
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java
Log:
Update for PFD2, use non-contextual-injection SPI.

Modified: extensions/trunk/wicket/pom.xml
===================================================================
--- extensions/trunk/wicket/pom.xml	2009-09-28 21:33:41 UTC (rev 3793)
+++ extensions/trunk/wicket/pom.xml	2009-09-28 21:44:25 UTC (rev 3794)
@@ -1,9 +1,9 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <parent>
-      <artifactId>webbeans-parent</artifactId>
       <groupId>org.jboss.webbeans</groupId>
+      <artifactId>webbeans-version-matrix</artifactId>
       <version>1.0.0-SNAPSHOT</version>
-   </parent>
+  </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.jboss.webbeans</groupId>
    <artifactId>webbeans-wicket</artifactId>
@@ -59,10 +59,6 @@
       </plugins>
    </build>
 
-	<properties>
-		<wicket.version>1.3.5.jboss1</wicket.version>
-	</properties>
-
    <scm>
       <connection>scm:svn:http://anonsvn.jboss.org/repos/webbeans/extensions</connection>
       <developerConnection>scm:svn:https://svn.jboss.org/repos/webbeans/extensions</developerConnection>

Added: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/BeanManagerLookup.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/BeanManagerLookup.java	                        (rev 0)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/BeanManagerLookup.java	2009-09-28 21:44:25 UTC (rev 3794)
@@ -0,0 +1,84 @@
+package org.jboss.webbeans.wicket;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.servlet.ServletContext;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
+
+/**
+ * A utilty class to provide access to the JSR-299 BeanManager
+ * @author cpopetz
+ *
+ */
+public class BeanManagerLookup
+{
+
+   private static BeanManager cachedManager;
+   /**
+    * This is the spec-defined name for the bean manager as registered in JNDI
+    * See JSR-299 11.3
+    */
+   private static String beanManagerJndiName = "java:comp/BeanManager";
+
+   public static void setBeanManagerJndiName(String beanManagerJndiName)
+   {
+      BeanManagerLookup.beanManagerJndiName = beanManagerJndiName;
+   }
+
+   public static String getBeanManagerJndiName()
+   {
+      return beanManagerJndiName;
+   }
+
+   /**
+    * This is the name under which the bean manager will be stored in the
+    * servlet context. This is not yet specified in JSR-299.
+    */
+   private static String beanManagerServletContextName = BeanManager.class.getName();
+
+   public static void setBeanManagerServletContextName(String beanManagerServletContextName)
+   {
+      BeanManagerLookup.beanManagerServletContextName = beanManagerServletContextName;
+   }
+
+   public static String getBeanManagerServletContextName()
+   {
+      return beanManagerServletContextName;
+   }
+   
+
+   /**
+    * We will attempt first to obtain the BeanManager instance from JNDI.
+    * Failing that, we will look in the servlet context.
+    */
+   public static BeanManager getBeanManager()
+   {
+      if (cachedManager == null)
+      {
+         // first look in jndi
+         try
+         {
+            Context initialContext = new InitialContext();
+            cachedManager = (BeanManager) initialContext.lookup(getBeanManagerJndiName());
+         }
+         catch (Exception e)
+         {
+            // we ignore this failure; it could mean we are operating in a
+            // non-jndi (SE or Servlet) env
+         }
+
+         if (cachedManager == null)
+         {
+            ServletContext servletContext = ((WebApplication) Application.get()).getServletContext();
+            if (servletContext != null)
+            {
+               cachedManager = (BeanManager) servletContext.getAttribute(getBeanManagerServletContextName());
+            }
+         }
+      }
+      return cachedManager;
+   }
+}

Modified: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java	2009-09-28 21:33:41 UTC (rev 3793)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java	2009-09-28 21:44:25 UTC (rev 3794)
@@ -1,6 +1,13 @@
 package org.jboss.webbeans.wicket;
 
+import java.lang.reflect.Type;
+import java.util.Set;
 
+import javax.enterprise.inject.AmbiguousResolutionException;
+import javax.enterprise.inject.UnsatisfiedResolutionException;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+
 import org.apache.wicket.Request;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.Response;
@@ -27,16 +34,45 @@
  */
 public abstract class WebBeansApplication extends WebApplication
 {
+   
+   private <T> T getInstanceByType(Class<T> beanType)
+   {
+      BeanManager manager = BeanManagerLookup.getBeanManager();
+      Bean<T> bean = (Bean<T>) ensureUniqueBean(beanType, manager.getBeans(beanType));
+      return (T) manager.getReference(bean, beanType, manager.createCreationalContext(bean));
+   }
+   
+   private static Bean<?> ensureUniqueBean(Type type, Set<Bean<?>> beans)
+   {
+      if (beans.size() == 0)
+      {
+         throw new UnsatisfiedResolutionException("Unable to resolve any Web Beans of " + type);
+      }
+      else if (beans.size() > 1)
+      {
+         throw new AmbiguousResolutionException("More than one bean available for type " + type);
+      }
+      return beans.iterator().next();
+   }
+
    /**
-    * Use the constructor to add our component instantiation listener
+    */
+   public WebBeansApplication()
+   {
+   }
+
+   /**
+    * Add our component instantiation listener
     * 
     * @see WebBeansComponentInstantiationListener
     */
-   public WebBeansApplication()
+   protected void internalInit() 
    {
-      addComponentInstantiationListener(new WebBeansComponentInstantiationListener());
+      super.internalInit();
+      addComponentInstantiationListener(getInstanceByType(WebBeansComponentInstantiationListener.class));
    }
 
+
    /**
     * Override to return our WebBeans-specific request cycle processor
     * 
@@ -45,7 +81,7 @@
    @Override
    protected IRequestCycleProcessor newRequestCycleProcessor()
    {
-      return new WebBeansWebRequestCycleProcessor();
+      return getInstanceByType(WebBeansWebRequestCycleProcessor.class);
    }
 
    /**

Modified: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java	2009-09-28 21:33:41 UTC (rev 3793)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java	2009-09-28 21:44:25 UTC (rev 3794)
@@ -1,22 +1,31 @@
 package org.jboss.webbeans.wicket;
 
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.application.IComponentInstantiationListener;
-import org.jboss.webbeans.CurrentManager;
-import org.jboss.webbeans.manager.api.WebBeansManager;
 
 /**
- * This listener uses the WebBeansManager to handle injections for all wicket
- * components.
+ * This listener uses the BeanManager to handle injections for all wicket components.
  * 
  * @author cpopetz
- * @see WebBeansManager
  * 
  */
 public class WebBeansComponentInstantiationListener implements IComponentInstantiationListener
 {
+	@Inject
+   BeanManager manager;
+	
    public void onInstantiation(Component component)
    {
-      ((WebBeansManager) CurrentManager.rootManager()).injectNonContextualInstance(component);
+      /*
+       * The manager could be null in unit testing environments
+       */
+      if (manager != null)
+      {
+         manager.createInjectionTarget(manager.createAnnotatedType((Class) component.getClass()))
+            .inject(component, manager.createCreationalContext(null));
+      }
    }
 }
\ No newline at end of file

Modified: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java	2009-09-28 21:33:41 UTC (rev 3793)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java	2009-09-28 21:44:25 UTC (rev 3794)
@@ -16,7 +16,7 @@
     * This is the key we will use to to store the conversation metadata in the
     * wicket page.
     */
-   public static final MetaDataKey CID = new MetaDataKey(String.class) 
+   public static final MetaDataKey CID = new MetaDataKey<String>()
    {
       private static final long serialVersionUID = -8788010688731927318L; 
    }; 

Modified: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java	2009-09-28 21:33:41 UTC (rev 3793)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java	2009-09-28 21:44:25 UTC (rev 3794)
@@ -1,6 +1,13 @@
 package org.jboss.webbeans.wicket;
 
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Set;
+
 import javax.enterprise.context.Conversation;
+import javax.enterprise.inject.AmbiguousResolutionException;
+import javax.enterprise.inject.UnsatisfiedResolutionException;
+import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.wicket.IRequestTarget;
@@ -11,7 +18,8 @@
 import org.apache.wicket.protocol.http.WebRequestCycle;
 import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
 import org.apache.wicket.request.target.component.IPageRequestTarget;
-import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.Container;
+import org.jboss.webbeans.context.ContextLifecycle;
 import org.jboss.webbeans.context.ConversationContext;
 import org.jboss.webbeans.conversation.ConversationManager;
 import org.jboss.webbeans.servlet.ConversationBeanStore;
@@ -72,14 +80,15 @@
          specifiedCid = request.getParameter("cid");
       }
 
-      BeanManager manager = CurrentManager.rootManager();
-      Conversation conversation = manager.getInstanceByType(Conversation.class);
+      BeanManager manager = BeanManagerLookup.getBeanManager();
+      
+      Conversation conversation = getInstanceByType(manager, Conversation.class);
 
       // restore a conversation if it exists
       if (specifiedCid != null)
       {
          // Restore this conversation
-         manager.getInstanceByType(ConversationManager.class).beginOrRestoreConversation(specifiedCid);
+         getInstanceByType(manager, ConversationManager.class).beginOrRestoreConversation(specifiedCid);
       }
 
       // handle propagation of existing long running converstaions to new
@@ -107,11 +116,35 @@
          }
       }
 
+      ConversationContext conversationContext = Container.instance().deploymentServices().get(
+            ContextLifecycle.class).getConversationContext();
       // Now set up the conversational context if it isn't already
-      if (!ConversationContext.instance().isActive())
+      if (!conversationContext.isActive())
       {
-         ConversationContext.instance().setBeanStore(new ConversationBeanStore(((WebRequest) request).getHttpServletRequest().getSession(), conversation.getId()));
-         ConversationContext.instance().setActive(true);
+         conversationContext.setBeanStore(new ConversationBeanStore(((WebRequest) request)
+               .getHttpServletRequest().getSession(), conversation.getId()));
+         conversationContext.setActive(true);
       }
    }
+
+   @SuppressWarnings("unchecked")
+   private <T> T getInstanceByType(BeanManager manager, Class<T> beanType, Annotation... bindings)
+   {
+      Bean<T> bean = (Bean<T>) ensureUniqueBean(beanType, manager.getBeans(beanType, bindings));
+      return (T) manager.getReference(bean, beanType, manager.createCreationalContext(bean));
+   }
+
+   private static Bean<?> ensureUniqueBean(Type type, Set<Bean<?>> beans)
+   {
+      if (beans.size() == 0)
+      {
+         throw new UnsatisfiedResolutionException("Unable to resolve any Web Beans of " + type);
+      }
+      else if (beans.size() > 1)
+      {
+         throw new AmbiguousResolutionException("More than one bean available for type " + type);
+      }
+      return beans.iterator().next();
+   }
+
 }
\ No newline at end of file

Modified: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java	2009-09-28 21:33:41 UTC (rev 3793)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java	2009-09-28 21:44:25 UTC (rev 3794)
@@ -1,11 +1,13 @@
 package org.jboss.webbeans.wicket;
 
 import javax.enterprise.context.Conversation;
+import javax.inject.Inject;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.protocol.http.WebRequestCycleProcessor;
-import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.Container;
+import org.jboss.webbeans.context.ContextLifecycle;
 import org.jboss.webbeans.context.ConversationContext;
 import org.jboss.webbeans.conversation.ConversationManager;
 
@@ -20,6 +22,11 @@
  */
 public class WebBeansWebRequestCycleProcessor extends WebRequestCycleProcessor
 {
+   @Inject
+   Conversation conversation;
+   @Inject
+   ConversationManager conversationManager;
+   
    /**
     * If a long running conversation has been started, store its id into page
     * metadata
@@ -28,7 +35,6 @@
    public void respond(RequestCycle requestCycle)
    {
       super.respond(requestCycle);
-      Conversation conversation = CurrentManager.rootManager().getInstanceByType(Conversation.class);
       if (conversation.isLongRunning())
       {
          Page page = RequestCycle.get().getResponsePage();
@@ -39,8 +45,10 @@
       }
       
       //cleanup and deactivate the conversation context
+      conversationManager.cleanupConversation();
       
-      CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
-      ConversationContext.instance().setActive(false);
+      ConversationContext conversationContext = Container.instance().deploymentServices().get(
+            ContextLifecycle.class).getConversationContext();
+      conversationContext.setActive(false);
    }
 }
\ No newline at end of file

Added: extensions/trunk/wicket/src/main/resources/META-INF/beans.xml
===================================================================




More information about the weld-commits mailing list