クライアント側の実装
続いて、クライアント側の実装を説明します。実際に定義するプログラムは「sample1.curl」「Hinmk.curl」の2つです。
sample1.curl
画面プログラムです。最も魂をこめて作成する部分ですが、ご覧のようにとてもシンプルです。一般的なWebシステムの場合、サーバサイドから返却されたデータを取得する部分が煩雑になりがちですが、Curl+ORBで実現するととてもシンプルな構成となります。
{curl 6.0, 7.0, 8.0 applet} {curl-file-attributes character-encoding = "utf8"} {applet manifest = "manifest.mcurl", {compiler-directives careful? = true}} {import * from SAMPLE} ||-- {let staff:RecordSet = {RecordSet {RecordFields {RecordField "HINMK_CD", domain = String}, {RecordField "HINMK_NM", domain = String} } } } {let rv:RecordView = {RecordView staff}} ||--明細部(RecordGrid) {let rg:RecordGrid = {RecordGrid record-source = rv, height = 10cm, width = 7.5cm, display-navigation-panel? = false } } ||--検索部(検索ボタン) {def cb1 = {CommandButton label = "検索", width = 7.2cm, ||--ボタン押下時のイベント {on Action do ||--サーバにアクセスする def search-service = {HinmkLst server-url = {url "http://curl-svr:8080/curl-orb-server/"}} ||--Javaで作成したサービスクラスを呼び出す。(result-listに結果が返却される) def result-list:#{Array-of any} = {search-service.kensaku ""} ||--サービスクラスからの結果をRecordGridに設定します。 {if-non-null result-list then {rg.records.delete-all} ||--サーバから返却されたresult-listの件数分Recordに設定します。 {for item in result-list do {type-switch item case item:Hinmk do def r = {rv.new-record} set r["HINMK_CD"] = item.hinmk_cd set r["HINMK_NM"] = item.hinmk_nm {rg.records.append r} } } {rg.records.commit} } {search-service.destroy-instance} } } } {value {spaced-vbox cb1, rg}}
Hinmk.curl
サーバ側で定義したデータクラス(Hinmk)と同じ定義を行います。以下のソースコードは、ORBのツールにて自動生成できるのでコーディングは不要です。
package sample; /** * データクラス */ public class Hinmk implements java.io.Serializable { private static final long serialVersionUID = -5592465168071966675L; private String hinmk_cd; private String hinmk_nm; public String getHinmk_cd() { return hinmk_cd; } public void setHinmk_cd(String hinmk_cd) { this.hinmk_cd = hinmk_cd; } public String getHinmk_nm() { return hinmk_nm; } public void setHinmk_nm(String hinmk_nm) { this.hinmk_nm = hinmk_nm; } }
HinmkLst.curl
サーバ側で定義したサービスクラス(HinmkLst)と同じ定義を行います。こちらのソースコードもHinmk.curlと同様、ORBのツールにて自動生成できるのでコーディングは不要です。
||| ||| Curl ORB for java (version 0.8) ||| This code was generated by the Curl code generator automatically. ||| package name : SAMPLE ||| generated date : 2011-10-31 10:31:36.836000 ||| {import * from COM.CURLAP.ORB} {define-class public HinmkLst {inherits HttpSessionClient} {constructor public {default server-url:#Url = null} {construct-super.HttpSessionClient "sample.HinmkLst", server-url = server-url} } {method public {echo v0:any}:any {return {self.invoke "echo", arguments = {FastArray v0}}} } {method public {kensaku v0:String}:#Array {return {self.invoke "kensaku", arguments = {FastArray v0}} asa #Array} } }
サーバ(Java側)で作成されたデータクラスをクライアント(Curl側)で受け取って表示しています。サーバ側とクライアント側のデータクラスを同じ定義とすることで、JavaとCurlで異なる言語にも関わらず、それを意識する必要がありません。
Hinmk.curl、HinmkLst.curlの自動生成の詳細は、Curl Developer Centerのコード生成ツール・マニュアルを参照ください。