OpenDolphin 構築ログ:WildFly, PostgreSQL, クライアント接続

電子カルテクライアントが “沈黙” した原因と、接続成功までのすべて

本記事は、私が OpenDolphin(2.7系)を自前環境で構築するという目的で行った作業と、その過程で遭遇した“接続しないクライアント問題”を、最初から最後まで一切省略せずに記録した技術ログである。

「OpenDolphin を触るのが初めての人」
「評価版クライアントでハマった人」
「WildFly で動かしたい人」

そうした方々の参考になれば幸いである。

ただし、オープンソースである電子カルテ「OpenDolphin」は開発を終了している。現在は  株式会社メドレーが事業を承継し、開発・サポートを行っている


1. 作業開始:OpenDolphin を「まず動かす」ことを目標に設定

今回の PoC の目的はシンプルだった。

  • OpenDolphin の仕組みを理解する
  • 自前で構築したAWS上のWindowsServer2022に載せたい
  • クライアントが自前サーバに接続する流れを確認したい

そのために、まずは OS 上に単純な構成を置いた。

使用環境

  • Windows Server 2022(両方検証)
  • Java(OpenJDK 8)
  • WildFly
  • PostgreSQL
  • 評価版クライアント(2.7.1 とされる ZIPをGitHubからダウンロードした)

「公式手順」を参考にしながら、“できるだけ純粋な構成に近い状態” を作ることを意識した。


2. WildFly をインストールして起動する

2.1 まず WildFly を入手

ダウンロードサイト:https://adoptium.net/temurin/releases/?version=8

OpenDolphin 2.7 系で最も安定なのは WildFly 10 〜 11 です

2.2 配置

C:\WildFly\wildfly-26.1.3.Final

に展開。

2.2 起動

cd C:\WildFly\wildfly-26.1.3.Final\bin
standalone.bat

WildFly が 8080 で起動することを確認。

ここまでは順調。


3. PostgreSQL を準備する

今回の OpenDolphin は、内部的に PostgreSQL を想定している。すでに過去の電子カルテサーバでPostgresql8.4をインストールしていたため、そちらを使用した。

3.1 DB 作成

DB名       : dolphin
ユーザー名 : dolphin
パスワード : 任意

3.2 初期データ投入(最低限)

OpenDolphin の認証にはテーブルが必要。

デプロイが正常終了後に初期データを投入してください

INSERT INTO d_facility
INSERT INTO d_users
INSERT INTO d_roles

これで「サーバ側は動く状態」が整った。

3.3 Postgresql JDBCドライバ設定

①pgjdbc (PostgreSQL JDBC Driver) を入手

ダウンロードサイト:https://jdbc.postgresql.org/download/

PostgreSQL 8.4 なら JDBC Driver 42.x 系でも基本動作します。


②WildFly の module として配置

以下にディレクトリを作成:

C:\wildfly-10\modules\org\postgresql\main

配置するファイル:

  • postgresql-42.7.1.jar
  • module.xml

③module.xml の作成

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql">
    <resources>
        <resource-root path="postgresql-42.7.3.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
※ resource-root path= のファイル名は、実際に置いた JAR 名に合わせてください。

④参照先DBの設定(WildFlyのStandalone.xmlにDataSource設定)

C:\wildfly-10\standalone\configuration\standalone.xml を編集します。

<drivers> の中に JDBC ドライバ登録

<driver name="postgresql" module="org.postgresql">
    <driver-class>org.postgresql.Driver</driver-class>
</driver>

<datasources> に DataSource を追加

<datasource jndi-name="java:/jdbc/dolphinDS" pool-name="dolphinDS">
    <connection-url>jdbc:postgresql://localhost:5433/dolphin</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <driver>postgresql</driver>
    <security>
        <user-name>dolphin</user-name>
        <password>*****</password>
    </security>
</datasource>

⑤WildFly を再起動して DataSource をテスト

standalone.batを起動して、エラーが出ていないことを確認します。エラーがある場合は、Postgresqlドライバが認識されていないか、Standalone.xmlの記述に誤りがある状態です。

4. dolphin.war の配置とデプロイ

GitHubからOpenDolphinをCloneしOpenDolphinのサーバファイル(warファイル)をBuildします。Buildしたwarファイルを、わかりやすい名前(例:dolphin.war)に変更して、WildFly のdeployments へコピー。

C:\WildFly\wildfly-26.1.3.Final\standalone\deployments\

