2012年1月4日水曜日

JBoss4.2にMySQLに接続するためのDatasourceを作ってS2JDBCで接続する

JBoss の Datasource を経由して MySQL に接続してみた。

1.準備

JBoss は 4.2.3GA を準備。
MySQL は 5.1.58 community を準備。

インストール後に以下の手順が必要になります。

1.1. データベーススキーマの作成

MySQLに任意の名前でスキーマを作成します。既に存在していればそれを使用しても構いません。
詳細は省略します。

1.2. MySQL用のJDBCドライバーを配置

ここ( MySQL :: Download Connector/J )から対応するJDBCドライバーをダウンロードします。
その後、 mysql-connector-java-5.1.6.jar を以下のディレクトリに配置します。

{JBossのインストールディレクトリ}/server/default/lib/

2.Datasource の定義ファイルを作成

2.1. ファイルの作成

以下のようにファイルを作成する(中身は空で良い)

ディレクトリ:{JBossのインストールディレクトリ}/server/default/deploy
ファイル名:{任意の名前}-ds.xml

ちなみに自分はここでファイル名を ds-hogehoge.xml としてしまったために、
JBossが以下のように表示するだけで全く読み取ってくれなくて悩んでたのは秘密。
いやー、ホント悩んだ。

--- Incompletely deployed packages ---
org.jboss.deployment.DeploymentInfo@13376b0a { url=file:/C:/Servers/jbos-4.2.3.GA/server/default/deploy/ds-hogehoge.xml }
deployer: null
status: null
state: INIT_WAITING_DEPLOYER
watch: file:/C:/Servers/jboss-4.2.3.GA/server/default/deploy/ds-hogehoge.xml
altDD: null
lastDeployed: 1325039984621
lastModified: 1325039984621
mbeans:

ちなみにこちらのサイトの情報でファイル名の問題に気づきました。

2.2. Datasource の定義を記述

2.1.で作成したファイルに以下のように記述する。


  
    JNDI名
    jdbc:mysql://ホスト名:ポート番号/スキーマ名?useUnicode=true&
    characterEncoding=UTF-8
    
    com.mysql.jdbc.Driver
    ユーザー名
    パスワード
    org.jboss.resource.adapter.jdbc.vendor.
     MySQLExceptionSorter
    8
    8
    0

    
    
       JNDI名
    
  


3.JBoss に Datasource が登録されているか確認

この状態で JBoss を起動。以下のように表示されJNDIに登録されればとりあえず成功です。

15:21:23,170 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=JNDI名' to JNDI name 'java:JNDI名'
15:21:23,189 INFO  [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=.../deploy/jmx-console.war/
15:21:23,316 INFO  [Http11Protocol] Coyote HTTP/1.1を http-127.0.0.1-8080 で起動します
15:21:23,330 INFO  [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
15:21:23,340 INFO  [Server] JBoss (MX MicroKernel) [4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)] Started in 7s:379ms

4.S2JDBC経由でデータベースにアクセス

登録したJNDIを使ってデータベースに接続するにはアプリケーションの jdbc.dicon を以下のように記述。


  

  
  
    
      
    
    100
  

  
        @org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:データソース名")
  



自分はこれで出来たが、諸事情により実行結果の画面やログは省略させてもらいます。

今回参考にさせていただいたサイト

JBossにMySQL用のデータソースを定義する方法について参考にさせていただいた
JBoss/MySQLと接続する / http://www.masatom.in/pukiwiki/JBoss/MySQL%A4%C8%C0%DC%C2%B3%A4%B9%A4%EB/

S2JDBCでJBossのデータソースを利用する方法について参考にさせていただいた
APサーバのコネクションプールを使う : JDBCの設定 / http://s2container.seasar.org/2.4/ja/jdbc.html#GenericApplicationServer

途中でそもそもJBossって何だ?ってなった時に参考にさせていただいた(JBossってTomcatを含んでるものなのね。そりゃtomcatより起動とか遅いわけだ…
TomcatとJBossの違い - OpenGroove : http://open-groove.net/tomcat/difference-tomcat-jboss/