วันจันทร์ที่ 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 ได้แล้วครับ

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

ปัญหา The domain edit lock is owned by another session ของ Weblogic 10.3

ข้อความจะขึ้นประมาณนี้ครับ ตอนที่เราจะ deploy application ลงไปน่ะครับ

The domain edit lock is owned by another session - this deployment operation requires exclusive access to the edit lock and hence cannot proceed. You can release the lock in Administration Console by first disabling "Automatically Acquire Lock and Activate Changes" in Preference, then clicking the Release Configuration button. - this deployment operation requires exclusive access to the edit lock and hence cannot proceed. You can release the lock in Administration Console by first disabling "Automatically Acquire Lock and Activate Changes" in Preference, then clicking the Release Configuration button.

ผมใช้ตัว Workshop ที่ติดมากับ Weblogic 10.3 น่ะครับ พื้นฐานก็ Eclipse น่ะครับ

1. ให้เข้าไปที่ admin console ครับ แล้วไปส่วนของ preference อยู่ด้านบนน่ะครับ แล้วไป เอาเครื่องหมายถูก หน้า Automatically Acquire Lock and Activate Changes ออก ครับ แล้ว save แล้วหลังจากนั้นก็ restart server ทีนึง
2. Login เข้าหน้า admin console ใหม่ แล้วไปคลิกที่ Release Configuration พอเสร็จแล้วจะทำการ deploy applcation ได้ปกติ ครับ

Note
- ที่เป็น default ของ web logic user : weblogic, pass : weblogic

reference
http://forums.oracle.com/forums/thread.jspa?threadID=717773

การ set library path บน Weblogic 8.1

การ set จะไม่เหมือนของ websphere น่ะครับที่สามารถ set ผ่านหน้่า GUI ได้เลย แต่ Weblogic ไม่สามารถทำได้ (หรือผมยังหาไม่เจอไม่รู้ครับ)
โดยให้ set CLASSPATH ไปที่ jar file ตัวที่เราต้องการอ้างถึง หรือทำการ set ใน startWebLogic.cmd ใน windows หรือ startWebLogic.sh ใน unix แล้วไปแก้ส่วนตรง
set CLASSPATH ทำการเพิ่ม jar file พี่เราต้องการไป หรือจะเขียนเป็น variable ไว้ก็ได้ เช่น set APPS_CLASSPATH=xxx แล้วทำการ เพิ่ม %APPS_CLASSPATH% ลงไปแทนก็ได้ครับ