วันพุธที่ 25 พฤษภาคม พ.ศ. 2554

Basic Spring Roo

มาเขียน Application กับ Spring Roo กัน
เรามาเริ่มเข้าใจกันก่อนว่า Spring Roo คืออะไรครับ
หยิบประโยคมาให้อ่านเลย

"Spring Roo is a next-generation rapid application development tool for Java developers."

ซึ่ง Spring Roo จะคล้ายๆ กับ Grails ตรงที่ว่าเราสามารถสร้าง Project ที่พร้อมใช้งาน CRUD ได้เลยในเวลาไม่นาน เพราะทุกอย่างจะ Mapping มาให้ใน Code เลย เราเพียงแค่ใช้ Command สร้างมันเท่านั้น

ทำให้ใช้งานกันได้ก่อนครับ
1. Download Spring Roo จาก http://www.springsource.com/download/community
2. Spring Roo ใช้ JDK6, Maven ให้โหลดมาใช้งาน และ Config Classpath, Path สำหรับ JDK, Maven ด้วยครับ (ควรจะมีพื้นฐานการใช้งาน maven)
3. Config Path โดยไปที่ roo/bin ครับ จะสามารถรันขึ้นมาใช้งานได้ จะได้หน้าตาแบบนี้




ต่อไปเรามาสร้าง Project โดยใช้ Roo กัน
1. สั่ง Roo เลย จะเข้าหน้าสำหรับ command line ซึ่ง Roo เวอร์ชั่นใหม่ (ตอนเขียนบล็อกนี้ใช้ 1.1.3) เราสามารถใช้ hint สำหรับบอกเราว่าลืมสร้างอะไรต้องทำอะไรก่อนบ้าง และมีการใช้งาน tab ในกรณีที่เราลืมคำสั่ง tab ไปจะขึ้นชื่อให้ น่ะครับ

หน้าตัวอย่าง hint

2. ถ้าดูจาก hint จะเห็ฯว่าเรายังไม่ได้สร้าง Project ขึ้น จะเห็นว่า ต้อง พิมพ์ project --topLevelPackage ชื่อ package พอทำเสร็จแล้ว roo จะสร้างไฟล์สำหรับเป็น Project ขึ้นมาซึ่งจะใช้ maven เป็นหลักน่ะครับ (ควรจะมีความรู้ maven บ้าง)



3. ต่อไปมาสร้างส่วนติดต่อฐานข้อมูล (สามารถ hint ดูได้จะบอกว่าให้สร้าง persistence น่ะครับ) จะเห็นว่า จะมีให้เลือกใช้ technology อะไร แล้วก็เลือกว่าจะใช้ฐานข้อมูลอะไร พอเลือกเสร็จ roo จะทำการเพิ่ม config ลงในส่วนของ maven (pom.xml) แล้วพวก persistence file



4. ต่อไปเรามาสร้าง Entity ขึ้นมา หรือจะสร้างบน IDE ก็ได้ (ลอง hint ดูได้จะมีขึ้นคำอธิบายเลยครับ ง่ายดีไหม) พอเลือกสร้าง (entity --class className) ตัวอย่าง entity --class ~.domain.Test



5. พอสร้างเสร็จแล้วเราก็มาสร้าง field ของ domain นั้นขึ้นมา โดยพิมพ์ field แล้วลอง tab ดูครับ ว่าอยา่ได้ ตามตัวอย่างผมสร้าง field firstName เป็น String Type




6. พอลองแล้ว มาสร้าง controller ต่อกันครับ โดย controller --class ~.web สร้างแบบนี้จะได้ CRUD (Create-Read-Update-Delete) ให้เลยน่ะครับ ที่ทำการ map กับ domain แล้ว



7. พอสร้างเสร็จทำงานได้แล้ว ถ้าเราอยาก run test ไว้ด้วยก็มี perform test แล้วระบบจะรัน (จะมี load jar สำหรับ test มา)
8. ถ้าเราอยากไปใช้งานบน eclipse สามารถรัน perform eclipse ได้เลยครับ Root ๗ะสร้าง project ให้สามารถใช้ได้บน eclipse (โดยการ Import project ก็ใช้งานได้เลย) พอกด enter เดินไปกินข้าวได้เลยครับ นานๆ
9. พิมพ์ exit ออกมษจาก Roo ได้เลยครับ
10. รันเทสได้จาก mvn tomcat:run ครับ (รัน post 8080 ถ้าใช้อยู๋จะรันไม่ขึ้นครับ) เราจะได้หน้าตาแบบนี้มาครับ

วันจันทร์ที่ 12 กรกฎาคม พ.ศ. 2553

การสร้าง Basic jax-ws client

