[
https://jira.jboss.org/jira/browse/JBSEAM-3654?page=com.atlassian.jira.pl...
]
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