Archive for the ‘ Java Technology ’ Category

Eclipse : การเปลี่ยนข้อความเป็นตัวอักษรตัวเล็ก และ ตัวใหญ่

ติดนิสัยเรื่องการเปลี่ยนข้อความหรือตัวอักษรให้เป็นตัวใหญ่ และ ตัวเล็กจากการใช้งาน Toad for Oracle และ Notepad++ พอมาใช้ Eclipse ซึ่งก็อยากใช้เหมือนตอนเขียน PL/SQL และเขียน code ใน Notepad++ บ้างเลยไปหาดู shortcut มาได้ดังนี้

Ctrl+Shift+Y สำหรับ เปลี่ยน เป็นตัวเล็ก
Ctrl+Shift+X สำหรับ เปลี่ยน เป็นตัวใหญ่

หมายเหตุ : ใช้ Eclipse ทำมาหากินมานานไม่ได้ใช้เลย

[Java]Setup DB2 9.x Connection Pool on Weblogic 8.1

มีเรื่องราวให้ได้เปลี่ยนจาก Oracle 9i มาใช้ IBM DB2 9.7 ปัญหาที่เจอคือใน Weblogic 8.1 ไม่มี driver สำหรับ DB2 9.7 ในขั้นตอนการสร้าง Connection Pool
1. ให้ทำการ Set classpath ให้กับ db2jcc.jar และ db2jcc_license_cu.jar (อยู่ใน Path ที่ติดตั้ง DB2\java) โดยเปิด ไฟล์

C:\bea\user_projects\domains\<domain-name>\startWebLogic.cmd

เพิ่มบรรทัดดังนี้เข้าไปหลังบรรทัด set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS%

set CLASSPATH=%CLASSPATH%;<db2-path>\java\db2jcc.jar;<db2-path>\java\db2jcc_license_cu.jar

2. จากนั้นทำการ start server และเข้าไปยัง console ของ Weblogic ตอนสร้าง Connection Pool ให้เลือก DB2 -> Others ดังรูป

3. ทำการกรอกข้อมูล Conection ดังรูป

โดย

Driver Classname :ให้ใช้ com.ibm.db2.jcc.DB2Driver
URL :ใช้รูปแบบ jdbc:db2://<server>:<port>/<database>
	- <server> ชื่อเครื่อง server หรือ IP Address
	- <port> เป็น port (ค่า default คือ 50000)
	- <database> ชื่อฐานข้อมูล

และกรอก User/Password
4. คลิกปุ่ม Test Driver Configuration ถ้าไม่มีปัญหาอะไร จะได้ดังรูป

5. คลิก Create and deploy ก็สามารถใช้งานได้แล้วครับ
แหล่งอ้างอิง
Configure DB2 UDB with third-party application servers

SpringFramework java.lang.OutOfMemoryError: Java heap space on Tomcat 6

เนื่องจากมีโอกาสในการนำ Spring Framework ไปรันใน Web Service Tomcate 6.0.x ซึ่งใช้งานผ่านจาก Eclipse ตอนสั่ง Start Server (Deploy) จะใช้เวลานานมาก และ ขั้นตอนในการ Initialized bean จะเกิด ข้อผิดพลาดดังนี้

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
...... Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: Java heap space
	at org.springframework.beans.factory.support. AbstractAutowireCapableBeanFactory. initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
......
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.OutOfMemoryError: Java heap space
	at java.util.HashMap.addEntry(HashMap.java:753)
	at java.util.HashMap.put(HashMap.java:385)
	at java.util.HashMap.putAll(HashMap.java:524)
......
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045

จากความรู้ที่ผ่านๆ มาก็ต้องขยายขนาดของ heap space กันหน่อย อันดับแรกเลยไปแก้ที่ไฟล์

Tomcat.x.x\bin\catalina.bat

โดยเพิ่มบรรทัดต่อไปนี้บนสุดของไฟล์ (หลัง comment) ถ้าเป็น Linux , UNIX ก็ ใช้ catalina.sh

set JAVA_OPTS = "-server -Xms512m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"

และก็คิดว่าน่าจะทำงานได้ปกติไม่มีปัญหาอะไร แต่พอลอง start server ใหม่ ผลที่ตามมาคือ ไม่แตกต่างจากเดิมเลยครับ ทำเอา งง ไปสักพัก กำหนดอะไรผิดหรือเปล่าเพิ่งมาคิดได้ว่า เนื่องจากทำการ Start Server จาก Eclipse ดังนั้นค่าที่กำหนดใน catalina.bat อาจไม่ได้ช่วยอะไร หรือ ไม่มีผล (รวมทั้ง กำหนดผิดเองหรือเปล่า แต่ที่ผ่านๆมาได้ปกติ ถ้า Start Server โดยไม่ผ่าน Eclipse) พอคิดได้แบบนั้นก็ เอาละ ใส่เข้าไปใน JVM ตอน start ซะเลยสิ้นเรื่อง ก็ทำดังรูป

สามารถทำงานได้ปกติ เป็นอันจบปัญหาเบื้องต้นไป ซึ่งผมเองก็ไม่แน่ใจว่าเป็นทางแก้ไขที่ดีมากน้อยแค่ไหน เพราะงานมันเร่งให้แก้ไขแบบนี้ไปก่อน เดียวพอมีเวลาเหลือแล้วจะมาลองหาวิธีการอื่นๆ ดู

[Java] ปัญหา Calendar ไม่แสดง ค.ศ ใน Weblogic Workshop 8.1

ปัญหาเล็กๆน้อยๆ แต่ทำเสียเวลาไปเกือบ 1 ชม.เต็มๆ ปัญหาก็เกิดจากการ query ข้อมูลจากฐานข้อมูลโดยใช้ HQL (Hibernate Query Language) และ เงื่อนไขดันใช้ Calendar ในการดึงข้อมูล ดังนี้

Calendar cal = Calendar.getInstance(Locale.US);
String hql = "from Order or where or.orderDate = ?";
Object values[] = new Object[] { cal};
Type type[] = new Type[] {TypeFactory.basic(Calendar.class.getName()) };
List orders = HibernateUtil.findBy(hql, values, type);

ทำอย่างไงก็ไม่ไ่ด้ข้อมูล ก็ งง อยู่พักหนึ่งว่าทำไมไม่ได้ ทั้งๆที่มีข้อมูล และ code บนเครื่อง production ก็ทำงานได้ปกติ พอเอามารันในเครื่องกับไม่ไ่ด้ ก็เลยลอง debug ดู เจอปัญหาเลย

มันดันเป็นปี พ.ศ ไปซะงั้น ลองกำหนดค่าต่างๆแล้วก็ไม่สามารถ format เป็น ค.ศ ได้ สุดท้ายต้องไปแก้ไข Reginal and Language Options ใน Control Pannel ดังรูป และ Restart มาก็เป็นการแก้ไขปัญหาเรียบร้อย

หมายเหตุ : เป็นการแก้ไขที่ยอมรับไม่ค่อยได้เท่าไร เพราะ ผมลองใน Eclipse, Netbeans ก็ใช้ได้ไม่มีปัญหาอะไร ยกเว้น Weblogic Workshop ต้องไปกำหนดตรงไหนกันแน่ ใครทราบช่วยแนะนำด้วยครับ

[Java] JDBC Version & Database Version

มีงานเล็กน้อย จากเจ้านายให้หาว่า JDBC Driver ที่ใช้กันอยู่นั้น Version อะไร เนื่องจาก Consult ที่มาทำงานด้วยต้องนำไปทดลองกับงานที่เค้าต้องใช้ วิธีการก็ตามนี้เลยครับ ใช้ความสามารถของ DatabaseMetaData

/**
 * File Name : JDBCVersion.java
 * Created Date : Sep 22, 2010 : 1:16:57 PM
 */
package com.fun4station.example;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCVersion {

	public static void main(String[] args) throws SQLException {
		Connection conn = GetConnection();

		DatabaseMetaData dbMeta = conn.getMetaData();
		System.out.println("DriverVersion : "+ dbMeta.getDriverVersion());
		System.out.println("DatabaseMajorVersion : "+ dbMeta.getDatabaseMajorVersion());
		System.out.println("JDBCMajorVersion : "+ dbMeta.getJDBCMajorVersion());
	}
	
	private static Connection GetConnection(){
		Connection conn = null;
		try {
			String url = "jdbc:oracle:thin:@localhost:1521:JDEV";
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, "user", "pass");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return conn;
	}
}

นอกจาก JDBC Version และ Databse version แล้วยังบอกข้อมูลอื่นๆอีกหลายอย่าง
แหล่งข้อมูล
Interface DatabaseMetaData