为什么RDF4J不能在Bluemix Cloud Foundry中工作

时间:2017-03-22 16:53:32

标签: java ibm-cloud rdf4j

RDF4J是我经常在PC上使用的apache开源图形数据库 它附带2个webApp: RDF4J-server RDF4J-workbench (用户界面)
在我的电脑上,我在同一个Tomcat中推动了2场战争,一切正常 我开始实验在Bluemix Cloud中推送这些应用(这是一个云代工厂)
java-tomcat样板需要一个War才能将它与新容器的URL相关联,因此我在2个java容器中创建2个独立的应用程序
  1表示RDF4J-Server,
  1表示RDF4J-WB。
这两个应用程序都在运行,我可以访问默认页面 在WB中,表单“连接到服务器”'允许您提供要使用的服务器的URL 我输入了网址 https://rdf4jmyserver.mybluemix.net 。 WB找到服务器但在表单上循环,无法打开数据库。

我想首先在2个容器中拆分可能是一个问题,但我做了以下测试:
-run RD4J工作台在我机器上的本地Tomcat 中 - 连接到云上的rdf4Jmyserver
- >一切都好!
所以pb不是在两个不同的地方运行。

我进行了更多研究,下载源代码(感谢开源)并使用越来越多的调试跟踪重新编译。

经过漫长的一天,我发现了Workbench代码中的错误,尽管这段代码与之前版本的Sesame一样古老:没有人抓住它。

今天的哲学:
Bluemix运行良好,但在云中推送应用可以揭示旧的弱点!

我将在下一篇文章中给出补丁。

1 个答案:

答案 0 :(得分:1)

说明: 当按工作台选择的服务器不是默认服务器(应该位于同一个根URL上)时,程序会建立一个新的cookie以跟踪新选择。

错误的代码在 CookieHandler.java

private void initCookie(final Cookie cookie, final HttpServletRequest req) {
    final String context = req.getContextPath();
     cookie.setPath(null == context ? "/" : context);
    }
}

网址类似于 https://rdf4j-mywb.mybluemix.net
因此,当没有cookie的上下文时,软件想要添加/。
但是这段代码是错误的

回到java API,可以看到:

public java.lang.String getContextPath()

返回请求URI的一部分,指示请求的上下文。
上下文路径始终位于请求URI中。
路径以" /"开头。字符但不以" /"结尾;字符。
对于默认(根)上下文中的servlet,此方法返回""。
容器不会解码此字符串。

所以这个旧的埋藏虫可以通过以下方式修复:

// cookie.setPath(null == context ? "/" : context);
cookie.setPath(context.isEmpty()? "/" : context);

现在,Workbench在Bluemix上运行良好!

HTH

PS:由于rdf4Jserver也在云容器中运行,因此当容器重置时,磁盘上的数据可能会消失。另一项工作必须完成:在Bluemix中使用对象存储服务。 (另一天)