Javaを利用してSQL Azureへ接続するためのTIPS
今回はJavaを利用してSQL Azureへ接続するためのTIPSを紹介する。「JDBC直接続」と「Hibernateを利用したO/Rマッピング」を行ったので、「Windows AzureはJavaでもいけるぜ」という言葉を疑問視している方は是非一読して頂きたい。
今回取り扱うSQL Azureでは、開発者にクラウド上でもRDBを利用できる環境を提供している。同機能とWorkerロール*1を組み合わせれば、Windows Azure上でJavaで作られたCRUDなWEBアプリケーションを動作させる事も可能だ。
実際にTomcatやJettyを稼働させたサンプルがMSDN Code Gallaryに公開されているので、こちらを確認してもよいだろう。
- Tomcat Sample > http://code.msdn.microsoft.com/azuretomcat
- Jetty Sample > http://code.msdn.microsoft.com/winazurejetty
サンプルアプリケーションについて
今回作成したサンプルは以下で公開している。実際に稼働確認をしてみると、より理解が深まると思う。
修正が必要なファイルは以下の二つである(はず。。。)
SQL Azure に接続するための環境準備
- SQL Azure にテーブル登録&レコード登録
SQL Server Management Studioを利用して、単純な「Comments」テーブルをSQL Azureに作成した。以下の画像から、「Comments」テーブルが作成され、2つのレコードが登録されていることが確認できる。
- SQL Server の JDBCドライバをセットアップ
以下より、SQL Server の JDBCドライバを取得し、インストールを行う。
Microsoft SQL Server JDBC Driver 2.0
JDBCでSQL Azureに直接続するためのサンプルコード
以下のコードを利用してSQL Azureに接続を行った。
- テストコード
@Test public void SQLAzureにjdbc直接続01() { logger.info("始まり"); Connection conn = null; // コネクションオブジェクト Statement stmt = null; // ステートメントオブジェクト ResultSet rs = null; // 結果セットオブジェクト // 接続文字列作成 StringBuilder sb = new StringBuilder(); sb.append("jdbc:sqlserver://<★サーバ名★>.database.windows.net:1433;"); // SQL // Azure sb.append("databaseName=<★データベース名★>;"); // データベース名 sb.append("ssl=require"); // 認証 try { // SQL Server ドライバ登録 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // コネクション作成 conn = DriverManager.getConnection(sb.toString(), "<★アカウント名★>@<★サーバ名★>", "<★パスワード★>"); // SQL 文字列 String strSQL = "SELECT * from Comments"; // ステートメント作成・SQL実行 stmt = conn.createStatement(); rs = stmt.executeQuery(strSQL); // データを標準出力 while (rs.next()) { System.out.printf("ID: %s, Name: %s, Body: %s\n", rs .getString("ID"), rs.getString("Name"), rs .getString("Body")); } } catch (Exception ex) { ex.printStackTrace(); } finally { if (rs != null) { // 結果セットのクローズ try { rs.close(); } catch (Exception ex) { ex.printStackTrace(); } } if (stmt != null) { // ステートメントのクローズ try { stmt.close(); } catch (Exception ex) { ex.printStackTrace(); } } if (conn != null) { // コネクションのクローズ try { conn.close(); } catch (Exception ex) { ex.printStackTrace(); } } } logger.info("終わり"); }
Hibernateを利用してSQL Azureに接続するためのサンプルコード
persistence.xmlとテストメソッドのみソースコードを記述する。エンティティのコードは従来通りであるため、割愛する。
- persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="em" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.connection.url" value="jdbc:sqlserver://<★サーバ名★>.database.windows.net:1433;databaseName=<★データベース名★>;ssl=require" /> <property name="hibernate.connection.username" value="<★アカウント名★>@<★サーバ名★>" /> <property name="hibernate.connection.password" value="<★パスワード★>" /> </properties> </persistence-unit> </persistence>
- テストコード
@Test public void SQLAzureでHibernate01() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException { logger.info("始まり"); EntityManagerFactory emf = Persistence.createEntityManagerFactory("em"); EntityManager em = emf.createEntityManager(); Comment c = em.find(Comment.class, 1); System.out.println(c); logger.info("終わり"); }
*1:リリースされればVMロールの方が良いか?