OpenDolphin

2019年11月23日 (土)

domU の dolphin サーバを ubuntu 18.04 にアップグレード

  1. 準備と do-release-upgrade
    $ sudo aptitude update ; sudo aptitude upgrade
    $ sudo apt-get autoremove
    $ sudo do-release-upgrade
    
  2. java 1.8 は PPA でインストールしていたので,do-release-upgrade の際に停止される。アップデート後に自動的に java-8-oracle がインストールされる。
    リポジトリ情報のアップデート
    サードパーティが提供するリポジトリを使わない設定にしました
    sources.list にあるサードパーティが提供するリポジトリを使わない設定にしました。アップグレード完了後、'ソフトウェアソース'
    ツールもしくはパッケージマネージャーを使って再び利用可能な設定にすることができます。
    
  3. アップグレード完了後,再起動する。
    システムのアップグレードが完了しました。
    再起動が必要です
    アップグレードを完了するには再起動が必要です。
    'Y' を選択すると再起動します。
    
  4. postgresql は自動的に 10.10 にアップグレードされるので,postgresql 9.5 は purge する。
    $ sudo service postgresql stop
    $ sudo aptitude purge postgresql-9.5 postgresql-client-9.5
    
  5. postgresql.conf の設定。port が 5433 になってるのを 5432 に直す。
    port = 5432
    
  6. データベースを dump から戻す。なお,dump を戻すときは posgresql.conf で fsync = off にしておくと時間の節約になる。パスワードも忘れずに設定
    $ sudo service postgresql start
    $ sudo -u postgres createuser --super dolphin
    $ createdb dolphin
    $ psql -c "alter user dolphin with password 'dolphin'"
    $ pg_restore -Fc -d dolphin dolphin_db.dump
    
  7. 再起動
以上で ubuntu 18.04 へのアップグレードは完了。

2019年11月15日 (金)

WildFly18 へのアップデート

だらだらと WildFly 10.2.0 を使い続けていたが,ついに重い腰を上げてアップデートすることにした。

WildFly 18.0.1 の準備

WildFly の GitHub から branch 18.0.x を選択,"Download Zip" して解凍する。作業時点ではこれで 18.0.1.Final がダウンロードされた。

mac で WildFly 18.0.1 のビルド

brew をアップデートして mvn と ant を最新にしておく。

$ brew update ; brew upgrade

しかる後に build。ちなみに,java はまだ 1.8.0 のままである。

$ mvn install
[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/jboss/jboss-parent/35/jboss-parent-35.pom
 :
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  17:02 min
[INFO] Finished at: 2019-11-01T09:17:17+09:00
[INFO] ------------------------------------------------------------------------

これで wildfly-18.0.1.Final-SNAPSHOT ができる。WildFly 10.2.0 と同じく,full distributable build が欲しい場合は,build/target ではなく,dist/target の方を使う必要がある。

WildFly 18.0.1 のセットアップ

  • ./standalone.sh -b 0.0.0.0 で立ち上げて,./add-user.sh で管理ユーザ登録
  • JDBC の登録(ドライバは postgresql-42.2.8.jar),data-source の作成,パスワード登録
    $ ./jboss-cli.sh --connect
    [standalone@localhost:9990 /] module add --name=org.postgres --resources=~/Downloads/postgresql-42.2.8.jar --dependencies=javax.api,javax.transaction.api
    [standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver)
    [standalone@localhost:9990 /] data-source add --jndi-name=java:jboss/datasouces/DolphinDS --name=DolphinDS --connection-url=jdbc:postgresql://localhost/dolphin --driver-name=postgres --user-name=dolphin
    [standalone@localhost:9990 /] /subsystem=datasources/data-source=DolphinDS:write-attribute(name=password, value=dolphin)
    [standalone@localhost:9990 /] quit
    

OpenDolphin の修正

WildFly 18 の pom.xml に合わせて,OpenDolphin クライアント・サーバの pom.xml のバージョンを変更する。
これでサーバは動いたが,ログに warning が出ていた。

WARN  [org.hibernate.orm.deprecation] (ServerService Thread Pool -- 76) HHH90000014: 
Found use of deprecated [org.hibernate.id.SequenceGenerator] sequence-based id generator; 
use org.hibernate.id.enhanced.SequenceStyleGenerator instead.  
See Hibernate Domain Model Mapping Guide for details.

persistence.xmlhibernate.id.new_generator_mappings を false にして互換性を保っていたが,これだと deprecated になった SequenceGenerator を使うことになるので何とかしろと言うことらしい。Hibernate ORM 5.3.13.Final User Guide を見ると hibernate.model.generator_name_as_sequence_name のところに "Users migrating from earlier versions using the legacy hibernate_sequence name should disable this setting." と書いてあったので,hibernate.id.new_generator_mappings を消して hibernate.model.generator_name_as_sequence_name に書き換えた。

起動時に dolphin サーバを立ち上げる

wildfly を起動時に立ち上げるために /etc/init.d/jboss スクリプトを作ってルート権限で起動していたが,init.d システムは時代遅れらしく,この機会に /home/dolphin/ に wildfly を置いて,cron を使って dolphin ユーザ権限で wildfly を立ち上げることにした。lucene index も /var/lucene ではなく,${jboss.server.base.dir}/lucene に置くことにした

$ echo "@reboot /home/dolphin/wildfly-18.0.1.Final-SNAPSHOT/bin/standalone.sh -b dolphin.server.ip.addr > /dev/null 2>&1" | crontab

lucene index の作り直し

エントリー数は WildFly 10 に移行した 2017年 の 219,617 件から 259,968 件に増加したが,爆速新サーバのおかげでインデックス作成は 1時間30分で完了。

2019-11-13 08:32:00,532 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: identifierloader-1) HSEARCH000027: Going to reindex 259968 entities
2019-11-13 08:32:01,854 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: entityloader-7) HSEARCH000030: 50 documents indexed in 1055 ms
 :
