Tuesday, 16 October 2007

NoInitialContextException ที่เกิดขณะรัน EJB Client Application

NoInitialContextException ที่เกิดขณะรัน EJB Client Application บน JBoss 4.0+Eclipse 3.2

หลาย ๆ ท่านที่เคยเขียน EJB มา คงจะเคยพบ error ที่ชื่อว่า NoInitialContextException กันมาบ้าง หลังจากที่ผมเขียนเรื่องปัญหาที่เกิดจากการ context lookup ไม่ได้ไปแล้ว คราวนี้เราจะมาคุยกันถึง
ปัญหา คลาสสิคอีกหนึงตัว ที่ผมจั่วหัวไว้ข้างบนนั่นเอง

ทำไมผมถึงเรียกว่าเป็น error ที่ คลาสสิค!?

นั่นก้อเป็นเพราะว่ามันเกี่ยวข้องการกับเซ็ต class path นั่นเอง ถ้าหากเราใช้ IDE ที่เก่ง ๆ เช่น JBuilder , RAD เป็นต้น ก้อจะไม่พบปัญหานี้ เนื่องจาก tool จะ config ค่า enviroment ต่าง ๆ ให้กับเราเอง แต่ถ้าเป็นนักพัฒนาประเภทฟรีนิยม เช่น Ecliepse จะพบได้ error นี้แทบจะทุกครั้งที่เริ่มทำโปรเจ็ค EJB เลย
ก้อว่าได้ จากที่ผมเกริ่นมาทั้งหมด

หลายท่านคงจะเดาถูกแล้วว่า ปัญหาประเภทนี้เกิดจากการ หา libraly ตัวที่ต้องการไม่พบ ซึ่ง libraly ประเภทนี้ก้อขึ้นอยู่กับว่า Application Server ที่ใช้อยู่เป็นของค่ายใดถัาเป็น JBOSS 4.0 จะมีชื่อว่า jbossall-client.jar ซึ่งเราก้อไม่จำเป็นที่จะต้องไป download มาให้วุ่นวาย
เพราะว่ามันก้อบรรจุอยู่ภายใต้ Application Server ที่เรา install อยู่นั้นเอง ภายใต้ path ดังนี้

/<JBoss Home>/client/jbossall-client.jar

แต่ถึงแม้ว่าเราจะเซ็ต class path ไว้ที่ enviroment ของเครื่องแล้วก้อตามที แต่ error ที่กล่าวมาก้อยังไม่หายเสียที ที่เป็นเช่นนั้นก้อเพราะว่า Eclipse ของเราจะไม่มอง class path ที่เซ็ตไว้ที่เครื่อง แต่จะมองจากภายในตัว project เท่านั้นนะครับ นั่นคือเราจะต้องใช้วิธีเพิ่ม
โดยการ add libraly ด้วยเมนู project>properties>java build path เท่านั้นครับ

ลองไปเล่นดูนะครับกับ Eclipse เพราะจากที่ผมเคยใช้ tool ต่าง ซึ่งจะ Genarate Code ให้
เราเกือบทั้งหมด แต่สำหรับ Eclipse จะไม่ทำให้ทั้งหมด ซึ่งเป็นประโยชน์ในการศึกษาด้วยการแก้ปัญหาได้
เป็นอย่างดี ถ้าติดปัญหาอะไรก้อสอบถามกันเข้ามาได้ เพราะช่วงนี้ผมก้อหันกลับมาใช้ Eclipse ด้วยเช่นกัน

No comments: