我已經採取了以下線從博客把一個資源創建調用靜態塊內,將使它創造一次爲整個應用程序
的一個唯一的辦法JAXB會比較慢別人是如果他 每個呼叫
筆者在這裏提到的是,如果爲每一個新的呼叫創建的JAXBContext那麼這將是緩慢的
我正在創建一個新的JAXBContext一個基於Java EE的Web應用程序,他們一次可以成爲許多用戶。
所以爲了避免這種情況,如果我把那個在靜態塊內部創建JAXBContext調用,它會只創建一次JAXBContext嗎?
public class MessageParser {
private static JAXBContext jaxbContext = null;
static {
try {
jaxbContext = JAXBContext.newInstance(XML.class.getPackage().getName());
}
catch (Exception x) {
}
}
public static Message parse(String requestStr) throws Exception {
Unmarshaller um = jaxbContext.createUnmarshaller();
// Does Some processing and returns the message
return message;
}
我的問題是,對於整個Web應用程序(來自不同用戶的請求)是否只有一個JAXBContext存在? – Pawan 2012-03-29 11:41:12
理論上,是的,會有。您需要注意線程同步。在web應用程序中,每個請求都在一個單獨的線程中處理,所以您應該同步創建'jaxbContext'。根據部署情況,您最終可能會使用不同的類加載器實例加載多個應用程序副本,在這種情況下,每個類加載器都會有一個副本。 – 2012-03-29 11:46:24
這很好,因爲它只通過應用程序給出它的一個實例,但爲什麼人們使用Singleton? – Pawan 2012-03-29 11:50:11