Reserve Web サービスメソッドの追加
必要な動作を行うための Java クラスを作成して実装することにより、新しい Web サービスを追加できます。
Web サービスを追加するには、以下の手順を実行します。
前提条件
NetBeans カスタマイズ環境が必要です。NetBeans インストールの詳細については、ここをクリックしてください。
セットアップ
1. 次の手順で JAR ファイルをプロジェクトライブラリに追加します。
a. NetBeans IDE で、「File」 > 「Project Properties」の順にクリックします。
b. 「Libraries」をクリックします。「Project Properties-Model Manager」ウィンドウが開きます。
c. 「Add JAR/Folder」をクリックします。
d. Creo Elements/Direct Manager Server のインストールディレクトリ (通常は <Creo Elements/Direct Manager Server installation location>\jar) をブラウズし、JAR ファイルをすべて選択します。
2. ワーカ API を作成して実装します。
a. 「New Java Interface」ウィンドウの「Name and Location」ペインで、「Class Name」ボックスに IReserveService と入力します。
b. 残りはデフォルト値のままにして、「Finish」をクリックします。Java クラス IReserveService が作成されます。
c. 以下のコードを Java クラス IReserveService に追加します。
package com.acme;
import java.rmi.Remote;
public interface IReserveService extends Remote {
public void reserveElement(final String elid) throws java.rmi.RemoteException, Exception;
public void unreserveElement(final String elid) throws java.rmi.RemoteException, Exception;
}
d. 「New Java Class」ウィンドウの「Name and Location」ペインで、「Class Name」ボックスに ReserveServiceImpl と入力します。
e. 残りはデフォルト値のままにして、「Finish」をクリックします。Java クラス ReserveServiceImpl が作成されます。
f. 以下のコードを Java クラス ReserveServiceImpl に追加します。
package com.acme;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import com.osm.biz.WMElement;
import com.osm.biz.WMSession;
public class ReserveServiceImpl extends UnicastRemoteObject implements IReserveService {
public ReserveServiceImpl() throws RemoteException {
super();
}
public void reserveElement(final String elid) throws Exception {
final WMElement element = WMSession.getWMSession().openElement(elid, false);
try {
element.reserve();
} finally {
element.close();
}
}
public void unreserveElement(final String elid) throws Exception {
final WMElement element = WMSession.getWMSession().openElement(elid, false);
try {
element.unReserve();
} finally {
element.close();
}
}
}
3. 次の手順で Web サービスを作成します。
a. 「New Java Class」ウィンドウの「Name and Location」ペインで、「Class Name」ボックスに ReserveWebService と入力します。
b. 残りはデフォルト値のままにして、「Finish」をクリックします。Java クラス ReserveWebService が作成されます。
c. 以下のコードを Java クラス ReserveWebService に追加します。
package com.acme;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import com.osm.services.webservice.JettyServer;
@WebService(name = "ReserveService", serviceName = "ReserveService")
public class ReserveWebService {
@WebMethod(operationName = "reserveElement")
public void reserveElement(@WebParam(name = "elid")
final String elid) throws Exception {
try {
final IReserveService s = JettyServer.getInstance().get(IReserveService.class);
s.reserveElement(elid);
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
@WebMethod(operationName = "unreserveElement")
public void unreserveElement(@WebParam(name = "elid")
final String elid) throws Exception {
try {
final IReserveService s = JettyServer.getInstance().get(IReserveService.class);
s.unreserveElement(elid);
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
}
d. Java クラス ReserveWebService が Web サービスを実装し、要素を専有するための外部 API を提供します。この API は、elid という引数を受け入れます。
ReserveWebService を実行すると、ワーカを検索するよう JettyServer クラスに要求を送信します。ワーカが IReserveService インターフェイスを提供し、reserveElement を呼び出してタスクを実行します。
4. 次の手順でカスタマイズをビルドします。
a. Java クラス ReserveWebService を右クリックし、「Build」を選択します。custom.jar ファイルが作成されます。
b. custom.jar ファイルを <Creo Elements/Direct Manager Server installation location>/jar/custom にコピーします。
5. ワーカ API を登録します。
a. Creo Elements/Direct Manager Server のインストールディレクトリにある ServiceControllerConfig.xml ファイルのコピーを作成し、CustomServiceControllerConfig.xml という名前に変更します。
b. CustomServiceControllerConfig.xml ファイルを以下のように編集して、XML ファイルの Jetty ワーカエントリごとに新しい PublishAPI タグを追加します。
<!-- Enable the ReserveService api -->
<PublishedAPI implementation="com.acme.ReserveServiceImpl" interface="com.acme.IReserveService"/>
* 
Jetty ワーカの数を変更するには、JettyWorker ファイル内の CustomServiceControllerConfig.xml タグを手動で追加または削除する必要があります。
6. 次の手順で Web サービスを登録します。
a. <Creo Elements/Direct Manager Server installation location>/webapps/ で、次のようなディレクトリ構造を作成します。
b. サーブレット Web アプリケーションの仕様に従って、<Creo Elements/Direct Manager Server installation location>/webapps/custom/WEB-INFweb.xml ファイルを作成します。以下に例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>OSM Web Services</display-name>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>ReserveService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ReserveService</servlet-name>
<url-pattern>/ReserveService</url-pattern>
</servlet-mapping>
<security-constraint>
<display-name>Web Services</display-name>
<web-resource-collection>
<web-resource-name>ReserveService</web-resource-name>
<description/>
<url-pattern>/ReserveService</url-pattern>
<http-method>PUT</http-method>
<http-method>POST</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>osm-user</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>osmRealm</realm-name>
</login-config>
</web-app>
c. jax-ws の仕様に従って、<Creo Elements/Direct Manager Server installation location>/webapps/custom/WEB-INFsun-jaxws.xml ファイルを作成し、Web サービスのエンドポイントを定義します。以下に例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
<endpoint name="ReserveService" implementation="com.acme.ReserveWebService" url-pattern="/ReserveService"/>
</endpoints>
d. JettyServer タグ内の War タグの上に新しい XML タグを追加して、CustomServiceControllerConfig.xml ファイルに Web アプリケーションを登録します。War タグの例は次のとおりです。
<War context="/custom" location="webapps/custom/"/>
e. Web サービスを再起動します。Jetty ワーカは公開された新しいワーカ API をロードし、Jetty サーバは Web アプリケーションをロードします。
7. 次の手順で Web サービスを検証します。
次のいずれかのオプションを使用して、Web サービスを検証します。
a. http://localhost:8580/custom/ReserveService?wsdl アドレス。
b. 簡単なテスト用の SOAP ユーザインターフェイス。詳細については、http://www.soapui.org/ を参照してください。
c. Web サービスをテストする NetBeans Java アプリケーション。詳細については、Creo Elements/Direct Model Manager Web サービス用の Java クライアントの作成方法を参照してください。
これは役に立ちましたか?