VOサービスの立ち上げ方
データセンター 白崎裕治
SkyNode toolkit

VO Interface に準拠したサービスの立ち上げは
結構難しい。

サービスのインターフェイス部分は出来合いの
ソフトウエアを使うのが妥当。
JVO では SkyNode サービスを簡単に立ち上げ
るための Toolkit を開発し、公開している。
http://jvo.nao.ac.jp/download/skynode-toolkit/


JVO SkyNode Architecture
Controller
Resource
Parameter
Translator
Interface
SIAP/SSAP IN
SkyNode IN
ADQL
QL Converter
SQL for
backend DB
SIAP/SSAP/SkyNode OUT
VOTable
VOTable
upload
JDBC
JDBC
Data
Metadata
Formatter
ResultSet
ResultSetMetaData
主要な Java Class





org.apache.axis.transport.http.AxisServlet
jp.ac.nao.jvop3.service.skynode.SkyNodeSoapImpl
jp.ac.nao.jvop3.gateway.SOAPGatewaySkyNode
jp.ac.nao.jvop3.controller.skynode.SkyNodeImpl
jp.ac.nao.jvop3.controller.skynode.QuerySkyNode



jp.ac.nao.jvop3.controller.skynode.ResultSetForSkyNode
jp.ac.nao.jvop3.controller.skynode.ResultSetMetaDataForSkyNode
jp.ac.nao.jvop3.controller.skynode.DataFormatter
SkyNodeSoapImpl




SOAP エンジンから直接呼び出されるクラス。
http:[email protected]@
wsdd file または web GUI で指定。
アクセス先 DB 名は wsdd file にパラメータとして定義
etc/deploy-template.wsdd
…
<service name="@serviceName@" provider="java:RPC"
style="wrapped" use="literal">
<parameter name="skynode.db" value="@DB@"/>
<parameter name="className" value="@serviceClass@"/>
...
SOAPGatewaySkyNode

AXIS Java オブジェクトから JAXB Java オブジェクト
への変換
AXIS SOAP エンジンは SOAP メッセージを受け取ると,
メッセージの解析を行い XML から Java へのデータ
マッピングを行う。
 ADQL-x  AXIS Java の SelectType オブジェクト
 SkyNode 内部の実装は JAXB の SelectType オブジェ
クトを利用。(使いやすい、カスタマイズしやすい)。
 内部実装(JAXB)をインターフェイス(AXIS) から独立
にすることで、AXIS のバージョンアップしやすい。

SkyNodeImpl

実際に検索を行うためのロジックを呼び出す。
ResultSet performQuery(SelectSQL select) {
Connection conn =
connManager.getConnection(dbms, dbname, 10)
StatementForSkyNode st =
(StatementForSkyNode) conn.createStatement()
ResultSetForSkyNode rs = st.executeQuery(selectType)
VOTABLEType vot = DataFormmatter.getVOTable(rs)
return vot;
}
QuerySkyNode



ADQL を Backend DBMS が理解できる SQL
に変換し検索を実行するクラス (abstract)。
これを継承した QuerySingle (検索テーブルひと
つの場合), QueryMulti (クロスマッチ検索用) が
実際に使われる。
etc/jvo.properties ファイルで指定できる。
Region 検索
t1
id
1
(2)
…
t2
id
1
1
…
object crpx1 crpix2
SXDS 300
150
…
htm
10045
10046
…
…
…
…
…
filter
Image/fits
…
…
…
…
…
REGION(‘BOX 30
t3
qid rid low upp
1
1 1004 1005
1
1 1008 1009
…
(1)
…
…
…
10 0.1’)
Select * from
(select t2.id from
t2, t3 where
t2.htm between
t3.low and
t3.upp) t4 natural
join t1
(1) Select “id” from t2 with t2.htm between t3.low and t3.upp
(2) Select records from t1 corresponding to the selected “id”
jvo.properties













prefix=/usr/local/skynode/
work.dir=work
tmp.dir=tmp
deploy.template=etc/deploy-template.wsdd
jdbc.driver.pgsql=org.postgresql.Driver
jdbc.url.pgsql=jdbc:postgresql://localhost:5432/
jdbc.user.pgsql=yshirasa
jdbc.passwd.pgsql=
metadata.db.name=metadb
dbms.metadb=pgsql
connection.max=10
query.class.default=jp.ac.nao.jvop3.controller.skynode.QueryMulti
logger.properties=etc/log4j.properties
struts-config.xml
<plug-in className="jp.ac.nao.jvop3.controller.skynode.PlugInForSkyNode">
<set-property property="jvoProperties"
value="/usr/local/skynode/etc/jvo.properties"/>
</plug-in>
web.xml
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
…
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
ディレクトリ構成

Skynode_dev








src ソースコード
lib ライブラリ (jar ファイル)
doc ドキュメント (instruction.txt)
etc コンフィギュレーションファイル
sample サンプルデータ、サンプルSQL等
war SkyNode service war file
build*.* コンパイル用のファイル
init-cshrc 初期設定スクリプト
ダウンロード

VOサービスの立ち上げ方