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运行良好,但在云中推送应用可以揭示旧的弱点!
我将在下一篇文章中给出补丁。
答案 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中使用对象存储服务。 (另一天)