Monday, June 02, 2008

Groovy in Ofbiz

น้องแซนแจ้งมาว่าขณะที่ merge source code ของ Ofbiz เข้า project Orangegears
พบว่ามี้ groovy code โผล่เข้ามาแล้วแล้ว
ว่าแล้วผมก็จัดแจง update source code ของ orangegears เสียหน่อย
แล้วก็สั่ง grep -ilR groovy ดู
ก็พบว่าเริ่มมีการ replace screen action script จากของเดิมที่เขียนด้วย bsh ไปเป็น groovy บ้างแล้ว
แล้วก็พบว่ามีการเตรียมการใช้ groovy ใน service layer อีกด้วย (แต่ยังไม่ได้มีการ implement)

ลองไล่เปรียบเทียบ syntax ของ bsh กับ groovy ดูว่า ช่วยลดรูปอะไรได้บ้าง

ใน ofbiz เวลา pass parameters มักจะใช้ Map ในการ pass arguments
พอเปลี่ยนเป็น groovy แล้วการสร้าง Map ก็เลยกระทัดรัดขึ้น
// bsh
payment = delegator.findByPrimaryKey("Payment",
UtilMisc.toMap("paymentId", paymentId)));

# groovy
payment = delegator.findByPrimaryKey("Payment", [paymentId : paymentId]);


แน่นอนพวกการ iterate collections นี่ได้ประโยชน์ไปเต็มๆ
// bsh
oibIter = orderItemBillings.iterator();
while (oibIter.hasNext()) {
orderIb = oibIter.next();
orders.add(orderIb.getString("orderId"));
}

# groovy
orderItemBillings.each { orderIb ->
orders.add(orderIb.orderId);
}


การอ้างถึง value ใน Map
ด้วย syntax sugar ของ Groovy ก็เลย สะอาดสะอ้านขึ้นแบบนี้
// bsh
context.put("decimals", decimals);
context.put("rounding", rounding);

# groovy
context.decimals = decimals;
context.rounding = rounding;


การ check empty หรือ null collections ก็สบายตาขึ้น
// bsh
if (glAccounts != null && glAccounts.size() > 0) {
glAccount = glAccounts.get(0);

# groovy
if (glAccounts) {
glAccount = glAccounts[0];

Related link from Roti

12 comments:

deans4j said...

สวยงามครับ :D

Sand said...

ผมเจอปัญหา start ofbiz ไม่ได้ครับพี่หลังจาก patch ofbiz กับ orangegears


java.lang.NoSuchFieldError: IS_SECURITY_ENABLED

polawat phetra said...

sand: เป็นตอน runtime ใช่ไหม ผม grep หาใน code แล้วไม่มีอ้างถึงที่ไหนเลย, คิดว่าน่าจะเกี่ยวกับ Tomcat นะ (เห็นมีการ update tomcat จำนวนหนึ่ง)

Sand said...

ผมลองไล่ดูมันเป็น Constant ของ Tomcat 6.0 ครับ
http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/coyote/Constants.html
แต่ที่น่าแปลกใจคือ OFBiz ไม่มีปัญหานี้

chanwit said...

เห็นแบบนี้แล้วมีกำลังใจ hack groovy ต่อครับ :-)

Sand said...

แก้ได้แล้วครับ เป็นความผิดพลาดของผมเองคือ OFBiz เปลี่ยนมาใช้ tomcat 6 แล้วระหว่าการ patch ผมไม่ได้ลย lib ของ tomcat 5 ออก

Sand said...

ช่วงนี้ trend Groovy มาแรงจริงๆสมใจผมเหมือนกันตั้งใจตั้งแต่แรกแล้วว่าจะใช้ Groovy

TAP said...

ถ้ายังฝึกงานอยู่คนได้ใช้แน่เลย

Sand said...

พี่ป๊อกครับ ReportServlet หายครับพอดีผมลองรัน OrangeGears ดูปรากฎว่ามี error ฟ้องขึ้นมาผมใส่ไปไล่มาไปเจอว่า Error เกิดจาก ReportServlet พอไปดูใน code ไม่เจอไฟล์ครับ พี่ป๊อกได้ commit ขึ้น svn หรือเปล่าครับพอดีผมกลัวว่าผมได้เผลอลบออกไป

Nattanicha R said...

ร่วมด้วยช่วยยินดี
เด๋วจะอัพเดทบ้าง ^_^

Mr.Emj said...

ตอนนี้ได้เริ่มเข้าไปอ่าน Groovy บ้างแล้วรู้สึกว่าถูกใจเสียจริงๆ จังๆ เลย พักเรื่องของ Ruby ไว้ก่อนตอนนี้ว่าจะตะลุยอ่าน Groovy สักเดือนแล้ว ค่อยกลับไปอ่าน Ruby เพื่อจะได้เปรียบเทียบ หาจุดดีและจุดด้อยต่อสนุกอย่างนี้นี่เอง โปรแกรม หรือว่า จะเป็นเพราะสังขาลก็ไม่รู้ตอนนี้ เริ่มมองอุปกรณ์อะไร ที่เล็กๆไม่เห็นแล้ว ขนาด Font 10
หรือ 12 ก็ต้องขยายเป็น 16 ขึ้นไป (แย่จัง) :-(

Tanakorn Numrubporn said...

หวัดดีครับพี่ป็อก ตอนนี้ผมก็กำลังอ่าน Groovy in Action อย่างเมามันส์ (เมา มากกว่า มันส์) กะจะเอามาใช้ทำความเข้าใจกับ OFBiz ดูๆ แล้ว groovy นี่ใช้แทน Java ได้เลย แถมยังใช้งานในลักษณะของ Functional Programming ได้ด้วย (อย่างน้อยความรู้ erlang ก็ไม่ต้องเรียนฟรี)