[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