วันพุธที่ 5 กันยายน พ.ศ. 2555

อยากลองฝึก Jdeveloper ช่วยแนะนำแหล่งข้อมูลหน่อยตั้งแต่เบือ้งต้นเลยครับ และขอถามปัญหานิดนึงครับ - BC4J และ OJSP ใน Jdeveloper คืออะไรครับ ใช้ทำอะไร - ถ้าจะนำ BC4J , OJSP ไปใช้กับ Web Server อื่นๆ นอกจากของ Oracle เช่น Tomcat จะได้ไหมครับ?

อยากลองฝึก Jdeveloper ช่วยแนะนำแหล่งข้อมูลหน่อยตั้งแต่เบือ้งต้นเลยครับ และขอถามปัญหานิดนึงครับ
- BC4J และ OJSP ใน Jdeveloper คืออะไรครับ ใช้ทำอะไร
- ถ้าจะนำ BC4J , OJSP ไปใช้กับ Web Server อื่นๆ นอกจากของ Oracle เช่น Tomcat จะได้ไหมครับ 

------------------------------------------------------------------------------------------------------------------



Quote
อยากลองฝึก Jdeveloper ช่วยแนะนำแหล่งข้อมูลหน่อยตั้งแต่เบือ้งต้นเลยครับ
1.แหล่งข้อมูลเบื้องต้น
http://otn.oracle.co...ev/content.html "

Quote
BC4J และ OJSP ใน Jdeveloper คืออะไรครับ ใช้ทำอะไร
2. ojsp เป็น jsp containers ครับ ที่ทาง Oracle Implement ขึ้นซึ่งก็จะมี tag ที่ใช้งานกับ Database เพิ่มเติมจาก stardard ครับอ
3. ฺBC4J เป็น Framework ที่ช่วยให้ การพัฒนา Enterprise Application ที่ต้องติดต่อกับ RDBMS ทำได้สะดวกขึ้นครับ สำหรับรายละเอียดของ BC4J ลองอ่าน paper นี้ดูนะครับ " http://otn.oracle.co.../j2ee_bc4j.html "

Quote
ถ้าจะนำ BC4J , OJSP ไปใช้กับ Web Server อื่นๆ นอกจากของ Oracle เช่น Tomcat จะได้ไหมครับ
4. Applicaiton ที่พัฒนาด้วย BC4J สามารถเลือกที่จะ Deploy ไป J2EE Server ที่เราต้องการได้ ซึ่งไม่จำเป็นต้องเป็น ของ Oracle ดูวิธีการ deploy ไปยัง Server ที่ไม่ใช่ Oracle ที่นี้ครับ " http://otn.oracle.co...os/content.html "

5. ส่วน ojsp เราก็เพียงแต่ set ให้ J2EE engine ที่เราต้องการนั้นรู้จ้ก Library ของ ojsp ก็สามารถทำงานได้ครับ 



แหล่งข้อมูล   http://www.narisa.com  : http://www.narisa.com/forums/index.php?showtopic=360

วันพุธที่ 29 สิงหาคม พ.ศ. 2555

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

RESTful Webservices with Java (Jersey / JAX-RS) ตอนที่ 1

สวัสดีครับ ทุึกคน วันนี้ก็ถึงเวลาที่เราจะมาทดลองการเขียน Webservice กันสักที


Table 1. Sample Table
AnnotationDescription
@PATH(your_path)Sets the path to base URL + /your_path. The base URL is based on your application name, the servlet and the URL pattern from the web.xml" configuration file.
@POSTIndicates that the following method will answer to a HTTP POST request
@GETIndicates that the following method will answer to a HTTP GET request
@PUTIndicates that the following method will answer to a HTTP PUT request
@DELETEIndicates that the following method will answer to a HTTP DELETE request
@Produces( MediaType.TEXT_PLAIN [, more-types ] )@Produces defines which MIME type is delivered by a method annotated with @GET. In the example text ("text/plain" ) is produced. Other examples would be "application/xml" or "application/json".
@Consumes( type [, more-types ] )@Consumes defines which MIME type is consumed by this method.
@PathParamUsed to inject values from the URL into a method parameter. This way you inject for example the ID of a resource into the method to get the correct object.
The complete path to a resource is therefore based on the base URL and the @PATh annotation in your class.
http://your_domain:port/display-name/url-pattern/path_from_rest_class
   



Tools ที่เราใช้ประกอบไปด้วย
1. Eclipse Helios
2. Tomcat 6.0


1.Create Java Web Dynamic



























library ทั้งหมดที่เกี่ยวข้อง



cccc























1.Domain


package com.blogspot.javathaitalk.domain;


public class Track {


String title;
String singer;


public String getTitle() {
return title;
}


public void setTitle(String title) {
this.title = title;
}


public String getSinger() {
return singer;
}


public void setSinger(String singer) {
this.singer = singer;
}


@Override
public String toString() {
return "Track [title=" + title + ", singer=" + singer + "]";
}


}

2.Java Class Service


package com.blogspot.javathaitalk.webservices.rest;


import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;


import com.blogspot.javathaitalk.domain.Track;






