2017-03-22 7 views
1

RDF4Jは私のPCで頻繁に使用するApacheオープンソースのグラフDBです。
それは2 Webアプリケーションが付属しています:私は同じのTomcatで2つの戦争を押すと、すべてがOKである私のPC上でRDF4J-サーバーRDF4J・ワークベンチ(ユーザーインターフェース)

私は(雲のファウンドリである)Bluemixクラウド
でこれらのアプリケーションは、Java-Tomcatの決まり文句は、新しいコンテナのURLとそれを関連付けるために、単一の戦争を望んでいるので、私プッシュに実験を開始RDF4J-WBの場合は
1、RDF4J-Serverの場合は
の2つの別々のアプリケーション
を2つのJavaコンテナに作成します。
両方のアプリが実行されており、既定のページにアクセスできます。
WBでは、 'connect to server'という形式を使用して、作業するサーバーのURLを指定できます。
URL https://rdf4jmyserver.mybluemix.netと入力します。 WBはサーバーを検索しますが、フォームをループし、dbを開くことができません。
なぜRDF4JはBluemix Cloud Foundryで動作しないのですか

私は2つのコンテナ内の分割が問題になることを第一とし、私は次のテストを実行します。上のrdf4Jmyserver に私のマシン上で
-connectをローカルのTomcat
-run RD4Jワークベンチを雲

- >すべてが大丈夫です!
したがって、pbは2つの別々の場所で実行されません。

もう少し調べてみると、ソースコードをダウンロードして(おかげでオープンソース)、より多くのデバッグトレースで再コンパイルできます。

長いことの後、このコードが以前のバージョンと同じくらい古いにもかかわらず、Workbenchコードのバグが見つかりました。誰もそれをキャッチしません。今日のため

理念:
Bluemixはよくを動作しますが、クラウドでアプリをプッシュすると、古い弱点を明らかにすることができます!

私は次の記事でパッチを提供します。

答えて

1

説明: ワークベンチによる選択されたサーバーがデフォルトルート(同じルートURL上にあるはずです)でない場合、プログラムは新しい選択肢のトレースを保持するために新しいクッキーを確立します。

間違ったコードがCookieHandler.javaで、ここにある:

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

URLだからhttps://rdf4j-mywb.mybluemix.net
のようなものであるクッキーのためのコンテキストがない場合、ソフトウェアは、追加したいですa /。
しかし、このコードは偽です。

バックのJava APIに行く、人は見ることができます:

公共のjava.langを。String getContextPath()

要求のコンテキストを示す要求URIの部分を返します。
コンテキストパスは常にリクエストURIの最初に来ます。
パスは「/」文字で始まるが、「/」文字で終わっていません。デフォルト(ルート)コンテキストにおけるサーブレットの
、この方法は「」を返します。
コンテナはこの文字列をデコードしません。

だから、この古い埋葬バグがで固定することができます。

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

そして今、WorkbenchはBluemixに適しています!

HTH

PS:rdf4Jserverがクラウドコンテナでも走るように、容器がリセットされると、ディスク上の件のデータが消えることができます。 Bluemixでオブジェクトストアサービスを使用する別の仕事が必要です。 (別の日)

関連する問題