Index: core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyAdapter.java =================================================================== --- core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyAdapter.java (revision 20532) +++ core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyAdapter.java (working copy) @@ -108,11 +108,17 @@ */ public void registerEndpoint(String contextRoot, Collection vsServers, com.sun.grizzly.tcp.Adapter endpointAdapter, - ApplicationContainer container) { + ApplicationContainer container) throws EndpointRegistrationException { if (!contextRoot.startsWith("/")) { contextRoot = "/" + contextRoot; } + + if (vsMapper.getEndpoint(contextRoot) != null) { + throw new EndpointRegistrationException("Application with context-root '" + + contextRoot + "' is already registered on Adapter '" + toString() + "'!"); + } + vsMapper.registerEndpoint(contextRoot, vsServers, endpointAdapter, container); } Index: core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyProxy.java =================================================================== --- core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyProxy.java (revision 20532) +++ core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyProxy.java (working copy) @@ -153,7 +153,7 @@ */ public void registerEndpoint(String contextRoot, Collection vsServers, Adapter endpointAdapter, - ApplicationContainer container) { + ApplicationContainer container) throws EndpointRegistrationException { if (!contextRoot.startsWith("/")) { contextRoot = "/" + contextRoot; @@ -171,7 +171,7 @@ /** * Removes the contex-root from our list of endpoints. */ - public void unregisterEndpoint(String contextRoot, ApplicationContainer app) { + public void unregisterEndpoint(String contextRoot, ApplicationContainer app) throws EndpointRegistrationException { endPointMapper.unregisterEndpoint(contextRoot, app); vsMapper.unregisterEndpoint(contextRoot, app); } Index: core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/EndpointMapper.java =================================================================== --- core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/EndpointMapper.java (revision 20532) +++ core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/EndpointMapper.java (working copy) @@ -42,12 +42,12 @@ * @param endpointAdapter servicing requests. */ public void registerEndpoint(String contextRoot, Collection vsServers, E adapter, - ApplicationContainer container) ; + ApplicationContainer container) throws EndpointRegistrationException; /** * Removes the contex-root from our list of endpoints. */ - public void unregisterEndpoint(String contextRoot, ApplicationContainer app); + public void unregisterEndpoint(String contextRoot, ApplicationContainer app) throws EndpointRegistrationException; } Index: core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyService.java =================================================================== --- core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyService.java (revision 20532) +++ core/kernel/src/main/java/com/sun/enterprise/v3/services/impl/GrizzlyService.java (working copy) @@ -118,10 +118,16 @@ // now register all proxies you can find out there ! // TODO : so far these qets registered everywhere, maybe not the right thing ;-) for (org.glassfish.api.container.Adapter subAdapter : habitat.getAllByContract(org.glassfish.api.container.Adapter.class)) { - registerEndpoint(subAdapter.getContextRoot(), null, subAdapter, null); + try { + registerEndpoint(subAdapter.getContextRoot(), null, + subAdapter, null); + } catch(EndpointRegistrationException e) { + logger.log(Level.WARNING, + "GrizzlyService endpoint registration problem", e); + } } } catch(RuntimeException e) { // So far postConstruct can not throw any other exception type - logger.warning("Closing initialized network proxies"); + logger.log(Level.WARNING, "Closing initialized network proxies"); for(NetworkProxy proxy : proxies) { try { proxy.stop(); @@ -151,7 +157,7 @@ * @param endpointAdapter servicing requests. */ public void registerEndpoint(String contextRoot, com.sun.grizzly.tcp.Adapter endpointAdapter, - ApplicationContainer container) { + ApplicationContainer container) throws EndpointRegistrationException { registerEndpoint(contextRoot, null, endpointAdapter, container); } @@ -163,8 +169,9 @@ * @param contextRoot for the proxy * @param endpointAdapter servicing requests. */ - public void registerEndpoint(String contextRoot, Collection vsServers, com.sun.grizzly.tcp.Adapter endpointAdapter, - ApplicationContainer container) { + public void registerEndpoint(String contextRoot, Collection vsServers, + com.sun.grizzly.tcp.Adapter endpointAdapter, + ApplicationContainer container) throws EndpointRegistrationException { for (NetworkProxy proxy : proxies) { proxy.registerEndpoint(contextRoot, vsServers, endpointAdapter, container); @@ -180,7 +187,7 @@ int port, Collection vsServers, com.sun.grizzly.tcp.Adapter endpointAdapter, - ApplicationContainer container) { + ApplicationContainer container) throws EndpointRegistrationException { for (NetworkProxy proxy : proxies) { if (proxy.getPort() == port) { proxy.registerEndpoint(contextRoot, vsServers, @@ -193,17 +200,17 @@ /** * Removes the contex-root from our list of endpoints. */ - public void unregisterEndpoint(String contextRoot) { + public void unregisterEndpoint(String contextRoot) throws EndpointRegistrationException { unregisterEndpoint(contextRoot, null); } /** * Removes the contex-root from our list of endpoints. */ - public void unregisterEndpoint(String contextRoot, ApplicationContainer app) { + public void unregisterEndpoint(String contextRoot, + ApplicationContainer app) throws EndpointRegistrationException { for (NetworkProxy proxy : proxies) { proxy.unregisterEndpoint(contextRoot, app); } - } } Index: core/kernel/src/main/java/com/sun/enterprise/v3/server/ApplicationLifecycle.java =================================================================== --- core/kernel/src/main/java/com/sun/enterprise/v3/server/ApplicationLifecycle.java (revision 20532) +++ core/kernel/src/main/java/com/sun/enterprise/v3/server/ApplicationLifecycle.java (working copy) @@ -31,6 +31,7 @@ import com.sun.enterprise.v3.deployment.DeploymentContextImpl; import com.sun.enterprise.v3.deployment.DeployCommand; import com.sun.enterprise.v3.deployment.EnableCommand; +import com.sun.enterprise.v3.services.impl.EndpointRegistrationException; import com.sun.enterprise.deployment.BundleDescriptor; import com.sun.enterprise.v3.services.impl.GrizzlyService; import com.sun.enterprise.config.serverbeans.Applications; @@ -894,6 +895,9 @@ try { final Adapter appAdapter = Adapter.class.cast(module.getApplicationContainer()); adapter.unregisterEndpoint(appAdapter.getContextRoot(), module.getApplicationContainer()); + } catch (EndpointRegistrationException e) { + logger.log(Level.WARNING, "Exception during unloading module '" + + module + "'", e); } catch(ClassCastException e) { // do nothing the application did not have an adapter } Index: distributions/external/grizzly-jruby/src/main/java/com/sun/enterprise/rails/RailsDeployer.java =================================================================== --- distributions/external/grizzly-jruby/src/main/java/com/sun/enterprise/rails/RailsDeployer.java (revision 20532) +++ distributions/external/grizzly-jruby/src/main/java/com/sun/enterprise/rails/RailsDeployer.java (working copy) @@ -27,6 +27,7 @@ import com.sun.enterprise.v3.deployment.DeployCommand; import com.sun.enterprise.v3.server.ServerEnvironment; +import com.sun.enterprise.v3.services.impl.EndpointRegistrationException; import com.sun.enterprise.v3.services.impl.GrizzlyService; import com.sun.grizzly.arp.DefaultAsyncHandler; import org.glassfish.api.deployment.Deployer; @@ -35,6 +36,7 @@ import com.sun.grizzly.jruby.RubyObjectPool; import com.sun.grizzly.jruby.RubyRuntimeAsyncFilter; import java.util.Iterator; +import java.util.logging.Level; import org.jruby.RubyArray; import org.jruby.RubyException; import org.jruby.exceptions.RaiseException; @@ -132,7 +134,11 @@ context.getLogger().info("Loading application " + context.getCommandParameters().getProperty(DeployCommand.NAME) + " at " + contextRoot); - grizzlyAdapter.registerEndpoint(contextRoot, null, adapter, adapter); + try { + grizzlyAdapter.registerEndpoint(contextRoot, null, adapter, adapter); + } catch (EndpointRegistrationException e) { + context.getLogger().log(Level.WARNING, "Error registering RailsAdapter", e); + } return adapter; } Index: web/tomcat-connector/src/main/java/com/sun/enterprise/web/tomcat/TomcatDeployer.java =================================================================== --- web/tomcat-connector/src/main/java/com/sun/enterprise/web/tomcat/TomcatDeployer.java (revision 20532) +++ web/tomcat-connector/src/main/java/com/sun/enterprise/web/tomcat/TomcatDeployer.java (working copy) @@ -37,6 +37,7 @@ import com.sun.enterprise.deployment.archivist.ArchivistFactory; import com.sun.enterprise.deployment.archivist.Archivist; import com.sun.enterprise.deployment.io.WebDeploymentDescriptorFile; +import com.sun.enterprise.v3.services.impl.EndpointRegistrationException; import com.sun.logging.LogDomains; import org.apache.catalina.Container; import org.apache.catalina.Host; @@ -150,8 +151,12 @@ Collection c = new HashSet(); c.add(vs.getName()); for (int port : vs.getPorts()) { - Adapter adapter = container.adapterMap.get(Integer.valueOf(port)); - grizzlyAdapter.registerEndpoint(ctxtRoot, c, adapter, webApplication); + Adapter adapter = container.adapterMap.get(Integer.valueOf(port)); + try { + grizzlyAdapter.registerEndpoint(ctxtRoot, c, adapter, webApplication); + } catch (EndpointRegistrationException e) { + dc.getLogger().log(Level.WARNING, "Error while deploying", e); + } } } } @@ -167,7 +172,11 @@ } else if ("/".equals(ctxtRoot)) { ctxtRoot = ""; } - grizzlyAdapter.unregisterEndpoint(ctxtRoot, webApplication); + try { + grizzlyAdapter.unregisterEndpoint(ctxtRoot, webApplication); + } catch (EndpointRegistrationException e) { + dc.getLogger().log(Level.WARNING, "Error while undeploying", e); + } List targets = StringUtils.parseStringList( params.getProperty(DeployCommand.VIRTUAL_SERVERS), " ,"); @@ -201,7 +210,11 @@ + " from virtual server " + vs.getName()); // ToDo : dochez : not good, we unregister from everywhere. - grizzlyAdapter.unregisterEndpoint(ctxtRoot, webApplication); + try { + grizzlyAdapter.unregisterEndpoint(ctxtRoot, webApplication); + } catch (EndpointRegistrationException e) { + dc.getLogger().log(Level.WARNING, "Error while undeploying", e); + } } } } Index: web/webtier/src/main/java/com/sun/enterprise/web/WebApplication.java =================================================================== --- web/webtier/src/main/java/com/sun/enterprise/web/WebApplication.java (revision 20532) +++ web/webtier/src/main/java/com/sun/enterprise/web/WebApplication.java (working copy) @@ -33,10 +33,9 @@ import com.sun.enterprise.deployment.WebBundleDescriptor; import com.sun.enterprise.util.StringUtils; import com.sun.enterprise.v3.common.Result; -import com.sun.enterprise.v3.deployment.DeployCommand; +import com.sun.enterprise.v3.services.impl.EndpointRegistrationException; import com.sun.enterprise.v3.services.impl.GrizzlyService; import com.sun.logging.LogDomains; -import com.sun.grizzly.tcp.Adapter; import java.util.List; import java.util.Collection; @@ -89,8 +88,12 @@ if (loadToAll || vsList.contains(vs.getName()) || isAliasMatched(vsList,vs)) { for (int port : vs.getPorts()) { - CoyoteAdapter adapter = container.adapterMap.get(Integer.valueOf(port)); - grizzlyAdapter.registerEndpoint(contextRoot, adapter.getPort(), c, adapter, this); + CoyoteAdapter adapter = container.adapterMap.get(Integer.valueOf(port)); + try { + grizzlyAdapter.registerEndpoint(contextRoot, adapter.getPort(), c, adapter, this); + } catch(EndpointRegistrationException e) { + logger.log(Level.WARNING, "Error while deploying", e); + } } } } else { @@ -137,7 +140,11 @@ + " from virtual server " + vs.getName()); // ToDo : dochez : not good, we unregister from everywhere... - grizzlyAdapter.unregisterEndpoint(ctxtRoot, this); + try { + grizzlyAdapter.unregisterEndpoint(ctxtRoot, this); + } catch (EndpointRegistrationException e) { + logger.log(Level.WARNING, "Error while undeploying", e); + } } else { isLeftOver = true; } Index: web/webtier/src/main/java/com/sun/enterprise/web/WebContainer.java =================================================================== --- web/webtier/src/main/java/com/sun/enterprise/web/WebContainer.java (revision 20532) +++ web/webtier/src/main/java/com/sun/enterprise/web/WebContainer.java (working copy) @@ -168,6 +168,7 @@ import org.apache.catalina.Realm; import com.sun.enterprise.security.integration.RealmInitializer; +import com.sun.enterprise.v3.services.impl.EndpointRegistrationException; /** * Web container service @@ -2475,8 +2476,19 @@ CoyoteAdapter adapter = adapterMap.get(Integer.valueOf(port)); WebApplication application = new WebApplication(this, wmInfo, grizzlyAdapter); - grizzlyAdapter.registerEndpoint(wmInfo.getContextPath(), - adapter, application); + try { + grizzlyAdapter.registerEndpoint(wmInfo.getContextPath(), + adapter, application); + } catch(EndpointRegistrationException e) { + String msg = _rb.getString( + "webcontainer.defaultWebModuleError"); + msg = MessageFormat.format( + msg, + new Object[]{defaultPath, + vs.getName() + }); + _logger.log(Level.SEVERE, msg, e); + } } } }