Seam SVN: r9502 - branches/community/Seam_2_0/src/main/org/jboss/seam.
by seam-commits@lists.jboss.org
Author: youngm
Date: 2008-11-04 18:52:08 -0500 (Tue, 04 Nov 2008)
New Revision: 9502
Modified:
branches/community/Seam_2_0/src/main/org/jboss/seam/ScopeType.java
Log:
JBSEAM-3653
Modified: branches/community/Seam_2_0/src/main/org/jboss/seam/ScopeType.java
===================================================================
--- branches/community/Seam_2_0/src/main/org/jboss/seam/ScopeType.java 2008-11-04 19:32:36 UTC (rev 9501)
+++ branches/community/Seam_2_0/src/main/org/jboss/seam/ScopeType.java 2008-11-04 23:52:08 UTC (rev 9502)
@@ -69,6 +69,13 @@
*/
UNSPECIFIED;
+ private final String prefix;
+
+ private ScopeType()
+ {
+ prefix = "org.jboss.seam." + toString();
+ }
+
public boolean isContextActive()
{
switch (this)
@@ -151,7 +158,7 @@
public String getPrefix()
{
- return "org.jboss.seam." + toString();
+ return prefix;
}
}
16 years, 3 months
Seam SVN: r9501 - trunk/examples.
by seam-commits@lists.jboss.org
Author: norman.richards(a)jboss.com
Date: 2008-11-04 14:32:36 -0500 (Tue, 04 Nov 2008)
New Revision: 9501
Modified:
trunk/examples/readme.txt
Log:
JBSEAM-3576
Modified: trunk/examples/readme.txt
===================================================================
--- trunk/examples/readme.txt 2008-11-04 19:07:19 UTC (rev 9500)
+++ trunk/examples/readme.txt 2008-11-04 19:32:36 UTC (rev 9501)
@@ -115,7 +115,7 @@
"examples/${example.name}" directory
6. Start JBoss AS by typing "./run.sh" (on Linux/Unix) or "run" (on Windows)
- in the jboss-4.2.2.GA/bin directory
+ in the jboss-4.2.3.GA/bin directory
7. Point your web browser to:
16 years, 3 months
Seam SVN: r9500 - in trunk: examples/wicket and 1 other directory.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-11-04 14:07:19 -0500 (Tue, 04 Nov 2008)
New Revision: 9500
Added:
trunk/examples/wicket/readme.txt
Modified:
trunk/examples/wicket/build.xml
trunk/release-process.txt
Log:
JBSEAM-3621, thanks to Clint Popetz
Modified: trunk/examples/wicket/build.xml
===================================================================
--- trunk/examples/wicket/build.xml 2008-11-04 15:48:04 UTC (rev 9499)
+++ trunk/examples/wicket/build.xml 2008-11-04 19:07:19 UTC (rev 9500)
@@ -2,41 +2,101 @@
<project name="WicketBooking" default="deploy" basedir="." xmlns:artifact="urn:maven-artifact-ant">
- <!-- Naming -->
- <property name="Name" value="Port of Seam Booking Example to use Wicket"/>
- <property name="example.name" value="jboss-seam-wicket-booking"/>
-
- <property name="src.java.dir" value="src/action" />
- <property name="src.web.dir" value="src/web" />
-
- <!-- Libraries to include -->
-
- <property name="seam.wicket.lib" value="yes" />
- <property name="wicket-extensions.lib" value="yes" />
- <property name="wicket-datetime.lib" value="yes" />
-
+ <!-- Naming -->
+ <property name="Name" value="Port of Seam Booking Example to use Wicket" />
+ <property name="example.name" value="jboss-seam-wicket-booking" />
+
+ <property name="src.java.dir" value="src/action" />
+ <property name="src.web.dir" value="src/web" />
+
+
+ <!--If this is set to true, wicket classes are instrumented at build time by seam's
+ WicketInstrumentationTask. The resulting classes will be placed in WEB-INF/dev if debug=true,
+ else they'll go in WEB-INF/classes -->
+ <property name="instrumentAtBuildTime" value="true" />
+ <property name="build.web" value="build-web" />
+ <property name="build.instrumented" value="instrumented-web" />
+
+ <!-- Libraries to include -->
+
+ <property name="seam.wicket.lib" value="yes" />
+ <property name="seam.debug.lib" value="yes" />
+ <property name="wicket-extensions.lib" value="yes" />
+ <property name="wicket-datetime.lib" value="yes" />
+
<!-- Datasource -->
- <property name="example.ds" value="jboss-seam-wicket-booking-ds.xml"/>
-
- <import file="../build.xml"/>
-
+ <property name="example.ds" value="jboss-seam-wicket-booking-ds.xml" />
+
+ <import file="../build.xml" />
+
<target name="compile.web" depends="compile">
- <mkdir dir="${war.dir}/WEB-INF/wicket" />
- <javac destdir="${war.dir}/WEB-INF/wicket" debug="${javac.debug}" deprecation="${javac.deprecation}" nowarn="on" >
+ <mkdir dir="${build.web}" />
+ <javac destdir="${build.web}" debug="${javac.debug}" deprecation="${javac.deprecation}" nowarn="on">
<src path="${src.web.dir}" />
- <classpath refid="build.classpath"/>
- <classpath location="${jar.dir}"/>
+ <classpath refid="build.classpath" />
+ <classpath location="${jar.dir}" />
</javac>
+ </target>
+
+ <target name="instrument" depends="compile.web" if="instrumentAtBuildTime">
+ <taskdef name="instrumentWicket" classname="org.jboss.seam.wicket.ioc.WicketInstrumentationTask">
+ <classpath>
+ <pathelement location="${lib.dir}/jboss-seam-wicket-ant.jar" />
+ <pathelement location="${lib.dir}/jboss-seam-wicket.jar" />
+ <pathelement location="${lib.dir}/javassist.jar" />
+ <pathelement location="${lib.dir}/jboss-seam.jar" />
+ </classpath>
+ </taskdef>
+
+ <path id="instrument.path">
+ <path refid="build.classpath" />
+ <pathelement location="${jar.dir}" />
+ <pathelement location="${build.web}" />
+ </path>
+
+ <instrumentWicket outputDirectory="${build.instrumented}">
+ <classpath refid="instrument.path" />
+ <fileset dir="${build.web}">
+ <and>
+ <filename name="**/*.class" />
+ <!-- only instrument things that have changed since last time -->
+ <modified>
+ <param name="cache.cachefile" value="instrumentcache.properties" />
+ </modified>
+ </and>
+ </fileset>
+ </instrumentWicket>
+ </target>
+
+ <target name="copyWicketClasses" depends="compile.web" unless="instrumentAtBuildTime">
+ <mkdir dir="${war.dir}/WEB-INF/wicket" />
<copy todir="${war.dir}/WEB-INF/wicket">
<fileset dir="${src.web.dir}">
- <include name="**/*.component.xml" />
<include name="**/*.html" />
<include name="seam.properties" />
</fileset>
+ <fileset dir="${build.web}" includes="**/*.class" />
</copy>
</target>
-
+
+ <target name="copyWicketInstrumentedClasses" depends="instrument" if="instrumentAtBuildTime">
+ <condition property="wicketClassDestination" value="${war.dir}/WEB-INF/dev" else="${war.dir}/WEB-INF/classes">
+ <istrue value="${debug}" />
+ </condition>
+
+ <mkdir dir="${wicketClassDestination}" />
+ <copy todir="${wicketClassDestination}">
+ <fileset dir="${src.web.dir}">
+ <include name="**/*.html" />
+ <include name="seam.properties" />
+ </fileset>
+ <fileset dir="${build.instrumented}" includes="**/*.class" />
+ </copy>
+ </target>
+
+
+
<!-- Examples build hook point for running targets before creating the war -->
- <target name="init.war" depends="compile.web" />
-
+ <target name="init.war" depends="copyWicketClasses,copyWicketInstrumentedClasses" />
+
</project>
Added: trunk/examples/wicket/readme.txt
===================================================================
--- trunk/examples/wicket/readme.txt (rev 0)
+++ trunk/examples/wicket/readme.txt 2008-11-04 19:07:19 UTC (rev 9500)
@@ -0,0 +1,6 @@
+Seam Wicket Example
+===============
+This is a port of the Booking example to Wicket.
+
+By default it uses build time instrumentation, but you can use runtime
+instrumentation by specifying -DinstrumentAtBuildTime=false
\ No newline at end of file
Property changes on: trunk/examples/wicket/readme.txt
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/release-process.txt
===================================================================
--- trunk/release-process.txt 2008-11-04 15:48:04 UTC (rev 9499)
+++ trunk/release-process.txt 2008-11-04 19:07:19 UTC (rev 9500)
@@ -231,7 +231,7 @@
- spring
- todo (tutorial)
- ui
- - wicket
+ - wicket (you should verify both buildtime instrumentation and runtime instrumentation)
* Tomcat 6 examples
- Note: use JBoss embedded unless specified differently
- blog (tutorial)
16 years, 3 months
Seam SVN: r9499 - in branches/enterprise/JBPAPP_4_3_FP01/src/main: org/jboss/seam/deployment and 1 other directories.
by seam-commits@lists.jboss.org
Author: manaRH
Date: 2008-11-04 10:48:04 -0500 (Tue, 04 Nov 2008)
New Revision: 9499
Added:
branches/enterprise/JBPAPP_4_3_FP01/src/main/META-INF/seam-deployment.properties
branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/deployment/SeamDeploymentProperties.java
Modified:
branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/init/Initialization.java
Log:
JBPAPP-1257
Added: branches/enterprise/JBPAPP_4_3_FP01/src/main/META-INF/seam-deployment.properties
===================================================================
--- branches/enterprise/JBPAPP_4_3_FP01/src/main/META-INF/seam-deployment.properties (rev 0)
+++ branches/enterprise/JBPAPP_4_3_FP01/src/main/META-INF/seam-deployment.properties 2008-11-04 15:48:04 UTC (rev 9499)
@@ -0,0 +1 @@
+org.jboss.seam.init.duplicateJarsPatterns=^tmp\\d+(\\S*.jar)
\ No newline at end of file
Property changes on: branches/enterprise/JBPAPP_4_3_FP01/src/main/META-INF/seam-deployment.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/deployment/SeamDeploymentProperties.java
===================================================================
--- branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/deployment/SeamDeploymentProperties.java (rev 0)
+++ branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/deployment/SeamDeploymentProperties.java 2008-11-04 15:48:04 UTC (rev 9499)
@@ -0,0 +1,116 @@
+package org.jboss.seam.deployment;
+
+import static org.jboss.seam.util.Strings.split;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Properties;
+
+import org.jboss.seam.util.EnumerationEnumeration;
+
+public class SeamDeploymentProperties
+{
+
+ private ClassLoader classLoader;
+ private Enumeration<URL> urlEnum;
+
+ public SeamDeploymentProperties(ClassLoader classLoader)
+ {
+ this.classLoader = classLoader;
+ }
+
+ /**
+ * The resource bundle used to control Seam deployment
+ */
+ public static final String RESOURCE_BUNDLE = "META-INF/seam-deployment.properties";
+
+ // All resource bundles to use, including legacy names
+ private static final String[] RESOURCE_BUNDLES = { RESOURCE_BUNDLE, "META-INF/seam-scanner.properties" };
+
+ /**
+ * Get a list of possible values for a given key.
+ *
+ * First, System properties are tried, followed by the specified resource
+ * bundle (first in classpath only).
+ *
+ * Colon (:) deliminated lists are split out.
+ *
+ */
+ public List<String> getPropertyValues(String key)
+ {
+ List<String>values = new ArrayList<String>();
+ addPropertiesFromSystem(key, values);
+ addPropertiesFromResourceBundle(key, values);
+ return values;
+ }
+
+ private void addPropertiesFromSystem(String key, List<String> values)
+ {
+ addProperty(key, System.getProperty(key), values);
+ }
+
+ private void addPropertiesFromResourceBundle(String key, List<String> values)
+ {
+ try
+ {
+ while ( getResources().hasMoreElements() )
+ {
+ URL url = getResources().nextElement();
+ Properties properties = new Properties();
+ InputStream propertyStream = url.openStream();
+ try
+ {
+ properties.load(propertyStream);
+ addProperty(key, properties.getProperty(key), values);
+ }
+ finally
+ {
+ if (propertyStream != null)
+ {
+ propertyStream.close();
+ }
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ // No - op, file is optional
+ }
+ }
+
+ /*
+ * Add the property to the set of properties only if it hasn't already been added
+ */
+ private void addProperty(String key, String value, List<String> values)
+ {
+ if (value != null)
+ {
+ String[] properties = split(value, ":");
+ for (String property : properties)
+ {
+ values.add(property);
+ }
+
+ }
+ }
+
+ private Enumeration<URL> getResources() throws IOException
+ {
+
+ if (urlEnum == null)
+ {
+ Enumeration<URL>[] enumerations = new Enumeration[RESOURCE_BUNDLES.length];
+ for (int i = 0; i < RESOURCE_BUNDLES.length; i ++)
+ {
+ enumerations[i] = classLoader.getResources(RESOURCE_BUNDLES[i]);
+ }
+ urlEnum = new EnumerationEnumeration<URL>(enumerations);
+ }
+ return urlEnum;
+ }
+
+}
Property changes on: branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/deployment/SeamDeploymentProperties.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/init/Initialization.java
===================================================================
--- branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/init/Initialization.java 2008-11-04 15:17:25 UTC (rev 9498)
+++ branches/enterprise/JBPAPP_4_3_FP01/src/main/org/jboss/seam/init/Initialization.java 2008-11-04 15:48:04 UTC (rev 9499)
@@ -20,6 +20,8 @@
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
@@ -43,6 +45,7 @@
import org.jboss.seam.core.Init;
import org.jboss.seam.core.PojoCache;
import org.jboss.seam.deployment.HotDeploymentStrategy;
+import org.jboss.seam.deployment.SeamDeploymentProperties;
import org.jboss.seam.deployment.StandardDeploymentStrategy;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
@@ -63,6 +66,8 @@
public class Initialization
{
public static final String COMPONENT_SUFFIX = ".component";
+ public static final String DUPLICATE_JARS_PATTERNS = "org.jboss.seam.init.duplicateJarsPatterns";
+
private static final LogProvider log = Logging.getLogProvider(Initialization.class);
private ServletContext servletContext;
@@ -122,19 +127,68 @@
throw new RuntimeException("error scanning META-INF/components.xml files", ioe);
}
+ List<String> seenDocuments = new ArrayList<String>();
+
Properties replacements = getReplacements();
+ Set<Pattern> duplicateJarPatterns = new HashSet<Pattern>();
+
+ for (String duplicateJarRegex : new HashSet<String>(new SeamDeploymentProperties(Thread.currentThread().getContextClassLoader()).getPropertyValues(DUPLICATE_JARS_PATTERNS)))
+ {
+ duplicateJarPatterns.add(Pattern.compile(duplicateJarRegex));
+ }
+
while (resources.hasMoreElements())
{
URL url = resources.nextElement();
- try
+
+ boolean skip = false;
+ String path = url.getPath();
+ String prefixPattern = "^(\\S*/)([\\S^/]*.jar)(\\S*)$";
+ Pattern pattern = Pattern.compile(prefixPattern);
+ Matcher matcher = pattern.matcher(path);
+ String jarName;
+ String fileName;
+ if (matcher.matches())
{
- log.info("reading " + url);
- installComponentsFromXmlElements( XML.getRootElement( url.openStream() ), replacements );
+ jarName = matcher.group(2);
+ fileName = matcher.group(3);
+ Set<String> documentNames = new HashSet<String>();
+ for (Pattern duplicateJarPattern : duplicateJarPatterns)
+ {
+ Matcher duplicateMatcher = duplicateJarPattern.matcher(jarName);
+
+ if (duplicateMatcher.matches())
+ {
+ jarName = duplicateMatcher.group(1);
+ }
+
+ documentNames.add(jarName + fileName);
+ }
+ for (String documentName : documentNames)
+ {
+ if (seenDocuments.contains(documentName))
+ {
+ skip = true;
+ }
+ }
+ seenDocuments.addAll(documentNames);
}
- catch (Exception e)
+ if (!skip)
{
- throw new RuntimeException("error while reading " + url, e);
+ try
+ {
+ log.debug("reading " + url);
+ installComponentsFromXmlElements( XML.getRootElement( url.openStream() ), replacements );
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("error while reading " + url, e);
+ }
}
+ else
+ {
+ log.trace("skipping read of duplicate components.xml " + url);
+ }
}
}
16 years, 3 months
Seam SVN: r9498 - trunk/src/main/org/jboss/seam/deployment.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-11-04 10:17:25 -0500 (Tue, 04 Nov 2008)
New Revision: 9498
Modified:
trunk/src/main/org/jboss/seam/deployment/URLScanner.java
Log:
JBSEAM-3665
Modified: trunk/src/main/org/jboss/seam/deployment/URLScanner.java
===================================================================
--- trunk/src/main/org/jboss/seam/deployment/URLScanner.java 2008-11-04 13:56:56 UTC (rev 9497)
+++ trunk/src/main/org/jboss/seam/deployment/URLScanner.java 2008-11-04 15:17:25 UTC (rev 9498)
@@ -141,7 +141,7 @@
}
else
{
- touchTimestamp(file);
+ touchTimestamp(child);
handleItem(newPath);
}
}
16 years, 3 months
Seam SVN: r9497 - trunk/ui/src/main/java/org/jboss/seam/ui/facelet.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-11-04 08:56:56 -0500 (Tue, 04 Nov 2008)
New Revision: 9497
Modified:
trunk/ui/src/main/java/org/jboss/seam/ui/facelet/HttpSessionManager.java
Log:
Make HttpSessionManager really serializable
Modified: trunk/ui/src/main/java/org/jboss/seam/ui/facelet/HttpSessionManager.java
===================================================================
--- trunk/ui/src/main/java/org/jboss/seam/ui/facelet/HttpSessionManager.java 2008-11-04 12:49:47 UTC (rev 9496)
+++ trunk/ui/src/main/java/org/jboss/seam/ui/facelet/HttpSessionManager.java 2008-11-04 13:56:56 UTC (rev 9497)
@@ -2,12 +2,12 @@
import static org.jboss.seam.ScopeType.SESSION;
+import java.io.Serializable;
+
import javax.servlet.http.HttpSession;
-import java.io.Serializable;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.AutoCreate;
-import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
@@ -24,17 +24,15 @@
public class HttpSessionManager implements Serializable
{
- private HttpSession session;
+ private transient HttpSession session;
- @Create
- public void create()
- {
- this.session = new MockHttpSession(ServletContextManager.instance());
- }
-
@Unwrap
public HttpSession getSession()
{
+ if (session == null)
+ {
+ this.session = new MockHttpSession(ServletContextManager.instance());
+ }
return session;
}
16 years, 3 months
Seam SVN: r9496 - trunk/doc/Seam_Reference_Guide/en-US.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-11-04 07:49:47 -0500 (Tue, 04 Nov 2008)
New Revision: 9496
Modified:
trunk/doc/Seam_Reference_Guide/en-US/Wicket.xml
Log:
JBSEAM-3663, thanks to Clint Popetz
Modified: trunk/doc/Seam_Reference_Guide/en-US/Wicket.xml
===================================================================
--- trunk/doc/Seam_Reference_Guide/en-US/Wicket.xml 2008-11-04 12:39:11 UTC (rev 9495)
+++ trunk/doc/Seam_Reference_Guide/en-US/Wicket.xml 2008-11-04 12:49:47 UTC (rev 9496)
@@ -189,21 +189,43 @@
<title>Setting up your project</title>
<para>
- To enable bijection and orchestration control via annotations in Wicket
- you must place your classes in <code>WEB-INF/wicket</code>. Seam needs
- to instrument the bytecode of your Wicket classes to be able to
- intercept the annotations you use.
+ Seam needs to instrument the bytecode of your Wicket classes to be able
+ to intercept the annotations you use. Seam provides two ways to do
+ this.The first is to place your classes in <code>WEB-INF/wicket</code>.
+ Seam will look for classes placed in this directory at startup and
+ instrument them. An alternative approach, which can be used alongside
+ the first, is to use an ant task for instrumention. Seam provides such
+ a task; it is packaged in <literal>jboss-seam-wicket-ant.jar </literal>,
+ and can be used in the following manner:
</para>
+ <programlisting role="XML"><![CDATA[<taskdef name="instrumentWicket"
+ classname="org.jboss.seam.wicket.ioc.WicketInstrumentationTask">
+ <classpath>
+ <pathelement location="lib/jboss-seam-wicket-ant.jar"/>
+ <pathelement location="web/WEB-INF/lib/jboss-seam-wicket.jar"/>
+ <pathelement location="lib/javassist.jar"/>
+ <pathelement location="lib/jboss-seam.jar"/>
+ </classpath>
+</taskdef>
+
+<instrumentWicket outputDirectory="${build.instrumented}">
+ <classpath refid="build.classpath"/>
+ <fileset dir="${build.classes}" includes="**/*.class"/>
+</instrumentWicket>]]></programlisting>
+ <para>
+ Then have ant copy the instrumented classes in
+ <literal>${build.instrumented}</literal> into
+ <literal>WEB-INF/classes</literal>. If you want to hot deploy the
+ Wicket components, you can copy the instrumented classes to
+ <literal>WEB-INF/dev</literal>; if you use hot deploy, make sure that
+ your <literal>WicketApplication</literal> class is also hot-deployed.
+ Upon a reload of hot-deployed classes, the entire WicketApplication
+ instance has to be re-initialized, in order to pick up new references
+ to the classes of mounted pages.
+ </para>
+
+
- <note>
- <para>
- Currently only bytecode instrumentation using a custom classloader
- which reads classes in <code>WEB-INF/wicket</code> is supported. In the
- an Ant task or Maven plugin may be developed to support bytecode
- instrumentation when the project artifacts are built.
- </para>
- </note>
-
<section>
<title>Defining the Application</title>
16 years, 3 months
Seam SVN: r9495 - trunk/src/main/org/jboss/seam/web.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-11-04 07:39:11 -0500 (Tue, 04 Nov 2008)
New Revision: 9495
Modified:
trunk/src/main/org/jboss/seam/web/WicketFilter.java
Log:
JBSEAM-3621, thanks to Clint Popetz
Modified: trunk/src/main/org/jboss/seam/web/WicketFilter.java
===================================================================
--- trunk/src/main/org/jboss/seam/web/WicketFilter.java 2008-11-04 01:18:15 UTC (rev 9494)
+++ trunk/src/main/org/jboss/seam/web/WicketFilter.java 2008-11-04 12:39:11 UTC (rev 9495)
@@ -19,15 +19,19 @@
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Observer;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Init;
+import org.jboss.seam.deployment.HotDeploymentStrategy;
import org.jboss.seam.servlet.ContextualHttpServletRequest;
@Scope(APPLICATION)
@Name("org.jboss.seam.web.wicketFilter")
@Install(precedence = BUILT_IN, dependencies="org.jboss.seam.wicket.web.wicketFilterInstantiator")
@BypassInterceptors
-(a)org.jboss.seam.annotations.web.Filter
+(a)org.jboss.seam.annotations.web.Filter(within="org.jboss.seam.debug.hotDeployFilter")
public class WicketFilter extends AbstractFilter
{
@@ -39,8 +43,26 @@
private boolean detectPortletContext;
+ private long lastInitTime = 0;
+ private FilterConfig savedConfig;
+ private ClassLoader hotDeployClassLoader;
+
+ @Observer(value= { "org.jboss.seam.postInitialization","org.jboss.seam.postReInitialization"} )
+ public void postReInitialization()
+ {
+ HotDeploymentStrategy strategy = (HotDeploymentStrategy)Contexts.getEventContext().get(HotDeploymentStrategy.NAME);
+ if (strategy != null)
+ {
+ hotDeployClassLoader = strategy.getClassLoader();
+ }
+ else
+ {
+ hotDeployClassLoader = null;
+ }
+ }
+
public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain chain) throws IOException, ServletException
{
if (delegate==null)
@@ -54,6 +76,55 @@
@Override
public void process() throws Exception
{
+ /*
+ * We initialize the delegate on the first actual request and any time the
+ * init timestamp changes, so that the WicketFilter gets reinitialized whenever the
+ * hot deployment classloader detects changes, enabling wicket components to be hot deployed.
+ */
+ if (lastInitTime != Init.instance().getTimestamp())
+ {
+ delegate.destroy();
+
+ Map<String, String> parameters = new HashMap<String, String>();
+ if ( getApplicationClass() != null )
+ {
+ parameters.put( "applicationClassName", getApplicationClass() );
+ }
+ if ( getUrlPattern() != null )
+ {
+ parameters.put("filterMappingUrlPattern", getUrlPattern());
+ }
+ else
+ {
+ parameters.put("filterMappingUrlPattern", "/*");
+ }
+ if (getApplicationFactoryClass() != null)
+ {
+ parameters.put("applicationFactoryClassName", getApplicationFactoryClass());
+ }
+ if (isDetectPortletContext())
+ {
+ parameters.put("detectPortletContext", "true");
+ }
+
+ //We have no way of passing the hot deploy classLoader to the delegate filter created by
+ //WicketFilterInstantiator, because it is unwrapped as a plain filter, which only takes string
+ //pairs as configuration. In addition, it is a STATELESS component, so it can't listen for the
+ //reinitialization events and store the classloader itself. So we set it as the thread's contextClassLoader,
+ //and reset that afterwards
+
+ ClassLoader previousClassLoader = Thread.currentThread().getContextClassLoader();
+ if (hotDeployClassLoader != null)
+ Thread.currentThread().setContextClassLoader(hotDeployClassLoader);
+ try {
+ delegate.init(new FilterConfigWrapper(savedConfig, parameters));
+ }
+ finally {
+ if (hotDeployClassLoader != null)
+ Thread.currentThread().setContextClassLoader(previousClassLoader);
+ }
+ lastInitTime = Init.instance().getTimestamp();
+ }
delegate.doFilter(servletRequest, servletResponse, chain);
}
@@ -67,32 +138,7 @@
super.init(filterConfig);
delegate = (javax.servlet.Filter) Component.getInstance("org.jboss.seam.wicket.web.wicketFilterInstantiator", ScopeType.STATELESS);
-
- if (delegate!=null)
- {
- Map<String, String> parameters = new HashMap<String, String>();
- if ( getApplicationClass() != null )
- {
- parameters.put( "applicationClassName", getApplicationClass() );
- }
- if ( getUrlPattern() != null )
- {
- parameters.put("filterMappingUrlPattern", getUrlPattern());
- }
- else
- {
- parameters.put("filterMappingUrlPattern", "/*");
- }
- if (getApplicationFactoryClass() != null)
- {
- parameters.put("applicationFactoryClassName", getApplicationFactoryClass());
- }
- if (isDetectPortletContext())
- {
- parameters.put("detectPortletContext", "true");
- }
- delegate.init( new FilterConfigWrapper(filterConfig, parameters) );
- }
+ savedConfig = filterConfig;
}
public String getApplicationClass()
16 years, 3 months
Seam SVN: r9494 - in trunk/examples/itext: src/org/jboss/seam/example/pdf and 1 other directories.
by seam-commits@lists.jboss.org
Author: norman.richards(a)jboss.com
Date: 2008-11-03 20:18:15 -0500 (Mon, 03 Nov 2008)
New Revision: 9494
Modified:
trunk/examples/itext/resources/WEB-INF/components.xml
trunk/examples/itext/src/org/jboss/seam/example/pdf/SwingComponent.java
trunk/examples/itext/view/swing.xhtml
Log:
JBSEAM-3472
Modified: trunk/examples/itext/resources/WEB-INF/components.xml
===================================================================
--- trunk/examples/itext/resources/WEB-INF/components.xml 2008-11-04 01:03:07 UTC (rev 9493)
+++ trunk/examples/itext/resources/WEB-INF/components.xml 2008-11-04 01:18:15 UTC (rev 9494)
@@ -21,8 +21,4 @@
key-alias="pdfKey" />
<core:init debug="true" jndi-pattern="@jndiPattern@" />
-
- <component name="sampleButton" class="javax.swing.JButton">
- <property name="label">A JButton!</property>
- </component>
</components>
Modified: trunk/examples/itext/src/org/jboss/seam/example/pdf/SwingComponent.java
===================================================================
--- trunk/examples/itext/src/org/jboss/seam/example/pdf/SwingComponent.java 2008-11-04 01:03:07 UTC (rev 9493)
+++ trunk/examples/itext/src/org/jboss/seam/example/pdf/SwingComponent.java 2008-11-04 01:18:15 UTC (rev 9494)
@@ -17,13 +17,19 @@
System.out.println("Error setting Java LAF: " + e);
}
- System.out.println("** " + UIManager.getLookAndFeel());
+ //System.out.println("** " + UIManager.getLookAndFeel());
}
- public Component getButton() {
+ public Component getLabel1() {
JLabel label = new JLabel("Hello, Seam", SwingConstants.CENTER);
return label;
}
+ public Component getLabel2() {
+ JLabel label = new JLabel("A label!", SwingConstants.CENTER);
+
+ return label;
+ }
+
}
Modified: trunk/examples/itext/view/swing.xhtml
===================================================================
--- trunk/examples/itext/view/swing.xhtml 2008-11-04 01:03:07 UTC (rev 9493)
+++ trunk/examples/itext/view/swing.xhtml 2008-11-04 01:18:15 UTC (rev 9494)
@@ -3,10 +3,9 @@
xmlns:p="http://jboss.com/products/seam/pdf">
- <p:paragraph>A JLabel, from Java: </p:paragraph>
- <p:swing width="310" height="120" component="#{swing.button}" />
+ <p:paragraph>Label 1:</p:paragraph>
+ <p:swing width="310" height="120" component="#{swing.label1}" />
- <p:paragraph>A JButton, defined in components.xml: </p:paragraph>
- <p:swing width="310" height="120" component="#{sampleButton}" />
-
+ <p:paragraph>Label 2:</p:paragraph>
+ <p:swing width="310" height="120" component="#{swing.label2}" />
</p:document>
16 years, 3 months
Seam SVN: r9493 - trunk/src/main/org/jboss/seam/contexts.
by seam-commits@lists.jboss.org
Author: norman.richards(a)jboss.com
Date: 2008-11-03 20:03:07 -0500 (Mon, 03 Nov 2008)
New Revision: 9493
Modified:
trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java
Log:
JBSEAM-3622
Modified: trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java
===================================================================
--- trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java 2008-11-04 00:57:53 UTC (rev 9492)
+++ trunk/src/main/org/jboss/seam/contexts/ServerConversationContext.java 2008-11-04 01:03:07 UTC (rev 9493)
@@ -320,10 +320,15 @@
else
{
//TODO: for a pure temporary conversation, this is unnecessary, optimize it
- for ( String name: getNamesFromSession() )
- {
+ for (String name: getNamesFromSession()) {
session.remove( getKey(name) );
}
+
+ // remove removed objects
+ for (String name: removals) {
+ session.remove(getKey(name));
+ }
+ removals.clear();
}
}
16 years, 3 months