2009-09-28 2 views
0

JBoss에서 개발중인 Java EE 애플리케이션의 일부로 JNDI 트리에 파일의 내용을 유지해야합니다. 파일의 내용을 바이트 배열로 읽어서 다음과 같이 JNDI에 바인딩하여이 작업을 수행합니다.JBoss의 JNDI 트리에 지속 바이트 배열

getInitialContext().rebind("customers_datafile", byteArray); 

이 작동하지만 JBoss 서버를 중지했다가 다시 시작하면 바인딩이 손실됩니다. 재시작 사이에 페리 스트를 만들 수있는 방법이 있습니까? 이상적으로 각 다시 시작할 때 위와 비슷한 코드를 사용하여 리 바인드하지 않고도이 작업을 수행하고 싶습니다.

+0

이것은 매우 독특한 요구 사항입니다. JNDI가 실제로 필요한 것은 아닙니다. 이것은 정말로 당신이 원하는 것입니까, 아니면 당신이 성취하고자하는 다른 것이 있습니까? 그리고 이것이 당신이 그것을 어떻게 풀려고하는지입니다. – skaffman

+1

아래를보십시오 - 내 생각을 재검토해야 할 것 같습니다 :) – William

답변

1

대신에 factory를 사용하십시오. 파일을 byteArray에로드하는 대신,이 작업을 수행하는 클래스를 생성하고 JBoss에 인스턴스를 생성하도록 지시하십시오. 이렇게하면 config에 파일 이름을 전달하고 JBoss가 new 일 때로드 할 수 있습니다.

그런 다음 초기 컨텍스트로 이동하여 클래스를 요청하고 여기에서 메소드를 호출 할 수 있습니다. 귀하의 경우 메서드는 바이트 배열을 반환합니다.

See the docs for details.

[편집] 실제 질문은 JBoss 클러스터의 모든 노드에서 파일을 사용할 수있게 만드는 방법입니다. JBoss는 더 많은 클러스터 노드를 생성 할 때 인스턴스를 복사하지 않을 것입니다. XML 구성의 복사본을 노드에 보내는 것뿐입니다. 그래서 정말로 유일한 옵션은 파일을 Base64로 인코딩하여 XML 설정에 값으로 넣는 것입니다.

원하지 않으면 모든 노드가 파일을 "볼 수있는"위치에 파일을 저장하는 방법을 찾아야합니다. 가장 간단한 해결책은 파일을 HTTP 서버에 업로드하고 URL을 config에 넣는 것입니다. Java는 URL에서 데이터를 쉽게 읽을 수 있으므로 파일을 모든 노드에 배포합니다.

+0

내 문제는 이러한 클래스가 파일 시스템을 참조해야한다는 것입니다. 클러스터 된 경로를 따라 가면 문제가 발생할 수 있습니다. JBoss 서버 (즉, 어떤 파일 시스템이 참조 할 것인가). 그렇기 때문에 제 유틸리티 (JBoss 외부)를 사용하여 배포 한 다음 JNDI에 유지하는 것이 이상적입니다. – William

+0

JBoss가 클러스터에서 byteArray를 어떻게 배포합니까? –

+0

글쎄요, JNDI 트리가 클러스터 사이에서 공유 될 것이라고 생각합니까? 이 주제에 관한 필자의 지식은 제한되어 있으므로, 내가 말하는 바가 이해가 안되면 수정하는 것이 행복 할 것입니다. – William