Sunday 9 September 2007

Oracle Authentication Services for Operating System

ใครที่เคยใช้งาน Oracle Application Server มาก่อน จะเห็นว่ามี OID มาพร้อมกับการติดตั้งในส่วน Infrastructure

ซึ่งในส่วน OID นี้ ก็จะทำหน้าที่หลักเก็บ username และ password ของ applications ต่าง ๆ ที่ใช้งานใน Application Server พร้อมทั้งการทำ authentication ด้วย

วันนี้ผมได้เข้าไปดูข้อมูล OID ใน OTN พบว่า Oracle ได้ออก OID สำหรับการ Authentication ระดับ OS แล้ว ชื่อเต็ม ๆ ว่า "Oracle Authentication Services for Operating System Tech Preview"

สังเกตดู ยังเป็น Tech Preview ก็คือยังไม่ใช่ตัวเต็มนั่นเอง แต่เปิดให้บรรดา geek ทั่วโลกทดลอง download เรียกน้ำย่อยก่อน

เจ้า "Oracle Authentication Services for Operating System" นี้ จะทำงานอยู่บน Oracle Database อีกที เช่นเดียวกับ OID บน Application Server
ในเอกสารใช้ Oracle XE เป็น Database ไม่มีการพูดถึงว่า ถ้าจะใช้ Database ตัวใหญ่จะทำอย่างไร

หรือว่า "Oracle Authentication Services for Operating System" ตัวนี้จะทำมาให้ใช้ฟรี เช่นเดียวกับ Oracle XE ก็ยังไม่ทราบข้อมูลชัดเจน

ส่วนข้อดีของการใช้ "Oracle Authentication Services for Operating System" ก็จะมี

  • สามารถจัดการ user account และ authentication ได้ที่เดียวทั้งหมด
  • สามารถทำ cross platform authentication ได้ แต่ใน preview นี้ ยังทำได้เฉพาะ linux เท่านั้น
  • สามารถใช้ features ที่คุ้นเคยใน OID ของ Application Server กับตัวนี้ได้ เช่น จัดการ attributes, การกำหนด password policy, การ import/export ตามมาตรฐาน LDAP เป็นต้น
สามารถตามไปอ่านข้อมูลเพิ่มเติมและทดลอง download มาใช้งานได้ที่นี่

Saturday 8 September 2007

"Believe It Or Not" กับ​สิ่งแปลก​ ​ๆ​ ​ใน​โลกของ​ JAVA

เนื่องจากว่ามีรุ่นพี่ผมคนนึงเค้าชื่อว่า "พี่เมฆ" ตอนนี้คงต้องเรียก "อาจารย์เมฆ" ตอนนี้ได้เป็นอาจารย์ช่วยสอนที่คณะ IT ของ มหาวิทยาลัยพระจอมเกล้าธนบุรี ปัจจุบันสอนวิชา Java

ด้วยเหตุนี้ "อาจารย์เมฆ" เวลาที่จะสอนใคร ก็จะใช้วิธีทำแบบทดสอบขึ้นมา เพื่อให้บรรดานักศึกษา ได้ทดสอบความรู้ความเข้าใจของ Java เพื่อวัดว่าเราอยู่ในระกับไหนแล้ว

คราวนี้ "อาจารย์เมฆ" ก็คลอดแบบทดสอบชุดล่าสุดมาแล้วครับ มีชื่อว่า "Believe It Or Not กับ​สิ่งแปลก​ ​ๆ​ ​ใน​โลกของ​ JAVA" น่าสนใจมากครับ

แบบทดสอบของ "อาจารย์เมฆ" จะเจาะลึกไปทางด้าน syntax ของภาษา Java ครับ เหมาะสำหรับคนที่เพิ่งเริ่มเข้ามาในวงการของ Java ได้เข้ามาทดสอบกัน

