ฉันใช้การดำเนินการ JAXBContext.newInstance ในเว็บแอปพลิเคชันที่ใช้ JBoss ของฉัน อย่างที่ฉันเข้าใจการดำเนินการนี้มีน้ำหนักมาก ฉันต้องการเพียงสองอินสแตนซ์ที่ไม่ซ้ำกันของคลาส Marshaller
ข้อเสนอเริ่มต้นของฉันคือการมีบล็อก Initializer แบบคงที่ที่จะเริ่มต้นอินสแตนซ์ทั้งสองนี้เพียงครั้งเดียวเมื่อโหลดคลาส:
public class MyWebApp {
private static Marshaller requestMarshaller;
private static Marshaller responseMarshaller;
static {
try {
// one time instance creation
requestMarshaller = JAXBContext.newInstance(Request.class).createMarshaller();
responseMarshaller = JAXBContext.newInstance(Response.class).createMarshaller();
} catch (JAXBException e) {
e.printStackTrace();
}
}
private void doSomething() {
requestMarshaller.marshall(...);
responseMarshaller.marshall(...);
...
}
}
หากนี่เป็นวิธีแก้ปัญหาที่สมเหตุสมผล ฉันเดาว่าฉันจะตอบคำถามของฉันเองแล้ว แต่ฉันอยากรู้ว่านี่เป็นวิธีที่ถูกต้องในการทำเช่นนี้หรือไม่