จากที่พี่ @roofimon พูดถึงเรื่อง JavaRebel มันก็ช่างโดนใจน้อยๆของผมเหลือเกิน เพราะไอ้เรื่องนี้ก็ทิ่มแทงใจผมมาตั้งแต่วันแรกที่ทำเลยลองทำตาม blog ดูก็โอ้ว happy แต่ด้วยความที่ผมใช้ cmd maven แล้วมันไม่ถนัดมือไปหน่อยเลยว่ากันด้วยเรื่อง ide ก็เลยมานั่งนึกดู ถ้ายังนึกถึงรักเก่าที่ยังคบหาอยู่ก็ Netbeans พอมานั่งคุยกับรักปัจจุบันก็ eclipse ก็เลยมานั่งเทียบสิ่งนึงที่ javarebel ทำคือเมื่อมีการเปลี่ยนแปลง class มันจะทำการ reload ให้เรางั้นก็มานั่งลองดูเริ่มกันที่ Netbean ผมใช้ 6.5 นั่นคือผมว่ามันน่ารักสู้ eclipse ไม่ได้ในงานนี้ตรงที่มันไม่มี compile on save แต่เห็นว่า 6.7 มีนะครับแต่ก็ไม่รู้จะหล่อแค่ไหนเลยคิดว่าเรื่องที่เป็นจุดน่าจะเลือกก็คือ compile on save เลยมามองว่า eclipse ทำได้ดีกว่าเลย เอาวะ eclipse ก็ eclipse ก็มานั่งดู web ของ javarebelที่ http://www.zeroturnaround.com/javarebel/ อ้ะๆ เกิดสวรรค์น้อยๆที่เค้ามีการ ทำ eclipse plug-in ออกมาให้ด้วยแถมยังคงต่อกับ wtp plug-in ที่ eclipse เค้าคุยนักคุยหนาว่านี่หล่ะเจ๋งพอๆกะ netbeans ก็เลยเอาหล่ะเอามาลงกันก่อนเลย
ผมใช้ eclipse 3.4 codename***** และ wtp plug-in ซึ่งมันติดมาอยู่แล้วถ้าใครโหลดตัวที่เป็น web dev มาโดยการ ติดตั้ง plug-in ก็ตามฟอร์มครับ update site โลดโดย update site อยู่ที่ http://www.zeroturnaround.com/update-site/
แล้วก็ติดตั้งกันไป
หลังจากเราติดตั้งเรียบร้อยก็ว่ากันต่อที่การใช้งานหล่ะต๊กตาในการใช้งานของผมคือ Appfuse คงไม่ต้องร่ายยาวว่ามันคืออะไรนะครับ อันนี้คาดว่าน่าจะเคยลองเล่นกันแล้วแต่ถ้ายังขอให้บอกวันหลังจะเอามาเขียนเป็นอีกหนึ่ง entry ครับโดยผมก็เอา appfuse-springmvc มา adapt นิดหน่อยโดยไม่ใช้ maven ครับ ด้วยเหตุผลของเด็กน้อยโปรแกรมเมอร์จนๆ อย่างผมไม่มีเน็ตแรงๆ 5mb ไว้ใช้งานที่บ้านเลยต้อง offline กันไป
แต่ผมก็จะทำตามขั้นตอนของ คุณ @roofimon นะครับโดยขั้นตอนพี่เค้าเขียนไว้อย่างเมพแล้วเลยขอทำตามขั้นตอนหน่อยแต่เปลี่ยนวิธีก็เลยเอาของพี่มา adapt apply หน่อยๆ อิอิ
ไป download ไลบรารี่มาก่อนที่ http://www.zeroturnaround.com/javarebel/
จากนั้นเราก็ต้องบอกให้ Servlet Container ที่เราใช้ว่าเราช่วยโหลดได้นี่เข้าไปหน่อยนะจังหวะที่มัน Start-up ซึ่งในที่นี้ผมประมาณว่าทุกคนใช้ Tomcat นะครับดังนั้นสิ่งที่เราต้องทำคือไปที่ catalina.bat แล้วเพิ่มคำสั่งนี้เข้าไป(เอาไว้ประมาณ บรรทัดที่ 231)set JAVA_OPTS=-noverify -javaagent:{PATH_TO_JAVAREBEL}javarebel.jar %JAVA_OPTS%
เมื่อเราใช้ ide + plug-in เราก็ใช้วิธีการ
ไปที่ Window » Preferences » JavaRebel แล้วก็จะเจอความงามซ่นอยู่ครับโดยเราก็เลือก JavaRebel jar location ครับเพื่อให้ ตัว wtp ของเรารู้จัก JavaRebel แล้วก็ไป
run >> run config… ก็จะเจอหน้าตาสวยงามดังนี้ครับ

