[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-3654) Reduce number of checks to see if Jbpm is installed in BusinessProcessContext

Michael Youngstrom (JIRA) jira-events at lists.jboss.org
Thu Oct 30 17:05:20 EDT 2008


    [ https://jira.jboss.org/jira/browse/JBSEAM-3654?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12436407#action_12436407 ] 

Michael Youngstrom commented on JBSEAM-3654:
--------------------------------------------

A better version of BusinessProcessContext



Index: src/main/org/jboss/seam/contexts/BusinessProcessContext.java
===================================================================
--- src/main/org/jboss/seam/contexts/BusinessProcessContext.java	(revision 9465)
+++ src/main/org/jboss/seam/contexts/BusinessProcessContext.java	(working copy)
@@ -35,21 +35,28 @@
 
    private final Map<String, Object> additions = new HashMap<String, Object>();
    private final Set<String> removals = new HashSet<String>();
+   private final boolean enabled;
 
    public ScopeType getType()
    {
       return ScopeType.BUSINESS_PROCESS;
    }
 
-   public BusinessProcessContext() {}
+   public BusinessProcessContext() {
+      Init init = Init.instance();
+      if(init == null) {
+          enabled = false;
+      } else {
+          enabled = init.isJbpmInstalled();
+      }
+   }
    
    public Object get(String name) 
    {
-      
       Object result = additions.get(name);
       if (result!=null) return result;
       if ( removals.contains(name) ) return null;
-      
+
       org.jbpm.taskmgmt.exe.TaskInstance taskInstance = getTaskInstance();
       if (taskInstance==null)
       {
@@ -208,8 +215,7 @@
 
    private org.jbpm.graph.exe.ProcessInstance getProcessInstance()
    {
-      Init init = Init.instance(); //may be null in some tests
-      if ( init==null || !init.isJbpmInstalled() ) 
+      if ( !enabled ) 
       {
          return null;
       }
@@ -221,8 +227,7 @@
    
    private org.jbpm.taskmgmt.exe.TaskInstance getTaskInstance()
    {
-      Init init = Init.instance(); //may be null in some tests
-      if ( init==null || !init.isJbpmInstalled() ) 
+      if ( !enabled ) 
       {
          return null;
       }


> Reduce number of checks to see if Jbpm is installed in BusinessProcessContext
> -----------------------------------------------------------------------------
>
>                 Key: JBSEAM-3654
>                 URL: https://jira.jboss.org/jira/browse/JBSEAM-3654
>             Project: Seam
>          Issue Type: Bug
>    Affects Versions: 2.1.0.GA
>            Reporter: Michael Youngstrom
>            Assignee: Michael Youngstrom
>             Fix For: 2.1.1.CR1
>
>
> In my application profiling the SeamELResolver is an extremely hot spot.  Although checking to see if jbpm is installed would appear a rather efficient process when done thousands of times a request it can become harmful.  BusinessProcessContext.get is called every time an el expression is evaluated in a page.  Here is a simple and I believe safe patch that will help make BusinessProcessContext more efficient.  isJbpmInstalled() is only called once a request.
> Index: src/main/org/jboss/seam/contexts/Lifecycle.java
> ===================================================================
> --- src/main/org/jboss/seam/contexts/Lifecycle.java	(revision 9465)
> +++ src/main/org/jboss/seam/contexts/Lifecycle.java	(working copy)
> @@ -81,11 +81,11 @@
>     public static void beginCall()
>     {
>        log.debug( ">>> Begin call" );
> +      Contexts.applicationContext.set( new ApplicationContext(getApplication()) );
>        Contexts.eventContext.set( new BasicContext(ScopeType.EVENT) );
>        Contexts.sessionContext.set( new BasicContext(ScopeType.SESSION) );
>        Contexts.conversationContext.set( new BasicContext(ScopeType.CONVERSATION) );
>        Contexts.businessProcessContext.set( new BusinessProcessContext() );
> -      Contexts.applicationContext.set( new ApplicationContext(getApplication()) );
>     }
>  
>     public static void endCall()
> Index: src/main/org/jboss/seam/contexts/BusinessProcessContext.java
> ===================================================================
> --- src/main/org/jboss/seam/contexts/BusinessProcessContext.java	(revision 9465)
> +++ src/main/org/jboss/seam/contexts/BusinessProcessContext.java	(working copy)
> @@ -35,21 +35,26 @@
>  
>     private final Map<String, Object> additions = new HashMap<String, Object>();
>     private final Set<String> removals = new HashSet<String>();
> +   private final boolean enabled;
>  
>     public ScopeType getType()
>     {
>        return ScopeType.BUSINESS_PROCESS;
>     }
>  
> -   public BusinessProcessContext() {}
> +   public BusinessProcessContext() {
> +       enabled = Init.instance().isJbpmInstalled();
> +   }
>     
>     public Object get(String name) 
>     {
> -      
>        Object result = additions.get(name);
>        if (result!=null) return result;
>        if ( removals.contains(name) ) return null;
> -      
> +
> +      if(!enabled) {
> +          return null;
> +      }
>        org.jbpm.taskmgmt.exe.TaskInstance taskInstance = getTaskInstance();
>        if (taskInstance==null)
>        {
> Index: src/main/org/jboss/seam/contexts/TestLifecycle.java
> ===================================================================
> --- src/main/org/jboss/seam/contexts/TestLifecycle.java	(revision 9465)
> +++ src/main/org/jboss/seam/contexts/TestLifecycle.java	(working copy)
> @@ -29,11 +29,11 @@
>     public static void beginTest(ServletContext context, Map<String, Object> session)
>     {
>        log.debug( ">>> Begin test" );
> +      Contexts.applicationContext.set( new ApplicationContext( new ServletApplicationMap(context) ) );
>        Contexts.eventContext.set( new BasicContext(ScopeType.EVENT) );
>        Contexts.conversationContext.set( new BasicContext(ScopeType.CONVERSATION) );
>        Contexts.businessProcessContext.set( new BusinessProcessContext() );
>        Contexts.sessionContext.set( new SessionContext(session) );
> -      Contexts.applicationContext.set( new ApplicationContext( new ServletApplicationMap(context) ) );
>     }
>  
>     public static void endTest()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list