วันพุธที่ 2 เมษายน พ.ศ. 2557

Config Maven ให้โหลด Source และ API Docs

ปกติสามารถโหลดได้จาก Command Line ได้เลยครับ หรือจะไป Config บน settings.xml

1. แบบที่ทำผ่าน Command Line ให้เพิ่ม

-DdownloadSources=true -DdownloadJavadocs=true  
 
2. แบบที่เพิ่มใน settings.xml (ให้เพิ่มไฟล์นี้ใน Folder .m2)

<profiles>
     <profile> 
          <id>downloadSources</id>
          <properties> 
               <downloadSources>true</downloadSources>
               <downloadJavadocs>true</downloadJavadocs>
          </properties> 
     </profile> 
</profiles> 
<activeProfiles> 
     <activeProfile>downloadSources</activeProfile> 
</activeProfiles> 


Reference
http://stackoverflow.com/questions/5780758/maven-always-download-sources-and-javadocs

วันพุธที่ 26 มีนาคม พ.ศ. 2557

Config JBoss 7.1 ให้ใช้งาน JPA 2.1

JBoss 7.1 จะใช้ JPA 2.0 ครับ ผมเลยอัพเดท Library ของ Server ให้เป็น JPA 2.1 โดยทำดังนี้
1. ไปที่ Folder {JBOSS_HOME}\modules\javax\persistence\api\main จะเห็นไฟล์ hibernate-jpa-2.0-api-1.0.1.Final.jar อยู่ให้ทำการ copy hibernate-jpa-2.1-api-1.0.0.Final.jar มาวางไว้ที่นี่ (Library JPA 2.1)
2. แก้ไขไฟล์ module.xml  ในส่วน resource-root แก้ส่วนของ Path ให้เป็น hibernate-jpa-2.1-api-1.0.0.Final.jar
3. Stop/ Start Server ก็จะใช้งานได้แล้วครับ

ปล.
ผมใช้ Spring แล้วมีปัญหาอาจจะต้องอัพเดท File javassist-3.15.0-GA.jar ไปเป็น javassist-3.18.1-GA.jar แล้วแก้ module.xml เพื่อโหลด Library ตัวใหม่ โดยจะอยู่ที่ Path {JBOSS_HOME}\modules\org\javassist\main

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

Config slf4j ให้ใช้งานบน JBoss 7

ปกติ ถ้าเรา Config Log4j บน slf4j แล้วจะใช้งานไม่ได้เพราะไม่มีการอ่าน Config จาก Application ครับ
เลยต้อง Config เพิ่มโดย

1. สร้างไฟล์ jboss-deployment-structure.xml
2. Config บอกให้ exclude package เหล่านี้ ตามข้างล่าง

 <?xml version="1.0" encoding="UTF-8"?>  
 <jboss-deployment-structure>  
  <deployment>  
   <exclusions>  
     <module name="org.apache.log4j" />  
     <module name="org.slf4j" />  
     <module name="org.slf4j.impl" />  
   </exclusions>  
  </deployment>  
 </jboss-deployment-structure>  

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

Config Datasource บน JBoss AS7

เราจะต้อง Config JDBC Library ให้มีบน Library ก่อน แล้วถึงจะ Config Datasource อีกทีนึงครับ ผมจะยกตัวอย่างของ Oracle

1. Config JDBC Library ก่อน โดย Config ไว้ที่
  • {JBOSS_HOME}\modules\ แล้วสร้าง Path ของ Library ไว้เช่น com\oracle\ojdbc6\main
  • สร้างไฟล์ module.xml แล้วเอา Jar File มาวางไว้ โดยใน Module.xml ส่วนสี่แดงต้องแก้ไข
    • name คือชื่อส่วน folder path ที่สร้างไว้
    • resource-root คือชื่ือ Jar File ที่เราเอามาวางไว้
 <?xml version="1.0" encoding="UTF-8"?>  
 <module xmlns="urn:jboss:module:1.0" name="com.oracle.ojdbc6">  
  <resources>  
   <resource-root path="ojdbc6.jar"/>  
  </resources>  
  <dependencies>  
           <module name="javax.api" />  
     <module name="javax.transaction.api"/>  
     <module name="javax.servlet.api" optional="true"/>  
  </dependencies>  
 </module>  

2. Config Datasource

  • แก้ไข {JBOSS_HOME}\standalone\configuration\standalone.xml แล้วเพิ่มในส่วนของ Datasource และ Drivers
    • ส่วนสีแดงต้องแก้ไขให้ถูกต้องตามที่ Config ไว้
    • ส่วนสีหน้ำเงินจะต้องตรงกันเพราะ driver จะไป references กับ config driver ข้างล่างที่ตรงสีฟ้าครับ
         <datasource jndi-name="java:jboss/datasources/SampleJPADS" pool-name="SampleJPADS" enabled="true" use-java-context="true">  
           <connection-url>jdbc:oracle:thin:@localhost:1521/TEST</connection-url>  
           <driver>oracle</driver>  
           <security>  
             <user-name>test</user-name>  
             <password>test1234</password>  
           </security>  
         </datasource>  

 <driver name="oracle" module="com.oracle.ojdbc6">  
             <xa-datasource-class>oracle.jdbc.driver.OracleDriver</xa-datasource-class>  
           </driver>  
         </drivers>  

3. แล้วทำการ Restart Server ก็จะใช้งาน Datasource ได้แล้วครับ โดยเรียกจาก jndi-name จากตัวอย่าง java:jboss/datasources/SampleJPADS

4. เราสามารถดู Log Start Server ได้ว่าใช้งานได้รึยัง ตามนี้ ครับ
[org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) JBAS010400: Bound data source [java:jboss/datasources/SampleJPADS]

วันจันทร์ที่ 5 มีนาคม พ.ศ. 2555

ปัญหาการใช้ @Transactional แล้วได้ exception Error: No Hibernate Session bound to thread

เป็นปัญหาที่เราใช้ Spring กับ Hibernate แล้วดึง getCurrentSession มาใช้ แล้วจะขึ้น Exception ประมาณนี้

org.hibernate.HibernateException: No Session found for current thread

ซึ่งเกิดจากการที่เราไม่มี Transaction ไปครอบไว้ แก้โดย
1. เพิ่ม @Transactional
2. เพิ่ม <tx:annotation-driven />
3. เพิ่ม component scan ในส่วนที่ไว้ tx:annotation-driven ต้องเป็นส่วนใน applicatoncontext.xml ครับ
4. ถ้าเราใส่ component scan บน dispatch-servlet.xml แล้ว จะยังไม่ได้ ต้องทำการเพิ่มให้ส่วน dispatch-servlet.xml เอาเฉพาะ controller ส่วน business service, dao service ให้เอาไปวางไว้ที่ applicationtext.xml แทน ก็จะได้ครับ

Reference
http://www.sivalabs.in/2011/05/springmvc-hibernate-error-no-hibernate.html

วันอังคารที่ 28 กุมภาพันธ์ พ.ศ. 2555

วันพฤหัสบดีที่ 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