[seam-commits] Seam SVN: r8878 - in trunk: src/main/org/jboss/seam and 3 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Tue Sep 2 08:33:47 EDT 2008


Author: pete.muir at jboss.org
Date: 2008-09-02 08:33:47 -0400 (Tue, 02 Sep 2008)
New Revision: 8878

Modified:
   trunk/doc/Seam_Reference_Guide/en-US/Conversations.xml
   trunk/src/main/org/jboss/seam/core/Conversation.java
   trunk/src/main/org/jboss/seam/core/ConversationEntry.java
   trunk/src/main/org/jboss/seam/core/Manager.java
   trunk/src/main/org/jboss/seam/faces/FacesManager.java
   trunk/src/main/org/jboss/seam/navigation/Page.java
   trunk/src/main/org/jboss/seam/navigation/Pages.java
   trunk/src/main/org/jboss/seam/pages-2.1.xsd
Log:
JBSEAM-1832 part 1, support for setting concurrent request timeout in pages.xml

Modified: trunk/doc/Seam_Reference_Guide/en-US/Conversations.xml
===================================================================
--- trunk/doc/Seam_Reference_Guide/en-US/Conversations.xml	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/doc/Seam_Reference_Guide/en-US/Conversations.xml	2008-09-02 12:33:47 UTC (rev 8878)
@@ -1038,11 +1038,12 @@
       </para>
       
       <para>
-        Therefore Seam queues the action event for a period of time (the 
-        concurrent request timeout); if it can't process the event in time, it 
-        creates a temporary conversation and prints out a message to the user to
-        let them know what's going on.  It's therefore very important not to
-        flood the server with AJAX events!
+        Therefore, when you are working inside a long running conversation,
+        Seam queues the action event for a period of time (the concurrent 
+        request timeout); if it can't process the event in time, it creates a 
+        temporary conversation and prints out a message to the user to let them
+        know what's going on.  It's therefore very important not to flood the 
+        server with AJAX events!
       </para>
       
       <para>
@@ -1051,18 +1052,19 @@
       </para>
       
       <programlisting role="XML"><![CDATA[<core:manager concurrent-request-timeout="500" />]]></programlisting>
-      <!-- TODO -->
-      <!-- <para>
-        We can also fine tune the concurrent request timeout for a request:
+     
+      <para>
+        We can also fine tune the concurrent request timeout on a page-by-page
+        basis:
       </para>
        
-      <programlisting role="JAVA"><![CDATA[public void getTotal() {
-   Manager.instance().setConcurrentRequestTimeout(1000);
-   return someReallyComplicatedCalculation();
-}]]></programlisting>-->
+      <programlisting role="XML"><![CDATA[<page view-id="/book.xhtml" 
+         conversation-required="true" 
+         login-required="true"
+         concurrent-request-timeout="2000" />]]></programlisting>
 
     <para>
-      So far we've discussed "synchronous" AJAX requests - the client tells the
+      So far we've discussed serial AJAX requests - the client tells the
       server that an event has occur, and then rerenders part of the page based
       on the result.  This approach is great when the AJAX request is
       lightweight (the methods called are simple e.g. calculating the sum of a

Modified: trunk/src/main/org/jboss/seam/core/Conversation.java
===================================================================
--- trunk/src/main/org/jboss/seam/core/Conversation.java	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/src/main/org/jboss/seam/core/Conversation.java	2008-09-02 12:33:47 UTC (rev 8878)
@@ -31,6 +31,7 @@
 {
    private static final long serialVersionUID = -6131304128727444876L;
    private Integer timeout;
+   private Integer concurrentRequestTimeout;
    String description;
    String viewId;
 
@@ -54,6 +55,16 @@
       this.timeout = timeout;
    }
    
+   public Integer getConcurrentRequestTimeout()
+   {
+      return concurrentRequestTimeout == null ? Manager.instance().getCurrentConversationConcurrentRequestTimeout() : concurrentRequestTimeout;
+   }
+   
+   public void setConcurrentRequestTimeout(Integer concurrentRequestTimeout)
+   {
+      this.concurrentRequestTimeout = concurrentRequestTimeout;
+   }
+   
    /**
     * Get the conversation id.
     */
@@ -135,6 +146,10 @@
       {
          entry.setTimeout(timeout);
       }
+      if (concurrentRequestTimeout != null)
+      {
+         entry.setConcurrentRequestTimeout(concurrentRequestTimeout);
+      }
       
       description = null;
       viewId = null;

Modified: trunk/src/main/org/jboss/seam/core/ConversationEntry.java
===================================================================
--- trunk/src/main/org/jboss/seam/core/ConversationEntry.java	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/src/main/org/jboss/seam/core/ConversationEntry.java	2008-09-02 12:33:47 UTC (rev 8878)
@@ -25,6 +25,7 @@
    private String viewId;
    private List<String> conversationIdStack;
    private Integer timeout;
+   private Integer concurrentRequestTimeout;
    private boolean removeAfterRedirect;
    private boolean ended;
   
@@ -176,6 +177,17 @@
       this.timeout = conversationTimeout;
    }
    
