ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2011年9月8日木曜日

JBoss+PostgreSQLでコネクションプーリング

JBossとPostgreSQLでコネクションプーリングしてみました。
Javaです。

まずは、JBossのほうに設定。deployディレクトリに設定ファイルであるpostgres-ds.xmlを入れます。
このdsファイルは、docファイルに各種データベース用のサンプルがあるので、例えばMySQLとつなぎたいとかOracleとつなぎたいという場合でも簡単にできます。

postgres-ds.xml

<datasources>
  <local-tx-datasource>
    <jndi-name>PostgresDS</jndi-name>
    <connection-url>jdbc:postgresql://localhost:5454/test</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <user-name>postgres</user-name>
    <password>postgres</password>
    <metadata>
         <type-mapping>PostgreSQL 7.2</type-mapping>
      </metadata>
  </local-tx-datasource>
</datasources>


ではではJavaで実装。
ちょっとクラス分けしてみました。
まずはコネクションを取得するためのクラス。

ConnectionManager.java

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnectionManager {
 /**
  * コネクションを取得するメソッド
  * @return Connection
  * @throws SQLException
  * @throws NamingException
  */
 public Connection getConnection() throws SQLException, NamingException {
  InitialContext icx = new InitialContext();
  //postgres-ds.xmlに書いたJNDI名を書く。
  //JBossを起動したときにコンソールに表示されるので、それを書くと尚確実。
  DataSource ds = (DataSource) icx.lookup("java:PostgresDS");
  Connection conn = ds.getConnection();
  return conn;
 }

}


こちらはちゃんと実行できるかどうかのテスト用Servlet。

ConnectionGetSample.java

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ConnectionGetSample extends HttpServlet {

 private static final long serialVersionUID = 1L;

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  // 準備
  ConnectionManager cm = new ConnectionManager();
  Connection conn = null;
  PreparedStatement ps = null;
  ResultSet rs = null;

  // SQL文(ここではテストでpostgresユーザーを出すSQLにしてみる)
  String sql = "select * from pg_user";

  try {
   // コネクション取得。
   // ConnectionManagerクラスでthrowしてるExceptionを
   // こっちでcatchする。
   conn = cm.getConnection();

   // SQL実行
   ps = conn.prepareStatement(sql);
   rs = ps.executeQuery();

   // 結果取得→出力
   while (rs.next()) {
    System.out.println(rs.getString(1));
   }

  } catch (SQLException e) {
   e.printStackTrace();
  } catch (NamingException e) {
   e.printStackTrace();
  } finally {
   // クローズ処理
   if (rs != null) {
    try {
     rs.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   if (ps != null) {
    try {
     ps.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   if (conn != null) {
    try {
     conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }

 }

}




で、できました。

2011年6月25日土曜日

JFreeChartによるグラフ描画

JFreeChartを使うと、javaで割と簡単にグラフを作成することができる。
グラフの種類も様々で、円グラフや棒グラフ、折れ線グラフなど基本どころはもちろん、3DグラフなどExcelでできることはだいたいできそう(たぶん)。
例えば、DBと接続してればそのデータをすぐに可視化できたりする。

まずは、ここからダウンロードしてjarファイルを読み込みます。
ちなみにJFreeChartのwebページはこちら。このページにもサンプルがあるのでおしゃれです。


今回はサンプルということで書いてみました(なので、DBは使わず)。

まずはデータ準備。本の売り上げを表すグラフをつくろうかなということで、Bookクラスと売り上げを管理するクラスをつくります。


public class Book {
 
 /** 本のタイトル */
 private String title;
 /** 本の売れた総数 */
 private int amount;
 /** 月*/
 private int month;
 
 public Book(String t,int a, int m){
  this.title=t;
  this.amount=a;
  this.month=m;
 }
 
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public int getAmount() {
  return amount;
 }
 public void setAmount(int amount) {
  this.amount = amount;
 }
 public int getMonth() {
  return month;
 }
 public void setMonth(int month) {
  this.month = month;
 }

}

import java.util.ArrayList;
import java.util.List;

public class AmountManager {
 private List list;

 /**
  * 売り上げ情報(1月から4月までとする)をリストにいれる。
  */
 public AmountManager() {
  List books = new ArrayList();
  Book b1 = new Book("もしド○", 30, 1);
  Book b2 = new Book("もしド○", 10, 2);
  Book b3 = new Book("もしド○", 40, 3);
  Book b4 = new Book("もしド○", 100, 4);
  Book b5 = new Book("△△コナン", 60, 1);
  Book b6 = new Book("△△コナン", 90, 2);
  Book b7 = new Book("△△コナン", 10, 3);
  Book b8 = new Book("△△コナン", 40, 4);
  books.add(b1);
  books.add(b2);
  books.add(b3);
  books.add(b4);
  books.add(b5);
  books.add(b6);
  books.add(b7);
  books.add(b8);
  this.list = books;
 } 
 
 /**
  * リストを返す
  */
 public List showAll(){
  return this.list;
 }
}

以下はグラフを書くためのクラスです。ウェブで使えるようにしたのでサーブレットになっています。

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;


public class ChartSample extends HttpServlet{
 @Override
 protected void doGet
  (HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {

  // グラフ生成用の元データを用意
 //(データベースとかでひろってきた場合もリストでもってくれば良いかと)
  AmountManager amountManager = new AmountManager();
  List list=amountManager.showAll();

     // グラフの基となるデータセットを用意
  DefaultCategoryDataset data=new DefaultCategoryDataset();

     // データセットに項目名と値のを順にセット
  for (Book book : list) {
   //addValueの引き数は「縦軸の値, 項目, 横軸の値」の順番
   //ただし、第2引数と第3引数は文字列なので変換が必要
   String xValue=Integer.toString(book.getMonth());
   data.addValue(book.getAmount(), book.getTitle(), xValue);
  }
  
     //グラフを生成
     //第1引数:グラフのタイトル
     //第2引数:横軸ラベル
     //第3引数:縦軸ラベル
     //第4引数:dataset()でつくったオブジェクト
     //第5引数:値の向き
     //第6引数:凡例を表示かどうか
     //第7引数:オンマウスにした際に情報を表示を作成するか
     //第8引数:URLを作成するかどうか
     JFreeChart objCht=ChartFactory.createLineChart
    ("カテゴリーA内商品別 月次売上","月","万円",
    data, PlotOrientation.VERTICAL,
                true,false,false);

      //バイナリ出力ストリームにJPEG形式で画像を出力600×400ピクセル)
     resp.setContentType("image/jpeg"); 
     ServletOutputStream objSos=resp.getOutputStream();
     ChartUtilities.writeChartAsJPEG(objSos,objCht,600,400);      
 }
}



#なんかソースのところに</book>みたいなのが表示されるの何でしょう。。。そんなの書いてないのに、、、(java書くときは抜いてください)



このサーブレットを実行すると、結果が出ます。




割と簡単だし、サンプルみるといろんなグラフが書けそうです。