その後、WildFlyを再起動すると、.deployed ファイル生成 され、WildFly ログで “Deployed dolphin.war” が確認できるれば、サーバ側の起動は問題なし。もし、deployファイルが作成されていない場合は、deployファイルが作成されるまでトラブルシューティングしてください

自分自身が経験したBuildエラートラブルです

①postgresql-9.2-1002.jdbc4.jarをext_libにコピーして再Build

理由:OpenDolphinのソースがPostgresql9.2のJDBCを参照していたため

こちらでいったんBuildは正常

このあと、デプロイしてもfailedだけが作成し続け、deployedを作成するまで苦労しました

②OpenDolphinが期待しているDataSource名ではない
以下のようにPostgresDSというDataSourceを追加した

<datasources>
    <!-- 既存の ExampleDS は残しておいて構いません -->

    <datasource jndi-name="java:jboss/datasources/PostgresDS"
                pool-name="PostgresDS"
                enabled="true"
                use-java-context="true">
        <connection-url>jdbc:postgresql://localhost:5433/dolphin</connection-url>
        <driver>postgresql</driver>
        <security>
            <user-name>dolphin</user-name>
            <password>*****</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">
            <driver-class>org.postgresql.Driver</driver-class>
        </driver>
    </drivers>
</datasources>

③Standalone.xml内のJPA のデフォルトデータソースが 空(“”) だった

<subsystem xmlns="urn:jboss:domain:jpa:1.1">
    <jpa default-datasource="java:jboss/datasources/PostgresDS"
         default-extended-persistence-inheritance="DEEP"/>
</subsystem>

④ClassNotFoundException

failedの中を確認すると、ClassNotFoundException: Could not load requested class : org.hibernate.type.StringClobTypeというエラーが出ていた

OpenDolphinのソースを全検索して

@Type(type=”org.hibernate.type.StringClobType”)

の行を

@Type(type=”org.hibernate.type.StringType”)

に変更して再Build、再デプロイ

⑤NullPointer Exceptionエラー

failedの中を確認すると、jboss.deployment.unit.”opendolphin-server-2.7.1.war”.component.PvtService.START … EJBException: NullPointerExceptionというエラーが出ていた

解決として、

C:\wildfly-10.1.0.Final\custom.properties

というテキストファイルを作成します。

最低限、ファイルの中身には、

# OpenDolphin basic settings

# 医療機関ID(DBに入れる予定の facilityId と合わせる想定)
dolphin.facilityId=1.3.6.1.4.1.9414.70.1

# ORCA連携用(今はダミーでOK)
claim.host=localhost
claim.port=8000
claim.user=ormaster
claim.password=ormaster

# ログレベルなど(あってもなくてもよいが、一応)
dolphin.logLevel=WARN

と記述します

standalone.xml<subsystem xmlns="urn:jboss:domain:logging:…"> の中には、以下の内容を記述しておきます(念のため)

<logger category="open.dolphin">
    <level name="WARN"/>
</logger>
<logger category="dolphin.claim">
    <level name="WARN"/>
</logger>

この後、再デプロイして確認します

こちらを行って、サーバは正常起動しました


5. ここからさらに問題発生:クライアントが“完全に沈黙”

5.1 初期データをDBに投入

この時点で、OpenDolphinのテーブルは作成されているはずです。クライアント接続に必要な認証データを投入してください

5.2 クライアントアプリを作成する

サーバアプリをBuildしたように、OpenDolphinのソースからクライアントアプリケーションをBuildします

5.3 クライアントアプリを実行する

コマンドラインから

java -jar OpenDolphi

しかし、トラブル発生。ログイン画面が出る。しかし・・

  • WildFly には 1 つもリクエストが来ない
  • PostgreSQL 側にもクエリが飛ばない
  • クライアントには「接続できない」というエラーすら出ない
  • ログインしても無反応(沈黙)

この時点で、サーバ側が悪いのか、クライアント側が悪いのか、判断がつかない。


6. 切り分け開始:「サーバは問題ない」ことを確認

まずサーバ側を確認した。

  • dolphin.war は正しく起動
  • WildFly ログには deploy エラーなし
  • PostgreSQL も正常に接続可能
  • DB 初期データも投入済み

つまり サーバ側は正常

ではなぜ接続が来ない?


7. 次の仮説:

「クライアントは接続先 URL が固定されているのでは?」

ここで、OpenDolphin は接続先サーバが固定されているのでは?と疑い始める。

