2017-03-22 1 views
1

RDF4J는 PC에서 자주 사용하는 아파치 오픈 소스 그래프 db입니다. RDF4J 서버RDF4J-워크 벤치 (사용자 인터페이스) 내 PC에
내가 같은 톰캣에 2 개의 전쟁을 누르고 모든 것이 괜찮 :
는이 웹 애플리케이션이 제공됩니다.
나는 (클라우드 파운드리)을 Bluemix 클라우드 새 컨테이너의 URL과 연결하기 위해
자바 바람둥이 보일러는 하나의 전쟁을 원하는에 이러한 애플 리케이션 푸시에 실험을 시작, 그래서 RDF4J-Server 용
1, RDF4J-WB 용
1 2 개의 Java 컨테이너에
을 각각 만듭니다.
두 앱이 모두 실행 중이며 기본 페이지에 액세스 할 수 있습니다.
WB에서 '서버에 연결'형식을 사용하면 작업 할 서버의 URL을 제공 할 수 있습니다.
나는 https://rdf4jmyserver.mybluemix.net을 입력했다. WB는 서버를 찾지 만 폼의 루프를 실행하여 db를 열 수 없습니다.
RDF4J가 Bluemix Cloud Foundry에서 작동하지 않는 이유

나는이 용기에 분할이 문제가 될 수 있다는 것을 처음으로 생각하지만, 나는 다음과 같은 시험을 수행하십시오에 rdf4Jmyserver 에 내 컴퓨터에서
-connect을 지역 톰캣에서
-run RD4J 워크 벤치를 구름

-> 모든 것이 좋습니다!
그래서 pb는 두 개의 다른 장소에서 실행되지 않습니다.

나는 조금 더 조사하고, 소스 코드를 다운로드하고 (감사의 오픈 소스), 더 많은 디버그 추적으로 다시 컴파일한다.

긴 날이 지난 후에이 코드가 이전 버전만큼 오래 되었음에도 불구하고 Workbench 코드에서 버그를 발견했습니다. 아무도 잡을 수 없습니다. Bluemix 잘 작동
하지만 클라우드에서 응용 프로그램을 추진하는 것은 오래된 약점을 드러 낼 수 :

오늘 철학!

다음 게시글에 패치를 제공 할 예정입니다.

답변

1

설명 : workbench에 의해 선택된 서버가 기본 루트 주소 (동일한 루트 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 /.
그러나 이 코드는 false입니다.

다시 자바 API로 돌아가서, 하나는 볼 수

공공 java.lang의를.String getContextPath()

요청의 컨텍스트를 나타내는 부분을 반환합니다.
컨텍스트 경로는 항상 요청 URI에서 첫 번째로옵니다.
경로는 "/"문자로 시작하지만 "/"문자로 끝나지 않습니다.
기본 (루트) 컨텍스트의 서블릿의 경우이 메서드는 ""을 반환합니다.
컨테이너가이 문자열을 디코딩하지 않습니다.

그래서이 오래된 매장 버그를 해결할 수 있습니다 :

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

그리고 지금, 워크 벤치는 Bluemix에 잘 작동합니다!

HTH

PS : rdf4Jserver가 구름 용기에서도 실행될 때 용기가 재설정되면 디스크 datas 사라질 수있다. Bluemix에서 objectstore 서비스를 사용하는 또 다른 작업을 수행해야합니다. (다른 날)

관련 문제