แต่ถ้าบางครั้งเราต้องการ config JPA เอง หรือต้องการ feature ของ JPA ที่มากกว่าที่ application server เตรียมมาให้ เราต้องทำการบอก application server (GlassFish) ว่าให้มาอ่าน config จากเราไปแทน เช่น ปัจจุบัน ผมใช้ GlassFish 4.0 ในการพัฒนา project ตัว GlassFish จะมี EclipseLink 2.3.2.X แถมมาให้ แต่ผมต้องการใช้ EclipseLink 2.4.2 (ต้องการใช้ LEFT JOIN) ซึ่งถ้าเราเขียน JPQL แบบใหม่ แต่ใช้ JPA ตัวเก่า เราก็จะ run project ไม่ผ่าน
1. add dependencies EclipseLink ที่เราต้องการ เพิ่มเข้าไปใน pom.xml
<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.4.2</version> </dependency>2. ที่ glassfish-web.xml ให้เปลี่ยน <class-loader delegate="true"/> ไปเป็น <class-loader delegate="false"/>
เพื่อให้ glassfish มาอ่าน dependencies configuration ที่เรา config ไว้ใน pom.xml (ไม่ต้อง delegate ไปให้ glassfish จัดการ)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app error-url=""> <context-root>/myApp</context-root> <class-loader delegate="false"/> <jsp-config> <property name="keepgenerated" value="true"> <description>Keep a copy of the generated servlet class' java code.</description> </property> </jsp-config> </glassfish-web-app>ลอง clean and build project ดูใหม่ แล้วลอง run ดูอีกทีครับ
แค่นี้ ก็ใช้งานได้ตามปกติแล้วครับ :)
ที่มาของภาพประกอบ http://www.trendhunter.com/trends/glass-fish-bowl
ไม่มีความคิดเห็น:
แสดงความคิดเห็น