ใครอยากลองทำแบบทดสอบชุด "Believe It Or Not" สามารถตามเข้าไปโหลดได้ตาม link ที่อยู่ด้านล่างครับ http://www.cansmile.com/forum/index.php?topic=385.0

ตัวอย่างของคำถามในแบบทดสอบ

27. เมื่อรัน Code ด้านล่างแล้วอ่านผลลัพธ์  เชื่อหรือไม่ว่าคุณจะต้องหัวเราะ ?

int a=100000%7;
System.out.println(""+(!(13.0==13)?"Not believe !!!": a*111));

ก. จริงด้วยฮ่าๆๆ ข. Not believe
ค. ไม่เชื่อหรอก เพราะมัน Error Compile ง. งง

Friday 7 September 2007

การใช้ Token เพื่อแก้ปัญหา การ กด refresh หรือ การกดปุ่ม submit ซ้ำ ๆ (2)

เทคนิคอีกอย่างหนึ่งในการใช้ Token ในการแก้ปัญหานี้ คือ การใช้ class TokenProcessor
ซึ่งหากใครใช้ Struts จะพบว่าในตัว Action ของ Struts จะมี field ชื่อ Token ที่เป็น Instance ของ Class TokenProcessor อยู่แล้วเราจึงสามารถใช้ method saveToken(), isTokenValid(), resetToken() ได้

แต่สำหรับผู้ที่ไม่ได้ใช้ Struts นั้น ก้อสามารถดัดแปลงมาใช้ได้เช่นเดียวกันโดยในหน้า forward.jsp มีหน้าที่ไปเรียก หน้า process.jsp, หรือ Servlet (ซึ่งทำหน้าที่ในส่วนของ business process)

ใน file forward.jsp เราจะแทรกโค๊ดเข้าไปดังนี้

<%@ page import="org.apache.struts.util.TokenProcessor" %> <% TokenProcessor token = TokenProcessor.getInstance(); token.saveToken(request); %>

ในส่วนของหน้า Servlet ที่ทำ business process นั้น จะแทรก โค๊ตดังนี้

if(isTokenValid(httpServletRequest)){
resetToken(httpServletRequest);
//ส่วนทำ business process
}

ถ้าเป็นหน้า proces.jsp ที่เป็น .jsp ในการทำBusiness process แทน Servlet จะแทรกโค๊ดดังนี้ ก็เป็นอันเรียบร้อยครับ

<%@ page import="org.apache.struts.util.TokenProcessor" %> <%
TokenProcessor token = TokenProcessor.getInstance();
if(token.isTokenValid(httpServletRequest)){
token.resetToken(httpServletRequest); //ส่วนทำ business process
.........................................
}
%>

http://www.dzone.com/rsslinks/7_reasons_to_consider_flex.html

Thursday 6 September 2007

6 วิธีง่าย ๆ ที่ทำให้ Java EE เร็วขึ้น

