Scala+DBMS+Web スカラ座の夜

2011年12月27日

Heroku Embedded Tomcat + Seedo DB framework(Java) + MySQL

Filed under: Scala — admin @ 2:16 AM

HEROKU JAVA + MySQL

HEROKUとSeedo DB フレームワーク(Java)によるMySQLへの対応は、env.propertiesファイルを以下のように書き換えます。
ZZZはIPアドレスを書きます。

driver = com.mysql.jdbc.Driver
jdbc = jdbc:mysql://ZZZ.ZZZ.ZZZ.ZZZ:3306/seedo?useUnicode=true&characterEncoding=UTF-8
user = scott
password = tiger

さきのOracleDB同様にHEROKUからインターネットを経由して、MySQLに直接JDBCによってアクセスします。
env.propertiesファイルのDB接続定義を書き換えるだけでOKです。

pom.xmlファイルには以下のように、MySQLのJDBCドライバ用Jarファイルをダウンロードできるようにdependencyタグを追加します。

    
      oracle
      mysql_connectory_java
      5.1.17
    

データベースは、クラウドではなく自分か管理しているDBサーバーを使うというシステム構成です。セキュリティ上は好ましくはないです。MySQLはアクセスするIPアドレスを特定できるので最低でもこの設定は必要でしょう。
これらのコードは実験的なものです。

Servlet 3.0

Servletは、TOMCAT7がサポートしている
Servlet 3.0の主要なテーマの1つであるEoDです。
Servlet 3.0では、EoDとして「Annotation based configuration」を新しく定義しました。アノテーションを利用することでServletの開発が簡単になります。

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import seedo.*;
import seedo.database.*;

@WebServlet(
	name = "DbServlet", 
	urlPatterns = {"/db"}
)
public class DbServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
//		ServletOutputStream out = resp.getOutputStream();
	    PrintWriter out = resp.getWriter();
    	resp.setContentType("text/html; charset=Shift_JIS");

		out.println("<html><body>");
        out.println("hello heroku db");
		db(out);
		out.println("</body></html>");
		out.flush();
		out.close();
    }
	private void db(PrintWriter out) {
		SqlPlus sqlplus = null;
		try {
			sqlplus = new SqlPlus();
			List<Object []> result1 = sqlplus.select("*").from("EMP").orderBy("ename").executeQuery();
			out.println("<TABLE border='1'>");
			for(int i = 0;i < result1.size();i++){
				Object [] record = result1.get(i);
				out.println("<TR><TH>No."+ i + "</TH>");
				for(int j = 0;j < record.length;j++){
					out.println("<TD>" + (record[j] != null?record[j].toString():"") + "</TD>");
				}
				out.println("</TR>");
			}
			out.println("</TABLE>");
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			sqlplus.close();
		}
	} 
}

Servlet2.5では、次のように作成したサーブレットをweb.xmlにマッピングしなければなりませんでした。


  DbServlet
  servlet.DbServlet

 

  DbServlet
  /db

「Annotation based configuration」を利用すると、「@WebServlet」というアノテーションを付加するだけでOKです。

HEROKUのGet Startingにある、HelloServlet の@WebServletコード部分を少しだけ変更してみました。

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
        name = "HelloServlet", 
        urlPatterns = {"/hello"}
    )
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        ServletOutputStream out = resp.getOutputStream();
        out.write("hello heroku".getBytes());
        out.flush();
        out.close();
    }
}

Test
HEROKUにアップロードする前にローカルPCの上で、

target\bin\webapp.batファイルを実行して、ブラウザから以下の2つのURLをアクセスすることができます。

DbServlet は、以下のURLです。

http://127.0.0.1:8080/db

HelloServlet は、以下のURLです。

http://127.0.0.1:8080/hello

Comments

comments

Powered by Facebook Comments

コメントはまだありません

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress