0

在我当前的 Tomcat 项目中,我集成了 JackRabbit。它的功能运行良好。但是,存储库的启动非常缓慢。花了大约5秒钟。我认为这是无法忍受的。有人对如何将 Jackrabbit 集成到 Web 项目有一些想法吗?

目前,我在 web 项目中有自己的 Session 工厂。代码如下:

 public class TMPSessionFactory {
   public static Session getSession() throws RepositoryException, NamingException {
    String configFile = "C:\\workspaces\\repository.xml";
    String repHomeDir = "C:\\JackRabbitDemo\\repository";
    Hashtable<String, Object> hashTable = new Hashtable<String, Object>();
    hashTable.put(Context.INITIAL_CONTEXT_FACTORY, DummyInitialContextFactory.class.getName());
    hashTable.put(Context.PROVIDER_URL, "127.0.0.1");
    InitialContext ctx = new InitialContext(hashTable);
    RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true);
    Repository r = (Repository) ctx.lookup("repo");

    SimpleCredentials cred = new SimpleCredentials("admin", "admin".toCharArray());
    Session session = r.login(cred, null);

    return session;}}

每次如果我需要一个jackrabbit 会话,我都会调用这个静态函数。

我不知道我的方式是否合适,因为它有效但不够好(每次,存储库的启动都很慢)。

4

1 回答 1

0

您的意思是在每次要访问您的存储库时进行查找之前创建一个新存储库并将其绑定到 JNDI 吗?所有这些代码:

String configFile = "C:\\workspaces\\repository.xml";
String repHomeDir = "C:\\JackRabbitDemo\\repository";
Hashtable<String, Object> hashTable = new Hashtable<String, Object>();
hashTable.put(Context.INITIAL_CONTEXT_FACTORY, DummyInitialContextFactory.class.getName());
hashTable.put(Context.PROVIDER_URL, "127.0.0.1");
InitialContext ctx = new InitialContext(hashTable);
RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true);

应该只调用一次。也许您应该将您的 jackrabbit 存储库声明为 Tomcat 资源,因为它在此处记录:https ://jackrabbit.apache.org/shared-j2ee-resource-howto.html

于 2013-06-24T07:01:08.803 回答