保護中: NetBeans で Java Web アプリを作成
OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと【改訂】
以前に OpenOcean というブログで
『OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと』
『OpenOcean/OpenDolphin をカスタマイズするために知っておいた方がよいこと 2』
という記事を書いて、おかげさまでけっこう読まれた。
が、時間の関係で2回に分けてしまって(今となっては)ボリューム的にどうかってのと、とにかく急いで書く必要が(当時は)あり、いささか雑な部分も見え隠れするので、以前の内容に若干の加筆を加えて再構成。
オープンソース(Open Source Software : しばしば OSS などと略される)の電子カルテ OpenOcean/OpenDolphin は、ビルド・デプロイするだけでも出てくる役者が多いので、整理しておきましょう。
Java…Win, Mac, Unix などに仮想的なマシンを設定し、それを動かすための言語。したがって、Java で開発されたソフトは原理的には Win/Mac/Unix で動く。実際には windows と MacOS ではメニューの表示構成などが OS レベルで違うため、この部分は機種依存になります。他には内部の特殊文字が違う(例えばエスケープシーケンスやファイルセパレーターなど)ため、ここら辺はプログラムを組む際に工夫する必要があります。
仮想的なマシンで Java プログラムを動かすためには、当然、実行環境を提供するプログラム群が必要になってくる。Java 11 より前では、JRE という実行環境が用意されていた。Java 11 以降は、この方式は廃止され、各アプリ毎に実行環境を組み込む方式が推奨されるようになった。
Java プログラムを開発するためには JDK が必要。
Java EE…Java Enterprise Edition の略。とりあえずは、通常の Java アプリをクライアント-サーバシステムとして開発できるように拡張したもの、というような理解でいいと思います。
ただし、動的なサイトが作成可能な tomcat は、Java EE とは考えられていません(なお tomcat に Java EE の仕様のいくつかを実装した TomEE というプロジェクトがあります。日本語記事は少ないんですが『tomacat 魔改造 vs TomEE』あたりをご参照ください)。逆にウェブフレームワークとして認知されている Spring には Java EE の仕様の一つである JPA が標準で使えたりします。
これは、Java EE の機能が多彩で、単体でウェブアプリを問題なく動作させることができるアプリケーションサーバを構成するのが難しいためと思われます。
私も Java EE の仕様の全貌はまったくつかめてません。
現状だと「Java EE に対応したアプリケーションサーバは、WildFly・GlassFish・Payara・WebLogic 」と思っていいのではないでしょうか。
Java 自体 Oracle との絡みで先行きは不安のようです。→ その後の経緯で Jave EE は Jakarta EE に引き継がれて開発も継続されていますが、どうも Spring 系の方が勢いがあるような。。
Jakarta EE…Jakarta Enterprise Edition の略。実質的に Java EE の後継。
Java EE で使われていたパッケージ群で javax という名称が(商標諸々の問題で)使えなくなったため、これを jakarta と改名し移行作業がなされました。
実務コーディング的には今まで
import javax.servlet.*;
などと書いていたところを
import jakarta.servlet.*;
とする必要があるわけです。
仕様の全体名も Jakarta EE となりました。
PostgreSQL…ご存知定番のデータベースソフト。いろんなところでお世話になってます。
NetBeans…Java でよく使われるIDE(統合開発環境)。Java 版 VisualStudio といった方がわかりやすいか。Java の IDE は、eclipse が有名ですが、ドルフィンプロジェクトではこちらを使っていたため、私もこちらの方に慣れちゃいました。ただ先行きは不安しかない。
最近では Visual Studio Code にプラグインを組み込んでコーディングする人も増えているようです。
Maven…「メイヴェン」と読むのが正しいようです。「マーベン」でも通じると思うけど(内輪だけ?)。Java 用プロジェクト管理ツール、と紹介されることが多い。実用的なソフトを構築する場合、自力で書いたソースの他にライブラリが必要になってくる。OpenDolphin/OpenOcean の pom.xml に
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.4-702.jdbc4</version>
</dependency>
などと書かれてあるのは、その指定のためです(この場合は、「postgresql を使いたいので jdbc ドライバをリポジトリから取ってきてね」という意味です。ver が 8.4 と最新ではないのは古い ORCA の postgres に対応するためだと思われます)。
他にもビルドの際の細かいルールを指定できる。例えば、ウェブアプリを作成する際、最終産物を jar や war (いずれも後述)の形式にしたいときがほとんどですが、設定で対応できます。
WildFly…Jakarta EE(Java EE) に準拠したアプリケーションサーバ。Jakarta EE(Java EE) は仕様しか決められていないため、Java で書かれた Web アプリ実運用のためにはサーバ実体が必要。このサーバ実体の一つがWildFly。 Redhat が開発し配布している。なお、この商用版が JBoss。
Jakarta EE(Java EE) 同様、機能が多彩すぎて、全体がつかみにくい。実稼働時には(アプリ名).war (後述)をWildFly 内に配置(デプロイ)する。
なお、現時点(2022/5)での WlidFly と対応する Jakarta(Java) EE の関係は以下の通りです。
公式サイトより
Jakarta EE 9, 10 あたりの実装が遅れているようです。
jar と war … 通常のソースコード ***.java を javac コマンドでコンパイルするとできるのは ***.class です。実行するには、「java 環境でクラスを呼び出す」必要があるので、コマンドは
java ***
となります。「コンパイル済みのクラスを呼び出す」これが Java アプリ実行の原則です。
ところが、Ocean/Dolphin プロジェクトでは、クライアントは OpenOcean.jar 、サーバーは OpenOcean.war などという名称です。
これは、ある程度まとまった機能を提供するためには、クラスだけでは足りず、設定ファイルや画像などのリソースファイルが必要なため、それらをまとめたファイル形式が必要とされたからです。jar は、その一つで Java ARchive からきています。読み方は「ジャー」でいいと思います。
Java EE を用いる Web アプリの場合には Web application ARchive 通称 war (ウォー :戦争 war と同発音)となります。
git と github … github は先日マイクロソフトに買収され、それを日経新聞が「設計図共有サイト、8200 億で買収」と報じたため、そのネーミングセンスが話題になりました。
オープンソースのソースをインターネット上で公開しておくには、何らかの場所(リポジトリ)が必要で、その一つが、GitHub (ギットハブ。ネイティブっぽく発音するならギッ ハブでしょうか)です。他には sourceforge や GitLab などもありますが、ドルフィン一族は、その多くが GitHub でソースを公開しています。
公開されたソース(リモート)を自分のマシン(ローカル)にクローンすることもできます(というかしないと自分のマシンではビルドできない)。
ローカルやリモートのリポジトリの橋渡しをしたり、改変を記録しておくためのシステムが Git (ギット)です。
雰囲気掴みたい人は『お手軽にWin機で Git や GitHub を使う』など参照。
歴史的に見るとまず Linux カーネル構築のためのバージョン管理システムとして Git がリーナス・トーバルズの手によってつくられ、そのホスティングサービスとして GitHub ができたわけですが、実用的には上のような理解でいいと思います。
windows にはデフォルトで git コマンドが入っていないため、自前で git が使える環境を構築する必要があります。私は随分前に構築したっきりなのですが、それなりに面倒だった記憶があります。たぶん、ここらへんで多くの人が嫌気をさすのではないかと思います。
ただ、ここらへんくらいまでの知識があれば、ビルド・デプロイはなんとかできるでしょうか。
『Open Dolphin 2.7.0b を Win10 にインストールしてみた』
『OpenDolphin 2.7(m) を Mac OSX にインストールする』
『OpenDolphin-2.7m を M1 Mac にインストールする』
あたりの記事をどうぞ。
ソースコードは
github https://github.com/Hiroaki-Inomata/OpenDolphin-2.7m
に置いてあります。
デザインパターン…迂闊なことをいうと本職の方々に怒られそうなので wiki から引用しておくと
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
だそうです。ソースと最終産物との間にある中間的な機能を設計する上での定型的なパターン、とでもいったらいいんでしょうか。
apple 系のOS のフレームワーク( cocoa と cocoa touch )で頻出の「xxxxdelegate」も典型的なデザインパターンの一つです。
ですが、プログラミングの初心者コースではまずは教えないと思うので、それなりに経験積んだ人でも知らない人は知らないんではないでしょうか。
また、デザインパターンを「アンチパターン」として嫌う人もいます。
OpenOcean/OpenDolphin ではシングルトンやメニューファクトリーといったパターンが使われています。
これがある程度頭に入ってないと、ソースを追っていっても何やってるかわからなくなると思います。逆に C++ あたりで過去に一回でも経験しているとその類推で何とかなることも多いと思います。
実際に改変を試みようとするとここら辺から、難しくなってくるのかなと思います。
後は、主要なライブラリなどでしょうか。私もいまだに使い方がわかっていないライブラリは山ほどあります。
Java のライブラリとしては、ORM の Hibernate が有名ですね。ORM や Hibernate に関しては、他サイトですが
をご参照ください。雰囲気掴めるかと思います。
? 参考
より詳細なソースコードレベルでの解説は
『OpenDolphin ソースコード解説』
を参考にしてください。
Mac で tomcat
あまり実用性は高いとはいえないと思うのだが、mac で軽くサーバーサイド Java をやりたい場合、tomcat 環境があると便利だ。
「もう Java の時代でもないでしょう」的な雰囲気がそこはかとなく漂っているせいなのかネット上にあまりこの手の情報は見つからなかった。
なので、軽くまとめ。
0. 準備
当たり前ですが Java 開発環境を作っておきましょう。
『M1 Mac に M1(Arm) 対応の JDK をインストールする』
あたりを参考に。
1.インストール・動作確認
ようやく M1 Mac でも homebrew がマトモに動くようになってきたので、今回は homebrew 経由で tomcat を入れます。
おなじみ
brew install tomcat
コマンドでインストール。
tomcat 自体はユーザー(管理者)登録しなくともとりあえずは走る。
brew services start tomcat
でサービスを開始したあと、ブラウザで http://localhost:8080 にアクセスするとwelcome 画面(アイキャッチ参照)が表示される。こうなればOK。
サービス終了は
brew services stop tomcat
とする。
2.ユーザー登録する
自前のプログラムをデプロイする場合に必要になってくるので、tomcat にユーザーを登録する。
tomcat を homebrew 経由で導入した場合、現在(2022/4)だとその実体諸々は
/opt/homebrew/Cellar/tomcat/
にある。
設定ファイル関係は
/opt/homebrew/Cellar/tomcat/(version)/libexec/conf
以下にある。
このうち tomcat-users.xml に以下の記述を追加。
<user username="username" password="password" roles="manager-gui" />
tomcat 起動後、上で設定したユーザー名とパスワードで管理画面に入れるようになります。
3.なにはともあれ Hello World!
環境が整ったら、とりあえず何か簡単なプログラムをデプロイしてみたい。
テキストエディタで .jsp だのをガシガシ作成していってもいいんでしょうが、ファイル構成(ディレクトリ構造とでもいうのでしょうか META-INF 以下にこれこれを置いてというアレ)がよくわかってないので、NetBeans にまかせましょう(手抜き)。
NetBeans 起動後、File >> New Project.. でプロジェクト作成。
Web Application を選択。あとは、ダイアログの指示に従う。
デフォルトで Hello World! してくれるコードが書かれているので、なんも考えずにビルド。
BUILD SUCCESS するとプロジェクトフォルダに target フォルダがつくられ、その中に
プロジェクト名-version.war
というファイルができている(はず)。
これを tomcat 管理画面からデプロイ。
手持ちのブラウザで URL: http://localhost:8080/プロジェクト名-version/ にアクセスすると以下のようにハロワールドしてくれる。
めでたしめでたし。
【追記】めでたしめでたし、とは書いたが、その後、servlet の簡単なコードを書いて tomcat 環境にデプロイするとなぜかエラーが出る。ところがこの .war ファイルを wildfly 環境に持ってくると全く正常に動作する。
原因よくわからず。
【追記2】tomcat の version 8 にすると正常動作しました。
サンプルコード&解説は『【Mac】ハロワールドっぽいページを複数作って遷移の確認【Servlet】』で。使用したコードは GtHub に公開しています。