OpenDolphin

2021年12月21日 (火)

WildFly 25 へのアップデート

世間では log4j の脆弱性が見つかって大騒ぎとなっていたが、当院のクライアントは logback、サーバは jboss logging なので、影響はないと考えられた。ただ、今回の騒動で、サーバを WildFly 18 で放置したままだったことを思い出してしまった。そろそろやばいかもしれないと思い立ち、よい機会なのでアップデートすることにした。

WildFly 25.0.2 の準備

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

mac で WildFly 25.0.2 のビルド

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

$ brew update ; brew upgrade

しかる後に build。JAVA_HOME を指定しないと jre を使ってしまうため、 tool.jar が見つからないと怒られる。ちなみに,java はまだ 1.8.0 のままである。

$ JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home mvn install
[INFO] Scanning for projects...
Downloading from jboss-public-repository-group: https://repository.jboss.org/nexus/content/groups/public/org/wildfly/core/wildfly-core-parent/17.0.3.Final/wildfly-core-parent-17.0.3.Final.pom
Downloaded from jboss-public-repository-group: https://repository.jboss.org/nexus/content/groups/public/org/wildfly/core/wildfly-core-parent/17.0.3.Final/wildfly-core-parent-17.0.3.Final.pom (123 kB at 61 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
 :
BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  26:20 min
[INFO] Finished at: 2021-12-15T08:22:04+09:00
[INFO] ------------------------------------------------------------------------

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

WildFly 25.0.2 のセットアップ

  • ./standalone.sh -b 0.0.0.0 で立ち上げて,./add-user.sh で管理ユーザ登録
  • JDBC の登録(ドライバは postgresql-42.3.1.jar),data-source の作成,パスワード登録。
    $ ./jboss-cli.sh --connect
    [standalone@localhost:9990 /] module add --name=org.postgres --resources=~/Downloads/postgresql-42.3.1.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 の修正

  1. WildFly 25 の pom.xml に合わせて,OpenDolphin クライアント・サーバの pom.xml のバージョンを変更する。RestEasy は 4.7.2、Jackson は 2.12.3 になっていた。
  2. Resteasy 3 から 4 になって、ResteasyClient の作成方法が変更になった。
  3. Jackson は 2.10 以降セキュリティチェックが厳しくなったようで、StampModel と ModuleModel でいろいろなクラスで使い回していた model フィールドを、実際にどのクラスが使っているのかの指定が必要になった。

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

crontab を更新

$ crontab -l
@reboot /home/dolphin/wildfly-25.0.2.Final-SNAPSHOT/bin/standalone.sh -b addr.of.dolphin.server > /dev/null 2>&1

lucene index

hibernate search のバージョンは変わっていないので、インデックスはそのまま使えた。エントリー数は WildFly 18 に移行した 2019年 の 259,968 件から 295,603 件に増加していた。


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
  • 2021年 WildFly 25.0.2

2021年2月 4日 (木)

13年目の運用まとめ

13年目はコロナにやられた年だった。外来が結構ひまだったので、長年の懸案だった undo のコードを書きまくって、その副作用で ATOK の確定 undo まで制御できるようになって、入力環境が大きく改善した。スタンプの簡易編集機能も、薬の量や日数を変更するのに、いちいちダイアログを出さなくても入力できるので、入力速度の改善につながった。

もう一つの長年の懸案、JWindow を使った JSheet も解決した。SecondaryLoop をつかって modal にするという技を覚えた。あとは、シェーマの拡大縮小、Google Calendar の取込、スタンプの簡易表示などのコードを書いた。

結構コードを書いた年であったが、クラウドファンディングに出資していた天体望遠鏡が 9月に届いてからは、ほとんど暇がなくなってしまった。

  • データベースの PatientModel の件数
    dolphin=# select count(*) from d_patient;
     count
    -------
    34420
    (1 row)
    
  • データベースの ModuleModel の件数
    dolphin=# select count(*) from d_module;
      count
    ---------
     1369363
    (1 row)
    
  • dolphin サーバの df。used は 18G でほとんど変わらず。
    Filesystem      Size  Used Avail Use% Mounted on
    udev            962M     0  962M   0% /dev
    tmpfs           199M  460K  199M   1% /run
    /dev/xvda1       46G   18G   26G  41% /
    tmpfs           993M  8.0K  993M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           993M     0  993M   0% /sys/fs/cgroup
    tmpfs           199M     0  199M   0% /run/user/1001
    
  • orca サーバの df。used が 9.9G から 12G に増加。
    udev            2.9G     0  2.9G   0% /dev
    tmpfs           601M  860K  600M   1% /run
    /dev/xvda1       46G   12G   33G  26% /
    tmpfs           3.0G  8.0K  3.0G   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           3.0G     0  3.0G   0% /sys/fs/cgroup
    tmpfs           601M     0  601M   0% /run/user/1001
    
  • データベースの dump ファイルのサイズ
    dolphin_db.dump.gpg 2,595,374,852
    orca_db.dump.gpg 291,521,000
    
  • スタンプ数
    $ grep -c stampInfo stamp.xml 
    2139
    

2020年9月 4日 (金)

スタンプの簡易表示

できるだけ無駄な処方はしないように気をつけているが,それでもどうしても処方薬が増えてしまう場合がある。そうすると,スタンプが増えて,画面をスクロールしないと全体が確認できなくなってしまう。

そこで,スタンプを簡易表示する j2html コードを追加して,スクロールせずに全体を確認できるようにしてみた。⌘-T を押す毎に通常表示と簡易表示が切り替わるようにした。

Normal ⌘T
Simple_20200903190401

2020年7月26日 (日)

Java 1.8.0_261 での apple.awt.brushMetalLook

これまでずっと java 8 を 11 にバージョンアップせず使っている。その唯一の理由は,java 11 でウインドウのタイトルが unified にならないことであった。java 8 だと "apple.awt.brushMetalLook" を true に設定することで,title bar と tool bar が連続した美しいウインドウにできる。いや,できていた。

それが,1.8.0_261 から java 11 と同じになってしまったのである。悲しすぎる。java 11 に移行する潮時なのか。

251

2020年7月23日 (木)

Undo の充実 (4) StampEditor, StampTree

次に,StampEditor の undo を実装した。StampEditor の TableModel である ObjectReflectTableModel を extend した UndoableObjectRelflectTableModel に undoable... な method を作成し,おまとめ undo 機能も組み込んだ。ObjectReflectTableModel を使っていた AllergyInspector と PhysicalInspector も undoable にすることができた。

最後に StampTree を undoable にした。StampTree の TableModel である StampTableModel に同様の undoable な method を組み込んで undo できるようにした。

これでほとんどの操作が undo 可能となったと思う。

2020年7月22日 (水)

Undo の充実 (3) AtokListener

ATOK には,確定直後に ctrl-delete を押すと,未確定状態に戻してくれる「確定アンドゥ」という便利な機能がある。しかし JTextPane でこの操作を行うと,前の確定文字が消えずに未確定文字列が確定文字列の後ろに出る状態になってしまう(下図)。また,間違って半角アルファベットで打ち込んでしまった文を,かなキーの2度打ちでひらがなに戻して変換したり,間違って打ち込んでしまった英単語を,英数キーの2度打ちで半角アルファベットに変換してくれる機能も便利なのだが,これも JTextPane だともとの文字が残ってしまっていた

Atoklistener

ずっと何とかならないかと思っていたのだが,今回 TextComponentUndoManager に【おまとめ undo】機能を付けたので,ATOK の確定アンドゥと同時に JTextPane に undo を1回かけてやれば,前の確定文字列を消せるのではないかと思いついた。KeyListener と InputMethodListener を組み込んだ AtokListener を作って,上記動作をプログラムしたところうまく動作した。頑張ってプログラムしたおかげで日本語入力環境がぐっと便利になった。

Atok

2020年7月21日 (火)

