Well, I guess my reaction is that anything you do in "setup" requires an explicit thing to reverse it in the tearDown. If you add a handler, you should remove it in tearDown.
Dan On Monday 01 October 2007, Benson Margulies wrote: > Dan, > > In the current experiment, I'm adding a handler to the server via > explicit Java code, not spring wiring. > > Nothing I am adding is exactly a context, it is just a resource > handler. > > Perhaps it needs a 'stop', too. > > I could argue that there should be some way to say, 'make me a > self-contained universe using no static variables.' > > > -----Original Message----- > > From: Daniel Kulp [mailto:[EMAIL PROTECTED] > > Sent: Monday, October 01, 2007 2:07 PM > > To: cxf-user@incubator.apache.org > > Cc: Benson Margulies > > Subject: Re: Spring, bus, confusion > > > > > > Benson, > > > > The Jetty servers are static, not per bus. The main reason is if > > you two buss's in your application that have services that need to > > be deployed on the same port (like port 80), we can do that without > > port > > in > > > use issues. > > > > When you call bus.shutdown, it will only shutdown the port if there > > are 0 > > > contexts left (supposedly). Thus, before you call shutdown, you > > would > > > need to unregister any extra contexts created in the @Before. > > > > Hmm.... are you adding the contexts via spring? That might get > > more > > > involved. We might not have added a > > bean.setDestroyMethodName(...); type thing for the extra contexts to > > remove them. Looking.... > > > > The method: > > public void shutdown() > > certainly doesn't remove the handlers. > > > > Definitely some bugs in that area. :-( > > > > Dan > > > > On Monday 01 October 2007, Benson Margulies wrote: > > > The server's list of handlers still has the extra handler. Did you > > > look at the source code I sent? The @Before method inserts an > > > extra handler into the server. The @After calls bus.shutdown. > > > > > > The next time we run the @Before, we should be restarting from > > > complete zero, we are rereading the beans into a new app context. > > Yet, > > > > the server on the bus still somehow has the extra handler. > > > > > > > -----Original Message----- > > > > From: Willem2 [mailto:[EMAIL PROTECTED] > > > > Sent: Monday, October 01, 2007 11:32 AM > > > > To: cxf-user@incubator.apache.org > > > > Subject: RE: Spring, bus, confusion > > > > > > > > > > > > What do you mean the server's configuration is there? > > > > > > > > Do you mean the jetty server is still there ? > > > > > > > > Willem. > > > > > > > > bmargulies wrote: > > > > > I tried that. I still found my configuration changes to the > > server > > > > > > 'already present' when I create the next application context. > > > > > > > > > >> -----Original Message----- > > > > >> From: Willem2 [mailto:[EMAIL PROTECTED] > > > > >> Sent: Monday, October 01, 2007 9:11 AM > > > > >> To: cxf-user@incubator.apache.org > > > > >> Subject: Re: Spring, bus, confusion > > > > >> > > > > >> > > > > >> Hi Benson, > > > > >> > > > > >> You can call bus.shutdown(true) in @After to tear down the > > server > > > > and > > > > > > > > the > > > > > > > > > >> jetty engine. > > > > >> > > > > >> > > > > >> Willem. > > > > >> > > > > >> bmargulies wrote: > > > > >> > Please forgive me for pasting a lot of code into here. > > > > >> > > > > > >> > I'm trying to set up a unit test framework where the > > > > >> > fixture sets > > > > > > up > > > > > > > >> > jetty with an endpoint and some static content. So, as you > > will > > > > see, > > > > > > > > I > > > > > > > > > >> > have an @Before that sets everything up, and an @After that > > > > >> > tries > > > > > > to > > > > > > > >> > tear everything down. > > > > >> > > > > > >> > However, when the @Before runs the second time, things sure > > > > >> > look > > > > > > as > > > > > > > > if > > > > > > > > > >> > they have all hung around from the first time around. > > > > >> > > > > > >> > I bet that there's something simple about the bus that I'm > > > > > > missing, > > > > > > > >> > namely, that the cxf bus exists independently of my app > > > > >> > context, > > > > > > and > > > > > > > > I > > > > > > > > > >> > have to \do something/ to tear \it/ down. > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > package com.basistech.ws; > > > > >> > > > > > >> > import java.io.File; > > > > >> > import java.net.URL; > > > > >> > > > > > >> > import org.apache.cxf.Bus; > > > > >> > import org.apache.cxf.endpoint.ServerImpl; > > > > >> > import org.apache.cxf.endpoint.ServerRegistry; > > > > >> > import > > > > >> > org.apache.cxf.transport.http_jetty.JettyHTTPDestination; > > > > >> > import > > > > >> > org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine; > > > > >> > import org.junit.After; > > > > >> > import org.junit.Before; > > > > >> > import org.mortbay.jetty.Handler; > > > > >> > import org.mortbay.jetty.Server; > > > > >> > import org.mortbay.jetty.handler.ContextHandlerCollection; > > > > >> > import org.mortbay.jetty.handler.HandlerList; > > > > >> > import org.mortbay.jetty.handler.ResourceHandler; > > > > >> > import org.mortbay.resource.FileResource; > > > > >> > import > > > > > > > > > > org.springframework.beans.factory.xml.XmlBeanDefinitionReader; > > > > > > > > > >> > import > > > > > > > > > > org.springframework.context.support.GenericApplicationContext; > > > > > > > > > >> > import org.springframework.core.io.ClassPathResource; > > > > >> > import org.springframework.core.io.Resource; > > > > >> > > > > > >> > /** > > > > >> > * Class used to launch a CXF/jetty web service using the > > > > > > embedded > > > > > > > > jetty > > > > > > > > > >> > in CXF. > > > > >> > * > > > > >> > */ > > > > >> > public abstract class AbstractTestService { > > > > >> > > > > > >> > protected abstract Resource > > > > >> > getServiceDefinitionBeans(); protected abstract String > > > > >> > getStaticContentPath(); protected GenericApplicationContext > > > > >> > applicationContext; protected Bus bus; > > > > >> > > > > > >> > private void readBeans(Resource beanResource) { > > > > >> > XmlBeanDefinitionReader reader = new > > > > >> > XmlBeanDefinitionReader(applicationContext); > > > > >> > reader.loadBeanDefinitions(beanResource); > > > > >> > } > > > > >> > > > > > >> > @Before > > > > >> > public void launchService() throws Exception { > > > > >> > applicationContext = new > > > > >> > GenericApplicationContext(); readBeans(new > > > > >> > ClassPathResource("META-INF/cxf/cxf.xml")); readBeans(new > > > > >> > ClassPathResource("META-INF/cxf/cxf-extension-soap.xml")); > > > > >> > readBeans(new > > > > >> > ClassPathResource("META-INF/cxf/cxf-extension-http.xml")); > > > > >> > readBeans(new > > ClassPathResource("META-INF/cxf/cxf-extension-http-jetty.xml")) > > > > > >> >; readBeans(getServiceDefinitionBeans()); > > > > >> > applicationContext.refresh(); > > > > >> > > > > > >> > bus = (Bus)applicationContext.getBean("cxf"); > > > > >> > ServerRegistry sr= > > > > > > bus.getExtension(ServerRegistry.class); > > > > > > > >> > ServerImpl si = (ServerImpl) > > > > >> > sr.getServers().get(0); JettyHTTPDestination jhd = > > > > >> > (JettyHTTPDestination)si.getDestination(); > > > > >> > JettyHTTPServerEngine engine = > > (JettyHTTPServerEngine) > > > > > >> > jhd.getEngine(); > > > > >> > Server server = engine.getServer(); > > > > >> > Handler serverHandler = server.getHandler(); > > > > >> > ContextHandlerCollection contextHandlerCollection = > > > > >> > (ContextHandlerCollection)serverHandler; > > > > >> > HandlerList handlerList = new HandlerList(); > > > > >> > ResourceHandler resourceHandler = new > > > > >> > ResourceHandler(); handlerList.addHandler(resourceHandler); > > > > >> > handlerList.addHandler(contextHandlerCollection); > > > > >> > server.setHandler(handlerList); > > > > >> > handlerList.start(); > > > > >> > File staticContentFile = new > > > > > > File(getStaticContentPath()); > > > > > > > >> > URL targetURL = new URL("file://" + > > > > >> > staticContentFile.getCanonicalPath()); > > > > >> > FileResource fileResource = new > > > > >> > FileResource(targetURL); > > > > >> > resourceHandler.setBaseResource(fileResource); } > > > > >> > > > > > >> > @After > > > > >> > public void shutdownService() throws Exception { > > > > >> > bus = (Bus)applicationContext.getBean("cxf"); > > > > >> > ServerRegistry sr = > > > > > > bus.getExtension(ServerRegistry.class); > > > > > > > >> > ServerImpl si = (ServerImpl) > > > > >> > sr.getServers().get(0); JettyHTTPDestination jhd = > > > > >> > (JettyHTTPDestination)si.getDestination(); > > > > >> > JettyHTTPServerEngine e = (JettyHTTPServerEngine) > > > > >> > jhd.getEngine(); > > > > >> > e.getServer().stop(); > > > > >> > applicationContext.destroy(); > > > > >> > } > > > > >> > > > > > >> > } > > > > >> > > > > >> -- > > > > >> View this message in context: > > > > > > http://www.nabble.com/Spring%2C-bus%2C- > > > > > > > >> confusion-tf4545841.html#a12978917 > > > > >> Sent from the cxf-user mailing list archive at Nabble.com. > > > > > > > > -- > > > > View this message in context: > > > > http://www.nabble.com/Spring%2C-bus%2C- > > > > confusion-tf4545841.html#a12981449 > > > > Sent from the cxf-user mailing list archive at Nabble.com. > > > > -- > > J. Daniel Kulp > > Principal Engineer > > IONA > > P: 781-902-8727 C: 508-380-7194 > > [EMAIL PROTECTED] > > http://www.dankulp.com/blog -- J. Daniel Kulp Principal Engineer IONA P: 781-902-8727 C: 508-380-7194 [EMAIL PROTECTED] http://www.dankulp.com/blog