2011-09-21 4 views
0

설치에 대한 특정 정보를 얻기 위해 파일에 액세스해야하는 JavaEE 애플리케이션이 있습니다.EJB의 전역 액세스 가능한 속성

이 액세스는 읽기 전용, 나는 내가 "파일을"필요하지 않습니다 즉, 응용 프로그램 내에서 해당 파일을 변경할 필요가 없습니다 직접, 그냥 콘텐츠 (바이트 배열)입니다.

파일 시스템을 사용하는 EJB에는 제한이 있습니다. 나는 그것과 관련된 문제를 이해하지만 이것에 대한 대안 해결책을 이해할 수는 없다.

파일의 경로는 사용자가 구성 할 수 있어야하지만 파일의 내용에 변경 사항을 추적 할 필요가 없습니다. 로드 된 후에는 사용자가 다른 파일을 선택하지 않으면 그대로 유지됩니다. 따라서 응용 프로그램 아카이브 내에 패키지 할 수 없습니다.

이 파일 기반 접근법은 오래 전에 우리가 보유한 일부 레거시 시스템에 의한 결정입니다. 현재 변경할 수있는 방법이 없습니다. 즉, JavaEE 애플리케이션에서 파일을 적어도 한 번 사용하여 콘텐츠를로드해야합니다.

또 다른 제한 사항은이 파일을 데이터베이스에 보존 할 수 없다는 것입니다.

파일 시스템 액세스의 EJB 제한을 위반하지 않고 어떻게해야합니까?

나는 사용자가 서버에이 정보를 지속 한 다음 서버에 파일을 업로드하고 생각. 하지만 어떻게해야합니까? 이 정보는 서버의 여러 인스턴스 (예 : 클러스터 아키텍처)를 포함하여 전역으로 액세스 할 수 있어야합니다.

사용자는 한 번이 파일을 구성해야합니다 (반드시 기본 응용 프로그램 내에서, 그냥이를 구성하는 다른 응용 될 수있다). 서버가 다시 시작 되더라도 사용자가 더 이상 구성하지 않아도 파일의 내용에 계속 액세스 할 수 있어야합니다.

나는 글래스 피쉬 V2.1.1 서버의 EJB 3.0 사양을 JavaEE 어플 (5)를 사용하고 있습니다.

감사합니다, 티아고.

+0

흥미로운 요구 사항인데 왜 데이터를 데이터베이스에 유지할 수 없습니까? 사용자가 오늘 각 클러스터 멤버에게 파일을 업로드합니까? – home

+0

이 파일에 액세스 할 수있는 정보가있을 수 있으므로 데이터베이스에 유지할 수 없습니다. 따라서 파일 내용을 가져 오지 않고 공식 데이터베이스에 액세스 할 방법이 없습니다. 그런데,이 목적을 위해서 단순한 데이터베이스 (H2와 같은)를 사용할 수 있다면, 괜찮습니다. 사용자는 파일을 한 번만 업로드해야합니다. 오늘날 우리는 제한을 위반하여 파일 시스템에 직접 액세스합니다. –

+0

오늘 작동하는 이유는 무엇입니까? 좋은 연습은 아니지만 수십 개의 EJB 기반 응용 프로그램이 파일 시스템에 액세스하는 것을 보았습니다 ... – home

답변

1

나의 제안은 다음과 같습니다 (당신은 클라이언트를 제공 할 수있다)을 WebService를 통해 파일을 업로드 사용자 수에 대한 EJB 3

  1. 사용자 JAX-WS.
  2. Context 클래스의 menthod bind()를 사용하여 JNDI에 파일 내용을 저장하십시오. JNDI가 클러스터를 통해 전달되지만 Java EE Application Server의 문서를 확인해야 할 수도 있습니다.

희망적 일 수 있기를 바랍니다.

+0

나는이 솔루션을 구글에서 검색해 봤는데, [JavaHowTo의 게시물] (http://javahowto.blogspot.com/2010/11/programmatically-bind-global-jndi.html)에서 바인딩이 서버가 재시작 될 때까지 지속됩니다. 응용 프로그램 서버가 다시 시작 되더라도 정보에 액세스 할 수 있어야합니다. –

+0

이 예제는 서블릿의 preDestroy 메소드에서 변수를 명시 적으로 바인딩 해제합니다. 따라서 변수를 다시 시작할 때 사용할 수있게하려면 변수의 바인딩을 해제하지 마십시오. –

0

당신은 EJB에서 두 가지 선택이 있습니다

1) 사양을 위반하여 EJB에서 액세스하는 표준 자바 파일 API를 사용합니다. 클러스터링, 거래 등의 측면에서 이것이 의미하는 바를 이해하면 '안전'할 수 있습니다. 읽기 전용 액세스 만하고 있으므로 OK 여야합니다.

2) 파일 시스템 액세스를 지원하는 JCA 어댑터를 사용하십시오. 당신은 자신의 글을 쓸 수도 있고, 오픈 소스를 시도해 볼 수도 있습니다 (소스 위조에 관한 것 같아요). 아니면 오라클 글래스 피시 오라클 에디션과 함께 사용하기 위해 오라클을 판매 할 것입니다. 아마 너의 상황에 과도 할 것이다.

파일 io가 해당 사양에서 허용되므로 파일 액세스를 수행하는 웹 앱 구성 요소를 프로젝트 (Servlet)에 추가 할 수도 있습니다. 다음과 같이