문제

나는 QA의 Jboss 4.2 에서이 불쾌한 행동에 부딪 쳤고, 우리가 생산에 들어가서 다른 코너 케이스를 찾기 전에 새싹에 담그고 싶습니다.

JSP는 다음과 같은 서명을 가진 메소드를 호출합니다.

 public void methodName(String arg)

이것은 다음으로 변경되었습니다.

 public void methodName(String arg, Object... args)

기존 JSP는 다음을 통해이 방법을 불렀습니다.

 methodName("param");

수정 된 코드 배치시 JBOSS는 JSP를 다시 컴파일하지 않았으며 이로 인해 QA에서 충돌이 발생했습니다. JSP에 어리석은 의견을 추가하면 문제가 해결되었습니다 (JBoss는 JSP가 변경되어 다시 컴파일되었음을 인식했습니다).

JBOSS에 대한 설정이 다시 시작될 때 JSP의 재 컴파일을 강제로 설정되어 있습니까?

편집 : 답변의 몇 가지 요점을 명확히하기 위해 설정은 JSP가 귀의 일부인 전쟁의 일부라는 것입니다. 귀에는 항아리에 모든 클래스가 있습니다.

사전 컴파일하려는 욕구와 관련하여, 시스템이 JSP가 컴파일이 필요하다고 생각하지 않는다면, 힘 재 컴파일을 사전 컴파일 할 것인가? 그렇게 보이지 않습니다. 여기서 오류는 보완 오류가 아니며 "변경"(실제로 코드 레벨이 아닌 바이트 코드 레벨) 메소드 서명으로 인해 메소드 호출 오류입니다.

부록 : 최근에 인정 된 답변의 깃발이 설정되어 있어도 JSP가 실제로 변경 되었음에도 불구하고 JSP가 재조정되지 않았다는 사실에 주목하십시오. 주요 버그는 있지만, Jboss는 정상적으로 폐쇄되었습니다. 이 시점에서 그것은 Jboss의 기존 버전이 될 것이지만, 여전히 그것을 사용하고 있다면, 작업 및 TMP 디렉토리의 내용을 삭제하는 것이 유일한 방법입니다.

나는 인정 된 답변을 단순히 바꾸지 않고 질문이 무엇을 찾고 있었는지에 대한 요점에 도달하기 때문입니다. JBOSS 버그는 일종의 별도의 문제입니다.

도움이 되었습니까?

해결책

JSP가 항아리로 배치되는 귀의 일부인 전쟁의 일부라면, JSP가 왜 재 컴파일되지 않았는지 분명하지 않습니다. 전쟁 파일의 JSP가 마지막 배포의 JBoss 컴파일 클래스 파일보다 새로운 타임 스탬프가 없습니까? 그렇지 않다면 배치하기 전에 전쟁/귀를 짓는 일환으로 JSP를 만질 수 없습니다. [각 JSP 파일을 수동으로 만지지 않고 UNIX "Touch"명령을 사용하는 것을 말하고 있습니다.

또는 $ jboss/server/default/deploy/jboss-web.deployer/meta-inf/jboss-service.xml의 deletworkDironContextDestroy 설정이 원하는 것일 수 있습니다. 기본적으로 거짓이지만 사실로 설정하는 것이 필요한 것일 수 있습니다. 나는 이것이 각 JSP의 첫 번째 액세스에 따라 재현되도록 재생산시 JSPS 클래스 파일을 삭제해야한다고 생각합니다.

보다 https://jira.jboss.org/jira/browse/jbas-3358 더 많은 정보를 위해서.

다른 팁

설정을 모르지만 JBoss 인스턴스의 작업 디렉토리에서 생성 된 Java 클래스 파일을 삭제하면 다음에 호출 될 때 JSP가 다시 컴파일됩니다.

Coudl은 JBoss 스타트 업 스크립트를 변경하여 컴파일 된 JSP가 저장되는 "TMP"및/또는 "작업"디렉토리를 명시 적으로 삭제합니다. Jboss는 그러면 그들 모두를 다시 컴파일하는 것 외에는 선택의 여지가 없었습니다.

미묘하지는 않지만 일을 할 것입니다.

당신을위한 한 가지 옵션은 빌드 시간에 모든 JSP를 사전 컴파일하는 것입니다. 이렇게하면 컴파일 오류가 빠르게 표시됩니다.

당신은 또한 생산에서 이것을 할 수 있습니다 - 첫 번째 액세스 속도를 높이지만, 나는 당신이 다른 무엇보다 QA 단계에 대해 더 많은 것을 원하는 느낌을 얻습니다. 그렇다면 선택한 빌드 도구의 테스트 단계 및 CI 환경에 사전 컴파일 단계를 추가 할 수 있습니다. 이것은 컴파일하지 않는 JSP가 테스트를 중단하지 않을 것이라는 확신을 제공합니다.

사전 컴파일 작업 실행에 대한 자세한 내용은 다음을 참조하십시오.

Jboss Jasper 구성

도움이 되었기를 바랍니다.

일부 JSP 컨테이너 (JSP 1.2 사양의 8.4.2 절에 따라)는 JSP 페이지를 사전 컴파일하는 기능을 지원합니다.

JSP 페이지를 사전 컴파일하려면 쿼리 문자열이있는 페이지에 액세스하십시오.

http://hostname.com/mywebapp/mypage.jsp?jsp_precompile

JSP 페이지가 실행되지 않습니다. 컨테이너가 사전 컴파일을 지원하면 필요한 경우 JSP 페이지를 컴파일합니다.

또한보십시오 http://www.rgagnon.com/javadetails/java-0414.html

Pablojim이 올바른 길을 가고 있습니다. 무슨 일이 일어나고 있는지 완전히보기 위해서는 더 많은 정보가 필요합니다. 내가 이해하는 방법은 다음과 같습니다.

Prod에서는 다른 JSP를 다시 컴파일 해야하는 JSP를 변경했습니다. 그들이 다시 컴파일하려면 두 가지 중 하나가 일어나야합니다.

  1. JSP의 컴파일 버전을 삭제해야합니다.
  2. JSP 자체를 수정해야합니다 (또는 "터치 된"경우에도 수정 된 날짜가 업데이트 됨).

모든 JSP가 작동하는지 확인 해야하는 경우 모두 개미 작업을 사용하여 사전 컴파일되었습니다. 이를 통해 전쟁 파일에서 전쟁 파일을 사전 컴파일 된 JSP로 배포 할 수 있습니다. 이것은 당신의 문제를 해결해야합니다.

파일이 전쟁 파일로 배포되지 않았지만 폭발 형식으로 배치 된 경우 웹 앱 포장을 심각하게 고려하십시오 배치를위한 전쟁 파일에서. 이것은 환경간에 배포하기에 좋은 패키지입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top