Undo の充実 (2) TextComponentUndoManager

これまで KarteEditor の JTextPane に TextComponentUndoManager を付けて undo ができるようにしてあったが,機能的には入力を1段階戻すだけの単純なものであった。

そのため,例えばスタンプを DnD で移動した場合,【ドロップしたスタンプを書き込む】【位置や改行などの調節】【元のスタンプを削除する】という一連の操作が行われるので,これを undo すると,undo 1回毎に【元のスタンプが復活】【改行などの調節が戻る】【ドロップしたスタンプが消える】と戻っていくことになる。できれば DnD の操作はまとめて1回で undo したいところである。また,英単語を打つ場合【english word】と打った後に undo すると,【english wor】【english wo】【english w】と1文字ずつ戻ることになる。ここはできれば,単語毎にまとめて消えて欲しいところである。

そこで,まず TextComponentUndoManager に Timer を組み込んで,短時間 (30 msec 以内) に連続しておきた操作は,1つにまとめてから UndoManager に登録するようにした。これによって DnD は1回の undo で戻るようになり,ATOK の漢字変換後の入力も,変換して入力した分が1回の undo で戻るようになった。また,アルファベット入力の場合は, 前の入力をチェックして,アルファベットだった場合は前の undo 情報にマージするようにして,word 単位の undo ができるようにした。

Textcomponent_20200720082001

2020年7月20日 (月)

Undo の充実 (1) StampHolder/SchemaHolder

これまで,DiagnosisDocumentTableModelTextComponentUndoManager で,病名編集とカルテ編集を undo できるようにしていたが,その他もろもろの機能は undo できないままであった。今回がんばって undo 機能をいろいろつけてみた。

まずは StampHolder/SchemaHolder の undo 対応をプログラムした。StampHolder/SchemaHolder のモデル更新を updateModel() というメソッドで実行するようにして,ここを AbstractComponentHolder の undoableUpdateModel() メソッドでフックして,StampHolder/SchemaHolder からここを呼んで undo 情報をとる方式にした。具体的な undo 処理は AbstractComponentHolder で行うことにより,StampHolder/SchemaHolder の両方の undo ができるようになった。

Componentholder

2020年6月 2日 (火)

簡易スタンプ編集機能

スタンプ編集に関して,これまで当院のカスタマイズでは,スタンプ選択後にダブルクリック or スペースキーでスタンプエディタを立ち上げる方法と,右クリックでコンテクストメニューを表示して編集する機能があった。

Editor   Popup

今回それに加えて,スタンプ選択後に数字キーを押して簡単な編集ができるようにしてみた。スタンプを選択して数字キーを押すと小さなテキストボックスが現れて数字が入力できるようになる。数字を入力して enter を押すと,内服薬の場合は日数を,外用剤の場合は処方量を変更することができる。

Screen_20200531190201

2020年5月28日 (木)

Google Calendar API の利用

当院では休日・休診情報を Google Calendar で管理して,ホームページ上で公開している。 OpenDolphin のカレンダーでも休日・休診情報を表示できるようにカスタマイズしていたが,表示データはプログラム内にハードコーディングであった。これを Google Calendar から情報を読み込めるようにして,データを Google Calendar で一元管理できるようにしてみた。

Google Calendar には Calendar API というのが用意されており,利用しやすいように主要言語のチュートリアルまで用意されている。そこに出ている java のサンプルを参考にしてプログラムした。Calendar API の認証にはブラウザが必要になるのだが,当院のサーバは CUI でブラウザは使えない。そこで,診察室のクライアントでデータを取込み,それをサーバに保存して,そのデータを全クライアントで利用するという方式にした。

CalendarSettingPanel で Calendar API からデータを取り込み,それをサーバに保存する。サーバ側ではわざわざ Entity を作るのも面倒なので,PnsServiceImpl の Preferences に保存するという素人丸出しの方法を使った。保存したカレンダー情報は,各クライアントが起動時にサーバから読み込む。

Settingpanel   Calendar

より以前の記事一覧