2012-07-20 2 views
1

OSGi 번들에서 액세스 할 수있는 리소스 (로그 파일, 데이터베이스 파일, 별도의 구성 파일 등)가 있습니다. 지금까지 필자는 상대 파일 경로를 사용하여 파일에 액세스했습니다. 그러나 이제는 내 번들이 다른 환경 (보통 오래된 Felix 및 Glassfish)에서 실행됩니다.런처와 관계없이 번들에서 파일 시스템에 액세스하는 적절한 방법은 무엇입니까?

물론 작업 디렉토리가 다르므로 디렉토리가 알려져 있고 결정적인 방법을 사용할 수 있기를 바랍니다. 내가 말할 수있는 것부터, 글래스 피시의 작업 디렉토리는 가정되어서는 안되며 spec'ed (glassfish3/glassfish/domains/domain1/config 현재)입니다.

이러한 파일을 번들 자체에 포함하려고 시도 할 수는 있지만 쉽게 액세스 할 수 없습니다. 예를 들어 로그 파일을 쉽게 찾고 캐시 된 번들을 액세스 할 필요가 없기를 바랍니다. 또한 H2 JDBC 드라이버에 번들 내부의 URL을 제공 할 수 있는지 알지 못합니다.

+0

질문을 명확히 할 수 있습니까? 엄밀히 말하면 항상 번들은 파일 시스템에 대한 액세스를 항상 기대하지는 않아야합니다.이 번들은 파일 시스템이없는 장치에 배포 될 수 있습니다. –

+0

글쎄, 만약 당신이 그 시스템이 eally 신청하지 않은 것보다 묻는 사람 문제가 있습니까? –

답변

1

여기에 몇 가지 옵션이 있습니다. 첫 번째는 구성 관리 서비스를 사용하여 구성 디렉토리를 지정하는 것이므로 필요할 경우 파일에 액세스 할 수 있습니다.

로그 파일의 경우 Ops4J Pax 로깅을 권장합니다. slf4j와 같은 로깅 API를 사용하면 Pax Logging이 로그 관리를 사용합니다. log4j 구성을 사용하여 구성 할 수 있습니다.

DB를 번들로 설치해야한다고 생각합니다. 예를 들어 더비 프로젝트에서는 더비를 많이 사용합니다. Derby는 단순히 번들로 시작한 다음 데이터베이스 파일 자체를 관리 할 수 ​​있습니다. 나는 h2에 대해 잘 모르겠다. 그러나 나는 비슷하게 작동 할 수 있다고 생각한다.

2

좋은 방법은 현재 작업 디렉토리 (System.getProperty ("user.dir") 또는 사용자 홈 디렉토리 (System.getProperty ("user.home"))의 하위 디렉토리에 영구 파일을 저장하는 것입니다.

임시 및 번들 관련 파일은 번들의 데이터 영역 (BundleContext.getData())에 저장해야합니다. 번들을 제거하면 자동으로 정리됩니다. 다른 번들이 동일한 파일에 액세스해야하는 경우 서비스를 사용하여이 정보를 전달하십시오

마지막 옵션은 주요 데이터베이스가/var 또는 Window의 해당 파일에 저장되어야하는 것과 같이 매우 긴 수명을 가진 파일입니다. 이러한 경우에는 Config Ad 분.

일반적으로 파일을 번들로 제공하고 적절한 위치로 확장하는 것이 좋습니다. 따라서 시스템 관리가 쉬워집니다.

+0

데이터베이스와 설정 파일은 현재 사용자와는 별도로 읽을 수 있어야합니다. (다른 사용자는 응용 프로그램을 시작할 수도 있습니다) OSGi 프레임 워크가 시작될 때마다 현재 작업 디렉토리가 동일하다고 가정 할 수 있습니까? ? 나는 실제로/var에 데이터를 넣을 곳이 어디인지 알 수있는 리눅스 전문가가 아니며 Window의 동등 물이 무엇인지 알지 못합니다. 이 디렉토리를 가져 오기위한 일종의 일반적인 Java 메소드가 있습니까? 필자는 초기 배포를 위해 파일을 번들에 배치 할 생각을하고 있습니다. –

+0

공유해야하는 파일은/var/myapp와 같이 고정 된 위치가 필요합니다. 그러나 이들을 번들로 제공하고 config admin을 사용하여이 위치와 내용을 제어하는 ​​것은 대개 좋은 아이디어입니다. –

관련 문제