■ 知識
ライフサイクルの管理について
* ライフサイクルの管理には、以下の2つのインターフェースが用意されている。 ~~~ [1] Lifecycle [2] ServiceLifeCycle ~~~ * 詳細は以下のサイトを参照のこと。http://ogawa.s18.xrea.com/tdiary/20081210.html
Service設定(services.xml)
http://axis.apache.org/axis2/java/core/docs/axis2config.html#Service_Configuration* scopeの値によって、Lifecycleで実装した init() / destroy() のタイミングが異なる ~~~ [1] application [2] soapsession [3] transportsession [4] request(デフォルト値) ~~~
■ Lifecycle
http://axis.apache.org/axis2/java/core/apidocs/org/apache/axis2/service/Lifecycle.html環境設定
[01] Eclipseにおいて、[File]-[New]-[Dynamic Web Project]を選択 [02] New Dynamic Web Project設定画面において、[Project Name]に 「SampleServiceWithLifecycle」と入力する [03] New Dynamic Web Project設定画面において、「Dynamic web module version」を「2.5」 (3.0だとできない)に選択 [04] New Dynamic Web Project設定画面において、「configuration」欄にある「Modify」ボタン押下し、 「Axis2 Webservice」にチェックボタンをつけ、「OK」押下 →手順[03]で「3.0」を設定すると、「Axis2 Webservice」にチェックボタンをつけた際にエラーとなる [05] Package と クラスを作成 * Package : com.sample * class : SampleServiceWithLifecycle [06] プロジェクトを右クリックで、[Properties]-[Java Build Path]-[Libraries]で「Add External JARs」を選択 [07] Axis2のLib配下のJARファイルを全て追加する [08] webサービスのソースを書く(下記「サンプルソース」を参照のこと) [09] 作成したクラスのファイルを右クリックし、[Web Service]-[Create Web Service]を選択し、「Finish」を押下
サンプル
service.xml(serviceタグ の scope="application" に注目)<serviceGroup> <service name="SampleServiceWithLifecycle" scope="application"> <Description>This is a sample service</Description> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass" locked="false">com.sample.SampleServiceWithLifecycle</parameter> </service> </serviceGroup>SampleServiceWithLifecycle.java
package com.sample; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceContext; import org.apache.axis2.service.Lifecycle; public class SampleServiceWithLifecycle implements Lifecycle { private static final String Key = "COUNT"; /** * サービスクラスのインスタンスが作られた際 */ @Override public void init(ServiceContext arg0) throws AxisFault { System.out.println("init"); } /** * サービスクラスのインスタンスが用済みになった際 */ @Override public void destroy(ServiceContext arg0) { System.out.println("destroy"); } public int getCount() { ServiceContext serviceContext = MessageContext.getCurrentMessageContext().getServiceContext(); Integer returnValue = (Integer)serviceContext.getProperty(SampleServiceWithLifecycle.Key); if (returnValue == null) { returnValue = new Integer(0); } ++returnValue; serviceContext.setProperty(SampleServiceWithLifecycle.Key, returnValue); System.out.println("COUNT = " + serviceContext.getProperty(SampleServiceWithLifecycle.Key)); return returnValue; } }http://blogs.yahoo.co.jp/dk521123/32750213.html
に続く
■ ServiceLifeCycle
http://axis.apache.org/axis2/java/core/apidocs/org/apache/axis2/engine/ServiceLifeCycle.htmlサンプル
service.xml(serviceタグ の classにサービスのクラスを設定する)<service name="SampleServiceWithServiceLifeCycle" class="com.sample.SampleServiceWithServiceLifeCycle"> <Description> Please Type your service description here </Description> <messageReceivers> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass" locked="false">com.sample.SampleServiceWithServiceLifeCycle</parameter> </service>com.sample.SampleServiceWithServiceLifeCycle.java
package com.sample; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceContext; import org.apache.axis2.service.Lifecycle; public class SampleServiceWithLifecycle implements ServiceLifeCycle { private static final String Key = "COUNT"; /** * サービスクラスのインスタンスが作られた際 */ @Override public void startUp(ConfigurationContext arg0, AxisService arg1) { System.out.println("startUp"); } /** * サービスクラスのインスタンスが用済みになった際 */ @Override public void shutDown(ConfigurationContext arg0, AxisService arg1) { System.out.println("shutDown"); } public int getCount() { ServiceContext serviceContext = MessageContext.getCurrentMessageContext().getServiceContext(); Integer returnValue = (Integer)serviceContext.getProperty(SampleServiceWithLifecycle.Key); if (returnValue == null) { returnValue = new Integer(0); } ++returnValue; serviceContext.setProperty(SampleServiceWithLifecycle.Key, returnValue); System.out.println("COUNT = " + serviceContext.getProperty(SampleServiceWithLifecycle.Key)); return returnValue; } }
参考文献
http://wso2.com/library/333/http://java6.blog117.fc2.com/blog-entry-41.html
関連記事
Eclipse に Axis2 を設定する
* 環境設定でほぼ同じhttp://blogs.yahoo.co.jp/dk521123/31944955.html