2019-11-13 10:02:34,091 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (Hibernate Search: entityloader-8) HSEARCH000031: Indexing speed: 47.843922 documents/second; progress: 99.99%
2019-11-13 10:02:36,021 INFO  [org.hibernate.search.batchindexing.impl.SimpleIndexingProgressMonitor] (default task-4) HSEARCH000028: Reindexed 259968 entities

WildFly アップデート記録
  • 2008年 JBossAS 4.0.5
  • 2009年 JBossAS 4.2.3
  • 2010年 JBossAS 5.1.0
  • 2013年 JBossAS 7.1.4
  • 2015年 WildFly 8.2.1
  • 2017年 WildFly 10.2.0
  • 2019年 WildFly 18.0.1

2019年10月24日 (木)

bitbucket から github に移行

2011年から bitbicket さんのお世話になっていた。当時は bitbucket といえば mercurial だったのだが,mercurial の凋落ぶりが激しく,来年の6月から mercurial が使えなくなることが決定し,git 一択となってしまった。

vcs の導入当時 git は難しくて github を敬遠していたのだが,どうせ git 使わなきゃならないんだったら github だよなぁ... ということで github に移行することにした。移行は import repository に bitbucket の レポジトリ url を入れるだけで,とても簡単で驚いた。

ちなみに,git は xcode インストールしてると標準で入っている。

$ git --version
git version 2.21.0 (Apple Git-122)

2019年4月18日 (木)

ORCA 登録情報変更への対応

push api には患者さん登録を行った場合に push 通信してくれる api がある。これを利用して,受付患者さんのデータ変更があった場合,dolphin 側で自動的に反映させるようにした。

淀橋亀三さんの性別と生年月日を間違って登録して受け付けしてしまった。

Before

orca の患者登録画面で性別と生年月日を修正して登録する。

Orca

すると,dolphin の受付リストでも変更が反映される。

After

ちなみに,患者登録通知の subscription イベント名として "patient_information" を送ってテストしていたのであるが,orca から反応がなくて悩んでいた。試しに "*" を送って全てのイベント通知をする設定にしたところ,患者登録通知も返ってくることが分かったので,受け取ったレスポンスをイベント名 "patient_information" でフィルターして受け取ろうとしたのであるが,なんと受け取れなかった。この時点て初めてイベント名が "patient_information" ではなく,"patient_infomation" であることに気付いた。あわててウェブページや仕様書を確認してみたら,全て "patient_infomation" になっており,やられたーと思った。これはハマる人が多いのではなかろうか。

