Dobry den,
Mam webovou aplikaci bezici v ramci Tomcatu. Aplikace registruje beanu,
ktera spravuje beh CXF serveru. Mam vsak problem pri undeployi teto
aplikace. V metode destroy teto beany server zastavuji. I po odstraneni
aplikace a zastaveni serveru je port na kterem bezel obsazen. Nemuzu
tedy provest redeploy aplikace bez restartu Tomcatu a uvolneni tohoto portu.
Kod:
<bean class="my.package.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 = "my.package.srv.";
else
pkg = "my.package.srv.stub.";
Class srvBeanClass = Class.forName(pkg + getServiceName() +
"Impl");
Class msgBeanClass = Class.forName("my.package.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;
}
}
Dekuji.
--
/**************************************/
Best regards / S pozdravem
Vladislav Krejčiřík
http://www.vkrejcirik.info