廣告聯播

顯示具有 JNDI 標籤的文章。 顯示所有文章
顯示具有 JNDI 標籤的文章。 顯示所有文章

2009年5月10日 星期日

利用 Lambda Probe 來觀察 JNDI 的 DataSource Connection Pools

From: Polin Wei

在寫 Java 程式時, 利用 JNDI 來連接資料庫, 是一個非常好的方法, JNDI 的設定, 請參考: [JNDI] Java + Tomcat + MySQL 的連結設定 但是新手程式設計師常常建立了 DataSource 的 Connection , 在取完資料庫後, 卻又常常忘了關閉這一條 connection . 導致資料庫連接池 ( DataSource Connection Pools ) 不夠使用, 而整個 Application Server 當住了.

這有一個不錯的工具 Lambda Probe , 可以讓程式設計師來觀察程式撰寫的過程中, 是否有 Connection 忘了關閉的情況. 而 Lambda Probe 目前有支援 Tomcat & JBoss.

環境:
Tomcat : 6.0.14
Lambda Probe: LambdaProbe 1.7b, BINARIES (解開的檔案放在 D:\probe)

Step 01:
Lambda Probe 下載 LambdaProbe 1.7b, BINARIES , 並解開放在 D:\probe

Step 02:
修改 Tomcat 的 server.xml , tomcat-users.xml 分別如下:


server.xml
<Context docBase="D:/probe" path="/probe" privileged="true"/>

tomcat-users.xml
<role rolename="admin"/>
<user username="admin" password="1234" roles="admin,manager"/>


Step 03:
重啟 Tomcat

Step 04:
進入: http://localhost:8080/probe
輸入admin,1234



Step 05:
點選 Data Sources 的頁次, 就可以查看 DataSource Connection Pools 的狀況



參數說明:
在 Data Sources 頁次中的 M, E , B 分別為
M: Total max. 連接池最大的連接數目
E: Total estab. 現行已建立過的連接(connections) 數目
B: Total busy 目前的連接數

2008年11月14日 星期五

[JNDI] Java + Tomcat + MySQL 的連結設定

From: Polin Wei

環境:
Web Server: apache-tomcat-6.0.14
DB Version: MySQL 5.0.45
DB : test
Table: users(username varchar(30),password varchar(30))
JDBC Driver: mysql-connector-java-5.1.7-bin.jar
JAVA: jdk1.6.0_07


在Web步驟如下:
Step 1: Copy MySQL Connector/J 的 JAR 檔
mysql-connector-java-5.1.7-bin.jar 複製到 $TOMCAT_HOME/lib

Step 2:在 $TOMCAT_HOME/conf/server.xml 的 <Context></Context> 中加入下列的參數
<Resource name="jdbc/MySQLDS01" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" username="username" password="password" maxActive="20" maxIdle="10" maxWait="-1" />




Step 3: 撰寫一個網頁 MySQLConnTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="com.mysql.*,java.util.*,javax.naming.*,java.sql.*,javax.sql.*" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%    
    Context ctx = new InitialContext();     
    String strLookup = "java:comp/env/jdbc/MySQLDS01";
    DataSource ds =(DataSource) ctx.lookup(strLookup);
    Connection con = ds.getConnection();
    Statement smt = con.createStatement();
    String sql = "";
    ResultSet rs = null;   
     
    sql = "SELECT * FROM users";
    rs = smt.executeQuery(sql);
    while(rs.next())
    {
         out.println(rs.getString(1));
         out.println(rs.getString(2));        
    }


%>


</body>
</html>




這樣就可以利用 JNDI 的方式連到 MySQL , 並在網頁中顯示資料庫test中表格users裡的資料.

若是純以 Java Code 來執行連結MySQL , 則程式碼如下:

package com.demos;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class MySQLConnTest {


 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Connection conn = null;
  String Server_IP = "127.0.0.1";


  try {
   Class.forName("com.mysql.jdbc.Driver");
   String sql = "";
   conn = DriverManager.getConnection("jdbc:mysql://" + Server_IP
     + ":3306/test", "username", "password");
   sql = "select * from users";
   // Statement stmt =
   // conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
   // ResultSet.CONCUR_READ_ONLY);
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery(sql);
   if (rs.next()) {
    System.out.println(rs.getString("userName"));
    System.out.println(rs.getString("password"));
   } else {
    System.out.print("Cound not find data in test of MySQL");
   }
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
   try {
    conn.rollback();
   } catch (SQLException e1) {
    e1.printStackTrace();
   }
  } finally {
   try {
    if (conn != null && !conn.isClosed()) {
     conn.close();
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }


 }


}



WordPress 架站必備外掛