<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Possible redeploy issue
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/beve">Daniel Bevenius</a> in <i>JBoss Web Services</i> - <a href="http://community.jboss.org/message/551692#551692">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi, </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><div id="_mcePaste">I've got an issue with redployment of a JBoss ESB service. This service uses a feature in JBoss ESB that creates a web service for the service automatically when the .esb archive is deployed.</div><div id="_mcePaste">Redploying the .esb archive by touching it or replacing it is not an problem and works just as expected and it&#160; will redeploy cleanly.</div><div id="_mcePaste">The problem I have is when I specify that the .esb archive depends on another deployment using the jboss-classloading features in JBoss AS 5.1.0.</div><div> </div><div id="_mcePaste"> </div><div id="_mcePaste">The use case I have is that I have two deployments, domain-model-1.0.0.jar and service1-1.0.esb.</div><div> </div><div><div>domain-model-1.0.0.jar has a jboss-classloading.xml that looks like this:</div><div><pre class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag">&lt;classloading xmlns="urn:jboss:classloading:1.0" export-all="NON_EMPTY"&gt;</span>
&#160;&#160;&#160; <span class="jive-xml-tag">&lt;capabilities&gt;</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;module name="domain-model" version="${version}"/&gt;</span>
&#160;&#160;&#160; <span class="jive-xml-tag">&lt;/capabilities&gt;</span>
<span class="jive-xml-tag">&lt;/classloading&gt;</span>
</code></pre><div> </div></div></div><div> </div><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><p>service1-1.0.esb has a jboss-classloading.xml that looks like this:</p><div><pre class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag">&lt;classloading xmlns="urn:jboss:classloading:1.0" import-all="true"&gt;</span>
&#160;&#160;&#160; <span class="jive-xml-tag">&lt;requirements&gt;</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;module name="domain-model" version="${domain.model.version}"/&gt;</span>
&#160;&#160;&#160; <span class="jive-xml-tag">&lt;/requirements&gt;</span>
<span class="jive-xml-tag">&lt;/classloading&gt;</span>
</code></pre></div><div> </div><div><div>When I redploy domain-model-1.0.0.jar I get the following error:</div><div><pre class="jive-pre"><code class="jive-code">13:53:34,102 INFO&#160; [TomcatDeployment] undeploy, ctxPath=/service1-1.0
13:53:34,328 INFO&#160; [QueueService] Queue[/queue/service1-1.0_esb] stopped
13:53:34,333 INFO&#160; [EsbDeployment] Stopping 'service1-1.0.esb'
13:53:34,526 INFO&#160; [EsbDeployment] Destroying 'service1-1.0.esb'
13:53:34,526 WARN&#160; [ServiceMessageCounterLifecycleResource] Calling cleanup on existing service message counters for identity ID-7
13:53:34,611 INFO&#160; [QueueService] Queue[/queue/service1-1.0_gw] stopped
13:53:34,638 INFO&#160; [DefaultEndpointRegistry] remove: jboss.ws:context=service1-1.0,endpoint=Sample_Service1-1.0
13:53:34,644 INFO&#160; [EsbWsdlDeployer] undeploy CL:BaseClassLoader@1b41d4dc{vfszip:/Users/danbev/work/jboss/as/bundles/jboss-5.1.0.GA/server/default/deploy/service1-1.0.esb/}
13:53:34,657 INFO&#160; [STDOUT] Domain Model [1.0.0] stopped
13:53:34,725 INFO&#160; [STDOUT] Domain Model [1.0.0] started
13:53:34,733 WARN&#160; [ESBServiceEndpointInfo] Fault schemas ignored for OneWay service Sample:Service1-1.0
13:53:34,737 INFO&#160; [EsbWsdlDeployer] Generating wsdl url : vfsmemory://service1-1.0_WSDL/WEB-INF/wsdl/Sample/Service1-1.0.wsdl
13:53:34,830 INFO&#160; [DefaultEndpointRegistry] register: jboss.ws:context=service1-1.0,endpoint=Sample_Service1-1.0
13:53:34,839 ERROR [AbstractKernelController] Error installing to Real: name=vfszip:/Users/danbev/work/jboss/as/bundles/jboss-5.1.0.GA/server/default/deploy/service1-1.0.esb/ state=PreReal mode=Manual requiredState=Installed
org.jboss.deployers.spi.DeploymentException: Error during deploy: vfszip:/Users/danbev/work/jboss/as/bundles/jboss-5.1.0.GA/server/default/deploy/service1-1.0.esb/
&#160;&#160;&#160; at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49)
&#160;&#160;&#160; at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:177)
&#160;&#160;&#160; at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
&#160;&#160;&#160; at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
&#160;&#160;&#160; at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
&#160;&#160;&#160; at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
&#160;&#160;&#160; at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
&#160;&#160;&#160; at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
&#160;&#160;&#160; at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
&#160;&#160;&#160; at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
&#160;&#160;&#160; at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
&#160;&#160;&#160; at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
&#160;&#160;&#160; at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
&#160;&#160;&#160; at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
&#160;&#160;&#160; at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
&#160;&#160;&#160; at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:362)
&#160;&#160;&#160; at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:255)
&#160;&#160;&#160; at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
&#160;&#160;&#160; at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
&#160;&#160;&#160; at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
&#160;&#160;&#160; at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
&#160;&#160;&#160; at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
&#160;&#160;&#160; at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
&#160;&#160;&#160; at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
&#160;&#160;&#160; at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
&#160;&#160;&#160; at java.lang.Thread.run(Thread.java:637)
Caused by: org.jboss.wsf.spi.deployment.WSFDeploymentException: java.lang.IllegalStateException: BaseClassLoader@1b41d4dc{vfszip:/Users/danbev/work/jboss/as/bundles/jboss-5.1.0.GA/server/default/deploy/service1-1.0.esb/} classLoader is not connected to a domain (probably undeployed?) for class org.jboss.wsf.stack.jbws.EndpointServlet
&#160;&#160;&#160; at org.jboss.wsf.spi.deployment.WSFDeploymentException.rethrow(WSFDeploymentException.java:52)
&#160;&#160;&#160; at org.jboss.wsf.container.jboss50.deployment.tomcat.ModifyWebMetaDataDeploymentAspect.create(ModifyWebMetaDataDeploymentAspect.java:52)
&#160;&#160;&#160; at org.jboss.wsf.framework.deployment.DeploymentAspectManagerImpl.deploy(DeploymentAspectManagerImpl.java:115)
&#160;&#160;&#160; at org.jboss.wsf.container.jboss50.deployer.ArchiveDeployerHook.deploy(ArchiveDeployerHook.java:78)
&#160;&#160;&#160; at org.jboss.wsf.container.jboss50.deployer.AbstractWebServiceDeployer.internalDeploy(AbstractWebServiceDeployer.java:60)
&#160;&#160;&#160; at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
&#160;&#160;&#160; at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
&#160;&#160;&#160; ... 24 more
Caused by: java.lang.IllegalStateException: BaseClassLoader@1b41d4dc{vfszip:/Users/danbev/work/jboss/as/bundles/jboss-5.1.0.GA/server/default/deploy/service1-1.0.esb/} classLoader is not connected to a domain (probably undeployed?) for class org.jboss.wsf.stack.jbws.EndpointServlet
&#160;&#160;&#160; at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:793)
&#160;&#160;&#160; at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:441)
&#160;&#160;&#160; at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
&#160;&#160;&#160; at org.jboss.wsf.container.jboss50.deployment.tomcat.WebMetaDataModifierImpl.modifyMetaData(WebMetaDataModifierImpl.java:134)
&#160;&#160;&#160; at org.jboss.wsf.container.jboss50.deployment.tomcat.WebMetaDataModifierImpl.modifyMetaData(WebMetaDataModifierImpl.java:57)
&#160;&#160;&#160; at org.jboss.wsf.container.jboss50.deployment.tomcat.ModifyWebMetaDataDeploymentAspect.create(ModifyWebMetaDataDeploymentAspect.java:48)
&#160;&#160;&#160; ... 29 more
13:53:34,840 INFO&#160; [EsbWsdlDeployer] undeploy CL:BaseClassLoader@7d4a7918{vfszip:/Users/danbev/work/jboss/as/bundles/jboss-5.1.0.GA/server/default/deploy/service1-1.0.esb/}
</code></pre><div> </div></div></div></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><p>From the exception above it looks like the classloader used by the org.jboss.wsf.spi.deployment.Deployment is using a classloader from the now undeployed deployment. You cannot actually see that from the above but I've stepped through the code and verified that the classloader indeed was the one used by the previous deployment.</p><p>I've looked through some of the code and one thing that I noticed was this section in org.jboss.wsf.container.jboss50.deployer.ArchiveDeployerHook and its deploy method:</p><div><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> deploy(DeploymentUnit unit) <font color="navy"><b>throws</b></font> DeploymentException
<font color="navy">{</font>
&#160; <font color="navy"><b>if</b></font> (ignoreDeployment(unit))
&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font>;
 
&#160; <font color="navy"><b>if</b></font> (isWebServiceDeployment(unit))
&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160; log.debug(<font color="red">"deploy: "</font> + unit.getName());
&#160;&#160;&#160;&#160; Deployment dep = getDeployment(unit);
&#160;&#160;&#160;&#160; <font color="navy"><b>if</b></font> (dep == <font color="navy"><b>null</b></font>)
&#160;&#160;&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160;&#160;&#160; dep = createDeployment(unit);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; dep.addAttachment(DeploymentUnit.class, unit);
&#160;&#160;&#160;&#160; <font color="navy">}</font>
 
&#160;&#160;&#160;&#160; unit.addAttachment(Deployment.class, dep);
&#160;&#160;&#160;&#160; getDeploymentAspectManager().deploy(dep);
&#160; <font color="navy">}</font>
<font color="navy">}</font>
</code></pre><div> </div></div></p><p><p>What I'm seeing is that when the error occurs getDeployment returns a deployment instance and its initialClassLoader will be that of the previous deployment. Later when WebMetaDataModifierImpl gets called it will use the old classloader which you can see is part of the stacktrace above.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>One thing that I noticed was that the state of the deployment instance returned from getDeployment is DeploymentState.DESTROYED. I added a check for this and redployment works fine after that:</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>if</b></font> (dep == <font color="navy"><b>null</b></font> || dep.getState() == DeploymentState.DESTROYED)
</code></pre><p>I'm not familiar with the code base and I'm not saying this is a solution but perhaps this might give someone a hint of what the issue is and why it is happening.</p><p>I'll attach the use case that I've been using if anyone wants to reproduce this.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>/Daniel</p><div> </div></p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/551692#551692">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Web Services at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2044">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>