2012-05-08 2 views
2

제 질문은 두 가지입니다. 먼저, 문제를 설명하고 두 번째로 솔루션이 클래스 로더를 구현한다고 가정하고 웹 애플리케이션에서이를 수행하는 방법을 설명합니다.웹 응용 프로그램 리소스로드를 리디렉션하도록 ClassLoader를 확장해야합니까?

내 문제는 이것입니다. 우리 회사는 다른 회사에서 만든 프레임 워크를 사용하고 있습니다. XML 파일을 사용하여 웹 페이지를 생성하며이 xml 파일은 다른 라이브러리 (jar 파일) 내에 있습니다. 이 라이브러리는 자주 생성되기 때문에 동적 인 것은 아닙니다 (매주?). 그러나이 라이브러리는 필드의 수, 수집 할 정보의 유형 (날짜/시간, 콤보 상자 등) 등을 결정합니다.

동적으로 이러한 필드를 동적으로 이동할 수 있는지 여부는 회사에서 질문했습니다. 동적으로 페이지를 새로 고치고 레이아웃의 변경 사항을 볼 수 있습니다.

  1. 이 도구를 만들기 : 나는 내가 두 가지 가능성을 의미, 몇 가지 예비 시험을했고,이 XML 파일은 항아리에 위치하기 때문에 XML을 수정하면, 그러나, 웹 페이지에 원하는 효과를주지 않는 것을 발견 jar 파일을 웹 응용 프로그램의 범위를 벗어나서 수정합니다. 물론 이것이 동적 일 수는 없음을 암시합니다. 또한 도구를 관리하기 위해 웹 응용 프로그램을 제외하고 인터페이스를 만들어야합니다. 더군다나, 나는 이것이 매우 위험한 접근법이며, 아마도이 솔루션을 어떤 비용으로도 피해야한다는 인상을 떨는 것처럼 보일 수 없다.
  2. 클래스 로더 (구체적으로 getResourceAsStream)를 구현하고 기본 동작을 수행하는 대신 이러한 xml 파일을로드하라는 호출을 볼 때 원본을 기반으로 XML 파일을 생성하고 필요에 따라 정보를 수정 한 다음 반환합니다. 리소스를 호출자 (이 경우 타사 프레임 워크)에게 보냅니다.

첫 번째 질문은 # 2 최선의 선택입니까? 아니면 다른 옵션이 있습니까 (아니면 # 1을 고수해야합니까?)?

제 두 번째 질문은 내 자신의 클래스 로더를 구현해야한다고 가정 할 때 웹 응용 프로그램에서 어떻게해야합니까? 나는 Tomcat 7을 사용하고 있지만 가능하다면 솔루션을 사용하고있는 웹 컨테이너와 독립적으로 솔루션을 원합니다.

도움이 될 것입니다.

+0

프레임 워크가 클래스 경로에서 XML 만로드 할 수 있는지 먼저 확인합니다. 파일 시스템로드 등을위한 다른 '커넥터'가있을 수 있습니다. 그렇지 않은 경우, 다른 '커넥터'를 허용하도록 코드를 수정하는 것이 얼마나 쉬운 지 알 것입니다. 둘 다 가능하지 않다면 나는 당신의 아이디어가 유망하다고 생각합니다. 나는 'classpath connectors'만을 제공하는 프레임 워크를 다뤘습니다. ** ** 매우 귀찮습니다! –

+0

나는 커넥터에 익숙하지 않다. 심지어 XML로 파일을 클래스 로더를 사용하여 액세스 중인지 100 % 확실하지 않습니다.방금 jar 파일에 클래스 로더가 사용되었다고 가정했습니다. 커넥터가 사용되지 않고 있는지 확인하는 방법이 있습니까? 답장을 보내 주셔서 감사합니다. @PaulGrime! – Neil

+0

안녕하세요, 저는 커넥터별로 특별한 의미가 없었습니다. 저는 커넥터를 '응용 프로그램에 XML 컨텐트를 제공하는 코드'로만 의미했습니다. –

답변

0

당신의 질문을 이해할 수 있을지 모르겠다.하지만 당신이 생각해 본 xstream API를 사용해 볼 수 있을지는 모르겠다. 자바 객체가 주어지면 XML을 즉시 생성 할 수 있으며,이 시점부터는이 xml을 처리 할 수있다. 웹 페이지를 생성하는 방법. 나는이 답변이 매우 단순하다는 것을 알고 있지만, 이것이 당신이 당신의 목적을 잘 수행했을 것이라고 생각한다면, 최소한의 소란으로 XML을 생성하는 새로운 접근법으로 당신을 도울 수있는 새로운 API로 당신을 인도 할 수 있다면 그렇게 할 것입니다.

+0

내가 어디에서 얻는 지 이해하지만 원래 웹 페이지를 생성 할 때의 문제점은 원래 XML을 수정하는 것이 아닙니다. 나는 "할 수있다"고해도 "날개 달기"만하고 처음부터 XML을 만들 수는 없지만 제 3 자 라이브러리가 나를 위해 그것을하고 있기 때문에 나는 할 수 없습니다. – Neil

1

jar를 클래스 패스에있는 디렉토리로 분해하고 XML 파일을 제 위치에서 즉시 업데이트 할 수 있습니다. 이것은 애플리케이션 내에서 내부 캐싱을 설명하지 않습니다 (다른 문제가있는 경우). 구현하기는 간단하고 ClassLoader가 가득 찬 ClassLoader 비즈니스에 포함시키지 않습니다.

+0

나는 그것을 실제로 생각하지 않았습니다. classpath 리소스 중 하나가 계속 변경되면 웹 컨테이너가 패닉 상태에 빠지지 않을까요? – Neil

+0

XML을 캐싱하는 클래스 로더와 명시 적 애플리케이션 캐싱을 고려해야한다고 생각합니다. 클래스 로더는 종종로드 된 리소스를 캐시합니다. 따라서 XML 파일을 변경해도 클래스 로더가 다시로드하지 않을 수도 있습니다. –

+0

클래스 로더는 클래스를 캐시하는 경향이 있습니다. 클래스 로더는 클래스를 간접적으로 캐시하는 경향이 있습니다 (간접적으로로드하고 VM을 "캐시"로 사용하기 때문에). 그러나 정상적인 리소스의 경우에는 가능한 한 캐시 가능한 콘텐츠로 간주하거나 캐시에 남겨두기를 전제로합니다. 분명히 클래스 로더는 "무엇이든 할 수 있습니다". 캐싱은 파일 기반 로더보다 네트워크 기반 로더에 더 많은 의미가 있으며, 클래스 로더가 예상대로 작동하는지 테스트해야합니다. 그러나 제 경험상, 그들은 비 클래스 파트를 꽤 잘 홀로 남겨 두는 경향이 있습니다. –