วันก่อนเขียนเรื่องการ tuning javascript มีคนมาถามผมว่าเราจะมีการเพิ่ม performance ให้กับ JSP อย่างไร ผมจึงนำ trick เหล่านี้มาฝากครับ

  1. ใช้ HttpSession.invalidate() เพื่อที่จะใช้ clean session เนื่องจากว่าบางครั้ง session ที่เราจองไว้นั้นถ้าหากไม่มีการใช้นานๆ ก็จะเปลืองหน่วยความจำ ดังนั้นเราจึงควรที่จะ clean session ที่ไม่ได้ใช้คืนหน่วยความจำ

  2. ในหน้าของ JSP ใดที่ไม่มีการใช้ session เพื่อเป็นการประหยัดทรัพยากรของเครื่อง Application Server เราจึงควรที่จะบอกมันไว้ว่า เราไม่มีการใช้ session ในหน้า page นี้

  3. ให้เรา Implement HttpSessionBindingListener สำหรับ bean ทุกตัวที่มี scope อยู่ใน session เพื่อที่จะให้ bean นั้น สามารถคืนทรัพยากรให้กับระบบได้โดยการใช้ method valueUnbound() เมื่อไม่มีการใช้ bean นั้นแล้ว

  4. เราควรที่จะตั้งค่า session timeout ให้เร็วขึ้น เพื่อที่จะได้คืนทรัพยากรให้กับระบบได้เร็วขึ้น เราจะตั้งค่านี้ผ่าน method session.setMaxInactiveInterval() ส่วนค่าที่เหมาะสมควรเป็นเท่าใด นักพัฒนาที่คลุกคลีกับระบบนั้น ๆ น่าจะเป็นคนที่รู้ดีที่สุด

  5. ให้พยายามใช้ที่จะใช้ include directive เช่น <%@ include file="header.html" %>ในทุกที่ที่เป็นไปได้ เพราะมันจะทำงานตอน compile time แต่ถ้าใช้ jsp:include จะทำงานตอน run time ครับ

  6. พยายามใช้ cache tagging ในทุกที่ที่เป็นไปได้ครับ cache tagging จะทำหน้าที่เก็บ tag ที่ compile จาก JSP file เสร็จแล้ว เมื่อมีการเรียกใช้ในส่วนนั้นก็ไม่ต้อง compile ใหม่ สามารถดึงมาจาก cache นำไปใช้งานได้เลย รายละเอียดการทำ cache จะนำมาต่อตอนหน้าครับ

ที่มา : J2EE Performance Tuning Tips, James McGovern, Java Developers Journal

Wednesday 5 September 2007

วันก่อนเขียนเรื่องการ tuning javascript มีคนมาถามผมว่าเราจะมีการเพิ่ม performance ให้กับ JSP อย่างไรผมเลยเอา trick นี้มาฝากครับ

  1. ใช้ HttpSession.invalidate() เพื่อที่จะใช้ clean session เนื่องจากว่าบางครั้ง session ที่เราจองไว้นั้นถ้าหากไม่มีการใช้นานๆ ก็จะเปลืองหน่วยความจำ ดังนั้นเราจึงควรที่จะ clean session ที่ไม่ได้ใช้คืนหน่วยความจำ

  2. ในหน้าของ JSP ใดที่ไม่มีการใช้ session เพื่อเป็นการประหยัดทรัพยากรของเครื่อง Application Server เราจึงควรที่จะบอกมันไว้ว่า เราไม่มีการใช้ session ในหน้า page นี้โดยการใช้

  3. ให้เรา Implement HttpSessionBindingListener สำหรับ bean ทุกตัวที่มี scope อยู่ใน session เพื่อที่จะให้ bean นั้น สามารถคืนทรัพยากรให้กับระบบได้โดยการใช้ method valueUnbound() เมื่อไม่มีการใช้ bean นั้นแล้ว

  4. เราควรที่จะตั้งค่า session timeout ให้เร็วขึ้น เพื่อที่จะได้คืนทรัพยากรให้กับระบบได้เร็วขึ้น เราจะตั้งค่านี้ผ่าน method session.setMaxInactiveInterval() ส่วนค่าที่เหมาะสมควรเป็นเท่าใด นักพัฒนาที่คลุกคลีกับระบบนั้น ๆ น่าจะเป็นคนที่รู้ดีที่สุด
  5. ให้พยายามใช้ที่จะใช้ include directive เช่น <%@ include file="header.html" %>ในทุกที่ที่เป็นไปได้ เพราะมันจะทำงานตอน compile time แต่ถ้าใช้ jsp:include จะทำงานตอน run time ครับ

  6. พยายามใช้ cache tagging ในทุกที่ที่เป็นไปได้ครับ cache tagging จะทำหน้าที่เก็บ tag ที่ compile จาก JSP file เสร็จแล้ว เมื่อมีการเรียกใช้ในส่วนนั้นก็ไม่ต้อง compile ใหม่ สามารถดึงมาจาก cache นำไปใช้งานได้เลย
  7. ซึ่งการที่จะ cache tagging นั้นไม่จำเป็นที่ต้องทำการ cache ทั้งหน้า สามารถจะ cache ในส่วนใดส่วนหนึ่งของ JSP ได้ดังเช่นตัวอย่างด้านล่างซึ่งเป็นตัวอย่างของ struts framework ซึ่งต้องทำตามขั้นตอนดังนี้

