我已经采取了以下线从博客把一个资源创建调用静态块内,将使它创造一次为整个应用程序
的一个唯一的办法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