+   public Integer getConcurrentRequestTimeout()
+   {
+      return concurrentRequestTimeout == null ? Manager.instance().getConcurrentRequestTimeout() : concurrentRequestTimeout;
+   }
+   
+   void setConcurrentRequestTimeout(Integer concurrentRequestTimeout)
+   {
+      entries.setDirty(this.concurrentRequestTimeout, concurrentRequestTimeout);
+      this.concurrentRequestTimeout = concurrentRequestTimeout;
+   }
+   
    public boolean isRemoveAfterRedirect() 
    {
       return removeAfterRedirect;
@@ -201,7 +213,7 @@
    {
       try
       {
-         return lock.tryLock( Manager.instance().getConcurrentRequestTimeout(), TimeUnit.MILLISECONDS );
+         return lock.tryLock( getConcurrentRequestTimeout(), TimeUnit.MILLISECONDS );
       }
       catch (InterruptedException ie)
       {

Modified: trunk/src/main/org/jboss/seam/core/Manager.java
===================================================================
--- trunk/src/main/org/jboss/seam/core/Manager.java	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/src/main/org/jboss/seam/core/Manager.java	2008-09-02 12:33:47 UTC (rev 8878)
@@ -196,6 +196,13 @@
       if ( ce==null ) return null;
       return ce.getTimeout();
    }
+   
+   public Integer getCurrentConversationConcurrentRequestTimeout()
+   {
+      ConversationEntry ce = getCurrentConversationEntry();
+      if (ce == null) return null;
+      return ce.getConcurrentRequestTimeout();
+   }
 
    public String getCurrentConversationViewId()
    {

Modified: trunk/src/main/org/jboss/seam/faces/FacesManager.java
===================================================================
--- trunk/src/main/org/jboss/seam/faces/FacesManager.java	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/src/main/org/jboss/seam/faces/FacesManager.java	2008-09-02 12:33:47 UTC (rev 8878)
@@ -284,6 +284,7 @@
                conversation.setDescription( pages.renderDescription(viewId) );  
             }
             conversation.setTimeout( pages.getTimeout(viewId) );
+            conversation.setConcurrentRequestTimeout( pages.getConcurrentRequestTimeout(viewId) );
          }
       }
       else

Modified: trunk/src/main/org/jboss/seam/navigation/Page.java
===================================================================
--- trunk/src/main/org/jboss/seam/navigation/Page.java	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/src/main/org/jboss/seam/navigation/Page.java	2008-09-02 12:33:47 UTC (rev 8878)
@@ -29,6 +29,7 @@
    private final String viewId;
    private String description;
    private Integer timeout;
+   private Integer concurrentRequestTimeout;
    private ValueExpression<String> noConversationViewId;
    private String resourceBundleName;
    private boolean switchEnabled = true;
@@ -130,6 +131,16 @@
       return timeout;
    }
    
+   public void setConcurrentRequestTimeout(Integer concurrentRequestTimeout)
+   {
+      this.concurrentRequestTimeout = concurrentRequestTimeout;
+   }
+   
+   public Integer getConcurrentRequestTimeout()
+   {
+      return concurrentRequestTimeout;
+   }
+   
    public void setNoConversationViewId(ValueExpression<String> noConversationViewId)
    {
       this.noConversationViewId = noConversationViewId;

Modified: trunk/src/main/org/jboss/seam/navigation/Pages.java
===================================================================
--- trunk/src/main/org/jboss/seam/navigation/Pages.java	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/src/main/org/jboss/seam/navigation/Pages.java	2008-09-02 12:33:47 UTC (rev 8878)
@@ -962,6 +962,26 @@
       return Manager.instance().getConversationTimeout();
    }
    
+   /**
+    * Search for a defined concurrent request timeout, beginning with
+    * the most specific view id, then wildcarded view ids, and 
+    * finally the global setting from Manager
+    */
+   public Integer getConcurrentRequestTimeout(String viewId)
+   {
+      List<Page> stack = getPageStack(viewId);
+      for (int i=stack.size()-1; i>=0; i--)
+      {
+         Page page = stack.get(i);
+         Integer concurrentRequestTimeout = page.getConcurrentRequestTimeout();
+         if (concurrentRequestTimeout!=null)
+         {
+            return concurrentRequestTimeout;
+         }
+      }
+      return Manager.instance().getConcurrentRequestTimeout();
+   }
+   
    public static String getSuffix()
    {
       String defaultSuffix = FacesContext.getCurrentInstance().getExternalContext()
@@ -1149,6 +1169,12 @@
          page.setTimeout(Integer.parseInt(timeoutString));
       }
       
+      String concurrentRequestTimeoutString = element.attributeValue("concurrent-request-timeout");
+      if (concurrentRequestTimeoutString!=null)
+      {
+         page.setConcurrentRequestTimeout(Integer.parseInt(concurrentRequestTimeoutString));
+      }
+      
       String noConversationViewIdString = element.attributeValue("no-conversation-view-id");
       if (noConversationViewIdString != null)
       {

Modified: trunk/src/main/org/jboss/seam/pages-2.1.xsd
===================================================================
--- trunk/src/main/org/jboss/seam/pages-2.1.xsd	2008-09-02 11:06:05 UTC (rev 8877)
+++ trunk/src/main/org/jboss/seam/pages-2.1.xsd	2008-09-02 12:33:47 UTC (rev 8878)
@@ -118,6 +118,16 @@
         </xs:attribute>
         <xs:attribute name="scheme"/>
         <xs:attribute name="timeout"/>
+        <xs:attribute name="concurrent-request-timeout">
+            <xs:annotation>
+                <xs:documentation>
+                    Requests to conversations are serialized by default, and if
+                    a lock cannot be acquired in time, the request will be 
+                    dropped. You can set the timeout on a page-by-page basis 
+                    here.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
         <xs:attribute name="bundle"/>
         <xs:attribute name="conversation"/>
         <xs:attribute name="expires" /> 




More information about the seam-commits mailing list