beanBytes の処理:REST(付録)
以上の改造で RESTEasy で動くようになったが,1つ気になる部分があった。HealthInsuranceModel,StampModel,ModuleModel には beanBytes というフィールドがあり,bean object を xml 変換して,さらにbyte 配列に変換したものが入って永続化されている。今回,REST化で json を使ったため,object が xml に変換されてさらに byte 配列に変換された beanBytes が json 化でさらに Base64 の文字列に変換されて流されるという,何だかたいそう複雑なことになってしまっていた。そこで,beanBytes の encode/decode はサーバ側でするように書き直した。こうすると,流れるのは bean の json だけになる。
サーバの変更箇所
- HealthInsuranceModel
PatientServiceImpl.getHealthInsuranceList と PatientDelegater.fetchHealthInsurance で,サーバからクライアントに HealthInsuranceModel を返して,クライアントの delegater で HealthInsuranceModel の beanBytes を PVTHealthInsuranceModel にデコードしていたところを,サーバでデコードして,クライアントには PVTHelthInsuranceModel を返してそのまま使えるようにした。 - StampModel
StampModel に @JsonTypeInfo,@Transient を付けた IInfoModel stamp を追加する@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY) @Transient private IInfoModel stamp;
- StampServiceImpl
putStamp / getStamp で, stampBytes を Stamp 実体に encode / decode する処理を入れる。 - KarteServiceImpl
- getDocumentList で,ModuleModel を detach して beanBytes を decode してからクライアントに返す。
- getModuleListで,ModuleModel 一つ一つ detach してから decode して返す。
- addDocument で,model を beanBytes に encode してから永続化する。
client の変更箇所
- StampDelegater
StampDelegater を使っているクラス全て getStampBytes() しているところを getStamp() に変えていくDiangosisDocument, KartePane, StampBoxPluginExtraMenu, StampHolderTransferHandler, StampTree, StampTreeModules, StampMakerPanel
- DocmentDelegater
getDocuments,getModuleList の beanBytes のデコード部分を消す。 - PnsServiceImpl
peekKarte で beanBytes をデコードしてから返すようにする。
SchemaModel
SchemaModel にも byte[] のフィールドがあるが,これは jpegBytes で,bean ではないので,そのままにするStampTreeModel
StampTreeModel にも treeBytes という byte[] のフィールドがある。これは単純な bean ではなく,StampTree のツリー構造を xml で表現したものである。json では byte[] は Base64 変換されて送信されるが,文字列の treeXml で送受信するように書き換えてみたところ,treeBytes で 607kb あった送信データが,treeXml では 469kb に減った。StampTreeModel (InfoModel) の改名
StampTreeModel がクライアントの open.dolphin.client とサーバの open.dolphin.infomodel の両方にあって,以前から混乱の元になることがあった。この機会にこれを何とかすることにした。- サーバ側の open.dolphin.infomodel.StampTreeModel を PersonalTreeModel という名前に変更した。
- PersonalTreeModel と PublishedTreeModel がほとんど同じだったため,これらの共通部分を @MappedSuperclass の StampTreeBean として書き出し,両者をこれを extend するように書き直した。これに伴い,IStampTreeModel を廃止した。
- PersonalTreeModel の name フィールドに tree_name という名前が付いていたが,PublishedTreeModel にはついていなかったため,フィールド名は name に統一することにして,d_stamp_tree の tree_name フィールドを psql を使って name にリネームした。
dolphin=> alter table d_stamp_tree rename tree_name to name;
以前のバージョンのデータベースを restore した場合は,フィールド名の変更が必要になる。 - これに合わせて,クライアント側で open.dolphin.infomodel.StampTreeModel を PersonalTreeModel に,IStampTreeModel を StampTreeBean に置き換えた。
REST 化の効果
結構大きなプログラム改変であったが,使用感はほとんど変わってないので,変更があったことに誰も気付いていないようだ。« Client の引っ越し:REST(8) | トップページ | 受付情報の扱い »
「OpenDolphin」カテゴリの記事
- Java 17 への移行(7) - OpenDolphin client の対応 (2023.02.04)
- Java 17 への移行(6) - Hibernate 6 でやらかす(2023.02.03)
- Java 17 への移行(5) - OpenDolphin server の対応(2023.02.02)
- Java 17 への移行(4) - OpenSearch の準備 [ubuntu 編](2023.02.01)
- Java 17 への移行(3) - OpenSearch の準備 [mac 編](2023.01.31)