実際、世の中には

  • クラウド用に URL を固定したビルド
  • 体験版として接続先変更不可のもの

が存在する。

このOpenDolphinクライアントも、その可能性が十分ある、と思った


8. 設定画面を開く → 一見変更できそうだが、保存されない

クライアント右下の [設定] を開いたところ、
「サーバ」「スキーマ」「ポート」といった項目が並んでいた。

しかもサーバの項目は、test.open.dolphinがデフォルト

設定変更できる雰囲気がある。

ところが:

  • http://localhost:8080 と入力 → 保存 → 値が消えている
  • http://192.168.10.5:8080 → 保存 → 消える
  • /dolphin を書いてみる → 保存 → 消える
  • localhost を書いてみる → 保存 → 消える
  • 127.0.0.1 を書いてみる → 保存 → 消える

これは、設定項目が「見せかけ」で実際には固定 URL に接続しているのでは?
という疑惑が深まっていく。

ここでしばらく時間を消費した。


9. hosts ファイルで出口を書き換える案(緊急回避策)

万が一、本当に URL が固定なら、

C:\Windows\System32\drivers\etc\hosts

で名前解決を書き換えれば、
強制的に自前サーバへ誘導できる

しかし、

  • 固定 URL かどうかの確証がない
  • これは「根本解決ではない」

ため、一時保留とした。


10. さらに試行錯誤:クライアントを自前ビルドする案

GitHub 上の OpenDolphin 2.7m(猪俣先生開発版?)のソースを clone し、クライアントだけ自前ビルドして差し替える案も検討した。本来、サーバもBuildしなおす必要があるかもしれないが、時間を割きたくないのでいったんクライアントだけ。


11. 決定的瞬間:

すると、サーバの設定ができた共に、正しい設定の仕方が偶然わかった

設定画面をもう一度よく見ると、
項目は次のように分かれている。

項目入れるもの
スキーマhttp / https
サーバホスト名または IP だけ
ポート数字だけ(例:8080)

ここで気づいた。

サーバ欄に “http://” や “:8080” を入れてはいけない。
純粋なホスト名だけを書く仕様だった。

つまり、正しい入力はこう:

正しい例

スキーマ:http
サーバ:127.0.0.1
ポート:8080

正しくない例(保存されず消える)

サーバ:http://localhost:8080
サーバ:localhost:8080
サーバ:http://192.168.x.x/dolphin

これがすべての原因だった。


12. 正しく設定して保存 → 接続成功!

サーバ欄を 127.0.0.1のみにし、
ポート欄に 8080 を入力して保存。

期待半分、不安半分でログインボタンを押す。

WildFly ログを見ると──

POST /dolphin/login
200 OK

来た。初めてクライアントが喋った。

沈黙状態が続いていたOpenDolphinクライアントが、ようやく自前サーバに接続を開始した。

結局、当初BuildしていたOpenDolphinのソースは、サーバをDockerで構築する簡易版だったのかもしれない(推測)

OpenDolphin 2.7mでBuildしたクライアントアプリで電子カルテを操作してみようと思う。もしかしたら、サーバも再構築する必要があるかもしれないが、問題があった時に対応するつもり。


13. hosts の修正は不要に

hosts 書き換え案は不要となり、即座に元に戻した。


14. clone した OpenDolphin ソースの扱い

clone していたソースは、

  • WildFly に影響なし
  • クライアント実行にも影響なし
  • 今後ビルドするなら Work に移動すればよい
  • 使わないなら削除して OK

という結論に達した。


15. 結果:

この環境で OpenDolphin は問題なく動作する

サーバ:WildFly
DB:PostgreSQL

という構成で、OpenDolphin の認証と画面まで通った。

「クライアントは URL 固定されている」という疑いは誤りで、
真の原因は 設定画面の入力仕様の誤解 だった。


16. 今回の学び(技術的教訓)

  1. OpenDolphin クライアントの設定項目は“URL”ではなく“サーバ名””IPアドレス”を入れる欄である。
  2. プロトコル(http)とポート(8080)は別欄で指定する。
  3. WildFly 側が正常でも、クライアントが正しく設定されていなければ完全沈黙する。
  4. hosts 書き換え案は“最終手段”であり、本質的な解決ではなかった。
  5. 結局のところOpenDolphin 2.7mでクライアントは再Buildしただけで、いったんはサーバ再構築は不要でした。ただ、設定の仕方が問題の核心であることもわかりました。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA