この章では、CustomerServiceプロジェクトの作成方法について説明します。 項目は次のとおりです。
第3.8項「セッションBean(CustomerServiceBean.java)に対するセッション・ファサードの編集」
第3.10項「Webサービス・エンドポイント・インタフェース(CustomerService.java)へのJSR-181注釈の追加」
CustomerServiceプロジェクトでは、SOADemo-Clientアプリケーションなどのクライアント・アプリケーションで、データベースから顧客情報を取得したり、顧客をデータベースに追加できるメソッドが提供されます。
CustomerServiceプロジェクトの特徴
このプロジェクトは、SOADemo-Clientアプリケーションによって直接起動されます。 顧客がクライアント・アプリケーションを使用してログインすると、クライアント・アプリケーションはCustomerServiceプロジェクトを起動してそのユーザーを検証します。
このプロジェクトでは、Java永続性APIエンティティ・オブジェクトを使用して、データベース内のSOADEMOスキーマのCUSTOMER表とADDRESS表を管理します。
このプロジェクトでは、JSR-181 Webサービス注釈とともにEJB 3.0ステートレス・セッションBeanを使用します。 これは、JSR-181をサポートするアプリケーション・サーバーは、デプロイ時にBeanをWebサービスとして公開できることを意味します。 このBeanには、パブリック(つまり、クライアント・アプリケーションで起動可能)にするCustomerServiceのメソッドが定義されています。 これによって、クライアント・アプリケーションは、Webサービスを介してメソッドを起動できます。
BPELプロセスであるSOAOrderBookingプロジェクトでも、CustomerServiceプロジェクトを起動して、顧客のステータス(「platinum」や「gold」)などの顧客に関する詳細を取得します。
最初に、JDeveloperでCustomerService用の新規プロジェクトを作成します。手順は次のとおりです。
「SOADEMO」アプリケーションを右クリックし、「新規プロジェクト」を選択します。
新規ギャラリの「カテゴリ」セクションで、「General」を開き、「Projects」を選択します。 「項目」セクションで、「空のプロジェクト」を選択します。
「OK」をクリックします。
「プロジェクトの作成」ダイアログで、「プロジェクト名」フィールドに「CustomerService」と入力します。
「OK」をクリックします。
アプリケーション・ナビゲータで、SOADEMOアプリケーションの下に空のCustomerServiceプロジェクトが表示されていることを確認します。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
JDeveloperを使用すると、SOADEMOスキーマのCustomer表とAddress表に対してエンティティ・オブジェクトを生成できます。 これらのエンティティ・オブジェクトでは、EJB 3.0で使用可能なJava永続性APIを使用します。
エンティティBeanを生成する手順は、次のとおりです。
「CustomerService」プロジェクトを右クリックし、「新規」を選択します。 新規ギャラリの「カテゴリ」セクションで、Business Tierを開き、「EJB」を選択します。 「項目」セクションで、「表ベースのエンティティ(JPA/EJB 3.0)」を選択します。 「OK」をクリックします。
エンティティ作成(表ベース)ウィザードが起動します。
エンティティ作成(表ベース)ウィザードのようこそページで、「次へ」をクリックします。
ステップ1のデータベース接続の詳細ページで、データベース接続を選択し、「次へ」をクリックします。
ステップ2の表の選択ページで、次の項目を確認します。
「名前フィルタ」が空白であること。
「自動問合せ」が選択されていないこと。
「スキーマ」がSOADEMOに設定されていること。
「表」が選択されていること。
「問合せ」をクリックします。 SOADEMOスキーマに表リストが表示されていることを確認します。
「Address」および「Customer」を選択し、青色の一重矢印をクリックして「選択済」ボックスに移動します。
「次へ」をクリックします。
ステップ3の表からのエンティティ・ページで、次の操作を実行します。
パッケージ名: 「org.soademo.customerservice.persistence」に設定します。
メンバーレベルの注釈を配置: 「フィールド」を選択します。
java.io.Serializableの実装: このオプションを選択します。
関連フィールドのコレクション・タイプ: 「java.util.List」を選択します。
「次へ」をクリックします。
ステップ4のエンティティの詳細を指定ページで、次の操作を実行します。
「表名」で、「SOADEMO.ADDRESS」を選択します。
エンティティ名: Address
Beanクラス: org.soademo.customerservice.persistence.Address
図3-8 Address表の値が表示されたエンティティ作成(表ベース)ウィザード: ステップ4、エンティティの詳細を指定

「表名」で、「SOADEMO.CUSTOMER」を選択します。
エンティティ名: Customer
Beanクラス: org.soademo.customerservice.persistence.Customer
図3-9 Customer表の値が表示されたエンティティ作成(表ベース)ウィザード: ステップ4、エンティティの詳細を指定

「次へ」をクリックします。
「サマリー」画面で、「終了」をクリックします。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
次のファイルが表示されていることを確認します。
SOADEMO¥CustomerService¥src¥org¥soademo¥customerservice¥persistenceディレクトリのAddress.javaとCustomer.java
SOADEMO¥CustomerService¥src¥META-INFディレクトリのpersistence.xml
SOADEMOは、SOADEMOアプリケーションを作成したディレクトリを表します。
アプリケーション・ナビゲータは次のように表示されます。
CustomerService¥src¥META-INF¥persistence.xmlで、次の操作を実行します。
persistence-unitの名前を「CustomerService」から「customerServiceUnit」に変更します。
この名前は、第3.5項「businessディレクトリでのセッションBeanの作成」で作成するCustomerServiceBean.javaセッションBeanで使用します。
行を追加して、jta-data-source: <jta-data-source>jdbc/soademoDS</jta-data-source>を定義します。
jdbc/soademoDSは、第2.6.3項「データ・ソースの作成」でOracle Application Serverで作成したデータソースです。
JDeveloperのプロパティ・ダイアログを使用すると、次の変更を実行できます。
CustomerServiceプロジェクトでの変更をすべて保存したことを確認します。 アプリケーション・ナビゲータにイタリック体で表示される項目がある場合は、その項目を選択し、「ファイル」→「保存」の順に選択します。
「表示」→「構造」の順に選択し、構造ウィンドウを表示します。
アプリケーション・ナビゲータで「persistence.xml」を選択します。 構造ウィンドウで、ファイルの構造が表示されていることを確認します。
図3-11 persistence.xmlの構造が表示された構造ウィンドウ(アプリケーション・ナビゲータの下)

構造ウィンドウで、「persistence-unit」をダブルクリックします。 「persistence-unitのプロパティ」ダイアログが表示されます。
「persistence-unitのプロパティ」ダイアログで、次の操作を実行します。
jta-data-sources: 「jdbc/soademoDS」と入力します。
name: 「customerServiceUnit」に変更します。
「OK」をクリックします。 「persistence.xml」ファイルがアプリケーション・ナビゲータにイタリック体で表示されます。これは、保存されていない変更があることを示します。
アプリケーション・ナビゲータで、「persistence.xml」ファイルをダブルクリックします。 エディタにファイルの内容が表示されます。
ファイルの内容が次のように表示されていることを確認します。
例3-1 persistence.xml
<?xml version="1.0" encoding="windows-1252" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="customerServiceUnit">
<jta-data-source>jdbc/soademoDS</jta-data-source>
</persistence-unit>
</persistence>
「ファイル」→「保存」の順に選択し、ファイルを保存します。
エディタでファイルを閉じます。
businessディレクトリには、クライアントが使用できるメソッドを定義するためのセッションBeanを作成します。
セッションBeanを作成する手順は、次のとおりです。
「CustomerService」プロジェクトを右クリックし、「新規」を選択します。 新規ギャラリの「カテゴリ」セクションで、Business Tierを開き、「EJB」を選択します。 「項目」セクションで、「セッションBean(EJB 1.1/2.x/3.0)」を選択します。 「OK」をクリックします。
セッションBean作成ウィザードが起動します。
セッションBean作成ウィザードのようこそページで、「次へ」をクリックします。
ステップ1のEJBの名前とオプション・ページで、次の操作を実行します。
EJB名: 「CustomerService」と入力します。
セッション・タイプ: 「ステートレス」を選択します。
トランザクション・タイプ: 「コンテナ」を選択します。
セッション・ファサード・メソッドの生成: このオプションを選択します。
エンティティの実装: 「EJB 3.0エンティティ」を選択します。
永続性ユニット: 「customerServiceUnit (CustomerService.jpr)」を選択します。
「次へ」をクリックします。
ステップ2のセッション・ファサード -- EJB 3.0エンティティ・メソッドの選択ページで、すべての選択を解除します。
Customerエンティティのメソッドは後で生成します。
図3-15 セッションBean作成ウィザード: ステップ2、セッション・ファサード -- EJB 3.0エンティティ・メソッドの選択

