Sunday, November 11, 2012

KM: WebLogic - การใช้งาน jconsole เพื่อ connect ไปยัง WebLogic JVM

การใช้งาน jconsole เพื่อ connect ไปยัง WebLogic JVM


Problem

jconsole สามารถใช้เป็นเครื่องมือในการ monitor jvm behavior ได้ในระดับหนึ่ง โดยแนวทางที่จะเสนอนี้เป็นการแก้ปัญหาการใช้ jconsole เพื่อไป monitor jmx component บน remote WebLogic Server (version 10.3.x) ซึ่งถึงแม้จะระบุ parameter เพื่อเปิด jconsole ขึ้นมา ก็ยังได้ error no permission

## Command to start jconsole for WebLogic Server
prompt>jconsole -J-Djava.class.path=%JAVA_HOME%/lib/jconsole.jar;%JAVA_HOME%/lib/tools.jar;C:/bea_103/wlserver_10.3/server/lib/wljmxclient.jar -J-Djmx.remote.protocol.provider.pkgs=weblogic.management.remote -debug

## Error message
Caused by: javax.naming.NamingException: Unhandled exception in lookup [Root exception is org.omg.CORBA.NO_PERMISSION:   vmcid: 0x0  minor code: 0  completed: No] at weblogic.corba.j2ee.naming.Utils.wrapNamingException(Utils.java:83) at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:232) at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:168) at javax.naming.InitialContext.lookup(InitialContext.java:392) at weblogic.management.remote.common.ClientProviderBase.makeConnection(ClientProviderBase.java:144) ... 6 more

จากที่ลองหาข้อมูล พบว่าเป็นเรื่องของการ mapping credential info ตอนที่ jconsole จะไป browse jndi tree เพื่อเข้าถึง jmx

Assumption

ปัญหาเกิดจากการใช้งาน WebLogic Server 10.3.0

Troubleshooting

  1. download ตาม link t3jconsole.jar
  2. สร้าง WebLogic full client jar ตาม command ด้านล่างก็จะได้ file ที่ชื่อว่า wlfullclient.jar
  3. เปิดใช้งาน jmx agent โดยสามารถ download file ที่เกี่ยวข้อง ตาม link jmx.zip -Dcom.sun.management.config.file=%SOME_PATH%/jmx/management.properties
  4. เปิด jconsole ด้วย command ตามด้านล่าง
    prompt>jconsole -J-Djava.class.path=C:/bea_103/wlserver_10.3/server/lib/t3jconsole.jar;%JAVA_HOME%/lib/jconsole.jar;%JAVA_HOME%/lib/tools.jar;C:/bea_103/wlserver_10.3/server/lib/wlfullclient.jar -J-Djmx.remote.protocol.provider.pkgs=fr.xebia.jmx.remote  -debug
  5. ใส่ input parameter เพื่อต่อไปยัง remote WebLogic
    Remote url=service:jmx:t3://[host]:[port]/jndi/weblogic.management.mbeanservers.runtime Username=usernamePassword=password
  6. ใส่ข้อมูล remote JVM
    ตัวอย่างหน้าการใช้งาน (ไม่ได้เปิดจาก remote JVM แต่เหมือนกัน)


Thursday, November 8, 2012

KM: JEE Series - การใช้งาน JPA caching

JPA Caching โดยใช้ Native Query

Problem

เนื่องจากต้องการทำ entity caching เพื่อ join ข้อมูลจาก 2 table โดยมีการจัด priority ของข้อมูลคือให้เอาจาก table แรกเป็นหลัก ถ้าไม่เจอให้ไปดึงข้อมูลจาก table สอง 

Assumption

พัฒนาโดยใช้
  • JPA 1.0
  • Hibernate 3
  • WebLogic Workshop 10.3

Troubleshooting

  1. เริ่มต้นด้วยการสร้าง Named Query จากเงื่อนไขของปัญหาข้างต้น จึงใช้ Native Query เพื่อ join 2 table เข้าด้วยกัน และเลือกข้อมูลจาก priority ของ table เป็นค่าส่งกลับไปใช้งาน โดยทำการระบุ hint ว่าจะทำ caching บน entity นี้


  2. สร้าง file ehcache.xml และวางตามตัวอย่าง


  3. config ค่า parameter สำหรับการทำ caching ในที่นี้ตั้ง TTL ไว้ที่ 60 วินาที


  4. แก้ไข persistence.xml เพื่อเปิดการใช้งาน caching โดยในที่นี้ใช้ ehcache library


  5. เพิ่ม backport-util-concurrent-3.0.jar และ ehcache-1.5.0.jar ใน server class path


  6. เรียกใช้งาน Named Query ที่สร้างไว้

Conclusion

จากการทดสอบ ได้ผลลัพธ์ออกมาถูกต้อง โดยดูจาก sql statement ที่แสดงออกใน console จะไม่พบ statement ที่ทำการ caching ไว้ แต่ใน JPA น่าจะมีวิธีทำที่ถูกต้องกว่านี้