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();

この設定では、サービスは最初の操作リクエストが到着したときにのみ作成されます-軸にサービスをすぐに構築させるにはどうすればよいですか?

更新: cfg.addService()ではなくdeployService()を使用しようとしましたが、これによりサービスがすぐに開始されます。ただし、最初のリクエストが届いたときにサービスの別のインスタンスが作成されるため、これも適切ではありません。

4

2 に答える 2

1

これを行う安っぽい方法は、サービスを開始した直後にコードでサービスを呼び出すことです。

于 2009-09-29T18:46:55.393 に答える
1

サービスの 1 つに org.apache.axis2.engine.ServiceLifeCycle を実装させることができます。そのように、services.xml構成でそれを発表する必要があるようです

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

ここで、com.example.MyService は ServiceLifeCycle を実装するクラスです。このクラスは、サービスのデプロイ時に通知されます。これは通常、コンテナーの起動時に行われます。コードをフックして、そこで他のサービスを (プログラムで) 開始することができます。

于 2011-08-20T11:09:32.240 に答える