1. ให้ copy tag library descriptor ของ cache tagging ของ apache ลงใน sub directory /WEB-INF application ของเรา
2. ให้ cpoy taglibrary ของ JAR file ที่ sub directory ลงใน /WEB-INF/lib ของ application ของเรา
3. ให้ใส่ element ลง deployment descripter ใน file /WEB-INF/web.xml ของ Application ของคุณดังนี้


<taglib>

<taglib-uri>http://jakarta.apache.org/taglibs/cache-1.0</taglib-uri>

<taglib-location>/WEB-INF/cache.tld</taglib-location>

</taglib>

4. ในหน้า page ไหนที่เราต้องการใช้งานเราต้องทำการใส่ directive ดังนี้


<%@ taglib uri="http://jakarta.apache.org/taglibs/cache-1.0" prefix="cache" %>

<%@ taglib uri="http://jakarta.apache.org/taglibs/cache-1.0" prefix="cache" %>5. ในส่วนไหนของหน้า JSP นั้นต้องการทำ cache tagging ก็ให้เอา element ของ cache tagging ครอบตรงส่วนนั้นเลยดังนี้


<cache:cache scope="application" name="birthdays" key="${user}">

... code that retrieves the user's birthday ...

</cache:cache>

cache tagging นี้สามารถไปดูรายละเอียดได้ที่นี้http://jakarta.apache.org/taglibs/doc/cache-doc/index.html

หวังว่าคงจะช่วยในการเพิ่มความเร็วได้ไม่มากก็น้อยครับ ถ้ามีเรื่องเกี่ยวกับพวกนี้อีกจะเอาบทความมาฝากครับ

ที่มา : J2EE Performance tuning Tips, James McGovern, Publisher Java Developers Journal

การป้องการกด submit หรือ refresh ซ้ำ ๆ ใน Struts

หลาย ๆ คนที่เคยใช้ Struts มา คงจะเคยประสบปัญหาคล้าย ๆ กัน นั่นคือ เมื่อกดปุ่ม submit หรือ refresh แล้ว ตัว Action ของ Struts จะจำค่าที่อยู่ใน request ตัวเดิม นำไป ประมวลผลอีกครั้งหนึ่ง (หมายความว่าทุกครั้งที่กดปุ่ม refresh หรือ submit action ก็จะทำงานตาม business process ที่กำหนดไว้ด้วยข้อมูลชุดเดิม ซ้ำ ๆ ) ซึ่งอาจส่งผลกระทบให้เกิดความผิดพลาดของข้อมูลโดยที่ไม่ตั้งใจ

วิธีหนึ่งที่ใช้ในการแก้ปัญหานี้นั่นคือ การใช้ method saveToken, isTokenValid และ resetToken ที่อยู่ใน class Action ของ struts นั่นเอง วิธีการก้อคือ

1. เพิ่ม saveToken(httpServletRequest) ลงใน action ตัวที่1 (คือหน้าที่จะมาเรียก page ที่ทำ business process)

2. เพิ่ม code ส่วนนี้ลงใน action ตัวที่จะต้องกันการกด submit ซ้ำ ดังนี้

if(isTokenValid(httpServletRequest)){
resetToken(httpServletRequest);
// ส่วนที่ทำการ add edit delete ข้อมูล
}else{
saveToken(httpServletRequest);
// กรณีที่ action forward กลับไปที่ page เดิม ไม่ต้องใช้ code ส่วนนี้
}