ตอนที่แล้ว เขียนวิธีการสร้าง jax-ws แล้ว คราวนี้เรามาดูวิธีการเรียกกันครับ ผมทำบน maven เหมือนเคยครับ โดยทำดังนี้ครับ
1. Config Maven เพื่อไปอ่าน wsdl file จาก url มาแล้วทำการ generate stub ไว้สำหรับเรียก Web Service

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlUrls>
<wsdlUrl>
http://localhost:8080/webservice-sample/helloService?wsdl <-- บอกว่าจะไปเอา wsdl file จากที่ไหนมาครับ </wsdlUrl>
</wsdlUrls>
<packageName>tutorial.sample.jaxws.helloclient</packageName> <-- จำสร้าง stub ไว้ที่ package ไหน </configuration>
</execution>
</executions>
</plugin>

2. หลังจากนั้นไปรันที่ command line mvn:compile maven ก็จะทำการสร้าง stub ของ Web Service นั้นขึ้นมาให้ครับ แล้วสามารถนำไปใช้งานได้เลย (*พอทำเสร็จแล้ว เอาส่วนที่เป็น Config wsdlurl ออกน่ะครับ จะได้ไม่ต้องทำการไป generate ทุกครั้ง)
3. มาดูส่วนที่เป็น Java Class กัน

HelloService service = new HelloService();
Hello port = service.getHelloPort();
System.out.println(port.sayHello("Duke"));

4. ตัวอย่างที่กล่าวมาเป็นวิธีการเรียกแบบ Sync Mode ครับ ยังมีวิธีการเรียกแบบ Async อีกสองแบบ จะพูดถึงในครั้งต่อไปครับ

วันเสาร์ที่ 10 กรกฎาคม พ.ศ. 2553

การสร้าง jax-ws บน Tomcat

ผมเขียนโดยใช้ maven ในการสร้าง Project น่ะครับ และทำให้รันบน Tomcat ถ้าบน Application Server ใช้ Config น้อยกว่านี้น่ะครับ
1. เพิ่ม Config ใน Maven เข้ามาเพื่อ Load Library
<dependency>
<groupid>com.sun.xml.ws</groupid>
<artifactid>jaxws-rt</artifactid>
<version>2.2.1</version>
</dependency>

2. Config Maven ให้ใช้งาน Tomcat ได้ ไม่สอนนะครับ เพราะว่า copy มาใช้งานได้จากเวบอยู่แล้วไม่ยากเท่าไรน่ะครับ
3. ต่อไปมาดูส่วนของ Class ปกติการเขียน jax-ws เราจะใช้ Java Class มาใช้โดยการเพิ่ม annotation เพื่อบอกมันว่าจะใช้งานเป็น Web Service ได้เลยน่ะครับ แต่รันบน Tomcat เราจะต้องมี Config เพิ่มในส่วนของ web.xml

@WebService <-- จะเห็นว่าแค่บอกว่าจะใช้ Web Service ก็จะสามารถทำงานเป็น Web Service ได้เลยน่ะครับ
public class Hello {

public String sayHello(String param) { <-- เป็น Method ที่จะไว้เรียกจาก Client ได้ที่ jax-ws จะ auto generate ให้เป็น Method ใน jax-ws ให้เลยน่ะครับ
System.out.println("..... sayHello(String param[" + param + "])");

return "Hello " + param;
}

}

4. ต่อไปมาดูส่วนที่ต้อง Config เพิ่มเติมในส่วน web.xml
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<description>Example Web Service</description>
<display-name>examplews</display-name>
<servlet-name>example</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

5. หลังจาก Config เสร็จแล้วจะต้องไปสร้าง sun-jaxws.xml เพื่อ Config ว่า Class ไหนบ้างเป็น Web Service แล้วมี Path เป็นอะไรน่ะครับ
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint name="hello" implementation="tutorial.jaxws.webservice.sample.Hello" <-- บอกว่าจะให้ Class นั้นเป็น Web Service url-pattern="/helloService" />
</endpoints>

6. สั่งรันเป็นอันเสร็จ เรียบร้อย จะได้ Web Service มาใช้งานแล้วครับ คร้าวหน้า จะมาเขียน jax-ws client ไว้สำหรับเรียกนะครับ ซึ่งมีทั้งแบบ Sync, Async ครับ

วันพฤหัสบดีที่ 18 มีนาคม พ.ศ. 2553

Weblogic and Maven Integration

ขอแปะเก็บไว้หน่อยนึง การใช้ maven ร่วมกับ Weblogic
http://mohanrajk.wordpress.com/2009/03/02/weblogic-103-and-maven-integration/
http://www.blogwitter.com/category/java/weblogic/

แก้ไขเรื่อง mvn weblogic:deploy ครับ ต้องไปแก้ที่ setting ของ maven ถ้าทำงานบน windows น่ะครับ http://timezra.blogspot.com/2009/06/maven-and-weblogic.html

