以编程方式启动axis2服务

时间:2009-09-29 09:13:38

标签: java web-services axis2

我是以编程方式在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();

通过此设置,仅在第一个操作请求到达时创建服务 - 如何强制轴立即构建服务?

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

2 个答案:

答案 0 :(得分:1)

一种简洁的方法是让代码在启动服务后立即调用服务。

答案 1 :(得分:1)

您可以让其中一个服务实现org.apache.axis2.engine.ServiceLifeCycle。看来你还需要在services.xml配置中宣布,就像那样

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

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