White Box技術部

WEB開発のあれこれ(と何か)

WebSphere Application ServerとSpringで開発をする

What is ワズ?

WebSphere Application Serverを略してWAS、ワズとかワスとか言いますね。単にWebSphereと言う人もいますが私はワズ派です。 でも知らない人に「ワズ」と言うと、何のことかイメージし辛いと思うので、初めて話す人には正式名称で話すか資料を渡したほうがいいと思います! というか私が初めて聞いたとき「わず?私のこと?」ぐらいわかりませんでした。あかん。

アプリケーションサーバーとWebサーバー

現プロジェクトのドキュメント用語は、伸ばし棒ありで書くように調教されたので、伸ばし棒ありでこのブログも書きます。 しかし初めて"サーバ"とかの伸ばし棒のない表記を見たときは、かなり違和感を覚えましたけど、慣れると有る方が冗長に見えるので不思議ですね。

そういえばサーバーサーバー言っていると、新人とかはアプリケーションサーバーとWebサーバーを区別せずに認識してしまうんじゃないですかね?

はい、これも昔の私ですね!
一応プログラムを動作させるサーバーをアプリケーションサーバー、 HTTPでのアプリケーションに対するアクセスを受け付けるのがWebサーバー、と役割によって名前が付いてますが、 商用サーバーのWebLogicやWASは、Webサーバーの機能を持っていますし、TomcatでもWebサーバーとしても動作しますから混同してしまうのもわからなくはない、わからなくはないですよね!?わからなくていいのです!(ぇ

いや、わかった方がいいんですけど。

サーバープロダクトのほとんどがアプリケーションサーバーとWebサーバーの機能を持つのであれば、別に区別する必要がないようにも感じますが、 ここに機能境界があることによって性能チューニングやシステム構成がやり易くなるんですよね。 例えば、リクエスト増に対処するためWebサーバー側の台数を増やし、静的コンテンツを持たせてアプリケーションサーバー側までリクエストを飛ばさないとかですかね。

でも今だとクラウド利用のインフラを使う場合が多くなっているので、ここら辺のテクニックも変わってきているのかもしれません。 キャッシュさせるよりもリクエストに応じてスケールさせた方が適しているとか・・・いやこれはないですかね、Webシステムの性能改善はリクエスト減らすのが基本だと思いますし。

とまあここら辺は本題からずれるのでお開きにして・・・

WebSphere Application Serverを使った開発

WASは開発用途であれば無償で使えるので、以下からダウンロードできます。 ただIBMのアカウントが必要になるので、利用にはアカウント登録が必要です。

ダウンロードできるとはいえ、これが結構わかり辛いのでWAS 8.5をJDK1.7で動作させるために必要なものを以下にあげておきます。

  • WebSphere Application Server for Developers, Installation Manager Repository

    • was.repo.8550.developers.ilan_part1.zip
    • was.repo.8550.developers.ilan_part2.zip
    • was.repo.8550.developers.ilan_part3.zip
  • IBM WebSphere SDK Java 7 for Liberty and Full profile, Installation Manager Repository

    • was.repo.8550.java7_part1.zip
    • was.repo.8550.java7_part2.zip
    • was.repo.8550.java7_part3.zip
  • IBM Installation Manager(開発環境にあったものを。Windowsの64bitの場合は以下)

インストール手順

これらをダウンロードし、IBM Installation Managerを起動させたら、「was.repo.8550.developers.ilan_part1.zip」と「was.repo.8550.java7_part1.zip」の中に入っている、repositoryファイルをリポジトリ登録してWASのインストールを進めてください。

WASをJDK1.7で動作させるためには、インストール後にひと手間いります。以下を参考に変更してください。私はWASのコンソールから変更しています。

開発用の軽いWAS(Liberty Profile)もあるのですが、まあとりあえず一緒に苦しみましょう!
Liberty Profileが気になる場合は以下を参考に。

開発用JDK

WAS、というかIBM製品を使った開発を行う場合、IBM JDKと呼ばれるものでアプリケーションを開発する必要があります。IBM JDKはWASのインストールディレクトリにあるので、1.7の方を使って開発してください。
#フォルダ名がjava_1.7_xxみたいになっている方です


あれ?

本当はWASを使ってSpringのアプリケーションをJUnitでUTしたときの苦労話を書こうとしてたのですが、 なぜかインストールの話で結構な量になってしまいましたね。
はい、なのでお開きにします!

続きはまた今度・・・ですが、本当にあるのか怪しいので以下に書きなぐっておきます。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={
        "classpath:WEB-INF/applicationContext.xml",
        "classpath:WEB-INF/applicationContext-dao.xml"})
  • 読み込むapplicationContextは、クラスパス配下に配置する必要があるので、webapps/WEB-INFのような通常置いてある場所は見えない。
    classpath:』の代わりに『file:』接頭辞を使えばフルパス指定で見せることは可能だが、 ナンセンスだと思うのでテスト用のプロパティファイル置き場にクラスパスを通して、 そこにテスト用のapplicationContext.xmlを作成して配置するのがおすすめ。

  • 読み込むapplicationContext(Bean定義ファイル)には以下の記述が必要。

<context:annotation-config />
<context:component-scan base-package="white.box" />
<!-- base-packageで指定したパッケージ配下のクラスは、パッケージ階層が深くても全てロードされる -->
  • WAS動作時のDBリソースへのアクセス設定をWAS側に持たせている場合、 テスト用にBean定義ファイルを書き直して、Bean定義ファイルから直指定させるとUTがしやすい。

  • WASのライブラリでJAXB関連のクラスを動作させている場合は、JUnitで動作させるために以下のライブラリをプロジェクトのパスに通す必要がある。

${WAS_INSTALL_ROOT}/runtimes/com.ibm.ws.admin.client_8.5.0.jar

以上です。続きを書いた場合は、上の内容を整理しておきます。