เพิ่มเติมแก้ Bug บางอย่าง
http://forums.oracle.com/forums/thread.jspa?threadID=724768

วันพุธที่ 24 กุมภาพันธ์ พ.ศ. 2553

Covert XSD to Java โดยใช้ jaxb

1. เราจะใช้คำสั่ง xjc เพื่อที่จะแปลงข้อมูลใน xsd เป็น java object เพื่อเราจะใช้งานได้ โดยใช้คำสั่ง
xjc -p -d src
2. พอทำเสร็จเราจะได้ java class ไว้ใช้งานในระบบ ถ้ามีการยิง xml มาจะสามารถ convert เป็น java object ได้เลย
3. ต่อไปวิธีใช้งานจะเรียกกันว่า Marshall กับ UnMarshall
3.1 Marshall คือการที่เราต้องการแปลงจาก Java Object ไปเป็น XML File โดยจะมีการใช้คร่าวๆ ดังนี้

JAXBContext jaxbContext
= JAXBContext.newInstance
(<PackageName>);
Marshaller marshaller = jaxbContext.createMarshaller();
ObjectFactory factory = new ObjectFactory();
Temp aTemp = factory.createTemp();
marshaller.marshal(aTemp, <Type>);

(สามารถใช้ dom4j ที่เป็น DocumentResult ในการโยนค่าไปรับ xml ค่าได้) เช่น
DocumentResult dr = new DocumentResult(); แล้วเอา dr ไปใส่ในช่อง
3.2 UnMarshall จะทำการแปลงค่าจาก XML File มาใส่ใน Object ให้เราเลย

JAXBContext jaxbContext
= JAXBContext.newInstance
(<PackageName>);
Unmarshaller unmarshaller =
jaxbContext.createUnmarshaller();
Temp aTemp
= (Temp)unmarshaller.unmarshal(
new File("src/main/resources/dataTest.xml"));

วันเสาร์ที่ 6 กุมภาพันธ์ พ.ศ. 2553

Install Web Logic 11g On Mac OS X

ผมคิดว่าน่าจะใช้ได้ทุกเวอร์ชั่นน่ะครับ เพราะน่าจะมีปัญหาเดียวกันหมดเลย ทำตามนี้ครับ
1. Config JVM ก่อนครับ ตามนี้นะครับ (ถ้าไม่ทำตอน install มันจะหา JVM ตอน install ไม่ได้น่ะครับ)

$ cd /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
$ sudo mkdir jre
$ sudo mkdir jre/lib
$ sudo mkdir jre/lib
$ sudo touch jre/lib/rt.jar
$ sudo touch jre/lib/core.jar

1. Download Weblogic Server มาก่อนครับ ให้เลือก generic unix จะได้ .jar file มาครับ
2. พอไปไฟล์มาแล้ว double click install ไม่ได้น่ะครับ มันจะ out of memory เพราะมัน heavy server ครับ ต้อง เรียกผ่าน command เอาน่ะครับ
java -Xmx1024m -Dos.name=unix -jar wls1032_generic.jar
3. แล้วก็ทำตาม step เลยครับ ก็จะลงได้ล่ะ
4. มา config memory เพิ่มครับ เพราะ start แล้วจะ out of memory อีกรอบ
5. ให้หา MEM_ARG คำนี้ที่มีการ set ไว้น่ะครับ แล้วเพิ่ม -XX:MaxPermSize=128m ก็จะสามารถเข้าหน้า admin console ได้แล้วน่ะครับ

Reference
http://avernet.blogspot.com/2008/02/installing-bea-weblogic-on-mac-os-x.html
http://yusuke.homeip.net/blog/2008/09/20/running_weblogic_server_10g_release_3_on_a_mac.html

วันจันทร์ที่ 25 มกราคม พ.ศ. 2553

การ set library path บน Weblogic 10.3

*คำเตือน บาง library มี dependency หา lib ใน jar file บางทำให้ไม่สามารถ start server ได้เลยครับ ระวังนิดนึง (ที่ผมเจอก็ osgi.jar มันวิ่งไปหาไม่เจอ server start ไม่ขึ้นเลยที่เดียวเชียว -_-"

1. โดยปกติเราสามารถเอา jar file ไปวางไว้ที่ folder lib ได้เลยครับ ให้เช็คก่อนดูที่ server (double click ที่ server) จะขึ้นหน้าต่าง config ของ server ขึ้นมาให้ดูที่ Domain Home ครับ ว่า path อยู่ตรงไหน
2. เข้าไปที่ Folder lib แล้วเอา jar file มาว่าง start server เป็นอันใช้งาน library ได้แล้วครับ