OpenOcean を Windows10 にインストールする
OpenOcean や HorliX を導入すると、こんな感じで診療環境が構築できると思います。
Windows 端末で Ocean クライアントを立ち上げ、Mac に設置した HorliX を Pacs のように使い、weasis クラインアント(DICOM Viewer)で windows 端末から患者さんの画像を確認、というような使い方です。
なお、Mac ではネイティブで HorliX が走るので、やはり使いやすいですね。
まずは、システムの中核になる OpenOcean の導入。
とりあえず動かしたいという方は、クライアントバイナリを
においてありますので、そちらでどうぞ。(あー、使用期限切れてる。今しばらくお待ちを)OpenOcean バイナリとOpenDolphin の Docker 版サーバはつながりますので、この構成でも十分、Dolphin 系の電子カルテの雰囲気は味わえるかと思います。
本記事では、OpenOcean をソースからビルドし、デプロイする方法を解説します。やはり、少々難易度は高いようですが、たまに「ビルド通りました」という声を聞きます。
まずは、適当なサンプル患者さんをつくってみました。
こうなれば成功。
名称変更にあたってコード微調整の上、再度ビルド→デプロイしましたが、以下のやり方で特に問題なく動いています。
<方法>
Maven, Postgres などの環境設定などは、高東ソフトウェア様の OpenDolphin Ver.2.5.12(2015-1-15) のインストール を参考にするとよいと思います。
後述するように
- Java EE 環境
- NetBeans
- Maven
- PostgreSQL
- WildFly
が必要になってくるので、予め用意しておきましょう、ということです。
Maven とは何か?あたりから理解したいという方は、まずはこの記事などをご参照ください。
『OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと』
『OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと 2』
つまり、
サーバを動かすためには、WildFly というアプリケーションサーバが必要。
診療情報を記憶させておく(永続化、という言い方をする)ためには、PostgreSQL というデータベースソフトが必要。
……云々……
ということです。
ソースは、ここにおいてあります。git コマンドか zip でもってきましょう。
今回は、アプリケーションサーバは WildFly 10.0.0.Final (WF10)にしてみました(時間がなくて WF12 などはまだ試してないです。申し訳ない)。WF10 をNetBeans から起動するとなかなか終了してくれなかったりするので、war ファイルをテストする時はその都度 Chrome ブラウザで(IE11 だとなぜか管理画面が表示されない) 127.0.0.0:9990 にアクセスして管理画面からデプロイしましょう。
WF10 への jdbc ドライバの登録は、
(WF10へのパス)\bin\jboss-cli.bat
でバッチファイルをコマンドプロンプトから起動した後、
connect
module add --name=org.postgresql --resources=C:(パス)\postgresql-(バージョン).jar --dependencies=javax.api,javax.transaction.api
でOK。データソースの登録は、 standalone-full.xml を直接編集した方が楽でしょう。
– standalone-full.xml の編集 –
そういうわけで、データソースの登録。私はこんな感じで設定。
<subsystem xmlns="urn:jboss:domain:datasources:4.0">
<datasources>
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jta="true" jndi-name="java:jboss/datasources/PostgresDS" pool-name="PostgresDS" enabled="true">
<connection-url>jdbc:postgresql://localhost:5432/dolphin</connection-url>
<driver>postgresql</driver>
<security>
<user-name>dolphin</user-name>
<password>XXXXXXXX</password>
</security>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<driver name="postgresql" module="org.postgresql"/>
</drivers>
</datasources>
</subsystem>
user-name や password はデータベース作成時のもので。
続いて、ロガーの登録。
<subsystem xmlns="urn:jboss:domain:logging:3.0">
<console-handler name="CONSOLE">
<level name="INFO"/>
<formatter>
<named-formatter name="COLOR-PATTERN"/>
</formatter>
</console-handler>
<periodic-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<named-formatter name="PATTERN"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="open.dolphin">
<level name="INFO"/>
</logger>
<logger category="dolphin.claim">
<level name="INFO"/>
</logger>
level は、WARN でも問題ないはずですが、反応が薄く(笑)なりますので INFO にしてみました。
さらに、キューの登録。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
<name="default">
<security-setting name="#">
<role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/>
</security-setting>
<address-setting name="#" message-counter-history-day-limit="10" page-size-bytes="2097152" max-size-bytes="10485760" expiry-address="jms.queue.ExpiryQueue" dead-letter-address="jms.queue.DLQ"/>
<http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/>
<http-connector name="http-connector-throughput" endpoint="http-acceptor-throughput" socket-binding="http">
<param name="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-acceptor name="http-acceptor-throughput" http-listener="default">
<param name="batch-delay" value="50"/>
<param name="direct-deliver" value="false"/>
</http-acceptor>
<in-vm-acceptor name="in-vm" server-id="0"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<jms-queue name="dolphinQueue" entries="java:jboss/exported/jms/queue/dolphin"/>
この設定は江東ソフトウェア様のものを踏襲。
最後に、アドレスの設定。
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:192.168.XXX.XXX}"/>
</interface>
<interface name="unsecure">
<inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
</interface>
</interfaces>
ここは問題ないでしょう。
– NetBeans 上でのビルド –
環境準備ができたら、お待ちかねの Ocean 本体のビルドです。
NetBeans で、ファイル >> プロジェクトを開く でOpenOcean を選択。
左側のペーンで、openocean-common, openocean-server, openocean-client の順に「依存性でビルド」。
pom に記載された各種 jar ファイルが開発マシンにない場合、それなりに時間がかかりますが、ビルド 2 回目以降はかなり時間が短縮されると思います。
target/ 以下に OpenOcean.jar などができていれば OK です。
– 起動 –
ビルドが終了したら、war ファイルは WildFly 上に配備する。
他には template や custome.properties などを準備しましょう。ついに、起動の瞬間。
ダブルクリックするか
java -jar OpenOcean.jar dolphin
でログイン画面が立ち上がると思います。
お疲れさまでした。
<謝辞>
OpenOcean の素となった OpenDolphin を開発され、オープンソースとして公開されているライフサイエンス コンピューティング株式会社 オープンドルフィンラボ 様に深く感謝いたします。
<感想など>
・OpenDolphin を評価するだけであれば、『無料電子カルテ OpenDolphinパーフェクトガイド』で紹介されている Docker 版を使用するのが便利でしょう。
Docker版で実運用? チャレンジャーですが頑張って欲しいものです
・標準的にはサーバは Ubuntu 上などで稼働させるべきなのでしょうが、操作性という点でみるとやはり win 機の方が楽ですね。
ORCA との接続
ORCA Ver 5.0 とも接続させてみましたが問題なく通信できています。
さきほどのテスト患者「松澤太郎」様を ORCA 上で会計画面まで進めるとこんな感じ。
なお、私は、開発環境などでは ORCA は、VMWare 上に設置してます。便利なんで。
ただし、実運用では、ORCA には Ubuntuマシンを専用に一台割り当てて安全な場所に設置することをお勧めします。
せっかくなので iPad につないでみた
せっかくなので SuperEHRTouch というアプリを iPad にインストール、上記のサーバにつないでみましょう。
一応、接続はできましたが、スタンプツリーが読み込めなかったり、アプリが落ちたりとかなり不安定でした。それでもアプリは直観的で操作性にすぐれ閲覧用としてみても十分なクオリティではないでしょうか。 それにしても徳川さん栄養状態悪化の一途。
クライアントでの処方せん印刷機能の復活
訪問診療・往診などでは、訪問先で処方せんを発行できた方が便利なので、できないか検討。
メニューアイテムとして復活させるのが簡単なんでしょうが、リフレクションが性に合わないのと処理の流れを追いたいという気持ちがあって 、今回は client プロジェクトの適当な位置から open.dolphin.hiro パッケージの PrescriptionMaker を直接呼び出すことにしてみました。
やはりメニューアイテムとして復活させることしました。
カルテ記載終了後、メニューバーから「カルテ」を選ぶと「処方せん出力」というアイテムが表示されています。
このアイテムを実行すると、処方せん印刷に関するダイアログが出現します。
今回は、デフォルトのまま「PDF作成」を押下すると、ブラウザが立ち上がり…
できてましたね、処方せんが。 ソースを読むとこのフォーマットを作った苦労のあとが窺いしれます。
新宿ヒロクリニックの担当者の方、ありがとう。
英先生、ファンです。
なんちゃってクラウド化・多施設化
クラウドブームなので Ocean でもできないか検討。
デフォルトの 1.3.6.1.4.1.9414.70.1 のドルフィンクリニック(管理者 admin)の他に
追加で 1.3.6.1.4.1.9414.10.1 のイルカクリニックを登録(ついでに管理者 dolphin さんも登録しておく)。
クラウド上に設置したサーバに対して admin さんと dolphin さんが異なる場所から同時に接続を試みる。
するとサーバ側ではこんなログが取れる。
クライアントでもしっかりつながってました。
実運用では、セキュリティを高めるため VPN でつなぐなどやらなくてはいけないことはいろいろあるでしょうが、何もしなくてもクラウド化・多施設化ができるというのは便利ですね。
なお、現在は試験環境すら提供していません。さすがにクラウドマシンを常設するにはコストがかかるので(笑)。
ファイルバックアップ
Ocean/Dolphin は基本的に LAN 内で使うことを前提につくられているので、クラウド化でやったようにサーバとクライアントが同一 LAN 内にない場合、潜在的に通信障害のリスクが増す。
なので、OpenOcean 0.0.1 ではクラアイントのホームフォルダに強制的にファイルバックアップを取ります。
例えば
のようなカルテを作成したとき、ユーザのホームディレクトリの OpenOcean フォルダに BackUp フォルダとさらに 患者ID 子フォルダを作成し、その中に診察内容のテキスト文だけを記録した 作成時刻.txt というファイルをつくります。
上のカルテだと 000002 フォルダ内に
とこんな感じのテキストファイル 2018-06-08-08-00.txt ができています。
こういってはなんですが、Ocean/Dolphin から他電子カルテに乗り換える時などにも役に立つでしょう。
あんまり考えたくはないですが、決して大手とはいえない本家開発元がプロジェクトを急遽中止することも考えられるわけです。
あるいは、クリニック/診療所が予想外に急成長して、中規模病院につくりかわるというぜひ考えたい事態もなくはないわけです。
もしそうなっても慌てなくてすむようデータコンバートの手段は事前に準備しておくのがよいと思われます。
本記事はもともとは
『OpenDolphin 2.7m を Win10 にインストールしてみた』
というタイトルで公開していたものです。
OpenDolphin 2.7m を OpenOcean に改名したため、適宜修正しています。