以编程方式启动Axis2服务

3

我正在以编程方式启动一个Axis 2(1.5)服务,像这样:

ConfigurationContext context = ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, null);

AxisConfiguration cfg = context.getAxisConfiguration();
Map<String, MessageReceiver> mrMap = new HashMap<String, MessageReceiver>();
mrMap.put("http://www.w3.org/ns/wsdl/in-only", RPCInOnlyMessageReceiver.class.newInstance());
mrMap.put("http://www.w3.org/ns/wsdl/in-out", RPCMessageReceiver.class.newInstance());

AxisService service = AxisService.createService(MonitorWebService.class.getName(), cfg, mrMap, "", "http://samples", MonitorWebService.class.getClassLoader());
service.setScope("application");
cfg.addService(service);
SimpleHTTPServer server = new SimpleHTTPServer(context, 8080);
server.start();

使用这种设置,服务只在第一个操作请求到达时创建- 如何强制Axis立即构建服务?

更新:我尝试使用deployService()而不是cfg.addService(),这会立即启动服务。但是,当第一个请求到来时,另一个服务实例会被创建,这也不好。


使用这种方法,我可以使用service.xml来配置服务吗? - Jaime Hablutzel
2个回答

1
一种简单的方法是在启动服务后立即调用该服务,但这种方法可能有些不太优雅。

是的,那会很俗气 :) 假设没有其他选择出现,我会这样做。 - Andy

1

您可以让您的其中一个服务实现org.apache.axis2.engine.ServiceLifeCycle。似乎您还需要在services.xml配置中宣布这一点,就像这样

<service name="MyService" scope="application" class="com.example.MyService">
...
</service>

其中com.example.MyService是实现ServiceLifeCycle的类。该类将在服务部署时得到通知,这通常发生在容器启动时。您可以在那里挂钩您的代码以启动其他服务(以编程方式)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接