[webbeans-commits] Webbeans SVN: r1418 - in ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans: conversation and 2 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Thu Feb 5 02:35:00 EST 2009
Author: nickarls
Date: 2009-02-05 02:35:00 -0500 (Thu, 05 Feb 2009)
New Revision: 1418
Added:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationConcurrentAccessTimeout.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationInactivityTimeout.java
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationIdGenerator.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationManager.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/DefaultConversationManager.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/NumericConversationIdGenerator.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java
Log:
Fixes/improvements to conversation infra
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java 2009-02-05 01:27:09 UTC (rev 1417)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -26,6 +26,7 @@
import org.jboss.webbeans.bean.standard.ManagerBean;
import org.jboss.webbeans.bootstrap.spi.EjbDiscovery;
import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
+import org.jboss.webbeans.conversation.ConversationImpl;
import org.jboss.webbeans.conversation.DefaultConversationManager;
import org.jboss.webbeans.conversation.JavaSEConversationTerminator;
import org.jboss.webbeans.conversation.NumericConversationIdGenerator;
@@ -101,6 +102,7 @@
beanDeployer.addBean(ManagerBean.of(manager));
beanDeployer.addBean(InjectionPointBean.of(manager));
beanDeployer.addClass(Transaction.class);
+ beanDeployer.addClass(ConversationImpl.class);
beanDeployer.addClass(DefaultConversationManager.class);
beanDeployer.addClass(JavaSEConversationTerminator.class);
beanDeployer.addClass(NumericConversationIdGenerator.class);
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationIdGenerator.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationIdGenerator.java 2009-02-05 01:27:09 UTC (rev 1417)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationIdGenerator.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -20,7 +20,7 @@
* Generates conversation ID:s for the conversation manager
*
* @author Nicklas Karlsson
- * @see org.jboss.webbeans.conversation.ConversationManager#beginConversation(String)
+ * @see org.jboss.webbeans.conversation.ConversationManager#beginOrRestoreConversation(String)
*/
public interface ConversationIdGenerator
{
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationImpl.java 2009-02-05 01:27:09 UTC (rev 1417)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationImpl.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -20,7 +20,10 @@
import javax.annotation.Named;
import javax.context.Conversation;
import javax.context.RequestScoped;
+import javax.inject.Initializer;
+import org.jboss.webbeans.conversation.bindings.ConversationInactivityTimeout;
+
/**
* The current conversation implementation
*
@@ -39,27 +42,23 @@
private long timeoutInMilliseconds;
/**
- * Creates a new conversation
- *
- * @param cid The conversation ID
- * @param timeoutInMilliseconds The inactivity timeout in milliseconds
+ * Creates a new conversation
*/
- protected ConversationImpl(String cid, long timeoutInMilliseconds)
+ public ConversationImpl()
{
- this.timeoutInMilliseconds = timeoutInMilliseconds;
- this.cid = cid;
}
-
+
/**
- * Factory method
+ * Initializes a new conversation
*
- * @param cid The conversation ID
+ * @param conversationIdGenerator The conversation ID generator
* @param timeoutInMilliseconds The inactivity timeout in milliseconds
- * @return A new conversation
*/
- public static ConversationImpl of(String cid, long timeoutInMilliseconds)
+ @Initializer
+ public void init(ConversationIdGenerator conversationIdGenerator, @ConversationInactivityTimeout long timeoutInMilliseconds)
{
- return new ConversationImpl(cid, timeoutInMilliseconds);
+ this.cid = conversationIdGenerator.nextId();
+ this.timeoutInMilliseconds = timeoutInMilliseconds;
}
public void begin()
@@ -105,7 +104,7 @@
* @param longRunning The new long-running status
* @param timeout The new inactivity timeout in milliseconds
*/
- public void become(String cid, boolean longRunning, long timeoutInMilliseconds)
+ public void switchTo(String cid, boolean longRunning, long timeoutInMilliseconds)
{
this.cid = cid;
this.longRunning = longRunning;
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationManager.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationManager.java 2009-02-05 01:27:09 UTC (rev 1417)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/ConversationManager.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -25,34 +25,21 @@
public interface ConversationManager
{
/**
- * Begins a conversation
+ * Begins or restores a conversation
*
* @param cid The incoming conversation ID. Can be null in cases of transient conversations
*/
- public abstract void beginConversation(String cid);
+ public abstract void beginOrRestoreConversation(String cid);
/**
- * Ends the current conversation
+ * Cleans up the current conversation, destroying transient conversation and handling
+ * long-running conversations
*/
- public abstract void endConversation();
+ public abstract void cleanupConversation();
/**
* Destroys all long-running conversations
*/
public abstract void destroyAllConversations();
- /**
- * Gets The inactivity timeout
- *
- * @return The timeout in milliseconds
- */
- public abstract long getInactivityTimeoutInMilliseconds();
-
- /**
- * Gets The concurrent access timeout
- *
- * @return The timeout in milliseconds
- */
- public abstract long getConcurrentAccessTimeoutInMilliseconds();
-
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/DefaultConversationManager.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/DefaultConversationManager.java 2009-02-05 01:27:09 UTC (rev 1417)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/DefaultConversationManager.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -21,8 +21,6 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Future;
-import javax.context.Conversation;
-import javax.context.RequestScoped;
import javax.context.SessionScoped;
import javax.inject.Current;
import javax.inject.Produces;
@@ -30,6 +28,8 @@
import org.jboss.webbeans.bootstrap.WebBeansBootstrap;
import org.jboss.webbeans.context.ConversationContext;
+import org.jboss.webbeans.conversation.bindings.ConversationConcurrentAccessTimeout;
+import org.jboss.webbeans.conversation.bindings.ConversationInactivityTimeout;
import org.jboss.webbeans.log.LogProvider;
import org.jboss.webbeans.log.Logging;
@@ -44,21 +44,25 @@
{
private static LogProvider log = Logging.getLogProvider(WebBeansBootstrap.class);
- // The conversation id generator
- @Current
- private ConversationIdGenerator conversationIdGenerator;
-
// The conversation terminator
@Current
private ConversationTerminator conversationTerminator;
// The current conversation
@Current
- private Conversation currentConversation;
+ private ConversationImpl currentConversation;
// The current HTTP session
@Current
private HttpSession session;
+
+ // The conversation timeout in milliseconds waiting for access to a blocked conversation
+ @ConversationConcurrentAccessTimeout
+ private long concurrentAccessTimeout;
+
+ // The conversation inactivity timeout in milliseconds
+ @ConversationInactivityTimeout
+ private long inactivityTimeout;
// A map of current active long-running conversation entries
private Map<String, ConversationEntry> longRunningConversations;
@@ -71,23 +75,23 @@
log.trace("Created " + getClass());
longRunningConversations = new ConcurrentHashMap<String, ConversationEntry>();
}
-
- /**
- * Producer method for transient conversations
- *
- * @return A new transient conversation
- */
+
@Produces
- @RequestScoped
- public Conversation produceNewTransientConversation()
+ @ConversationInactivityTimeout
+ public long getConversationTimeoutInMilliseconds()
{
- Conversation conversation = ConversationImpl.of(conversationIdGenerator.nextId(), getInactivityTimeoutInMilliseconds());
- log.trace("Produced a new conversation: " + conversation);
- return conversation;
+ return 10 * 60 * 1000;
}
- public void beginConversation(String cid)
+ @Produces
+ @ConversationConcurrentAccessTimeout
+ public long getConversationConcurrentAccessTimeout()
{
+ return 1 * 1000;
+ }
+
+ public void beginOrRestoreConversation(String cid)
+ {
if (cid == null)
{
// No incoming conversation ID, nothing to do here, Conversation
@@ -106,9 +110,9 @@
// if we fail
try
{
- if (!longRunningConversations.get(cid).lock(getConcurrentAccessTimeoutInMilliseconds()))
+ if (!longRunningConversations.get(cid).lock(concurrentAccessTimeout))
{
- log.info("Could not acquire conversation lock in " + getConcurrentAccessTimeoutInMilliseconds() + "ms, giving up");
+ log.info("Could not acquire conversation lock in " + concurrentAccessTimeout + "ms, giving up");
return;
}
}
@@ -128,11 +132,11 @@
{
// If all goes well, set the identity of the current conversation to
// match the fetched long-running one
- ((ConversationImpl) currentConversation).become(cid, true, getInactivityTimeoutInMilliseconds());
+ currentConversation.switchTo(cid, true, inactivityTimeout);
}
}
- public void endConversation()
+ public void cleanupConversation()
{
String cid = currentConversation.getId();
if (currentConversation.isLongRunning())
@@ -175,7 +179,7 @@
private Future<?> scheduleForTermination(String cid)
{
Runnable terminationTask = new TerminationTask(cid);
- return conversationTerminator.scheduleForTermination(terminationTask, getInactivityTimeoutInMilliseconds());
+ return conversationTerminator.scheduleForTermination(terminationTask, inactivityTimeout);
}
/**
@@ -218,14 +222,4 @@
longRunningConversations.clear();
}
- public long getConcurrentAccessTimeoutInMilliseconds()
- {
- return 1000;
- }
-
- public long getInactivityTimeoutInMilliseconds()
- {
- return 10 * 60 * 1000;
- }
-
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/NumericConversationIdGenerator.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/NumericConversationIdGenerator.java 2009-02-05 01:27:09 UTC (rev 1417)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/NumericConversationIdGenerator.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -19,7 +19,7 @@
import java.io.Serializable;
import java.util.concurrent.atomic.AtomicInteger;
-import javax.context.ApplicationScoped;
+import javax.context.SessionScoped;
/**
* A ConversationIdGenerator implementation using running numerical values
@@ -27,7 +27,7 @@
* @author Nicklas Karlsson
*
*/
- at ApplicationScoped
+ at SessionScoped
public class NumericConversationIdGenerator implements ConversationIdGenerator, Serializable
{
// The next conversation ID
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationConcurrentAccessTimeout.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationConcurrentAccessTimeout.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationConcurrentAccessTimeout.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -0,0 +1,42 @@
+/*
+ * 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.webbeans.conversation.bindings;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.BindingType;
+
+/**
+ * The conversation context concurrent access wait timeout on a lock
+ *
+ * @author Nicklas Karlsson
+ */
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+public @interface ConversationConcurrentAccessTimeout
+{
+}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationInactivityTimeout.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationInactivityTimeout.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/conversation/bindings/ConversationInactivityTimeout.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -0,0 +1,42 @@
+/*
+ * 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.webbeans.conversation.bindings;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.BindingType;
+
+/**
+ * The conversation context inactivity timeout
+ *
+ * @author Nicklas Karlsson
+ */
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+public @interface ConversationInactivityTimeout
+{
+}
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 2009-02-05 01:27:09 UTC (rev 1417)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java 2009-02-05 07:35:00 UTC (rev 1418)
@@ -104,7 +104,7 @@
private static void beginConversation(HttpServletRequest request)
{
ConversationManager conversationManager = CurrentManager.rootManager().getInstanceByType(ConversationManager.class);
- conversationManager.beginConversation(request.getParameter("cid"));
+ conversationManager.beginOrRestoreConversation(request.getParameter("cid"));
Conversation conversation = CurrentManager.rootManager().getInstanceByType(Conversation.class);
ConversationContext.INSTANCE.setBeanMap(new ConversationBeanMap(request.getSession(), conversation.getId()));
}
@@ -119,15 +119,9 @@
DependentContext.INSTANCE.setActive(false);
RequestContext.INSTANCE.destroy();
SessionContext.INSTANCE.setBeanMap(null);
- endConversation();
+ CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
ConversationContext.INSTANCE.setBeanMap(null);
CurrentManager.rootManager().getInstanceByType(SessionManager.class).setSession(null);
}
- private static void endConversation()
- {
- ConversationManager conversationManager = CurrentManager.rootManager().getInstanceByType(ConversationManager.class);
- conversationManager.endConversation();
- }
-
}
More information about the weld-commits
mailing list