[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-2143) Hotdeployed components can't be configured through components.xml
Dan Allen (JIRA)
jira-events at lists.jboss.org
Wed May 14 16:25:26 EDT 2008
[ http://jira.jboss.com/jira/browse/JBSEAM-2143?page=comments#action_12412797 ]
Dan Allen commented on JBSEAM-2143:
-----------------------------------
I want to clarify that there is a distinction between "configuring" and "defining" a component. It *is* possible to configure (the properties of) a hot deployable component in components.xml. You just cannot define a component this way. As Pete was saying, if we did allow components to be defined in components.xml, it would need to be a separate components.xml that resides on the hot deployable classpath (not a bad idea actually).
If you have a hot deployable component defined as follows:
@Name("myComponent")
public class MyComponent {
private String propA;
// getters and setters as needed
}
You can configure the initial value of the property named propA in components.xml using the following declaration:
<component name="myComponent">
<property name="propA">initial value</property>
</component>
What you cannot do is the following:
<component name="myComponent" class="MyComponent">
<property name="propA">initial value</property>
</component>
The second XML stanza is a component definition (it has both name and class) and Seam cannot *see* into the hot deployment classloader in order to fulfill it.
Detailed coverage of this topic can be found in chapters 4 and 5 of Seam in Action.
> Hotdeployed components can't be configured through components.xml
> -----------------------------------------------------------------
>
> Key: JBSEAM-2143
> URL: http://jira.jboss.com/jira/browse/JBSEAM-2143
> Project: Seam
> Issue Type: Feature Request
> Components: Hot Deploy
> Affects Versions: 2.0.0.CR2
> Reporter: Pete Muir
> Priority: Critical
> Fix For: 2.1.0.GA
>
>
> he hot deployment scanner is isolated, using a URLClassloader that is not available once that method comes to a close. The only way to make this work would be to keep that classloader alive during the rest of the startup process. I can direct you to the line of code that you need to look at if you are curious about it.
> Check out lines 540 and 541 or org.jboss.seam.init.Initialiation. The scanForHotDeployableComponents uses the following logic to create a component scanner:
> URL[] urls = { url };
> classLoader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
> paths = new File[] { directory };
> Once it processes the classes, that classloader is discarded and obviously, since it is a URLclassloader, the classes aren't going to be found later on.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the seam-issues
mailing list