[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