Groovy on Google App Engine ( GAE )
ทาง google ประกาศว่าตอนนี้ GAE นั้นสนับสนุนภาษาที่ทำงานบน JVM แล้วทั้ง
- Java
- Groovy
- JRuby
- Scala
จากที่นี่ Seriously this time, the new language on App Engine: Java
ประกอบกับ Groovy 1.6.1 ก็ออกมาเช่นกัน ดังนั้นจะมัวช้าอยู่ทำไม ลองกันดีกว่า ….
คุณ Guillaume Laforge ผู้สร้าง Groovy จาก SpringSource ได้เขียน blog ที่น่าสนใจมากสำหรับขั้นตอนพัฒนา Groovy เพื่อนำไปทำงานบน GAE ที่นี่ Write your Google App Engine applications in Groovy
โดยผมทดลองทำตามหรือ COPY บทความของชาวบ้านนั่นเอง และสามารถสรุปขั้นตอนการพัฒนาเป็นดังนี้
1. ทำการ Download GAE SDK for Java จากที่นี่
- เมื่อ download มาแล้วทำการ extract zip file
สร้าง Variable Environment เพื่อให้ run ชุดคำสั่งของ GAE จากที่ไหนก็ได้ ดังนี้
set GAE_JAVA_HOME=GAE for java installation folder
set PATH=.;%GAE_JAVA_HOME%\bin;%PATH%
2. สร้าง project จาก template นี้
- เมื่อ download template มาแล้วทำการ extract จะมีหน้าตาดังรูป
ผมทำการ copy ทั้ง folder แล้วเปลี่ยนชื่อ folder เป็น up1groovy [ ผมเปลี่ยนชื่อแบบไม่อายกันเลย ]
3. มี file ที่น่าสนใจดังนี้
3.1 build.groovy จะเป็น groovy file ใช้สำหรับการ compile groovy และ java classes ใน project โดยใช้ Ant tool นั่นเอง มีหน้าตาดังนี้
def ant = new AntBuilder().sequential {
webinf = "deploy/WEB-INF"
taskdef name: "groovyc", classname: "org.codehaus.groovy.ant.Groovyc"
groovyc srcdir: "src", destdir: "${webinf}/classes", {
classpath {
fileset dir: "${webinf}/lib", {
include name: "*.jar"
}
pathelement path: "${webinf}/classes"
}
javac source: "1.5", target: "1.5", debug: "on"
}
}
คำอธิบาย
- ทำการ compile groovy file ที่อยู่ใน folder src
- output จากการ compile จะเก็บไว้ที่ folder /deploy/WEB-INF/classes
- เรียกใช้งานด้วยคำสั่ง
>groovy build
3.2 /deploy/WEB-INF/appengine-web.xml จะเป็น project descriptor file มีหน้าตาดังนี้
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>up1groovy</application>
<version>1</version>
</appengine-web-app>
คำอธิบาย
- สามารถกำหนด ชื่อและ version ของ project ที่จะทำการ deploy โดยชื่อ project ที่ผมใช้งานคือ up1groovy
4. เริ่มต้นสร้าง Servlet ด้วย groovy กันก่อน โดย GAE สนับสนุน Servlet 2.5 ซึ่งเราสร้าง Hello Servlet ง่ายๆ ดังนี้
4.1 สร้าง file HelloServlet.groovy ไว้ที่ folder /src/ ดังนี้
import javax.servlet.http.*
class HelloServlet extends HttpServlet {
void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.contentType = "text/plain"
resp.writer.println "Hello Google App Engine Groovy!"
resp.writer.println new GroovyShell().evaluate("3*4")
}
}
4.2 แก้ไข file /deploy/WEB-INF/web.xml เพื่อกำหนด servlet และ servlet-mapping ดังนี้
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
คำอธิบาย
ในการ mapping นี้เราสามารถเรียกใช้งานผ่านชื่อ /hello
เมื่อทำเรียบร้อยก็ compile project ด้วยคำสั่ง >groovy build เช่นเดิม ถ้าไม่มีปัญหาอะไรแล้ว เราจะทำการ deploy project บน GAE กัน
5. การ deploy project บน GAE
- ก่อนอื่นต้องอยู่ที่ root folder ของ project ก่อน ซึ่งตอนนี้ผมอยู่ที่ c:\up1groovy\
- ทำการ deploy ด้วยคำสั่ง
c:\up1groovy> appcfg update deploy/
การใช้คำสั่งนี้จะถาม Gmail Account และ password หลังจากนั้นจะแสดงผลการทำงานดังนี้
Reading application configuration data…
Beginning server interaction for up1groovy…
0% Creating staging directory
5% Scanning for jsp files.
20% Scanning files on local disk.
25% Initiating update.
28% Cloning 5 application files.
40% Uploading 1 files.
52% Uploaded 1 files.
90% Deploying new version.
95% Will check again in 1 seconds
98% Closing update: new version is ready to start serving.
99% Uploading index definitions.
Update complete.
Success.
Cleaning up temporary files…
เมื่อ deploy project บน GAE เรียบร้อยแล้ว ลองทดสอบก็ไปที่ http://up1groovy.appspot.com/hello ก็จะเห็นผลการทำงาน
6. ต่อมาลองใช้ Groovlet == Groovy Servlet ดูบ้างว่าเป็นอย่างไร
6.1 สร้าง hello.groovy ไว้ใน folder /deploy/WEB-INF/groovy/ ดังนี้
html.html {
head {
title "Hello"
}
body {
p "Hello Groovy World!"
}
}
6.2 ทำการแก้ไข file /deploy/WEB-INF/web.xml เพื่อกำหนด servlet และ servlet-mapping ดังนี้
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<servlet>
<servlet-name>GroovyServlet</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GroovyServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>
</web-app>
คำอธิบาย
ในการ mapping นี้เราสามารถเรียกใช้งานผ่านชื่อ /hello.groovy
เมื่อทำเรียบร้อยก็ compile project ด้วยคำสั่ง >groovy build เช่นเดิม ถ้าไม่มีปัญหาอะไรแล้ว เราจะทำการ deploy project บน GAE เช่นเดิม
สามารถตรวจสอบผลการทำงานได้จากที่นี่
http://up1groovy.appspot.com/hello.groovy
ผม copy บทความจาก link ข้างต้นมาเต็มๆ ครับ …… ต่อไปคงนำข่าวคราวความเคลื่อนไหว และการใช้งานส่วนต่างๆ มาแจ้งให้ทราบโดยทั่วกันครับ
ปล. ตอนนี้ยังไม่สามารถ run บน development environment ได้นะครับ ต้องรอทาง GAE team ทำการแก้ไขครับ

April 12th, 2009 at 8:08 pm
สุดยอดเลยครับ
กำลังลองเล่น GAE !
April 13th, 2009 at 2:08 pm
โหะ ๆ ๆ ละเอียดยิบ … ขอบุคณครับ
April 17th, 2009 at 12:12 pm
แจ่มครับ .. ละเอียดยิบๆ … ขอบคุณครับ ;>