Hi,
I have web application, which runs on Tomcat 7. In application, I have
bean for creating and destroying cxf server. When I deploy application,
server is initializing and runs. When I undeploy application, server is
destroying, but port where server runs is still used. So I cannot
redeploy application without restart Tomcat server. Could you help me
please?
There is my code:
<bean class="com.pikeelectronic.clan.core.ServicesFactoryBean"
init-method="create" destroy-method="destroy">
<property name="serviceName" value="ContextService" />
<property name="protoPackage" value="ContextProtos" />
<property name="production" value="true" />
</bean>
public class ServicesFactoryBean {
ProtobufServerFactoryBean factoryBean = new
ProtobufServerFactoryBean();
String serviceName;
String protoPackage;
Server server;
boolean production = true;
@SuppressWarnings({ "rawtypes", "unchecked" })
public Server create() throws InstantiationException,
IllegalAccessException, ClassNotFoundException {
if (getServiceName() == null)
throw new IllegalStateException("Service name not set in
services.xml");
String pkg;
if (isProduction())
pkg = "com.pikeelectronic.clan.core.srv.";
else
pkg = "com.pikeelectronic.clan.core.srv.stub.";
Class srvBeanClass = Class.forName(pkg + getServiceName() +
"Impl");
Class msgBeanClass =
Class.forName("com.pikeelectronic.clan.core.proto." + getProtoPackage()
+ "$"
+ getServiceName() + "Message");
factoryBean.setAddress("http://"
+
ClanCoreProperties.getInstance().getProperty(ClanCoreProperties.CORE_JETTY_HOST_NAME)
+ ":"
+
ClanCoreProperties.getInstance().getProperty(ClanCoreProperties.CORE_JETTY_PORT)
+ "/"
+ getServiceName());
factoryBean.setServiceBean(srvBeanClass.newInstance());
factoryBean.setMessageClass(msgBeanClass);
server = factoryBean.create();
return server;
}
public void destroy() {
server.stop();
server = null;
// factoryBean.getServer().stop();
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public boolean isProduction() {
return production;
}
public void setProduction(boolean production) {
this.production = production;
}
public String getProtoPackage() {
return protoPackage;
}
public void setProtoPackage(String protoPackage) {
this.protoPackage = protoPackage;
}
}
Thanks.
--
/**************************************/
Best regards / S pozdravem
Vladislav Krejčiřík
http://www.vkrejcirik.info