2012-05-04 2 views
3

jboss AS (5.1.0-GA)에서 sruts 2 (2.1.8.1) 응용 프로그램을 실행하고 있습니다. a.war과 b.war를 같은/server/default/deploy 경로에 넣고 struts 2 libs를/server/default/lib 경로에 놓습니다.두 개의 다른 스트럿츠 앱과 동일한 ValueStack

응용 프로그램이나 서버에는 오류 메시지가 없지만 어떤 이유에서 b.jsp 페이지에 들어가면 http://localhost:8080/b/을 입력하면 응용 프로그램의 메시지 리소스에있는 메시지가 나타납니다.

내 질문은 : 서버의/lib에 struts jar를 배치하면 모든 응용 프로그램이 동일한 값을 사용해야하는 값 스택 인스턴스가 하나만 생성됩니까? 그렇다면 모든 애플리케이션에 대해 다른 인스턴스를 보유 할 수 있지만 서버 병에 항아리를 보관하려면 어떻게해야합니까?

스트럿츠 항아리를 전쟁으로 가져 가야합니까?

감사

<s:property value="%{getText('system.title')}"/> 

이이 a.war 내 구성입니다 시스템 제목 얻기 위해 스트럿 태그를 사용

메신저 :

/WEB-INF/클래스/A-에게 message-resources.properties

system.title=Namefor system A 

n은 struts.xml는 난이 b.war

/WEB-INF/classes/b-message-resources.properties

system.title=Namefor system B 

에 대한 구성은

<constant name="struts.custom.i18n.resources" value="a-message-resources" /> 

가지고 struts.xml 내가 가지고있다

<constant name="struts.custom.i18n.resources" value="b-message-resources" /> 
+1

나는 그것이 이상하기 때문에 질문을 좋아합니다. 나는 struts2가 이것 때문에 잘못되었을 수 있음을 알 수 없다. 하나의 jsp, 각각 하나의 리소스 파일, 하나의 메시지로 두 개의 새로운 최소 struts2 응용 프로그램을 만들고이 문제를 다시 만들 수 있는지 확인하십시오. – Quaternion

+0

안녕 Quaternion, 관심을 가져 주셔서 감사합니다. 이미 2 번이 아니라 3 번 간단한 애플리 케이션을했습니다. a.war, b.war, c.war. 다음은 무슨 일이 일어 났습니까?전쟁이 처음 시작되었고 JSP의 텍스트가 올바르게 표시되었지만 앱 b는 메시지를 표시했지만 자체 속성에는 메시지가 표시되지 않았지만 앱의 메시지는 보이지 않았고 세 번째 앱은 메시지를 표시하지 않았습니다. 단지 "system.title .c "키 이름을 찾을 수 없기 때문에 이제 struts가 처음로드 된 속성 파일 하나만로드된다는 것을 알 수 있습니다. – Ferdinand

답변

4

나는 여기에서 무슨 일이 일어나는지 알 것 같아.

struts.custom.i18n.resources 값은 토큰 화되고 각 토큰은 LocalizedTextUtil.DEFAULT_RESOURCE_BUNDLES에 추가됩니다. 이것은 정적 인 최종 문자열 목록입니다. 목록에 항목 (예 : system.title)을 추가하기 전에 동일한 토큰에서 list.remove()이 호출되어 system.title의 이전 항목을 제거합니다.

이 필드는 정적이며 각 메시지에 대해 하나의 항목 만 허용하기 때문에 먼저로드되는 system.title 속성 중 다음 항목이 먼저 덮어 쓰여집니다.

또한 JBoss 인스턴스가 정적 변수를 공유하는 방식으로이 클래스를로드하고있는 것으로 보입니다. 각 앱마다이 클래스를 별도로로드하도록 JBoss를 구성 할 수 있습니다. This might be a good place start.

+0

유감스럽게 생각합니다. Jboss가 정적 변수를 별도로로드하려고 시도하는 것 같아요. 아픈 결과를 알게하십시오. – Ferdinand