「次へ」をクリックします。
ステップ3のクラス定義ページで、次の操作を実行します。
Beanクラス: 「org.soademo.customerservice.business.CustomerServiceBean」と入力します。
ソース・ディレクトリ: デフォルト(CustomerService¥srcディレクトリ)をそのまま使用します。
「次へ」をクリックします。
ステップ4のEJBコンポーネント・インタフェース・ページで、次の操作を実行します。
リモート・インタフェースの実装: このオプションを選択します。
リモート・インタフェース: org.soademo.customerservice.business.CustomerServiceRemote
|
注意: リモート・インタフェースの名前は、デフォルト値と異なります。 |
ローカル・インタフェースの実装: このオプションを選択します。
ローカル・インタフェース: org.soademo.customerservice.business.CustomerServiceLocal
Webサービス・エンドポイント・インタフェースを含める: このオプションを選択します。
Webサービス・エンドポイント・インタフェース: org.soademo.customerservice.business.CustomerService
|
注意: Webサービス・エンドポイント・インタフェースの名前は、デフォルト値と異なります。 |
「Webサービス・エンドポイント・インタフェースを含める」オプションを選択すると、JSR-181ライブラリがプロジェクトに追加されることに注意してください。 このライブラリは、プロジェクトのコンパイルで必要です。 このライブラリは、後でプロジェクトに追加することもできます(追加されていない場合)。
生成されたWSDLでは、Webサービス・エンドポイント・インタフェースの名前(CustomerService)がメッセージ名の接頭辞として使用されます。 また、この名前はポート・タイプの名前としても使用されます。 このことは、SOAOrderBookingプロジェクトに影響を与えるため、考慮する必要があります。 SOAOrderBooking¥bpelディレクトリのCustomerSvc.wsdlファイルでは、ポート・タイプの名前としてCustomerServiceが指定されます。 CustomerSvc.wsdlファイルのポート・タイプ名は、生成されたCustomerService WSDLのポート・タイプ名と一致している必要があります。 第3.13項「CustomerServiceに対するWSDLの表示」で説明するように、生成されたWSDLは、CustomerServiceプロジェクトをデプロイした後に表示できます。
図3-17 セッションBean作成ウィザード: ステップ4、EJBコンポーネント・インタフェース

「次へ」をクリックします。
サマリー・ページで、「終了」をクリックします。
アプリケーション・ナビゲータで「CustomerService」を選択し、「ファイル」→「保存」の順に選択して作業内容を保存します。
JDeveloperのエディタに、CustomerServiceBean.javaファイルが表示されます。 このファイルは、閉じることができます。
アプリケーション・ナビゲータで、businessディレクトリにCustomerServiceセッションBeanが表示されていることを確認します。
図3-18 businessディレクトリにCustomerServiceセッションBeanが表示されたアプリケーション・ナビゲータ

