การใช้งาน Web Service JAX-WS 2.1.x ใน GlassFish V1.x (Sun Appication Server 8.2)

มีปัญหาเกี่ยวกับการใช้งาน Web Service client JAX-WS style ใน Sun Appication Server 8.2 ซึ่งไม่สามารถรันได้เกิด Error ดังนี้

java.lang.NoClassDefFoundError: javax/xml/ws/BindingProvider
    at java.lang.ClassLoade​r.defineClass1(Nativ​e Method)
    at java.lang.ClassLoade​r.defineClass(ClassL​oader.java:620)
    at java.security.Secure​ClassLoader.defineCl​ass(SecureClassLoade​r.java:124)
    at org.apache.catalina.​loader.WebappClassLo​ader.findClassIntern​al(WebappClassLoader​.java:1819)
    at org.apache.catalina.​loader.WebappClassLo​ader.findClass(Webap​pClassLoader.java:87​2)
    at org.apache.catalina.​loader.WebappClassLo​ader.loadClass(Webap​pClassLoader.java:13​27)
    at org.apache.catalina.​loader.WebappClassLo​ader.loadClass(Webap​pClassLoader.java:12​06)
    at java.lang.ClassLoade​r.loadClassInternal(​ClassLoader.java:319​)

เนื่องจาก Sun Appication Server 8.2 ที่ใช้งานอยู่ใช้ JDK 1.5 (5.0) ทำให้ไม่มี package javax/xml/ws/ ซึ่งตอนพัฒนาโปรแกรมนั้นในเครื่องสำหรับพัฒนาโปรแกรมใช้ JDK 1.6 (6.0) และใช้ GlassFish V2.1 (Sun Appication Server 9.1) ทำให้ไม่เจอปัญหาดังกล่าว จาการค้นหาข้อมูลการแก้ไขให้สามารถใช้งานได้ ให้ทำดังนี้
1. .ดาวน์โหลด JAX-WS 2.1 จากเว็บ http://jax-ws.java.net แล้วคัดลอก Library

FastInfoset.jar
activation.jar
http.jar
jaxb-api.jar
jaxb-impl.jar
jaxws-api.jar
jaxws-rt.jar
jsr173_api.jar
jsr181-api.jar
jsr250-api.jar
mimepull.jar
resolver.jar
saaj-api.jar
saaj-impl.jar
sjsxp.jar
stax-ex.jar
streambuffer.jar

ไปวางใน

<GlassFish Home>\domains\<domain name>\lib\ext

เนื่องจากไม่อยากให้กระทบกับ domain อื่นๆเลยคัดลอกมาวางใน lib ของ domain นั้นๆ โดย .jar ที่ต้องใช้มีดังนี้ JAX-WS 2.1 Jar dependency
2. จากนั้นทำการ stop/start Server ใหม่ ก็สามารถใช้ได้แล้ว

แหล่งข้อมูล
JAX-WS RI 2.1.3 Release Notes

ปัญหาการใช้ Single quote (‘) ใน SQLite

มีงานที่ต้องใช้ PHP กับ SQLite จากเดิม code ที่เขียนการ intsert ใน Database จะไม่มีปัญหากับการ Insert single quote เพราะใช้กับฐานข้อมูล MySQL คำสั่ง insert เป็นดังนี้

INSERT INTO TB(ID, NAME) VALUES(1, 'Hi I\'m Supot');

สามารถ Insert ข้อมูลได้ปกติไม่มีปัญหาอะไร และ ข้อมูลที่ลงไปก็ถูกต้อง คือ ลง Hi I’m Supot แต่พอเปลี่ยนฐานข้อมูลจาก MySQL ไปเป็น SQLite คำสั่้ง insert ข้างต้นไม่สามารถใช้ได้ เนื่องจากคำสั่งข้อมูลได้มาจากการใช้ function addslashes จากการค้นหาพบงิธีการแก้ไขจากที่นี่ SQL Quoting And PHPเปลี่ยนไปใช้ function sqlite_escape_string

$name = sqlite_escape_string(DATA_XX)

แหล่งข้อมูล
SQL Quoting And PHP
addslashes
sqlite_escape_string

Most important keyboard shortcuts in Eclipse

ห่างหายไปช่วงหนึ่งเนื่องจากงานสุมหัวมากไปหน่อย มีโอกาสได้กลับไปใช้ Eclipse ทำมาหากินอีกครั้งหลังจากที่ใช้งาน Netbeans มาพักใหญ่ เลยแวะไปเจอ Keyboard shortcuts ที่สำคัญและใช้งานบ่อยชนิดที่ ต้องจดบันทึกไว้ อ่านได้จาก

Eclipse Shortcuts for Increased Productivity

[PHP]Unable to load dynamic library “php_mcrypt.dll”

มีโอกาสได้ใช้งาน module mcrypt ใน PHP พอเปิดใช้งานแล้วลอง start Apache ดูแต่ก็ยังใช้ไม่ได้ เปิดดู log เจอ error ดังนี้

PHP Warning:  PHP Startup: Unable to load dynamic library 'D:\\AppServer\\AppServ\\php5\\ext\\php_mcrypt.dll' - The specified module could not be found.\r\n in Unknown on line 0

วิธีการแก้ไขปัญหา ให้ copy libmcrypt.dll ไปวางใน folder bin ของ Apache จากนั้นทำการ restart Apache ก็สามารถใช้งาน mcrypt ได้แล้ว

Format วันที่ใน Oracle ให้แสดงปี พ.ศ

ปกติแล้วเวลาต้องการแสดงวันที่ในรูปแบบ พ.ศ ผมจะนำมาจัด ูปแบบหลังจาก ดquery ข้อมูลมาจากฐานข้อมูลแล้ว เพราะเวลาเปลี่ยนฐานข้อมูลจะได้ไม่ลำบากอะไรในการแก้ไข แต่พอมาทำงานกับฐานข้อมูล Oracle เพียงอย่างเดียว และ code ก็ไม่ได้มีอะไรมาก เพราะ query ข้อมูลทุกอย่างออกมาเป็น String หมดเลยเลยต้องมาจัด format ตั้งแต่ใน query สืบเสาะหาจนได้วิํธีการมาดังนี้

SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY', 'NLS_CALENDAR=''THAI BUDDHA'' NLS_DATE_LANGUAGE=THAI') FROM DUAL

ก็จะได้ข้อมูลประมาณนี้

17/08/2554

และทำให้ทราบเพิ่มเติมว่าหาก ต้องการจัดเรียงข้อมูลตามอักษรภาษาไทยก็ใช้แบบนี้ได้เลย

ORDER BY NLSSORT(COL_NAME, 'NLS_SORT=THAI_DICTIONARY')

แหล่งข้อมูล
3 Setting Up a Globalization Support Environment