You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by lg...@apache.org on 2005/07/04 12:47:59 UTC
svn commit: r209055 -
/cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
Author: lgawron
Date: Mon Jul 4 03:47:55 2005
New Revision: 209055
URL: http://svn.apache.org/viewcvs?rev=209055&view=rev
Log:
rhino scope is not thread safe, same fix should be applied for cforms.
The best would be to move JavaScriptHelper into the core and move scope helper there.
Modified:
cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
Modified: cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java?rev=209055&r1=209054&r2=209055&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java Mon Jul 4 03:47:55 2005
@@ -47,18 +47,22 @@
/** Avoid instantiation */
private TemplateObjectModelHelper() {}
- public static Scriptable getRootScope() {
- if (rootScope == null) {
+ public static Scriptable getScope() {
+ Context ctx = Context.enter();
+ try {
// Create it if never used up to now
- Context ctx = Context.enter();
- try {
+ if (rootScope == null)
rootScope = ctx.initStandardObjects(null);
- } finally {
- Context.exit();
- }
+
+ Scriptable scope = ctx.newObject(rootScope);
+ scope.setPrototype(rootScope);
+ scope.setParentScope(null);
+ return scope;
+ } finally {
+ Context.exit();
}
- return rootScope;
}
+
public static void fillContext(Object contextObject, Map map) {
// Hack: I use jxpath to populate the context object's properties
// in the jexl context
@@ -118,18 +122,18 @@
try {
// cocoon.request
final Request request = ObjectModelHelper.getRequest( objectModel );
- cocoon.put("request", new FOM_Cocoon.FOM_Request(getRootScope(), request));
+ cocoon.put("request", new FOM_Cocoon.FOM_Request(getScope(), request));
// cocoon.session
final Session session = request.getSession(false);
if (session != null) {
- cocoon.put("session", new FOM_Cocoon.FOM_Session(getRootScope(), session));
+ cocoon.put("session", new FOM_Cocoon.FOM_Session(getScope(), session));
}
// cocoon.context
final org.apache.cocoon.environment.Context context =
ObjectModelHelper.getContext( objectModel );
- cocoon.put("context", new FOM_Cocoon.FOM_Context(getRootScope(), context));
+ cocoon.put("context", new FOM_Cocoon.FOM_Context(getScope(), context));
} finally {
Context.exit();
@@ -178,11 +182,11 @@
final String JAVA_PACKAGE = "JavaPackage";
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Scriptable newPackages = new NativeJavaPackage( "", cl );
- newPackages.setParentScope( getRootScope() );
- newPackages.setPrototype( ScriptableObject.getClassPrototype( getRootScope(),
+ newPackages.setParentScope( getScope() );
+ newPackages.setPrototype( ScriptableObject.getClassPrototype( getScope(),
JAVA_PACKAGE ) );
objectModel.put( "Packages", newPackages );
- objectModel.put( "java", ScriptableObject.getProperty( getRootScope(), "java" ) );
+ objectModel.put( "java", ScriptableObject.getProperty( getScope(), "java" ) );
} finally {
Context.exit();
}