JCA曾经工作过吗?它不能根据其文件

时间:2014-04-20 19:32:54

标签: jackrabbit

我正在使用自定义JAAS登录模块开发Jackrabbit的JCA实现。我们的想法是通过登录模块集成Apache Shiro身份验证和授权,使用RepositoryLoginContext,它只是为Shiro令牌提供用户名和密码以用于回调函数。 (我只有少量用户,配置了shiro.ini文件。)

在我尝试连接到存储库之前,所有部分似乎都适合。一次尝试是

SimpleCredentials userJCACredentials = new SimpleCredentials(username,shriroUserCreds.getPassword().toString());

但我似乎无法找到让它快乐的构建路径JAR。 Jackrabbit API文档让我感到沮丧。如果我查找SimpleCredentials,我会得到Day Software页面(!)但是如果我查找CryptedSimpleCredentials,我会得到一个Apache页面。认为可能只有加密版本可以与资源适配器一起使用,我尝试改用它但遇到同样的问题

connInfo = new JCAConnectionRequestInfo(cryptedCreds,workspaceName)

在第一个参数中只需要SimpleCredentials。我一直在API中找到死胡同,例如JCAConnectionRequestInfo(Credentials creds,String workspace)。如果单击“凭据”链接,则会超时。另一个gem是JCAManagedConnectionFactory的构造函数之一,它包含有关IBM Websphere(!!)的文本。

我尝试编写自己的类(基于简单凭据)实现Credentials接口,并使用

编写错误
new JCAConnectionRequestInfo(cryptedCreds,workspaceName)

变成无法解析javax.jcr.Credentials。使用Jackrabbit安装时,javax.jcr路径不存在(至少对于资源适配器版本而言)。

对上述内容没有任何意义,我尝试了第二种方法。

repoParameters.put("homeDir",ARCHIVE_REPO_DIR);
repoParameters.put("configFile",ARCHIVE_REPO_CONFIG);
repoMan = JCARepositoryManager.getInstance();
repo = repoMan.createRepository(repoParameters);

使用Map参数的最后一行是由Eclipse自动完成提示的,与显示createRepository(string,string)的文档冲突。在任何情况下,都会出现有关javax.jcr.Repository解析的错误。回到同样的东西。

我已经探索了库中的每个自下而上的路径来获得会话。这似乎是不可能的,最终没有一个不存在的定义。

查看源代码,我收集了以下内容

 JCAManagedConnectionFactory mcf = new JCAManagedConnectionFactory();
    mcf.setConfigFile(...);
    mcf.setHomeDir...);
    try {
        mcf.setLogWriter(lpw);
        connectionFactory = mcf.createConnectionFactory();
    } catch (ResourceException rex) {
        logger.error("client session failed to create connection factory");
        logger.error(rex);
    } finally {
        success = false;
    }
    if (success) {

        repo = (RepositoryImpl) connectionFactory;
        session = repo.login( needs Credentials Here );
    }

登录调用需要凭据和工作区名称。如果登录将由JAAS处理,我希望找到一个没有参数的login(),其中JAAS登录将接管。

2 个答案:

答案 0 :(得分:0)

几年前我在一个项目中使用过jackrabbit并且在它上面取得了一些小小的成功,但后来从长剑到modeshape,这是JCR的替代实现(JSR-283。这是一个非常活跃的项目,我参与了(非常小的)。开发工作继续以很快的速度发布,并定期发布新版本。

我从版本2.8开始并不差,但3.0版本是一个几乎完全重写,专注于性能,是一个愉快的使用。 4.0现在处于发布的最后阶段。

从Jackrabbit(2.2.7)到Modeshape(2.8.1)的转换相对轻松,大部分工作都是在设置配置和运行时。

我不是说你不会发现像你在Jackrabbit看到的问题,但如果你在modeshape论坛上提出一个问题,你会得到一个很好的答案和大量的持续帮助。

答案 1 :(得分:0)

经验教训:

整合Shiro不是一个好主意,但根本不是因为Shiro。 JCA需要JAAS登录。 "集成" Shiro需要对JAAS有足够的了解,我不妨采用JAAS并完成它。但是进一步说,我意识到这很好。未来还有更大的问题。

JAAS就是JAAS。虽然我已经走得很远,但我还是远远不能轻易地通过它来拾取我需要的东西。对帖子中最后一个难题的回答很简单,就是在JCA中找不到所调用的登录方法,它在你编写的JAAS登录模块中找到,并注册"通过Geronimo管理控制台为您的应用程序创建一个新的安全实体。 JAAS学习曲线的很大一部分是模型非常抽象。对于Geronimo而言,没有" JAAS简而言之#34;启发潜在的程序员。另一部分是它被如此广泛地使用,特定于一切的信息,但我所做的似乎无处不在。这并不令人惊讶,因为网络应用程序是迄今为止最大的用途。接下来,找到一个带有Jackrabbit的JAAS登录模块并不奇怪,因为JCR是为网络内容设想的。

事实证明,挖掘入JAAS虽然具有启发性,却完全浪费时间。 在努力将JAAS放在一起之后,我终于有了一个Jackrabbit Session Handle。我立刻把它用在一个包含旧代码的utx上。

事情在这里停止了。从getRootNode()开始,我的旧代码都没有工作。我让Eclipse向我展示会话句柄的可能方法,我测试了每个方法。有效的清单很简单。一些UTX相关的东西可以工作,#34; equals",hasCapabilty,isLIve等等。会话句柄的60多种方法无法正常工作。这意味着没有办法获得一个节点。这意味着你无法使用JCA做任何事情。

至于我原来的问题,我会说JCA可能在某一时刻起作用了。毕竟,没有人会编写所有这些东西只是为了排除它。而且我还会说,只要代码被修改为使用JAAS,它就会被严重破坏并变得无用。

这真的是一个肥皂盒时刻。我投入的时间非常重要。我想使用Jackrabbit的一个原因是它可以在Geronimo中与我的应用程序在同一个JVM中运行。我可以理解不符合开源标准和其他实际情况的文档。但我只能推测这是如何发生的,而且替代方案都非常消极。我早些时候闻到了一只老鼠但没有说什么。

有一件事是清楚的。 JCA(据我所知,Jackrabbit项目的其余部分)没有任何业务被吹捧为Apache项目。这对他们的名字是一种伤害,对于那些被引领到死胡同的开发者来说是一种极端的伤害。

我不知道该如何解决这个问题,但我想提请Apache基金会注意这个问题,除非是出于其他原因而不是阻止其他人通过这个问题。