เพียงเท่านี้ ก้อจะป้องการกด submit และ refresh ซ้ำ ๆ ได้เป็นอย่างดี

บทความที่เกี่ยวข้อง

Tuesday 4 September 2007

ฉลองปลดล็อค YouTube ด้วย Java VDO Tutorial



ด้วยความที่ผมคิดว่ายังมีอีกหลายคนที่สนใจจะเริ่มต้นกับ java แต่เริ่มต้นไม่ถูก ไม่รู้จะเริ่มต้นตรงไหน
ผมจึงลองหา tutorial ใน youtube ดูปรากฏว่ามี tutorial ที่เกี่ยวกับ java มากพอสมควรเลยทีเดียวซึ่งผมคิดว่า
เหมาะกับผู้ที่เริ่มต้นสนใจ java ซึ่งใน tutorial มีเนื้อหาที่ครอบคลุมเรื่องการติดตั้ง ไปจนถึงการใช้งานพื้นฐาน เรียกได้ว่าครอบคลุมส่วนของ syntax เบื้องต้นทั้งหมดครับซึ่งมีทั้งหมดดังนี้

  1. Installing the Java Development Kit
  2. Hello World
  3. Variables and Arithmatic (Part1)
  4. Variables and Arithmatic (Part2)
  5. If Statements
  6. Object Oriented Programming
  7. Loops
  8. Switch Statements
  9. Arrays
  10. Exceptions
ปล: สรุปง่าย ๆ คือ ฉลองปลดล็อค youtube ครับ

Monday 3 September 2007

ซื้อรายวัน! Oracle ประกาศซื้อกิจการ Netsure Telecom Limited


เมื่อวานนี้ (วันที่ 2 กันยายน 2550) Oracle ประกาศซื้อบริษัท Netsure Telecom Limited
ผู้ให้บริการซอฟต์​แวร์​ด้าน "Network Intelligence and Optimization"

Oracle กล่าวว่าการซื้อครั้งนี้ เพื่อเพิ่มการวิเคราะห์ข้อมูลด้าน network ในโมดูล Business Intelligence ของ Oracle ERP
และเพื่อเพิ่มประสิทธิภาพในการเชื่อมต่อระหว่างโมดูล เช่น Oracle SCM กับ Oracle Inventory เป็นต้น

ราคาการซื้อขายครั้งนี้ ยังไม่มีการเปิดเผยแต่อย่างใด

ที่มา:

Saturday 1 September 2007

อีกแล้ว! Oracle จะซื้อบริษัท Bridgestream ซอฟต์​แวร์​ด้าน Identity Management


อีกแล้วครับ Oracle กำลังจะซื้อบริษัท Bridgestream ซอฟต์​แวร์​ด้าน Identity Management

หลังจากที่ได้รวบรวมบริษัทที่ Oracle ซื้อไปตั้งแต่ปี 2005 ถึงปัจจุบัน
ไม่ทันไร วันนี้มีข่าว Oracle จะซื้อบริษัท Bridgestream อีกแล้วครับ ด้วยเงิน 35 ล้านเหรียญสหรัฐฯ

Bridgestream เป็นบริษัทที่ทำซอฟต์​แวร์​ด้าน Identity Management
ถ้าการซื้อขายนี้สำเร็จ จะถือว่าเป็นซอฟต์​แวร์​ด้าน IDM ลำดับที่ 5 ที่ Oracle ได้ซื้อมา ถัดจาก

  • Bharosa
  • Thor Technologies
  • OctetString
  • Oblix
ลองสังเกตดู ปรากฏว่าบริษัทนี้ไม่อยู่ในรายชื่อ "เป้าหมายถัดไปที่​ Oracle ​สนใจ​จะ​ควบรวมกิจการ" ที่ผมได้ post ไปเมื่อวันก่อนครับ

ที่มา: Oracle purchases Bridgestream, its fifth identity and access management acquisition, for $35 million