我已经仔细阅读了问题How can I create a singleton in Apache Tomcat startup。但我的问题是单例不是我自己定义的类的实例。它是一个外部jar的实例。我该如何创建一个单例从外部罐子? 我的情况是我想使用Jena创建一个OWLModel,它需要是一个单独的并且将被所有servlet使用。但是OWLModel类来自外部jar,而不是我自己创建的类。 我对Tomcat很新鲜,我希望得到帮助。谢谢你!
答案 0 :(得分:1)
这是在servlet之间共享对象的更直接的JEE问题的一部分。
当我这样做时(包括Jena模型),我倾向于不采用纯JEE方法来解决这个问题。我的方法往往是:
(推荐)Use an EE dependency injection framework like Spring to inject a bean into the servlet。这可以在没有使用J2EE工具的情况下完成(link)。
( hack )使用我在Web应用中定义的中央工厂/注册表,它允许servlet检索该单例。
黑客行为快速而且肮脏,并且不需要你学习EE框架以便继续前进。
在代码中的某处,定义一个用于返回该实例的工厂:
public class MyFactory {
private static final Model THE_INSTANCE = ModelFactory.createDefaultModel();
static {
// Use this static initializer for any other model setup stuff.
}
public static Model getModel() { return THE_INSTANCE; }
}
然后在servlet中,只需调用MyFactory.getModel()
即可检索实例。您需要自己处理Jena concurrency,无论采用哪种方法,请注意。
编辑:一个重要的假设是外部jar在你的类路径上可用。在打包和部署WAR时进行管理。如果你的类路径上还没有jar,那么还有其他工作需要完成。