はじめに
SQL ServerはMicrosoftの陣地には違いありませんが、だからと言って、このデータベースエンジンがJavaとの連携方法を知らないわけではありません。実際、SQL Serverは、読者の皆さんが思っている以上にJ2EEアプリケーションで使用されています。SQL Serverをバックエンドとして、Javaアプリケーションサーバと連携してアプリケーションを開発するには、SQL ServerとのJDBC接続を確立する必要があります。
このチュートリアルでは、最も一般的な4つのJavaアプリケーションサーバとSQL Serverとの間にJDBC接続を確立する方法について説明します。最も一般的な4つのJavaアプリケーションサーバとは、OracleのJDeveloper(埋め込みOC4Jサーバ)、Red HatのJBoss、IBMのWebSphere、およびBEAのWebLogicです。SQL Server 2000およびSQL Server 2005 Expressの両方を使って説明します。
基本の手順は、次のとおりです。
- SQL ServerドライバのJARファイルをclasspathに追加する
- SQL Serverデータベースを開始する
- データベースとの接続を確立する
実に簡単だと思いませんか? ただし、JDBC接続の確立に先立ち、使用するSQL Serverのバージョンに適したドライバを見つけてインストールするなど、多少の準備やインストールを行う必要があります。
SQL Serverの設定とアプリケーションサーバの選択
以降に行う手順は、実行するアプリケーションサーバによって、またSQL Serverの設定が済んでいるかどうかによって異なります。まずSQL Serverの設定について説明します。次に最も一般的な4つのアプリケーションサーバとの連携設定について、手順を詳しく示します。
SQL Server 2000のセットアップとインストール
- SQL Server 2000 Driver for JDBC Service Pack 3をインストールします。SQL Server JDBCドライバのJARファイル(msbase.jar、mssqlserver.jar、およびmsutil.jar)が、「C:Program FilesMicrosoft SQL Server 2000 Driver for JDBClib」ディレクトリにインストールされます。
- SQL Server 2000 Service Pack 3aをダウンロードします。「sql2kdesksp3.exe」ファイルを起動し、ファイルの抽出先のフォルダを指定して、SQL Server 2000デスクトップエンジンをインストールします。このフォルダ内にMSDEディレクトリが作成されます。
著者からの注意
SQL Server 2000は、Windows 2000、Windows 98、Windows ME、Windows NT、Windows Server 2003、およびWindows XPをサポートします。
- 次に、コマンドプロンプトウィンドウを開き、cdコマンドでMSDEディレクトリに変更し、次のコマンドを実行します。
setup SAPWD=<sapwd> SECURITYMODE=SQL
<sapwd>はsaユーザーのパスワードです。SECURITYMODE=SQLコマンドによって、SQL Server 2000が混合モード認証でインストールされます。混合モード認証の場合、WindowsユーザーアカウントまたはSQL Serverアカウントを使ってSQL Serverにアクセスできます。これに対して、Windows認証を使用すると、接続はWindowsユーザーアカウントだけで行われます。saユーザーはSQL Serverアカウントであるため、混合モード認証が必要です。このコマンドによって、SQL Server 2000がインストールされます。
- コントロールパネルの[管理ツール]→[サービス]で、MSSQLSERVERサービスが開始されていない場合は、このサービスを開始します。次に、SQL ServerがサポートするプロトコルとしてTCP/IPを選択します。このためには、SQL Serverネットワークユーティリティ(C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SVRNETCN.exe)を開始して、TCP/IPプロトコルを選択し、[->]ボタンを使ってこれを[Enabled protocols]テキスト領域に移動します。[Apply]をクリックし、[OK]をクリックして変更を適用後、[Administrative Tools]→[Services]でMSSQLSERVERサービスを再起動します。
SQL Server 2005 Expressのセットアップとインストール
- Windows Installer 3.0がインストールされていない場合は、これをダウンロードしてインストールします。Windows Server 2003 SP1およびWindows XP SP2では、Windows Installer 3.0はプリインストールされています。
著者からの注意
SQL Server 2005 Expressは、Windows 2000 SP4、Windows Server 2003 SP1、およびWindows XP SP2をサポートします。
- Microsoft .NET Framework 2.0をダウンロードしてインストールします。.NET Framework 2.0のバージョンは、32ビットのプラットフォームと64ビットのプラットフォームとで異なります。
- SQL Server 20005 Express Editionをダウンロードし、「SQLEXPR.EXE」ファイルを起動してアプリケーションをインストールします。
- SQL Server 2005 JDBC Driverをダウンロードします。「sqljdbc_1.0.809.102_enu」をダブルクリックし、アプリケーションファイルの抽出先のフォルダを指定します(既定のフォルダはMicrosoft SQL Server 2005 JDBC Driver)。[Unzip]ボタンをクリックしてファイルを抽出します。
- 「SQLEXPR.EXE」ファイルをダブルクリックします。使用許諾書に同意して、[Next]をクリックします。[Installing Prerequisites]ダイアログの[Install]をクリックして、Microsoft SQL Native ClientおよびMicrosoft SQL Server 2005セットアップサポートファイルをインストールします(図1を参照)。
- [Next]ボタンをクリックして、SQL Serverインストールウィザードを開始します。[System Configuration Check]ダイアログが表示され(図2を参照)、登録情報を指定するよう求められます。
- 次に[Feature Selection]ダイアログが表示されます。[Database Services]ノードが既定で選択されています(図3を参照)。[Next]をクリックします。
- 図4に示すように、[Authentication Mode]ダイアログの[Mixed Mode]を選択し、saのログインパスワードを指定し、[Next]をクリックします。
- [Error and Usage Report Settings]ダイアログで、エラーと使用状況に関する自動レポートを有効にする場合は、対応するチェックボックスをオンにします。
- [Ready To Install]ダイアログの[Install]ボタンをクリックします。図5に示すように、SQL Serverコンポーネントが構成されます。[Next]をクリックし、[Finish]をクリックして、インストールを完了します。
- 次に、TCP/IPを有効にします。[Microsoft SQL Server 2005]→[Configuration Tools]→[SQL Server Configuration Manager]を選択し、[SQL Server 2005 Network Configuration]→[Protocols for SQLEXPRESS]を選択します。[TCP/IP]ノードを右クリックし、[Enable]を選択します(図6を参照)。[Services]でSQL Server (SQLEXPRESS)サービスを右クリックし、[Restart]をクリックすることによって、サービスを再起動します。
- ここでポート値を指定する必要があります。[SQL Server 2005 Network Configuration]→[Protocols for SQLEXPRESS]を選択します。[TCP/IP]ノードを右クリックし、[Properties]を選択します。[IP Addresses]タブを選択します。[IP ALL]の[TCP Dynamic Ports]では、SQL Server 2005がアクセスされるポート番号を指定します(図7を参照)。これは、SQL Server 2005への接続URLのポート値でもあります。
JDeveloperとSQL Serverの連携を構成する
- 前のセクションで説明したように、まず、SQL Server JARファイルの新しいライブラリを作成することによって、JDBCドライバクラスのJARファイルをclasspathに追加します。JDeveloperを開き、[Tools]→[Default Project Properties]を選択します。[Default Project Properties]ダイアログで、[Libraries]ノードを選択し、[Add Library]ボタンをクリックします(図8を参照)。
- [Add Library]ダイアログで、[User]ノードを選択し、[New]ボタンをクリックします(図9を参照)。
- [Create Library]ダイアログで、[Library Name]に「SQLServer」などのライブラリ名を入力します。[Class Path]ノードを選択し、[Add Entry]ボタンをクリックします。SQL Server 2000の場合は、このダイアログで「msbase.jar」「mssqlserver.jar」および「msutil.jar」ファイルを追加します。SQL Server 2005 Expressの場合は、「sqljdbc.jar」を追加し(図10を参照)、[OK]をクリックします。[OK]を何度かクリックして、[Libraries]ダイアログを終了します(図11を参照)。
- 次に、SQL ServerデータベースとのJDBC接続を設定します。[Connections]ナビゲータで、[Database]ノードを右クリックし、[New Database Connection]を選択して、Create Database Connectionウィザードを開始します。
- [Type]ダイアログで、[Connection Name]に接続名を指定し、[Connection Type]ボックスの一覧の[Third Party JDBC Driver]を選択します(図12を参照)。その後、[Next]ボタンをクリックします。
- [Authentication]ダイアログで、[Username]には「sa」を入力し、[Password]にはSQL Serverデータベースのインストール時に使用したパスワードを入力します。
- [Connection]ダイアログで、[Driver Class]フィールドを見つけて、ドライバクラスとして「com.microsoft.jdbc.sqlserver.SQLServerDriver」 (2000)または「com.microsoft.sqlserver.jdbc.SQLServerDriver」 (2005 Express)を指定します。[New]をクリックして、ドライバクラスを追加します。[Register JDBC Driver]ダイアログで、[Driver Class]フィールドにドライバクラスを指定します(図13を参照)。[Library]フィールドで、前のセクションで設定したライブラリを選択します(筆者の場合は「SQLServer」)。[OK]をクリックして追加します。
- 図14に示すように、[URL]フィールドに接続URLを指定します。この操作は使用しているアプリケーションにかかわらず同じであり、必要な特定のURLおよびポート値については、補足説明「ポート値の取得」を参照してください。
- [Test Connection]ボタンを使用して、接続をテストします(図15を参照)。すべての操作が正しく行われていれば、データベースとのJDBC接続が確立されます。[Finish]ボタンをクリックします。
図16に示すように、[Connections]ナビゲータで、[Database]ノードへのこの接続に対してノードが追加されています。この接続は、JSPまたはサーブレット内のjdbc/SQLServerConnectionDSデータソースとしても有効です。JSP内のデータソースからの接続を取得するには、JSPアプリケーションのweb.xmlを追加します。
<resource-ref>
<res-ref-name>jdbc/SQLServerConnectionDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
次のコードで、JSPまたはサーブレット内の接続を取得できます。
InitialContext initialContext = new InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)
initialContext.lookup("java:comp/env/jdbc/SQLServerConnectionDS");
java.sql.Connection conn = ds.getConnection();
JBossとSQL Serverの連携を構成する
- JBoss 4.0が既にダウンロードされ、解凍されているのであれば、最初に行う操作は、SQL Server JDBCドライバのJARファイルをサーバのclasspathに追加することです。SQL Server 2000の場合は、「msbase.jar」「mssqlserver.jar」および「msutil.jar」を、「<JBoss>/server/default/lib」ディレクトリにコピーします。SQL Server 2005 Expressの場合は、「sqljdbc.jar」ファイルを「lib」ディレクトリにコピーします。<JBoss>は、JBossサーバのインストール先のディレクトリです。
- MS SQL Serverデータソースファイルの「<JBoss>docsexamplesjcamssql-ds.xml」を「<JBoss>serverdefaultdeploy」ディレクトリにコピーします。
- mssql-ds.xmlデータソースファイルの中で、
<driver-class/>要素内のJDBCドライバクラスに、「com.microsoft.jdbc.sqlserver.SQLServerDriver」(SQL Server 2000の場合)、および「com.microsoft.sqlserver.jdbc.SQLServerDriver」(SQL Server 2005 Expressの場合)を指定します。<li><connection-url/>要素内の接続URLを、補足説明「ポート値の取得」で指定されるURLを使って指定します。
- ユーザー名をsa、パスワードをSQL Serverと指定します。
<jndi-name/>フィールドに、データソースのJNDI名を指定します。
- <JBoss>serverdefaultconflogin-config.xml構成ファイルを修正して、次の<application-policy/>要素を追加します。
<application-policy name = "MSSQLDbRealm">
<authentication>
<login-module code
= "org.jboss.resource.security.ConfiguredIdentityLoginModule"
flag = "required">
<module-option name = "principal"></module-option>
<module-option name = "userName">sa</module-option>
<module-option name = "password"></module-option>
<module-option name ="managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=MSSQLDS
</module-option>
</login-module>
</authentication>
</application-policy>
これによって、JBossがSQL Serverと連携します。
EJBエンティティを開発する場合は、「<JBoss>serverdefaultconfstandardjbosscmp-jdbc.xml」構成ファイルも修正する必要があります。「standardjbosscmp-jdbc.xml」とSQL Serverデータベースの連携を構成するには、<datasource/>要素と <datasource-mapping/>要素を次に示すように変更します。
<jbosscmp-jdbc>
<defaults>
<datasource>java:/ MSSQLDS</datasource>
<datasource-mapping> MS SQLSERVER2000</datasource-mapping>
</defaults>
</jbosscmp-jdbc>
WebSphereとSQL Serverの連携を構成する
- インストールの後、JDBC接続はWebSphere管理コンソールで構成されるため、WebSphere Adminサーバと管理コンソールを開始する必要があります。
- 管理コンソール(「http://localhost:9060/ibm/console」)にアクセスします。ユーザーIDとしてwebsphereを指定し、[Log In]をクリックします。管理コンソールで、[Resources]→[JDBC Providers]ノードを選択します。サーバスコープとして[Server=server1]を選択し、[New]ボタンをクリックして、新しいJDBCプロバイダを構成します(図17を参照)。
- 図18に示すように、[Configuration]ダイアログで、[Database type]ボックスの一覧の[SQL Serve]を選択します。[Provider type]ボックスの一覧の[Websphere embedded ConnectJDBC driver for MS SQL Server]を選択します。次に、[Implementation type]ボックスの一覧の[Connection pool data source]を選択し、[Next]をクリックします。
- 図19に示すように、[Implementation class name]に「com.ibm.websphere.jdbcx.sqlserver.SQLServerDataSource」が指定されています。これは、SQL Server 2000とSQL Server 2005のデータソースクラスです。[Finish]をクリックします。
JDBCプロバイダが構成され、図20に示すように、これがJDBCプロバイダの表に追加されます。[Save]リンクで、設定をマスタ構成に保存します。
- 次に、SQL Serverを使用するようにJDBCデータソースを構成します。このためには、SQL Serverのログイン資格情報を指定するJ2EE Connection (J2C)認証データエントリが必要です。管理コンソールで、[Security]→[Secure administration, applications, and Infrastructure]ノードを選択します。[Authentication]→[JASS Configuration]→[J2C Authentication data]リンクを選択し(図21を参照)、[New]ボタンをクリックしてデータエントリを追加します。
- 次のページで、データエントリのエイリアスを指定し、SQL ServerデータベースにログインするためのユーザーID(sa)とパスワードを指定します。[Apply]ボタンをクリックします。[OK]ボタンをクリックしてエントリを作成し、[Save]リンクを忘れずにクリックします。
- JDBCプロバイダが作成されたので、これを使用できるようにするためには、WebSphereデータソースを作成する必要があります。[Resources]→[JDBC Providers]を選択し、上記で作成したJDBCプロバイダのリンクを選択します。[Additional Properties]→[Data Sources]リンクを選択し、図22に示すように、データソースの表内で[New]ボタンをクリックして、新しいデータソースを構成します。
- この後のウィンドウで、データソースのデータソース名とJNDI名を指定します。[Component-managed authentication alias]フィールドで、作成したJ2C認証データエントリを選択し、[Next]をクリックします。
- 最後に、[Create a data source]フレームで、[Database name]に「NA」と入力し、[Server name]に「localhost」と入力し、[Port number]に「1433」またはSQL Server 2005用のポート番号(補足説明「ポート値の取得」を参照)を入力し、[Next]をクリックして、データソースを追加します(図23を参照)。
- [Save]リンクで、データソース構成をマスタ構成に保存します。[Data sources]ページでデータソースリンクを選択します。データベース名を「NA」として指定したので、[Database Name]フィールドは空白のまま、[Apply]をクリックします(図24を参照)。
データソースをテストするには、図25に示すように、対応するチェックボックスをオンにして、[Test connection]ボタンをクリックします。
JDBC接続が正しく確立されている場合は、次のメッセージが表示されます。
Test connection for data source WebSphere embedded ConnectJDBC
for SQL Server DataSource on server server1
at node d207-6-39-2Node01 was successful.
WebLogicとSQL Serverの連携を構成する
- 構成ウィザードを使用してWebLogicサーバドメインを作成します。作成される既定のドメインはbase_domainです。
- 「C:BEAuser_projectsdomainsase_domainstartWebLogic」スクリプトをダブルクリックして、base_domainに対してWebLogic Admin Serverを起動します。
- URL「http://localhost:7001/console」を指定するか、Welcomeページの[Administration Console]リンクをクリックして、WebLogic Server Administration Consoleにアクセスします。ユーザー名を「weblogic」、パスワードを「weblogic」と指定して、Administration Consoleにログインします。
- JDBC接続プールを構成するには、[Services]→[JDBC]→[Data Sources]を選択します(図26を参照)。[Lock & Edit]ボタンをクリックして、データソースを追加します。
- [Data Sources]ページの[New]ボタンをクリックして、新しいデータソースを構成します(図27を参照)。
- 続くダイアログで、データソース名とJNDI名を指定します。[Database Type]ボックスの一覧の[MS SQL Server]を選択します(図28を参照)。データベースドライバの指定も要求されます。BEAは、WebLogicサーバと連携するように事前に構成されている独自のMS SQL Serverドライバを用意しているので、JDBCドライバのJARファイルをWebLogicサーバのclasspathに追加する必要はありません。しかし、MicrosoftのSQL ServerドライバのJARファイルを使用したい場合は、ここでそのファイルを選択します。[Next]ボタンをクリックします。
- ここで、[Transaction Options]ページが表示されます。グローバルトランザクションを使用するには、前のダイアログで、既定でグローバルトランザクションをサポートするXAドライバを選択します。グローバルトランザクションは、複数のデータベースにわたるトランザクションです。XAドライバ以外のドライバが選択されている場合は、[Supports Global Transactions]チェックボックスをオンにして、トランザクションプロトコルを選択することによって、グローバルトランザクションをサポートするようにデータソースを構成する必要があります。トランザクションに関する説明は、本稿の範囲を超えています。詳しくは「WebLogic Server JDBC documentation」を参照してください。[Next]ボタンをクリックします。
- [Connection Properties]ダイアログで、必要に応じてデータベース名を指定します。既定のデータベース名を使用する予定の場合は、[Database Name]フィールドに「NA」と入力します。[Host Name]には「localhost」と入力します(図29を参照)。補足説明「ポート値の取得」の説明に従って、ポートを指定します。ユーザー名はsaで、パスワードはデータベースへのログインに使用するパスワードです。[Next]ボタンをクリックします。
- [Test Database Connection]ページで、ドライバクラス名には「weblogic.jdbc.sqlserver.SQLServerDriver」が指定されます。URL、ポート値、ユーザー名/パスワードは、前のセクションと同じ値です。URLには、「jdbc:bea:sqlserver://localhost:1155」が指定されます。ただし、既定のデータベースを使用する場合は、「property databaseName=NA」を削除します。
[Test Configuration]ボタンをクリックしてJDBCデータソースをテストします。JDBC接続が正しく確立されている場合は、「Connection test succeeded」というメッセージが表示されます(図30を参照)。[Select Targets]ダイアログの[Next]をクリックし、[AdminServer]チェックボックスをオンにして(図31を参照)、[Finish]ボタンをクリックします。
SQL Serverのデータソースが作成され、図32に示すように、これが[Data Sources]ページに追加されます。[Activate Changes]ボタンをクリックして、データソース構成をアクティブ化します
ポート値の取得
SQL Server 2000
既定の接続URLは「jdbc:microsoft:sqlserver://localhost:1433」です。データベースの既定の名前を使用しない場合は、次の形式のURLを使用してください。
- jdbc:sqlserver://serverNameinstance:port;property=value[;property=value]
接続URLを指定する場合、jdbc:sqlserver://は必須です。serverNameは省略可能で、既定値はlocalhostです。instanceは省略可能で、SQL Server 2000の場合の既定値は1433です。databaseNameやusernameなどの接続URLプロパティは、name=valueの形式で指定します。
SQL Server 2005 Express
JDBCドライバのJARファイルは、「<Microsoft SQL Server 2005 JDBC Driver>/sqljdbc_1.0/enu/sqljdbc.jar」にあります。
既定のSQL Server 2005データベースの接続URLは、「jdbc:sqlserver://localhost:<port>」です。<port>の値は、SQL Server Configuration Managerで取得します。SQL Server 2005 SQLEXPRESSを再起動すると、ポート番号が変わります。他のデータベース名の接続URLは、次の形式です。
- jdbc:sqlserver://serverNameinstance:port;property=value[;property=value]
接続URLを指定する場合、jdbc:sqlserver://は必須です。serverNameは省略可能で、既定値はlocalhostです。instanceは省略可能で、指定を省略すると、既定のデータベースインスタンスが使用されます。port値は、SQL Server Configuration Managerで取得します。databaseNameやusernameなどの接続URLプロパティは、name=valueの形式で指定します。
操作の開始
ソースアプリケーションサーバを開く場合は、JBossアプリケーションサーバを使用します。JBossは、SQL Serverとの連携を最も簡単に構成することもできます。そうでなければ、自分の環境に最適なアプリケーションサーバを使用します。アプリケーションサーバとSQL Serverの連携を構成することで、SQL ServerバックエンドでJDBCコンポーネントを使用するJ2EEアプリケーションを開発できるようになります。
O’Reillyの技術レビュー担当者として『WebLogic: The Definitive Guide』を担当。NuBeanコンサルタント、Web開発者でもある。Sun認定資格(Java 1.4プログラマおよびWebコンポーネントディベロッパJ2EEバージョン)を取得。メールの宛先はdvohra09@yahoo.com。