ตามที่วงเลยครับเท่านี้ก็ลองมา test start server กันดูก็จะเห็นแบบนี้ใน console
ถ้าที่ comsole มีข้อความนี้แสดงขึ้นมาแสดงว่าเรามาถูกทาง
#############################################################
ZeroTurnaround JavaRebel 2.0 (200903241906)
(c) Copyright Webmedia, Ltd, 2007-2009. All rights reserved.
เปิดการใช้งานให้กับตัว servlet container ของเราผมใช้ tomcat 6 นะครับโดยไปเปิด server editor ขึ้นมาแล้วเตะสองทีเร็วๆจากนั้นจะพบกับหน้าจอ tomcat config แบบนี้ครับ

พอดีไปโขมยเค้ามาเด่วผมมาแก้รูปให้นะครับพอดีมัน upload ขึ้น server ไม่ได้
น่านยังมีกันเราลืมโดยบอกว่าให้เช็คให้ดีนะให้เราไปปิด auto publish ซะตอนแรกผมก็ไปปิดครับเชื่อคนง่ายพอมาเขียนโอ้ว happy อย่างยิ่งแต่เราลืมมองไปว่าแก้ class มันไม่มีปัญหาครับแต่ถ้าเราแก้ jsp มันไม่ publis ไปให้เราอ่ะงงเลยเลยทำตามนี้ไปก่อนแล้วกันครับเด่วจะ เล่าให้ฟังหลังๆ
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
เราก็จะได้เวบโปรเจคโง่ๆมาหนึ่งอันหนึ่งชื่อ my-webapp จากนั้นเราต้องเพิ่มความสามารถของ JavaRebel เข้าไปให้ maven ด้วยโดยให้เราเปิด pom.xml ขึ้นมาแล้วเพิ่ม plugin เข้าไปดังนี้
ที่บรรทัดประมาณที่ 11
<pluginRepositories> <pluginRepository> <id>zt-repo</id> <name>Zero turnaround repo</name> <url>http://repos.zeroturnaround.com/maven2</url> </pluginRepository> </pluginRepositories>อีกส่วนที่ประมาณบรรทัดที่ 139 ในส่วนของ plugins
<plugin> <groupId>org.zeroturnaround</groupId> <artifactId>javarebel-maven-plugin</artifactId> <executions> <execution> <id>generate-rebel-xml</id> <phase>process-resources</phase> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin>เมื่อเรียบร้อยแล้วให้สั่ง mvn javarebel:generate คำสั่งนี้จะไปสร้างไฟล์ชื่อ rebel.xml ที่ WEB-INF/classes ครับโดยไฟล์นี้จะทำหน้าที่กำหนด target ที่เก็บ class ไฟล์และ resources ต่างที่เราต้องการให้ทำ auto-reload เมื่อเกิดการเปลี่ยนแปลง
ขั้นตอนนี้ผมข้ามเรียบครับเพราะผมสร้างproject มาเอง dynamic web project manage มือใช้ ant ครับส่วน maven ที่อาไว้ gen file rebel.xml ก็ไม่ต้องครับเด่วเราใช้เวทมนต์ตามประสา วิสาดดดด
โดยไปคลิกขวาที่โปรเจ็คแล้วจะเห็นเมนูให้เรา generate rebe.xml ครับ แล้วให้ไปเลือกที่ที่เราไว้นั่นคือ output folder นั่นเอง
เท่ากับว่าตอนนี้เราก็มาถึง
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
<classpath>
<dir name="D:/workspace-seanet/TMS/build/classes">
</dir>
</classpath>
</application>
ละ พอ เหนื่อยครับทดลอง run โลดครับเมื่อรันจะเห็นว่าจะมี log ท่อนนึงบอกเราว่า
=============================== [JavaRebel Spring Framework Plugin DISABLED] ===============================
Plugins are contributed by third party and can cause compatibility problems.
If you have any troubles set -Drebel.spring_plugin=false to disable it.
------------------------------------------------------------------------------------------
Description: Supports adding new beans and adding new bean dependencies using
annotations or XML. Singletons will be reconfigured after the change. It also
supports adding or changing Spring MVC controllers or handlers.
=============================== [/JavaRebel Spring Framework Plugin DISABLED] ] ==============================
โห งอแง เลยครับไม่ตรงตัณหาของผมอย่างยิ่งเพราะผมจะเอามาใช้กับ spring แล้วขึ้นมายังงี้มันยอมไมได้เลยอ่าน log เล่นๆ เอ้อเค้าก็บอกวิธีมานี่หว่า If you have any troubles set -Drebel.spring_plugin=false to disable it.
เอาเลยผมไปจัดการไปที่ run>>condig… แล้วก็ไปเพิ่มที่นี่เลยครับ
เท่านี้หล่ะแล้วลองใหม่ก็จะเห็ฯlogหน้าตาพอจะสวยงามประมาณนี้
=============================== [JavaRebel Spring Framework Plugin ===============================
Plugins are contributed by third party and can cause compatibility problems.
If you have any troubles set -Drebel.spring_plugin=false to disable it.
------------------------------------------------------------------------------------------
Description: Supports adding new beans and adding new bean dependencies using
annotations or XML. Singletons will be reconfigured after the change. It also
supports adding or changing Spring MVC controllers or handlers.
=============================== [/JavaRebel Spring Framework Plugin ] ==============================
เท่านี้ก็หรูแล้ว
ทีนี้ลองแก้ file .java ดูแล้วไป refresh ดูครับไม่ต้องไปคลิก run ใหม่นะครับไม่ตรงจุดประสงค์อย่างยิ่งเพราะอย่างที่รู้มันก็จะไป restart server หรือไม่ก็ deploy ทับซึ่งมันไม่เหมาะกับเครื่องโปรแกรมเมอร์จนๆแรมน้อยๆอย่างผมครับแต่ก็นะพอไปดู log เฮ้ยมัน publih ไปให้เรา
ก็นั่นหล่ะครับเพราะว่าเรายังไมได้ตั้งให้มัน ปิดการ auto publish แต่ปัญหาอยู่ตรงนี้ครับพอเราไปตั้งให้มัน never auto publish มันก็จะไม่ยอม publish jsp ให้เราแต่ ตัว class แน่นอนอยู๋แล้วว่า javarebel agent รับผิดชอบเราก็เลยต้องโกง wtp กันหน่อยโดยยังตั้ง auto publish
อยู่แล้วไปเลือกเป็น module ให้มันปิดการ publish ซะเท่านี้เลย
พิมซะเมื่อยครับลองรันแล้วเทสกันดูหลาย case นะครับโดยรวมมันรวดเร็วอำนวยความสะดวกให้เราชาว spring66 มากมายผมซื้อแน่ๆ เขียนไปเขียนมาอ่านไปอ่านมายังงงอยู่ครับเอาเป็นว่าใครลองแล้วติด comment ถามกันมาแล้วกันครับ
ปล. ขอโทษด้วยครับ คุณ @roofimon นัดไว้ว่าจะขึ้นเที่ยงคืนแต่มาเอาเที่ยงวันครับ
