在我目前的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;}}
每次如果我需要长耳机会话,我都会调用这个静态函数。
我不知道我的方式是否合适,因为它有效但不够好(每次,存储库的开始都很慢)。
答案 0 :(得分: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