Axis 上で EJB を Webサービスとしてデプロイする方法 by John Mammen (john_mammen@yahoo.com)

この手引きでは4つのクラスが出てきます。EJBに関連する3つのクラスと1つの詳細クラスです。

この bean をRates Beanと呼ぶことにします。手短に説明すると、この bean の機能は、3桁の通貨コードが渡された時にその通貨の詳細レートを入手することです。

4つのクラスとは、リモート bean であるRates.java、実装 bean である RatesBean.java、ホーム bean であるRatesHome.java、詳細レートを返す RatesDetails.javaです。

以下は、WeblogicにデプロイするためのRates beanの xml デプロイメントディスクリプタと Java コードの抜粋です。これらは参考資料として使用することができます。

注意: 以下の抜粋は全て不完全です。必要な詳細のみが示されています。

Rates.java(EJB リモートクラスです)

......
public interface Rates extends EJBObject {

public RatesDetails getRateDetails(String currencyCode) throws
RemoteException,RateException;
...
}

RateDetails.java(リモート EJB 呼び出しで返されるクラスです)

...
public class RatesDetails implements Serializable{

private String isoCode;
private String vaildFrom;
private String vaildTo;
private double retailBuy;
private double retailMid;
private double retailSell;
private double wholesaleBuy;
private double wholesaleMid;
private double wholesaleSell;
private int rateType;
public RatesDetails() {
}
// setter と getter が定義されていますが、ここでは省略しています

ejb-jar.xml

<session>
<ejb-name>RatesBean</ejb-name>
<home>RatesHome</home>
<remote>Rates</remote>
<ejb-class>RatesBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<resource-ref>
<description>Datasource for Rates DB</description>
<res-ref-name>jdbc/NewRatesDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</session>

weblogic-ejb-jar.xml

<weblogic-enterprise-bean>
<ejb-name>RatesBean</ejb-name>
<stateless-session-descriptor>
<pool>
<max-beans-in-free-pool>50</max-beans-in-free-pool>
<initial-beans-in-free-pool>5</initial-beans-in-free-pool>
</pool>
</stateless-session-descriptor>
<reference-descriptor>
<resource-description>
<res-ref-name>jdbc/NewRatesDB</res-ref-name>
<jndi-name>jdbc.RatePool</jndi-name>
</resource-description>
</reference-descriptor>
<jndi-name>jndi.Rates</jndi-name>
</weblogic-enterprise-bean>

上記のようなクラスがあり、コンテナへのデプロイが成功したと仮定します。これでWebサービスのデプロイを始めることができます。

1. まず、EJB が EJB コンテナに正しくデプロイできたか確認してください。

2. 次に J2EE アプリケーションサーバに Axis 1.0 をインストールして設定してください。

3. Axis インストールページで validate をクリックして、Axis のデプロイをテストしてください。

4. 以下に示すような rates.wsdd をメモ帳で作成してください。以下の例は上記の bean と対応しています。もし、パッケージに入れているのならば、クラス名にパッケージが含まれていることを確認してください。例えば、もしRatesHomecom.mycompanyパッケージにあれば、ホームインターフェースの名前は com.mycompany.RatesHomeになります。

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:xsi="http:/www.w3.org/2000/10/XMLSchema-instance">
<service name="RateDetails" provider="java:EJB">
<parameter name="beanJndiName" value="jndi.Rates" />
<parameter name="homeInterfaceName" value="RatesHome" />
<parameter name="remoteInterfaceName" value="Rates" />
<parameter name="allowedMethods" value="getRateDetails" />
<parameter name="className" value="RatesBean" />
<parameter name="jndiURL" value="t3://localhost:7001" />
<parameter
name="jndiContextClass"
value="weblogic.jndi.WLInitialContextFactory" />
<typeMapping
xmlns:ns="http://soapinterop.org/xsd"
qname="ns:RatesDetails"
type="java:RatesDetails"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</service>
</deployment>

5. 次のコマンドで rates.wsdd をデプロイしてください。

java org.apache.axis.client.AdminClient -lhttp://localhost:7001/axis/services/ejbservice rates.wsdd

6. もし正しくデプロイできたのであれば、エラーメッセージを受け取ることはありません。もし何かしらのエラーがあれば、コンソールにそのエラーが表示されます。また、EJB コンテナのコンソールにもエラーがないか確かめてください。

7. ブラウザの url にhttp://localhost:7001/axis/services/RateDetails?method=getRateDetails&value=USDを入れてWebサービスをテストしてください。

もしデプロイが成功していたら、次のようなものを受け取ります。

Axis応答XML

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<geRateDetailsResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<geRateDetailsReturn href="#id0"/>
</geRateDetailsResponse>
<multiRef id="id0" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="ns1:RatesDetails"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://soapinterop.org/xsd">
<rateType xsi:type="xsd:int">0</rateType>
<wholesaleSell xsi:type="xsd:double">1.0</wholesaleSell>
<retailSell xsi:type="xsd:double">1.0</retailSell>
<retailMid xsi:type="xsd:double">1.0</retailMid>
<wholesaleMid xsi:type="xsd:double">1.0</wholesaleMid>
<validTo xsi:type="xsd:string" xsi:nil="true"/>
<validFrom xsi:type="xsd:string" xsi:nil="true"/>
<isoCode xsi:type="xsd:string" xsi:nil="true"/>
<retailBuy xsi:type="xsd:double">1.0</retailBuy>
<wholesaleBuy xsi:type="xsd:double">1.0</wholesaleBuy>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>

ja/axis/EJBinAxis (last edited 2009-09-20 22:48:13 by localhost)