2019年4月 9日 (火)

EditorFrame のツールバーをカスタマイズ

EditorFrame のツールバーをワープロ風にしてみた。

 
Editorframe_1

2019年3月27日 (水)

ORCA DAO

今のところ orca api で実装できなくて dao で対応しているのは以下の項目である。
これらについては,日医標準レセプトソフトに関する改善要望として送ってみた。

・マスタ検索

・push api で送られてくる診療内容コードから「診察」などの文字列への変換

・診療セットの一覧取得

・medicalsetreq での単位名取得

2019年3月26日 (火)

Push API

orca からの受付情報を push api + orca api + orca dao を使って受け取るようにした。これにより claim 通信は完全に使わなくなった。
push api では新規受付情報だけでなく,受付キャンセルの情報も送ってくれる。dolphin クライアント側でこれを利用することにして,受付キャンセルは orca でのみ許可し,dolphin クライアントでのキャンセルはできないようにした。

このような受付状態から orca 側で淀橋亀子さんの受付をキャンセルすると

Dolphinpvtbefore

Orcapvtdelete

キャンセル状態が dolphin クライアントにも伝わって受付リストから自動的に消失する

Dolphinpvtafter

2019年3月25日 (月)

ORCA API

orca の中途終了データ送信と病名送信は xml だったのを json に書き換えた。
さらに今回,orca api を使って症状詳記送信機能を新たに付けてみた。

KarteEditor または KarteViewer でテキストを選択して右クリックすると症状詳記メニューがでて,これを選択すると orca に症状詳記が送られる

Dolphincom Orcacom

取り消したいときは option を押しながら右クリックすると削除メニューが出て取り消すことができる

Dolphincomdelete

訂正して再送しているところ。api で送った症状詳記はレセプトに反映される

Dolphincomsendagain Orcarecept

2019年3月24日 (日)

open.dolphin.orca パッケージの作成

以下の 3つの API をまとめた open.dolphin.orca パッケージを作ってサーバ側に置いた。これにより dolphin クライアントは orca に接続する必要がなくなり,クライントのソースから orca 接続関連のコードを一掃してすっきりさせることができた。

ORCA API

以前からカルテデータを orca に送信するのに orca api を使ってはいた。しかし,orca 4.8 までは xml にして送らなければならず,正直プログラミングが苦痛でいじる気がしなかった。しかし,orca 5.0 から json が使えるようになり, jackson を使ってがぜん楽しくプログラムできるようになった。そこで,2017年から json での orca api プログラミングをこつこつ積み上げて,昨年末までに入院関連を除く api をすべて実装した。そしてやっと今年,足かけ3年を経てとうとう実運用までこぎつけた。

Push API

さらに orca 5.0 から WebSocket を使ったプッシュ通信の API が使えるようになった。orca に jma-receipt-pusher パッケージをインストールすると,外からの WebSocket 接続を受け付け,クライアントに受付情報などを送ってくれるようになる。

ORCA DAO

ORCA API だけでは取れない orca 情報もあるので,dao もパッケージに含めた。ちなみに,api と同じ処理を dao を使って処理すると,dao の方が 10倍くらい速かった。ただ,数十ミリ秒 vs 数百ミリ秒の違いなので,体感的にはほとんど分からない。


"Some languages can be read by human, but not by machines, while others can be read by machines but not by humans. XML solves this problem by being readable to neither."

2019年3月 7日 (木)

mac で印刷の文字化け

OpenDolphin のカルテの印刷は,開業時の個別指導以来,11年間1度も使うことなく現在に至っている。先日,ふと思い立って印刷機能を試してみようとプレビューを出してみたところ,見事に文字化けしていた。

Mac

一方,Windows では文字化けしない。

Windows

Component に物理フォントを指定すると文字化けしなかったので,mac では PrinterJob の Graphics は Component の論理フォントの扱いがおかしくなっているようだ。印刷機能のためだけにいちいち物理フォントを指定するというのも非現実的である。そこで,PrinterJob の Graphics に渡す前に,BufferedImage の Graphics で一旦イメージに落として,そのイメージを PrinterJob の Graphics に渡すようにして文字化けしないようにした。

Macnew

PrintKarteDocumentView.java

より以前の記事一覧