Archive for December, 2010

[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

[Oracle] ความแตกต่างระหว่าง TRUNCATE และ DELETE

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

DELETE FROM XX

ตอนข้อมูลไม่เยอะก็ทำงานได้ดีไม่มีปัญหาอะไร แต่พอข้อมูลเยอะขึ้นเรื่อย ก็จะช้ามากขึ้น เนื่องจากข้อมูลมี Index, PK, FK Constraints อยู่พอสมควร ก็เลยเปลี่ยนมาใช้ คำสั่ง

TRUNCATE TABLE XX 

แทนซึ่งก็ช่วยได้มาก แต่ TRUNCATE เองก็มีข้อจำกัดเหมือนกัน จากการหาข้อมูลก็เจอข้อแตกต่างดังนี้
0. TRUNCATE เป็นคำสั่งใน กลุ่ม DDL (Data Definition Language)
1. TRUNCATE ทำงานได้เร็วกว่า DELETE
2. TRUNCATE ไม่สามารถทำการ Rollback
3. ไม่สามารถระบุ เงื่อนไข WHERE ใน TRUNCATE
4. Triggers จะไม่ทำงานกับคำสั่ง TRUNCATE (กรณีมีการใช้ Triggers ในการตรวจตราการเปลี่ยนแปลงของข้อมูล)
สาเหตุหลัก ประมาณ 5 ข้อที่ว่านี่ละครับที่ทำให้ TRUNCATE ทำงานได้เร็วกว่า DELETE

หมายเหตุ : คำสั่งในกลุ่ม DDL, DCL (Data Control Language) ไม่สามารถ Rollback ได้
ข้อมูลอ้างอิง :
Difference between TRUNCATE, DELETE and DROP commands
Oracle Truncate Table

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 ซะเลยสิ้นเรื่อง ก็ทำดังรูป

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