@Path("/json/metallica")
public class JSONService {


@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public Track getTrackInJSON() {


Track track = new Track();
track.setTitle("Enter Sandman");
track.setSinger("Metallica");


return track;


}


@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
public Response createTrackInJSON(Track track) {


String result = "Track saved : " + track;
return Response.status(201).entity(result).build();

}

}


3.Jersey Client Get


package com.blogspot.javathaitalk.webservices.client;


import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;


public class JerseyClientGet {


public static void main(String[] args) {
try {


Client client = Client.create();


WebResource webResource = client.resource("http://localhost:8080/DemoRESTfulExample/rest/json/metallica/get");


ClientResponse response = webResource.accept("application/json")
.get(ClientResponse.class);


if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}


String output = response.getEntity(String.class);


System.out.println("Output from Server .... \n");
System.out.println(output);


} catch (Exception e) {


e.printStackTrace();


}


}


}

4.Jersey Client Post


package com.blogspot.javathaitalk.webservices.client;


import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;


public class JerseyClientPost {


public static void main(String[] args) {


try {


Client client = Client.create();


WebResource webResource = client
.resource("http://localhost:8080/DemoRESTfulExample/rest/json/metallica/post");


String input = "{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}";


ClientResponse response = webResource.type("application/json")
.post(ClientResponse.class, input);


if (response.getStatus() != 201) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}


System.out.println("Output from Server .... \n");
String output = response.getEntity(String.class);
System.out.println(output);


} catch (Exception e) {


e.printStackTrace();


}


}


}

 5.Define Jersey Servlet dispatcher


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>DemoRESTfulExample</display-name>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.blogspot.javathaitalk.webservices.rest</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

</web-app>




สำหรับการทดสอบ Webservice ให้ทำการ Run Java Web ก่อน แล้วค่อยไปเรียกทดสอบ Client แบบ java App ธรรมดาทีหลัง

1.ทดสอบ เรียกผ่าน URL ด้วย Get Method






2.ทดสอบเรียกผ่าน JerseyClientGet Class










3.ทดสอบเรียกผ่าน JerseyClientPost Class










*ปล. ถ้าใครอยากได้ SourceCode ให้ Comment ไว้นะครับ เดี๋ยวผมจะส่งให้ทาง Email.

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

Struts 2 > Hello World Application

    ในแบบฝึกหัดนี้เราจะแสดงให้เห็นถึงวิธีการสร้าง Strust 2 แบบง่ายๆ ด้วย Hello World Application ก่อนการสร้างจะมีไฟล์ที่ประกอบการทำ Application ตามข้อมูลด้านล่างเลยครับ.

ไฟล์หลักๆ ในการทดสอบ  Hello World Application

  • web.xml
  • struts.xml
  • HelloWorld.java
  • index.jsp
  • success.jsp


รูปด้านล่างแสดงโครงสร้างของ Hello World Application



web.xml


<filter>
02.<filter-name>struts2</filter-name>
03.<filter-class>org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
04.</filter>
05.<filter-mapping>
06.<filter-name>struts2</filter-name>
07.<url-pattern>/*</url-pattern>
08.</filter-mapping>
09.<welcome-file-list>
10.<welcome-file>index.jsp</welcome-file>
11.</welcome-file-list>

struts.xml

1.<struts>
2.<package name="default" extends="struts-default">
3.<action name="HelloWorld" class="com.blogspot.javathaitalk.HelloWorld">
4.<result name="SUCCESS">/success.jsp</result>
5.</action>
6.</package>
7.</struts>

index.jsp

01.<%@taglib uri="/struts-tags" prefix="s" %>
02. 
03.<html>
04.<head>
05.<title>Hello World</title>
06.</head>
07.<body>
08.<s:form action="HelloWorld" >
09.<s:textfield name="userName" label="User Name" />
10.<s:submit />
11.</s:form>
12.</body>
13.</html>

HelloWorld.java


01.public class HelloWorld {
02. 
03.private String message;
04. 
05.private String userName;
06. 
07.public HelloWorld() {
08.}
09. 
10.public String execute() {
11.setMessage("Hello " + getUserName());
12.return "SUCCESS";
13.}
14. 
15.public String getMessage() {
16.return message;
17.}
18. 
19.public void setMessage(String message) {
20.this.message = message;
21.}
22. 
23.public String getUserName() {
24.return userName;
25.}
26. 
27.public void setUserName(String userName) {
28.this.userName = userName;
29.}
30. 
31.}
ขันตอนของการ execute() method ของ class HelloWorld เราสามารถเข้าถึงข้อมูลของ properties ได้จาก Class นี้ซึ่งต่างจาก Struts 1 ที่ต้องมี Form. เราสามารถทำ Java class action ได้ง่ายๆ.

success.jsp

สำหรับ หน้า success เราจะทำการแสดงข้อความ "Hello คนไทย" โดยที่มันจะแสดงผ่าน property tag ที่ชื่อว่า message ด้านล่าง.
01.<%@taglib uri="/struts-tags" prefix="s" %>
02.<html>
03.<head>
04.<title>Hello World</title>
05.</head>
06.<body>
07.<h1><s:property value="message" /></h1>
08.</body>
09.</html>

Demo After Run Application

























* ถ้าใครต้องการ demo application ให้ comment และฝาก email ไว้นะครับ ผมจะส่งให้ทาง email.