2017-03-21 17 views
0

enter image description here IBM WAS 애플리케이션 서버가있는 Linux 시스템에서 JackRabbit Oak를 설정하려고하고 WAS에서 서버를 시작하는 데 몇 가지 문제가 발생했습니다.우리의 REST 애플리케이션 중 하나에 대한 WAS에서의 JackRabbit 설정

Apache JackRabbit은 구조화 된/구조화되지 않은 컨텐츠, 전체 텍스트 검색, 버전 관리, 트랜잭션, 관찰 등을 지원하는 계층 적 컨텐츠 저장소 인 컨텐츠 저장소입니다. 우리는 요구 사항에 따라 디지털 자산을 구조화 된 형식 (특히 트리 형태)으로 저장하는 데 사용합니다.

우리는 REST 응용 프로그램과 저장소 생성을 처리하는 다른 응용 프로그램 DAM (Digital Asset Management)을 가지고 저장소 (repository)에 노드 (들)를 요청하거나 요청할 때마다 저장소와 연결을 제공합니다. 로컬 개발 설정에서이 DAM을 JAR로 내보내고 dam.jar이라고 말하고 REST 응용 프로그램의 클래스 경로에이 DAM을 넣었습니다. 우리는 JackRabbit Oak의 JAR (Oak Run-1.4.11.jar)을 가지고 있는데, DAM 애플리케이션의 클래스 경로에 넣었습니다.

WAS 응용 프로그램 서버의 Linux 시스템에서 유사한 설정을 수행하는 동안 Windows 시스템의 Eclipse에서 JAR로 프로젝트를 반출하여 작성된 동일한 dam.jar을 사용하고 있습니다. 이것을 REST 응용 프로그램이 배포 된 서버에서 구성하여 WAS의 REST 응용 프로그램 클래스 경로에 배치합니다.

디버깅 중에 응용 프로그램이 dam.jar에서 클래스에 액세스 할 수 있지만 DAM 클래스가 JackRabbit의 클래스를 호출하려고하면 java.lang.NoClassDefFoundError가 throw되지 않습니다. 우리는 JackRabbit의 JAR (oak-run-1.4.11.jar)을 WAS의 클래스 경로에 REST 애플리케이션의 서버로 구성하여 넣었지만 서버가 시작되지 않습니다. 첨부

로그 파일입니다 /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/servers/RESTAPP/configuration/1489493294429.log /옵션/IBM은 /는 WebSphere/AppServer를에서 서버 로그 내의 많은 아무것도 없다/정보/AppSrv01/로그/RESTAPP (RESTAPP 우리의 REST 응용 프로그램의 서버 이름), 아래의 코드 조각입니다 :

[3/14/17 17 : 38 : 04 : 872 IST] 00000001 ModelMgr I WSVR0801I : 초기화 모든 서버 구성 모델 [3/14/17 17 : 38 : 08 : 564 IST] 00000001 WorkSpaceMana A WKSP0500I : 작업 공간 구성 일관성 검사가 사용 불가능합니다. [3/14/17 17 : 38 : 08 : 834 IST] 00000001 AdminTool A ADMU3200I : 서버가 시작되었습니다. 초기화 상태를 기다리는 중입니다. [3/14/17 17 : 38 : 18 : 241 IST] 00000001 AdminTool A ADMU3011E : 서버가 시작되었지만 초기화에 실패했습니다./opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/RESTAPP 아래의 서버 로그, startServer.log 및 기타 로그 파일은 실패 정보를 포함해야합니다.

여기서 우리는 이클립스 작업 공간에서 JAR 파일로 내 보내어 damu.jar 파일을 생성 했으므로이 파일에 JackRabbit Oak 라이브러리가 포함될 수 있도록 추가 정보가 필요할 수 있습니다.

응용 프로그램 서버> RESTAPP> 프로세스 정의> WAS의 Java 가상 시스템에 클래스 경로 항목을 추가하고 있습니다.

감사

답변

0

나는 스피어에서 '공유 라이브러리 "를 만들고 거기에 잭 래빗 종속성 항아리를 넣어 시도 할 것이다 :

환경 -> 공유 라이브러리를 -> 새가 ...

다음 설정 이름 "Jackrabbit"을 입력 한 다음 클래스 패스 상자에 항아리에 경로를 추가하십시오.

그런 다음 REST 응용 프로그램 (응용 프로그램 -> 응용 프로그램 유형 ->는 WebSphere 엔터프라이즈 응용 프로그램 -> [응용 프로그램 이름])

클릭 "참조"에서 "라이브러리 참조를 공유"

응용 프로그램을 선택하고 "공유 라이브러리 참조"를 클릭하십시오.

Jackrabbit 공유 라이브러리를 선택하고 오른쪽 화살표를 클릭하여 해당 공유 라이브러리를 어플리케이션에서 참조하십시오.

WebSphere의 클래스 로딩은 매우 복잡합니다. 전체 설명은 WebSphere Application Server V8.5 관리 및 구성 설명서의 22 장을 참조하십시오. 클래스 경로 항목을 JVM 정의 수준에 추가하려고하면 확실히 작동하지 않습니다.

+0

Andrew가 제안한 공유 라이브러리 접근 방식을 시도했습니다. 이제 서버를 시작할 수 있습니다. 그러나 REST 서비스가 작동하지 않습니다. –

+0

이전 질문을 참조하여 원래 질문에 stacktrace 이미지를 추가했습니다. –

0

위의 Andrew의 답변에 피기 백하려면 dam.jar과 oak-run-1.4.11.jar가 동일한 클래스 로더 내에 있고 서버 수준이 아닌지 확인해야합니다. 클래스 로더 - 서버 JVM 클래스 경로에 사용자 정의 코드를 삽입하면 서버 런타임에서이를 볼 수있게되며 서버 클래스를 실제로 오버라이드 할 수 있습니다. 그러면 서버 초기화가 실패한 이유 일 수 있습니다.

가장 쉬운 대답은 간단한 웹 응용 프로그램이라고 가정하면 두 개의 병을 WAR 모듈의 WEB-INF 디렉토리에 넣는 것입니다. 둘 다 웹 앱 클래스 로더에 의해로드되고 서로를 볼 수 있습니다. 응용 프로그램 자체에서 필요하지 않은 이유가 있다면 Andrew의 공유 라이브러리 제안은 동일한 실제 효과가 있습니다.