追加の問合せおよび表情報を定義するには、CustomerService¥src¥org¥soademo¥customerservice¥persistenceディレクトリにあるCustomer.javaファイルを編集します。
CustomerServiceプロジェクトをデプロイすると、Oracle Application Serverでは、問合せを定義する注釈を使用して、そのプロジェクトに対するWSDLが生成されます。これによって、クライアントはプロジェクトにWebサービスとしてアクセスできます。 このWSDLはOracle Application Serverで生成され、その内容は、CustomerServiceプロジェクトのデプロイ後に表示できます。 第3.13項「CustomerServiceに対するWSDLの表示」を参照してください。
Customer.javaファイルを次のように編集します。
例3-2 Customer.java
package org.soademo.customerservice.persistence;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
// Note that the query statements between the double quotes must be on one line.
@Entity
@NamedQueries( { @NamedQuery(name = "Customer.findAllCustomer",
query = "select object(o) from Customer o")
,
@NamedQuery(name = "Customer.findCustomerById",
query = "select object(cust) from Customer cust where cust.custid = :custid")
,
@NamedQuery(name = "Customer.findCustomerByEmail",
query = "select object(cust) from Customer cust where cust.email = :email and
cust.password = :password")
} )
@Table(name = "CUSTOMER")
@SequenceGenerator(name = "SEQ_ID_GENERATOR", sequenceName = "EJB_SEQ_ID_GEN")
@TableGenerator(name = "TABLE_ID_GENERATOR", table = "EJB_TAB_ID_GEN",
pkColumnName = "ID_NAME", valueColumnName = "SEQ_VALUE",
pkColumnValue = "SEQ_GEN")
public class Customer implements Serializable {
private String creditcardnumber;
private String creditcardtype;
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "TABLE_ID_GENERATOR")
@Column(nullable = false)
private String custid;
private String email;
private String fname;
private String lname;
private String phonenumber;
private String status;
private String password;
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL } )
@JoinTable(name = "CUSTOMER_ADDRESS",
joinColumns = { @JoinColumn(name = "CUSTID")
} , inverseJoinColumns = { @JoinColumn(name = "ADDRESSID")
} )
private List<Address> addressList;
public Customer() {
}
public String getCreditcardnumber() {
return creditcardnumber;
}
public void setCreditcardnumber(String creditcardnumber) {
this.creditcardnumber = creditcardnumber;
}
public String getCreditcardtype() {
return creditcardtype;
}
public void setCreditcardtype(String creditcardtype) {
this.creditcardtype = creditcardtype;
}
public String getCustid() {
return custid;
}
public void setCustid(String custid) {
this.custid = custid;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Address> getAddressList() {
if (addressList == null) {
addressList = new ArrayList();
}
return addressList;
}
public void setAddressList(List<Address> addressList) {
this.addressList = addressList;
}
public Address addAddress(Address address) {
getAddressList().add(address);
return address;
}
public Address removeAddress(Address address) {
getAddressList().remove(address);
return address;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
}
ADDRESS_EJB_SEQ_ID_GENというデータベース順序を使用してアドレスIDを生成するように、Address.javaを編集します。
太字の行は変更が必要です。 ファイル内の他の行は同じままにします。
package org.soademo.customerservice.persistence; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQuery; // add these import lines import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity @NamedQuery(name = "Address.findAllAddress", query = "select object(o) from Address o") @Table(name = "ADDRESS") public class Address implements Serializable { private String addresstype; @Id @SequenceGenerator(name = "ADDRESS_ID_GEN", sequenceName = "ADDRESS_EJB_SEQ_ID_GEN") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ADDRESS_ID_GEN") @Column(nullable = false) private String addrid; private String city; private String country; private String state; private String street; private String zip; ...
前の項(第3.6項「Customer.javaでの追加問合せの定義」)でCustomer.javaファイルの問合せを使用して定義したメソッドを追加するには、CustomerService¥src¥org¥soademo¥customerservice¥businessディレクトリにあるCustomerServiceBean.javaを編集します。
新規メソッドをCustomerServiceBean.javaに追加する手順は、次のとおりです。
「CustomerServiceBean.java」を右クリックして、「セッション・ファサードの編集」を選択します。 「セッション・ファサード・オプションの指定」ダイアログが表示されます。
このダイアログで「Customer」を開き、次のメソッドを選択します。
findCustomerById
findCustomerByEmail
他のメソッドは、SOA Order Bookingアプリケーションでは使用しないため、選択する必要はありません。
「OK」をクリックします。 JDeveloperでは、選択したメソッドを含むようにCustomerServiceBean.javaが変更されます。
JDeveloperのエディタに、CustomerServiceBean.javaが表示されます。 「ファイル」→「保存」の順に選択して、このファイルを保存します。ただし、編集を行うため閉じないでください。
CustomerServiceBean.javaに対して、次の変更を行います。
queryCustomerFindCustomerByIdメソッドを次のように変更します。
リストではなく単一の値を戻すように変更します。
名前を「findCustomerById」に変更します。
ファイルを直接編集することもできますが、JDeveloperのプロパティ・ダイアログを使用して変更することをお薦めします。これは、このクラスが実装されているインタフェース・ファイル(CustomerServiceRemote.java、CustomerServiceLocal.javaおよびCustomerService.java)などの他のファイルで変更が同期化されるためです。
CustomerServiceBean.javaがエディタに表示されていない場合は、アプリケーション・ナビゲータでダブルクリックします。
「表示」→「構造」の順に選択し、構造ウィンドウを表示します。
アプリケーション・ナビゲータで「CustomerServiceBean.java」を選択します。
構造ウィンドウで、「queryCustomerFindCustomerById」メソッドを右クリックし、「プロパティ」を選択します。 「Beanメソッドの詳細」ダイアログが表示されます。
「Beanメソッドの詳細」ダイアログで、次の操作を実行します。
名前: 「findCustomerById」に変更します。
戻り型: 「java.util.List」と山カッコを削除します。これによって、完全なパッケージ名(org.soademo.customerservice.persistence.Customer)で指定された顧客のみ戻されます。
パラメータ: 「Object」を「String」に変更します。
ダイアログが次のように表示されていることを確認します。
「OK」をクリックします。 エディタに変更が表示されます。
エディタで、findCustomerByIdメソッドに対して次の変更を行います。
戻り値をCustomerにキャストします。
最後のメソッドをgetSingleResult(getResultListではなく)に変更します。
例3-3に、更新されたメソッドを示します。
「ファイル」→「保存」の順に選択し、変更内容を保存します。
構造ウィンドウで、「ソース」を開きます。 「ソース」の下にインタフェース・ファイルがリストされていることを確認します。
インタフェース・ファイル(「CustomerServiceRemote.java」、「CustomerServiceLocal.java」および「CustomerService.java」)をそれぞれダブルクリックして、その内容をエディタに表示します。 インタフェース・ファイルは、構造ウィンドウの「ソース」の下にリストされています。
インタフェース・ファイルをダブルクリックした後は、アプリケーション・ナビゲータで「CustomerServiceBean.java」を再度選択する必要があります。 インタフェース・ファイルがCustomerServiceBean.javaのソースとしてリストされます。
JDeveloperでは、ユーザーによる更新と同期化するために、これらのインタフェース・ファイル内のメソッドが更新されていることに注意してください。
図3-21 CustomerServiceBean.javaの構造が表示されたアプリケーション・ナビゲータと構造ウィンドウ

インタフェース・ファイルを保存します。
queryCustomerFindCustomerByIdメソッドに対する変更と同様に、queryCustomerFindCustomerByEmailメソッドを次のように変更します。
リストではなく単一の値を戻すように変更します。
名前を「findCustomerByEmail」に変更します。
ファイルを直接編集することもできますが、JDeveloperのプロパティ・ダイアログを使用して変更することをお薦めします。これは、このクラスが実装されているインタフェース・ファイル(CustomerServiceRemote.java、CustomerServiceLocal.javaおよびCustomerService.java)などの他のファイルで変更が同期化されるためです。
アプリケーション・ナビゲータで「CustomerServiceBean.java」を選択します。
構造ウィンドウで、「queryCustomerFindCustomerByEmail」メソッドを右クリックし、「プロパティ」を選択します。 「Beanメソッドの詳細」ダイアログが表示されます。
「Beanメソッドの詳細」ダイアログで、次の操作を実行します。
名前: 「findCustomerByEmail」に変更します。
戻り型: 「java.util.List」と山カッコを削除します。これによって、完全なパッケージ名(org.soademo.customerservice.persistence.Customer)で指定された顧客のみ戻されます。
パラメータ: 両方のパラメータについて、「Object」を「String」に変更します。
ダイアログが次のように表示されていることを確認します。
図3-22 findCustomerByEmailに関する「Beanメソッドの詳細」ダイアログ

「OK」をクリックします。 エディタに変更が表示されます。
エディタで、findCustomerByEmailメソッドに対して次の変更を行います。
戻り値をCustomerにキャストします。
最後のメソッドをgetSingleResult(getResultListではなく)に変更します。
例3-4に、更新されたメソッドを示します。
「ファイル」→「保存」の順に選択し、変更内容を保存します。
構造ウィンドウで「ソース」を開き、インタフェース・ファイル(「CustomerServiceRemote.java」、「CustomerServiceLocal.java」および「CustomerService.java」)をそれぞれダブルクリックして、その内容をエディタに表示します。 JDeveloperでは、ユーザーによる更新と同期化するために、これらのファイル内のメソッドが更新されていることに注意してください。
インタフェース・ファイルを保存します。
getCustomerStatusおよびaddNewCustomerメソッドをCustomerServiceBean.javaに追加します。 これらのメソッドはエディタを使用して追加することもできますが、「Beanメソッドの詳細」ダイアログを使用して入力することをお薦めします。これは、新規メソッドにあわせてインタフェース・ファイルも更新されるためです。
新規メソッドを作成する手順は、次のとおりです。
エディタにCustomerServiceBean.javaを表示します。
「表示」→「構造」の順に選択し、構造ウィンドウを表示します(表示されていない場合)。
構造ウィンドウで「メソッド」を右クリックし、「新規メソッド」を選択します。 「Beanメソッドの詳細」ダイアログが表示されます。
「Beanメソッドの詳細」ダイアログで、次の操作を実行します。
名前: 「getCustomerStatus」と入力します。
戻り型: 「java.lang.String」を選択します。
パラメータ: 「String CustomerID」と入力します。
ダイアログが次のように表示されていることを確認します。
「OK」をクリックします。
CustomerServiceBean.javaのエディタで、メソッドの本文を入力します。 例3-5を参照してください。
ファイルを保存します。
JDeveloperでは、この新規メソッドにあわせてインタフェース・ファイルが更新されることに注意してください。
同じ手順を繰り返して、addNewCustomerメソッドを作成します。 「Beanメソッドの詳細」ダイアログで、次の値を入力します。
名前: 「addNewCustomer」と入力します。
戻り型: 「java.lang.String」を選択します。
パラメータ: 「Customer customer」と入力します。
ダイアログが次のように表示されていることを確認します。
ダイアログで「OK」をクリックします。
CustomerServiceBean.javaのエディタで、メソッドの本文を追加します。
CustomerServiceBean.javaファイルを保存します。
インタフェース・ファイルを保存します。
CustomerService.javaファイルは、CustomerServiceセッションBeanのWebサービス・エンドポイント・インタフェースとして生成されています。 JSR-181注釈をこのファイルに追加して、メソッドおよびパラメータの名前を調整します。
ファイルを次のように編集します。 ファイルはエディタで変更できます。
例3-7 CustomerService.java
package org.soademo.customerservice.business;
import java.rmi.RemoteException;
import javax.ejb.Remote;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import org.soademo.customerservice.persistence.Customer;
@WebService(serviceName = "CustomerSvc",
targetNamespace = "http://www.globalcompany.com/ns/customer")
public interface CustomerService {
@WebMethod
Customer findCustomerById(
@WebParam(name = "custid",
targetNamespace = "http://www.globalcompany.com/ns/customer")
String custid) throws RemoteException;
@WebMethod
String getCustomerStatus(
@WebParam(name = "CustomerID",
targetNamespace = "http://www.globalcompany.com/ns/customer")
String CustomerID);
@WebMethod
String addNewCustomer(
@WebParam(name = "customer",
targetNamespace = "http://www.globalcompany.com/ns/customer")
Customer customer);
@WebMethod
Customer findCustomerByEmail(
@WebParam(name = "email",
targetNamespace = "http://www.globalcompany.com/ns/customer")
String email,
@WebParam(name = "password",
targetNamespace = "http://www.globalcompany.com/ns/customer")
String password);
}
CustomerServiceプロジェクトをJDeveloperからOracle Application Serverに簡単にデプロイできるように、デプロイメント・プロファイルを作成します。
デプロイメント・プロファイルを作成する手順は、次のとおりです。
「CustomerService」プロジェクトを右クリックし、「新規」を選択します。 「カテゴリ」で、「General」を開き、「Deployment Profiles」を選択します。 「項目」で、「EJB JARファイル」を選択します。
図3-25 EJB JARファイルに対するデプロイメント・プロファイルを作成するための新規ギャラリ

「OK」をクリックします。
「デプロイメント・プロファイルの作成 -- EJB JARファイル」ダイアログで、次の操作を実行します。
デプロイメント・プロファイル名: 「CustomerService」と入力します。
ディレクトリ: デフォルト(CustomerServiceディレクトリ)を使用します。
「OK」をクリックします。
「EJB JARデプロイメント・プロファイルのプロパティ」ダイアログで、デフォルトをそのまま使用します。
「OK」をクリックします。
アプリケーション・ナビゲータの「リソース」の下にCustomerService.deployが表示されていることを確認します。
図3-28 CustomerService.deployデプロイメント・プロファイルが表示されたアプリケーション・ナビゲータ

CustomerServiceプロジェクトをデプロイするには、アプリケーション・ナビゲータで「CustomerService.deploy」を右クリックし、「配布先」→「SoademoApplicationServer」の順に選択します。SoademoApplicationServerは、Oracle Application Serverへの接続を指定します。
JDeveloperでは、アプリケーションがコンパイルされ、CustomerService¥deployディレクトリにJARファイルとEARファイルが作成されます。 エラーがない場合は、「アプリケーションの構成」ダイアログが表示されます。
「OK」をクリックします。
JDeveloperのログ領域で、エラーに関するメッセージを確認します。
CustomerServiceに対するWSDLは、次のURLをブラウザに入力して表示できます。
http://hostname:port/CustomerService/CustomerService?WSDL
hostnameには、Oracle Application Serverが実行されているマシンの名前を入力します。
portには、Oracle HTTP ServerまたはOC4JがリスニングしているHTTPポートを入力します。 デフォルト・ポートは8888です。
CustomerServiceをデプロイした後は、Application Server ControlのOC4J: ホーム・ページの「Webサービス」タブ(図3-30)と「アプリケーション」タブ(図3-31)に、CustomerServiceが表示されていることを確認します。
図3-30 CustomerService Webサービスが表示されたOC4J: ホーム・ページの「Webサービス」タブ

図3-31 CustomerServiceアプリケーションが表示されたOC4J: ホーム・ページの「アプリケーション」タブ
