ฉันได้รับ ClassCastException เมื่อใช้ DescriptorCustomizer ของ Eclipselink สำหรับประวัติ
คลาสเครื่องมือปรับแต่งของฉันดูเหมือนว่า:
public class MyCustomizer implements DescriptorCustomizer {
@Override
public void customize(ClassDescriptor classDescriptor) thorws Exception {
// Setting HistoryPolicy here.
}
}
เอนทิตีมีคำอธิบายประกอบด้วย:
@Customizer(full.packagename.MyCustomizer.class)
สิ่งนี้ทำในโมดูล EJB ในโครงการ Maven ที่มีโครงสร้างดังนี้:
- root
- ear
- เอเจบี
- สงคราม
การพึ่งพา Eclipslink คือ:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.3</version>
<scope>provided</scope>
</dependency>
โค้ดกำลังรันบน WebSphere Liberty 17.0.0.2 ซึ่งไม่มีแอปพลิเคชันอื่นปรับใช้ Eclipselink jar อยู่ในไดเร็กทอรี lib โกลบอลของเซิร์ฟเวอร์
เมื่อ Eclipselink พยายามเข้าถึงเอนทิตีเป็นครั้งแรก ฉันได้รับข้อยกเว้นต่อไปนี้:
MyCustomizer cannot be cast to org.eclipse.persistence.config.DescriptorCustomizer
ฉันพยายามรวม Eclipselink ไว้ในแพ็คเกจของแอปพลิเคชัน แต่ผลลัพธ์ก็เหมือนเดิม อะไรสามารถป้องกันการหล่อที่ถูกต้องได้ และจะแก้ไขได้อย่างไร?
แก้ไข #1
ฉันเปลี่ยนการพึ่งพา eclipselink เป็น:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.core</artifactId>
<version>2.6.3</version>
<scope>provided</scope>
</dependency>
เนื่องจากไม่มีแพ็คเกจ javax.persistence ดังนั้นจึงไม่สามารถรบกวนการทำงานภายในของ Websphere ได้
หากฉันกำลังทำการแคสต์แบบแมนนวลในแอปพลิเคชันเพื่อการทดสอบ ก็จะไม่มีข้อยกเว้นเกิดขึ้น ClassCastException ถูกส่งออกไปเมื่อมีการเรียกใช้ getCriteriaBuilder() บน EntityManager