วันพฤหัสบดีที่ 29 กันยายน พ.ศ. 2554

Hibernate config auto load sql script

     โดยปกติ Hibernate สามารถจะโหลด sql script เข้าไปได้ ถ้าเราสร้างไฟล์ชื่อ import.sql น่ะครับ แล้วกำหนด hibernate properties
hibernate.hbm2ddl.auto ให้มีค่า create หรือ create-drop แล้ว Hibernate จะโหลดไฟล์นี้ขึ้นมาให้อัตโนมัติ (ไฟล์จะไปวางไว้ที่ classpath เช่น src/main/resources)
แต่เราจะไม่เห็น log ว่าโหลด sql script ทำสำเร็จหรือไม่สำเร็จโดย
1. ต้องไปเพิ่ม Log4j ของ package org.hibernate.tool.hbm2ddl
2. Hibernate จะใช้ slf4j มาเพราะฉะนั้นเราต้องเอา Jar ของ slf4j มาด้วย ไม่อย่างนั้นพอเวลารันไปก็ไม่เห็นอยู่ดีครับ เพิ่มใน pom.xml เข้าไปก็จะใช้งานได้แล้วครับ

        <dependency>
            <groupid>org.slf4j</groupid>
            <artifactid>slf4j-log4j12</artifactid>
            <version>1.6.2</version>
        </dependency>


     ปล. ผมใช้ hibernate 3.6.3 (ต่ำกว่านี้น่าจะใช้ได้ตั้งแต่ 3.x) จะสามารถกำหนด sql script ได้ และสามารถกำหนัดได้หลายๆ ไฟล์ โดยใช้ , ต่อกัน ซึ่งจะใช้ hibernate properties อันนี้ครับ
hibernate.hbm2ddl.import_files

วันพฤหัสบดีที่ 15 กันยายน พ.ศ. 2554

การแก้ไข error zk-spring duplicate class definition: org/zkoss/spring/beans/zkcomponents/ZKComponentBeanMethods

ถ้าลองทำตามตัวอย่าง จากที่ ZK มาให้จากลิงค์ http://books.zkoss.org/wiki/ZK_Spring_Essentials/Working_with_ZK_Spring/Working_with_ZK_Spring_Core/Inject_ZK_Components_in_Spring_Beans
นี้ แล้วอาจจะเกิด exception ตามนี้ครับ
Caused by: java.lang.LinkageError: duplicate class definition: org/zkoss/spring/beans/zkcomponents/ZKComponentBeanMethods
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:592)
        at javassist.ClassPool.toClass2(ClassPool.java:1098)
        at javassist.ClassPool.toClass(ClassPool.java:1079)
        ... 44 more


      ซึ่งมาจาก เรา เรียงลำดับการโหลดผิดใน web.xml โดยจะต้องเอา org.zkoss.spring.web.context.CoreContextListener ขึ้นก่อน org.springframework.web.context.ContextLoaderListener จะทำให้แก้ปัญหานี้ได้ครับ

วันจันทร์ที่ 5 กันยายน พ.ศ. 2554

ลง Oracle 32bit บน windows 64bit แล้วมีปัญหา ORA-12154: TNS:could not resolve the connect identifier specified

เป็นปัญหาเวลาเราลงโปรแกรม มันจะไปอยู่ที่ Program Files (x64) ครับ ต้อนจะใช้งานโปรแกรม มันจะไปหามั่วๆ เลยต้องรันผ่าน command line หรือ fixed bug ของ oracle 10g (bug id 3807408) ครับ แต่แก้ง่ายกว่านั้น รันโปรแกรมผ่าน command line เลย โดยให้ cd PROGRA~2 แทน แล้วรันโปรแกรม ก็ใช้งานได้แล้วครับ

ปล. เวลา config odbc ศำหรับ 32bit จะต้องไปรันโปรแกรม C:\Windows\SysWOW64\odbcad32.exe (ตัวนี้เป็น odbc 32bit รันปกติจะเป็นของ 64bit ครับ) แล้วก็จะใช้งานได้ครับ

Reference
http://blogs.msdn.com/b/dataaccesstechnologies/archive/2010/01/26/connectivity-issue-with-oracle-in-x64-environment-ora-12154-tns-could-not-resolve-the-connect-identifier-specified.aspx