Seam SVN: r9492 - in trunk/src: test/unit/org/jboss/seam/test/unit and 1 other directory.
by seam-commits@lists.jboss.org
Author: youngm
Date: 2008-11-03 19:57:53 -0500 (Mon, 03 Nov 2008)
New Revision: 9492
Modified:
trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java
trunk/src/test/unit/org/jboss/seam/test/unit/ContextTest.java
Log:
JBSEAM-3655
Modified: trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java
===================================================================
--- trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java 2008-11-04 00:41:07 UTC (rev 9491)
+++ trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java 2008-11-04 00:57:53 UTC (rev 9492)
@@ -36,6 +36,7 @@
private final Set<String> removals = new HashSet<String>();
private final String id;
private final List<String> idStack;
+ private final Map<String, Object> cache = new HashMap<String, Object>();
private List<String> getIdStack()
{
@@ -81,9 +82,18 @@
this.idStack = new LinkedList<String>();
idStack.add(id);
}
-
- public Object get(String name)
- {
+
+ public Object get(String name)
+ {
+ if (!cache.containsKey(name))
+ {
+ cache.put(name, resolveValue(name));
+ }
+ return cache.get(name);
+ }
+
+ protected Object resolveValue(String name)
+ {
Object result = additions.get(name);
if (result!=null)
{
@@ -148,6 +158,7 @@
public void set(String name, Object value)
{
if ( Events.exists() ) Events.instance().raiseEvent("org.jboss.seam.preSetVariable." + name);
+ cache.remove(name);
if (value==null)
{
//yes, we need this
@@ -185,6 +196,7 @@
public void remove(String name)
{
if ( Events.exists() ) Events.instance().raiseEvent("org.jboss.seam.preRemoveVariable." + name);
+ cache.remove(name);
additions.remove(name);
removals.add(name);
if ( Events.exists() ) Events.instance().raiseEvent("org.jboss.seam.postRemoveVariable." + name);
@@ -245,6 +257,7 @@
public void clear()
{
+ cache.clear();
additions.clear();
removals.addAll( getNamesFromSession() );
}
Modified: trunk/src/test/unit/org/jboss/seam/test/unit/ContextTest.java
===================================================================
--- trunk/src/test/unit/org/jboss/seam/test/unit/ContextTest.java 2008-11-04 00:41:07 UTC (rev 9491)
+++ trunk/src/test/unit/org/jboss/seam/test/unit/ContextTest.java 2008-11-04 00:57:53 UTC (rev 9492)
@@ -191,9 +191,9 @@
ServletLifecycle.beginApplication(servletContext);
MockHttpSession session = new MockHttpSession(servletContext);
MockHttpServletRequest request = new MockHttpServletRequest(session);
- ExternalContext externalContext = new MockExternalContext(
+ final ExternalContext externalContext = new MockExternalContext(
servletContext, request);
- Map sessionAdaptor = new ServletRequestSessionMap(request);
+ final Map sessionAdaptor = new ServletRequestSessionMap(request);
Map requestAdaptor = new ServletRequestMap(request);
Context appContext = new ApplicationContext(externalContext
.getApplicationMap());
@@ -206,13 +206,21 @@
testContext(new SessionContext(sessionAdaptor));
testContext(new EventContext(requestAdaptor));
testContext(new ServerConversationContext(sessionAdaptor, "1"));
- testEquivalence(new ServerConversationContext(sessionAdaptor, "1"),
- new ServerConversationContext(sessionAdaptor, "1"));
- testEquivalence(new SessionContext(sessionAdaptor), new SessionContext(
- sessionAdaptor));
- testEquivalence(new ApplicationContext(externalContext
- .getApplicationMap()), new ApplicationContext(externalContext
- .getApplicationMap()));
+ testEquivalence(new ContextCreator() {
+ public Context createContext() {
+ return new ServerConversationContext(sessionAdaptor, "1");
+ }
+ });
+ testEquivalence(new ContextCreator() {
+ public Context createContext() {
+ return new SessionContext(sessionAdaptor);
+ }
+ });
+ testEquivalence(new ContextCreator() {
+ public Context createContext() {
+ return new ApplicationContext(externalContext.getApplicationMap());
+ }
+ });
testIsolation(new ServerConversationContext(sessionAdaptor, "1"),
new ServerConversationContext(sessionAdaptor, "2"));
// testIsolation( new WebSessionContext(externalContext), new
@@ -220,14 +228,32 @@
ServletLifecycle.endApplication();
}
+
+ private interface ContextCreator {
+ Context createContext();
+ }
- private void testEquivalence(Context ctx, Context cty) {
- ctx.set("foo", "bar");
- ctx.flush();
- assert cty.get("foo").equals("bar");
- ctx.remove("foo");
- ctx.flush();
- assert !cty.isSet("foo");
+ private void testEquivalence(ContextCreator creator) {
+ //Creates a new context for each action to better simulate these operations
+ //happening in different call contexts.
+ { //Test Adding
+ Context ctx = creator.createContext();
+ ctx.set("foo", "bar");
+ ctx.flush();
+ }
+ { //Is Added?
+ Context ctx = creator.createContext();
+ assert ctx.get("foo").equals("bar");
+ }
+ { // Test Removing
+ Context ctx = creator.createContext();
+ ctx.remove("foo");
+ ctx.flush();
+ }
+ { // Is Removed?
+ Context ctx = creator.createContext();
+ assert !ctx.isSet("foo");
+ }
}
private void testIsolation(Context ctx, Context cty) {
15 years, 6 months
Seam SVN: r9491 - trunk/src/main/org/jboss/seam/contexts.
by seam-commits@lists.jboss.org
Author: youngm
Date: 2008-11-03 19:41:07 -0500 (Mon, 03 Nov 2008)
New Revision: 9491
Modified:
trunk/src/main/org/jboss/seam/contexts/BusinessProcessContext.java
trunk/src/main/org/jboss/seam/contexts/Lifecycle.java
trunk/src/main/org/jboss/seam/contexts/TestLifecycle.java
Log:
JBSEAM-3654
Modified: trunk/src/main/org/jboss/seam/contexts/BusinessProcessContext.java
===================================================================
--- trunk/src/main/org/jboss/seam/contexts/BusinessProcessContext.java 2008-11-04 00:36:05 UTC (rev 9490)
+++ trunk/src/main/org/jboss/seam/contexts/BusinessProcessContext.java 2008-11-04 00:41:07 UTC (rev 9491)
@@ -35,13 +35,25 @@
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)
{
@@ -208,8 +220,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 +232,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;
}
Modified: trunk/src/main/org/jboss/seam/contexts/Lifecycle.java
===================================================================
--- trunk/src/main/org/jboss/seam/contexts/Lifecycle.java 2008-11-04 00:36:05 UTC (rev 9490)
+++ trunk/src/main/org/jboss/seam/contexts/Lifecycle.java 2008-11-04 00:41:07 UTC (rev 9491)
@@ -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()
Modified: trunk/src/main/org/jboss/seam/contexts/TestLifecycle.java
===================================================================
--- trunk/src/main/org/jboss/seam/contexts/TestLifecycle.java 2008-11-04 00:36:05 UTC (rev 9490)
+++ trunk/src/main/org/jboss/seam/contexts/TestLifecycle.java 2008-11-04 00:41:07 UTC (rev 9491)
@@ -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()
15 years, 6 months
Seam SVN: r9490 - trunk/src/main/org/jboss/seam.
by seam-commits@lists.jboss.org
Author: youngm
Date: 2008-11-03 19:36:05 -0500 (Mon, 03 Nov 2008)
New Revision: 9490
Modified:
trunk/src/main/org/jboss/seam/ScopeType.java
Log:
fixed formatting
Modified: trunk/src/main/org/jboss/seam/ScopeType.java
===================================================================
--- trunk/src/main/org/jboss/seam/ScopeType.java 2008-11-04 00:32:44 UTC (rev 9489)
+++ trunk/src/main/org/jboss/seam/ScopeType.java 2008-11-04 00:36:05 UTC (rev 9490)
@@ -14,7 +14,7 @@
*
* @author <a href="mailto:theute@jboss.org">Thomas Heute</a>
*/
-public enum ScopeType
+public enum ScopeType
{
/**
* The stateless pseudo-context.
@@ -70,9 +70,10 @@
UNSPECIFIED;
private final String prefix;
-
- private ScopeType() {
- prefix = "org.jboss.seam." + toString();
+
+ private ScopeType()
+ {
+ prefix = "org.jboss.seam." + toString();
}
public boolean isContextActive()
15 years, 6 months
Seam SVN: r9489 - trunk/src/main/org/jboss/seam/contexts.
by seam-commits@lists.jboss.org
Author: youngm
Date: 2008-11-03 19:32:44 -0500 (Mon, 03 Nov 2008)
New Revision: 9489
Modified:
trunk/src/main/org/jboss/seam/contexts/PageContext.java
Log:
JBSEAM-3656
Modified: trunk/src/main/org/jboss/seam/contexts/PageContext.java
===================================================================
--- trunk/src/main/org/jboss/seam/contexts/PageContext.java 2008-11-04 00:31:39 UTC (rev 9488)
+++ trunk/src/main/org/jboss/seam/contexts/PageContext.java 2008-11-04 00:32:44 UTC (rev 9489)
@@ -38,6 +38,7 @@
public class PageContext implements Context
{
+ private static final String PAGE_CONTEXT_PREFIX = ScopeType.PAGE.getPrefix() + '$';
private Map<String, Object> previousPageMap;
private Map<String, Object> nextPageMap;
@@ -59,7 +60,7 @@
private String getPrefix()
{
- return ScopeType.PAGE.getPrefix() + '$';
+ return PAGE_CONTEXT_PREFIX;
}
public Object get(String name)
15 years, 6 months
Seam SVN: r9488 - trunk/src/main/org/jboss/seam.
by seam-commits@lists.jboss.org
Author: youngm
Date: 2008-11-03 19:31:39 -0500 (Mon, 03 Nov 2008)
New Revision: 9488
Modified:
trunk/src/main/org/jboss/seam/ScopeType.java
Log:
JBSEAM-3653
Modified: trunk/src/main/org/jboss/seam/ScopeType.java
===================================================================
--- trunk/src/main/org/jboss/seam/ScopeType.java 2008-11-04 00:28:51 UTC (rev 9487)
+++ trunk/src/main/org/jboss/seam/ScopeType.java 2008-11-04 00:31:39 UTC (rev 9488)
@@ -69,6 +69,12 @@
*/
UNSPECIFIED;
+ private final String prefix;
+
+ private ScopeType() {
+ prefix = "org.jboss.seam." + toString();
+ }
+
public boolean isContextActive()
{
switch (this)
@@ -151,7 +157,7 @@
public String getPrefix()
{
- return "org.jboss.seam." + toString();
+ return prefix;
}
}
15 years, 6 months
Seam SVN: r9487 - trunk/src/test/ftest.
by seam-commits@lists.jboss.org
Author: dan.j.allen
Date: 2008-11-03 19:28:51 -0500 (Mon, 03 Nov 2008)
New Revision: 9487
Modified:
trunk/src/test/ftest/readme.txt
Log:
add note about what error message user will get if Firefox lib directory is not in path
Modified: trunk/src/test/ftest/readme.txt
===================================================================
--- trunk/src/test/ftest/readme.txt 2008-11-04 00:07:40 UTC (rev 9486)
+++ trunk/src/test/ftest/readme.txt 2008-11-04 00:28:51 UTC (rev 9487)
@@ -44,9 +44,11 @@
Unix/Linux Setup
-----------------
-*must set to the location of your firefox browser like this:
+* You must set to the location of your firefox browser like this:
export LD_LIBRARY_PATH=/jboss/projects/seam/automation/firefox:$LD_LIBRARY_PATH
export PATH=/jboss/projects/seam/automation/firefox:$PATH
+Otherwise, you get the message:
+ Error: com.thoughtworks.selenium.SeleniumException: ERROR Server Exception: sessionId should not be null; has this session been started yet?
Mac OS Setup
--------------
15 years, 6 months
Seam SVN: r9486 - trunk/src/test/ftest.
by seam-commits@lists.jboss.org
Author: dan.j.allen
Date: 2008-11-03 19:07:40 -0500 (Mon, 03 Nov 2008)
New Revision: 9486
Modified:
trunk/src/test/ftest/readme.txt
Log:
update note about how to run all tests and just one test
Modified: trunk/src/test/ftest/readme.txt
===================================================================
--- trunk/src/test/ftest/readme.txt 2008-11-04 00:05:31 UTC (rev 9485)
+++ trunk/src/test/ftest/readme.txt 2008-11-04 00:07:40 UTC (rev 9486)
@@ -28,9 +28,10 @@
----------
* Follow specific instructions for your OS
* Set jboss.home in $SEAM_HOME/build.properties
-* execute "ant testall" in the $SEAM_HOME/src/test/ftest directory
+* Change to the $SEAM_HOME/src/test/ftest directory
+ * execute "ant testall" to run all of the functional tests
+ * execute "ant test -Dtest=booking" to only run the functional tests for the booking example
-
Known Limitations:
---------------------
* Only tested on Linux with Firefox
15 years, 6 months
Seam SVN: r9485 - trunk/src/test/ftest.
by seam-commits@lists.jboss.org
Author: dan.j.allen
Date: 2008-11-03 19:05:31 -0500 (Mon, 03 Nov 2008)
New Revision: 9485
Modified:
trunk/src/test/ftest/build.xml
Log:
fix comment about testing for a specific example
Modified: trunk/src/test/ftest/build.xml
===================================================================
--- trunk/src/test/ftest/build.xml 2008-11-04 00:02:32 UTC (rev 9484)
+++ trunk/src/test/ftest/build.xml 2008-11-04 00:05:31 UTC (rev 9485)
@@ -60,18 +60,18 @@
<antcall target="stop.selenium.server">
</antcall>
</target>
-
- <target name="test">
- <antcall target="start.selenium.server">
- </antcall>
- <!-- Execute tests for all examples-->
- <testexample name="${test}" />
+ <target name="test">
+ <antcall target="start.selenium.server">
+ </antcall>
- <antcall target="stop.selenium.server">
- </antcall>
- </target>
+ <!-- Execute tests for a specific example-->
+ <testexample name="${test}" />
+ <antcall target="stop.selenium.server">
+ </antcall>
+ </target>
+
<target name="cleanall">
<cleanexample name="booking" />
<cleanexample name="dvdstore" />
15 years, 6 months
Seam SVN: r9484 - trunk/src/test/ftest.
by seam-commits@lists.jboss.org
Author: dan.j.allen
Date: 2008-11-03 19:02:32 -0500 (Mon, 03 Nov 2008)
New Revision: 9484
Modified:
trunk/src/test/ftest/readme.txt
Log:
use SEAM_HOME instead of SEAM in documentation
Modified: trunk/src/test/ftest/readme.txt
===================================================================
--- trunk/src/test/ftest/readme.txt 2008-11-03 23:10:46 UTC (rev 9483)
+++ trunk/src/test/ftest/readme.txt 2008-11-04 00:02:32 UTC (rev 9484)
@@ -27,14 +27,14 @@
How To:
----------
* Follow specific instructions for your OS
-* Set jboss.home in $SEA</build.properties
-* execute "ant testall" in the $SEAM/src/test/ftest directory
+* Set jboss.home in $SEAM_HOME/build.properties
+* execute "ant testall" in the $SEAM_HOME/src/test/ftest directory
Known Limitations:
---------------------
* Only tested on Linux with Firefox
-* jboss.home must be set in $SEAM/build.properties
+* jboss.home must be set in $SEAM_HOME/build.properties
* JBoss AS must be started (preferably with nothing deployed)
Windows Setup
@@ -63,7 +63,7 @@
* set up a project file for these tests, or update the existing?
* Describe how to debug the tests using eclipse
- start server, sel server, and in eclipse set props in ftest.prop file and testng plugin
-* We currently have 3 required jars in the $SEAM/src/test/ftest/lib directory
+* We currently have 3 required jars in the $SEAM_HOME/src/test/ftest/lib directory
- When the build system is updated these will be removed and dependencies will
be handled as the rest of the source is.
- We are trying to keep the ftest builds as separate from seam builds as possible.
15 years, 6 months
Seam SVN: r9483 - in trunk: src/main/org/jboss/seam/deployment and 4 other directories.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-11-03 18:10:46 -0500 (Mon, 03 Nov 2008)
New Revision: 9483
Added:
trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketInstrumentationTask.java
Modified:
trunk/build.xml
trunk/src/main/org/jboss/seam/deployment/ClassDescriptor.java
trunk/src/main/org/jboss/seam/init/Initialization.java
trunk/src/main/org/jboss/seam/util/Resources.java
trunk/src/wicket/org/jboss/seam/wicket/ioc/JavassistInstrumentor.java
trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketClassLoader.java
trunk/src/wicket/org/jboss/seam/wicket/web/WicketFilterInstantiator.java
Log:
JBSEAM-3505, thanks to Clint Popetz
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2008-11-03 18:42:24 UTC (rev 9482)
+++ trunk/build.xml 2008-11-03 23:10:46 UTC (rev 9483)
@@ -327,7 +327,14 @@
</target>
<target name="jarwicket" depends="compilewicket" description="Build the distribution .jar file for the Wicket Integration package">
- <archive classesdir="${classes.wicket.dir}" module="jboss-seam-wicket" pom="${wicket.pom}" srcdir="${src.wicket.dir}"/>
+ <archive classesdir="${classes.wicket.dir}" module="jboss-seam-wicket" pom="${wicket.pom}" srcdir="${src.wicket.dir}">
+ <excludes>
+ <exclude name="**/WicketInstrumentationTask*"/>
+ </excludes>
+ </archive>
+ <jar jarfile="${lib.dir}/jboss-seam-wicket-ant.jar" basedir="${classes.wicket.dir}">
+ <include name="**/WicketInstrumentationTask*" />
+ </jar>
</target>
<!-- ########################### JUL TARGETS ###########################-->
Modified: trunk/src/main/org/jboss/seam/deployment/ClassDescriptor.java
===================================================================
--- trunk/src/main/org/jboss/seam/deployment/ClassDescriptor.java 2008-11-03 18:42:24 UTC (rev 9482)
+++ trunk/src/main/org/jboss/seam/deployment/ClassDescriptor.java 2008-11-03 23:10:46 UTC (rev 9483)
@@ -51,7 +51,7 @@
/**
* Convert a path to a class file to a class name
*/
- protected static String filenameToClassname(String filename)
+ public static String filenameToClassname(String filename)
{
return filename.substring( 0, filename.lastIndexOf(".class") )
.replace('/', '.').replace('\\', '.');
Modified: trunk/src/main/org/jboss/seam/init/Initialization.java
===================================================================
--- trunk/src/main/org/jboss/seam/init/Initialization.java 2008-11-03 18:42:24 UTC (rev 9482)
+++ trunk/src/main/org/jboss/seam/init/Initialization.java 2008-11-03 23:10:46 UTC (rev 9483)
@@ -5,10 +5,11 @@
*/
package org.jboss.seam.init;
+import static org.jboss.seam.util.Resources.getRealFile;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@@ -815,42 +816,6 @@
}
}
- private static File getRealFile(ServletContext servletContext, String path)
- {
- String realPath = servletContext.getRealPath(path);
- if (realPath==null) //WebLogic!
- {
- try
- {
- URL resourcePath = servletContext.getResource(path);
- if ((resourcePath != null) && (resourcePath.getProtocol().equals("file")))
- {
- realPath = resourcePath.getPath();
- }
- else
- {
- log.warn("Unable to determine real path from servlet context for \"" + path + "\" path does not exist.");
- }
- }
- catch (MalformedURLException e)
- {
- log.warn("Unable to determine real path from servlet context for : " + path);
- log.debug("Caused by MalformedURLException", e);
- }
-
- }
-
- if (realPath != null)
- {
- File file = new File(realPath);
- if (file.exists())
- {
- return file;
- }
- }
- return null;
- }
-
private static boolean isDebugEnabled()
{
return Resources.getResource("META-INF/debug.xhtml", null) != null;
Modified: trunk/src/main/org/jboss/seam/util/Resources.java
===================================================================
--- trunk/src/main/org/jboss/seam/util/Resources.java 2008-11-03 18:42:24 UTC (rev 9482)
+++ trunk/src/main/org/jboss/seam/util/Resources.java 2008-11-03 23:10:46 UTC (rev 9483)
@@ -1,7 +1,9 @@
package org.jboss.seam.util;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.ServletContext;
@@ -131,5 +133,41 @@
//
}
}
+
+ public static File getRealFile(ServletContext servletContext, String path)
+ {
+ String realPath = servletContext.getRealPath(path);
+ if (realPath==null) //WebLogic!
+ {
+ try
+ {
+ URL resourcePath = servletContext.getResource(path);
+ if ((resourcePath != null) && (resourcePath.getProtocol().equals("file")))
+ {
+ realPath = resourcePath.getPath();
+ }
+ else
+ {
+ log.warn("Unable to determine real path from servlet context for \"" + path + "\" path does not exist.");
+ }
+ }
+ catch (MalformedURLException e)
+ {
+ log.warn("Unable to determine real path from servlet context for : " + path);
+ log.debug("Caused by MalformedURLException", e);
+ }
+ }
+
+ if (realPath != null)
+ {
+ File file = new File(realPath);
+ if (file.exists())
+ {
+ return file;
+ }
+ }
+ return null;
+ }
+
}
Modified: trunk/src/wicket/org/jboss/seam/wicket/ioc/JavassistInstrumentor.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/ioc/JavassistInstrumentor.java 2008-11-03 18:42:24 UTC (rev 9482)
+++ trunk/src/wicket/org/jboss/seam/wicket/ioc/JavassistInstrumentor.java 2008-11-03 23:10:46 UTC (rev 9483)
@@ -1,9 +1,5 @@
package org.jboss.seam.wicket.ioc;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtBehavior;
@@ -12,13 +8,10 @@
import javassist.CtField;
import javassist.CtMethod;
import javassist.CtNewMethod;
-import javassist.LoaderClassPath;
import javassist.Modifier;
import javassist.NotFoundException;
import javassist.CtField.Initializer;
-import javax.servlet.ServletContext;
-
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.wicket.WicketComponent;
@@ -29,109 +22,32 @@
private static LogProvider log = Logging.getLogProvider(JavassistInstrumentor.class);
- public static String DEFAULT_WICKET_COMPONENT_DIRECTORY_PATH = "WEB-INF/wicket";
+ private ClassPool classPool;
- private ClassLoader classLoader;
-
- private final List<String> classes = new ArrayList<String>();
- private File wicketComponentDirectory;
- private ClassPool classPool = new ClassPool();
-
- public JavassistInstrumentor(ServletContext servletContext)
+ public JavassistInstrumentor(ClassPool classPool)
{
- wicketComponentDirectory = getWicketComponentDirectory(servletContext);
+ this.classPool = classPool;
}
-
- public void instrument() throws NotFoundException, CannotCompileException, ClassNotFoundException
+
+ public CtClass instrumentClass(String className) throws NotFoundException, CannotCompileException
{
- if (wicketComponentDirectory == null)
- {
- log.warn("No wicket components found to give Seam super powers to");
- classLoader = Thread.currentThread().getContextClassLoader();
- return;
- }
- ClassLoader parent = Thread.currentThread().getContextClassLoader();
- classPool = new ClassPool();
- classLoader = new WicketClassLoader(parent, classPool, classes, wicketComponentDirectory);
- classPool.insertClassPath(wicketComponentDirectory.getAbsolutePath());
- classPool.insertClassPath(new LoaderClassPath(parent));
-
- if (wicketComponentDirectory.exists())
- {
- // Scan for classes
- handleDirectory(wicketComponentDirectory, null);
- }
-
- // Ensure classes are instantiated, and create metadata
- for (String className : classes)
- {
- Class clazz = classLoader.loadClass(className);
- new WicketComponent(clazz);
- }
- }
-
- private static File getWicketComponentDirectory(ServletContext servletContext)
- {
- String path = servletContext.getRealPath(DEFAULT_WICKET_COMPONENT_DIRECTORY_PATH);
- if (path==null) //WebLogic!
- {
- log.debug("Could not find path for " + DEFAULT_WICKET_COMPONENT_DIRECTORY_PATH);
- }
- else
- {
- File wicketComponentDir = new File(path);
- if (wicketComponentDir.exists())
- {
- return wicketComponentDir;
- }
- }
- return null;
- }
-
- private void handleDirectory(File file, String path) throws NotFoundException, CannotCompileException
- {
- log.debug("directory: " + file);
- for ( File child: file.listFiles() )
- {
- String newPath = path==null ? child.getName() : path + '/' + child.getName();
- if ( child.isDirectory() )
- {
- handleDirectory(child, newPath);
- }
- else
- {
- handleItem(newPath);
- }
- }
- }
-
- private void handleItem(String path) throws NotFoundException, CannotCompileException
- {
- if (path.endsWith(".class"))
- {
- String className = filenameToClassname(path);
- instrumentClass(className, classPool);
- }
- }
-
- protected static String filenameToClassname(String filename)
- {
- return filename.substring( 0, filename.lastIndexOf(".class") )
- .replace('/', '.').replace('\\', '.');
- }
-
- private void instrumentClass(String className, ClassPool classPool) throws NotFoundException, CannotCompileException
- {
log.debug("Instrumenting " + className);
CtClass implementation = classPool.get(className);
if (isInstrumentable(implementation))
{
CtClass handlerClass = classPool.get(WicketHandler.class.getName());
+ CtClass componentClass = classPool.get(WicketComponent.class.getName());
CtField handlerField = new CtField(handlerClass, "handler", implementation);
Initializer handlerInitializer = Initializer.byCall(handlerClass, "create");
implementation.addField(handlerField, handlerInitializer);
+ CtField wicketComponentField = new CtField(componentClass,"component",implementation);
+ wicketComponentField.setModifiers(Modifier.STATIC);
+ Initializer componentInit = Initializer.byExpr("new org.jboss.seam.wicket.WicketComponent(" + className + ".class)");
+ implementation.addField(wicketComponentField,componentInit);
+
+
CtClass exception = classPool.get(Exception.class.getName());
CtClass instrumentedComponent = classPool.get(InstrumentedComponent.class.getName());
@@ -171,14 +87,9 @@
}
}
}
- classes.add(implementation.getName());
-
+ return implementation;
}
- public ClassLoader getClassLoader()
- {
- return classLoader;
- }
private static String createBody(CtClass clazz, CtMethod method, CtMethod newMethod) throws NotFoundException
{
Modified: trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketClassLoader.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketClassLoader.java 2008-11-03 18:42:24 UTC (rev 9482)
+++ trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketClassLoader.java 2008-11-03 23:10:46 UTC (rev 9483)
@@ -1,40 +1,90 @@
package org.jboss.seam.wicket.ioc;
+import static org.jboss.seam.deployment.ClassDescriptor.filenameToClassname;
+
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.ArrayList;
import java.util.List;
+import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.Loader;
+import javassist.LoaderClassPath;
+import javassist.NotFoundException;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+
public class WicketClassLoader extends Loader
{
+ private static LogProvider log = Logging.getLogProvider(WicketClassLoader.class);
+
private List<String> classes;
private File wicketComponentDirectory;
+ private ClassPool classPool;
+ private ClassLoader parentLoader;
- public WicketClassLoader(List<String> classes, File wicketComponentDirectory)
+ private JavassistInstrumentor instrumentor;
+
+
+ public WicketClassLoader(ClassLoader parent, ClassPool classPool, File wicketComponentDirectory)
{
- super();
- this.classes = classes;
+ super(parent, classPool);
+ this.classes = new ArrayList<String>();
this.wicketComponentDirectory = wicketComponentDirectory;
+ this.classPool = classPool;
+ this.parentLoader = parent;
+ this.instrumentor = new JavassistInstrumentor(classPool);
}
- public WicketClassLoader(ClassLoader parent, ClassPool cp, List<String> classes, File wicketComponentDirectory)
+ public WicketClassLoader instrument() throws NotFoundException, CannotCompileException, ClassNotFoundException
{
- super(parent, cp);
- this.classes = classes;
- this.wicketComponentDirectory = wicketComponentDirectory;
+ classPool.insertClassPath(wicketComponentDirectory.getAbsolutePath());
+ classPool.insertClassPath(new LoaderClassPath(parentLoader));
+
+ // Scan for classes
+ if (wicketComponentDirectory.exists())
+ {
+ handleDirectory(wicketComponentDirectory, null);
+ }
+
+ // Ensure classes' static initializers have run, to register the classes
+ // with WicketComponent
+ for (String className : classes)
+ {
+ loadClass(className);
+ }
+ return this;
}
- public WicketClassLoader(ClassPool cp, List<String> classes, File wicketComponentDirectory)
+ private void handleDirectory(File file, String path) throws NotFoundException, CannotCompileException
{
- super(cp);
- this.classes = classes;
- this.wicketComponentDirectory = wicketComponentDirectory;
+ log.trace("directory: " + file);
+ for (File child : file.listFiles())
+ {
+ String newPath = path == null ? child.getName() : path + '/' + child.getName();
+ if (child.isDirectory())
+ {
+ handleDirectory(child, newPath);
+ }
+ else
+ {
+ handleItem(newPath);
+ }
+ }
}
+ private void handleItem(String path) throws NotFoundException, CannotCompileException
+ {
+ if (path.endsWith(".class"))
+ {
+ classes.add(instrumentor.instrumentClass(filenameToClassname(path)).getName());
+ }
+ }
+
@Override
protected Class loadClassByDelegation(String name) throws ClassNotFoundException
{
@@ -76,5 +126,4 @@
}
}
}
-
}
Added: trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketInstrumentationTask.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketInstrumentationTask.java (rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketInstrumentationTask.java 2008-11-03 23:10:46 UTC (rev 9483)
@@ -0,0 +1,89 @@
+package org.jboss.seam.wicket.ioc;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.LoaderClassPath;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Path;
+
+public class WicketInstrumentationTask extends Task
+{
+ Path buildPath;
+
+ public Path getBuildPath()
+ {
+ return buildPath;
+ }
+
+ public void setBuildPath(Path buildPath)
+ {
+ this.buildPath = buildPath;
+ }
+
+ public void addClasspath(Path path)
+ {
+ buildPath = path;
+ }
+
+ private File outputDirectory;
+
+ public File getOutputDirectory()
+ {
+ return outputDirectory;
+ }
+
+ public void setOutputDirectory(File outputDirectory)
+ {
+ this.outputDirectory = outputDirectory;
+ }
+
+ private FileSet fileset;
+
+ public void addFileset(FileSet fileset)
+ {
+ this.fileset = fileset;
+ }
+
+ @Override
+ public void execute()
+ {
+ try
+ {
+
+ ClassPool classPool = new ClassPool();
+ classPool.insertClassPath(new LoaderClassPath(getProject().createClassLoader(buildPath)));
+
+ List<CtClass> instrumentedClasses = new ArrayList<CtClass>();
+
+ JavassistInstrumentor instrumentor = new JavassistInstrumentor(classPool);
+
+ for (String file : fileset.getDirectoryScanner(getProject()).getIncludedFiles())
+ {
+ if (file.endsWith(".class"))
+ {
+ instrumentedClasses.add(instrumentor.instrumentClass(filenameToClassname(file)));
+ }
+ }
+
+ for (CtClass clazz : instrumentedClasses)
+ {
+ clazz.writeFile(outputDirectory.getPath());
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected static String filenameToClassname(String filename)
+ {
+ return filename.substring(0, filename.lastIndexOf(".class")).replace('/', '.').replace('\\', '.');
+ }
+}
Property changes on: trunk/src/wicket/org/jboss/seam/wicket/ioc/WicketInstrumentationTask.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/src/wicket/org/jboss/seam/wicket/web/WicketFilterInstantiator.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/web/WicketFilterInstantiator.java 2008-11-03 18:42:24 UTC (rev 9482)
+++ trunk/src/wicket/org/jboss/seam/wicket/web/WicketFilterInstantiator.java 2008-11-03 23:10:46 UTC (rev 9483)
@@ -4,11 +4,14 @@
package org.jboss.seam.wicket.web;
import static org.jboss.seam.annotations.Install.BUILT_IN;
+import static org.jboss.seam.util.Resources.getRealFile;
+import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javassist.CannotCompileException;
+import javassist.ClassPool;
import javassist.NotFoundException;
import javax.servlet.Filter;
@@ -22,11 +25,11 @@
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.util.Reflections;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
import org.jboss.seam.web.FilterConfigWrapper;
import org.jboss.seam.wicket.WebApplication;
-import org.jboss.seam.wicket.SeamWebApplication;
-import org.jboss.seam.wicket.ioc.JavassistInstrumentor;
+import org.jboss.seam.wicket.ioc.WicketClassLoader;
@Name("org.jboss.seam.wicket.web.wicketFilterInstantiator")
@Install(precedence = BUILT_IN, classDependencies={"org.apache.wicket.Application"})
@@ -35,6 +38,9 @@
public class WicketFilterInstantiator
{
+ public static String DEFAULT_WICKET_COMPONENT_DIRECTORY_PATH = "WEB-INF/wicket";
+ private static LogProvider log = Logging.getLogProvider(WicketFilterInstantiator.class);
+
@Unwrap
public Filter unrwap()
{
@@ -49,9 +55,18 @@
Map<String, String> parameters = new HashMap<String, String>();
try
{
- JavassistInstrumentor javassistInstrumentor = new JavassistInstrumentor(filterConfig.getServletContext());
- javassistInstrumentor.instrument();
- classLoader = javassistInstrumentor.getClassLoader();
+
+ ClassLoader parent = Thread.currentThread().getContextClassLoader();
+ File dir = getRealFile(filterConfig.getServletContext(), DEFAULT_WICKET_COMPONENT_DIRECTORY_PATH);
+ if (dir == null)
+ {
+ log.warn("No wicket components directory specified to give Seam super powers to");
+ this.classLoader = parent;
+ }
+ else
+ {
+ this.classLoader = new WicketClassLoader(Thread.currentThread().getContextClassLoader(), new ClassPool(), dir).instrument();
+ }
}
catch (NotFoundException e)
{
15 years, 6 months