이 절에서는 웹 컨테이너와 관련된 알려진 문제점과 해결 방법을 설명합니다.
Windows에서 응용 프로그램을 배포할 때 JSP의 사전 컴파일을 요청하고 나중에 해당 응용 프로그램의 배포를 해제하거나 해당 응용 프로그램(또는 동일한 모듈 아이디를 가진 응용 프로그램)을 재배포하려고 시도하면 예상한 것처럼 작동하지 않습니다. 문제는 JSP 사전 컴파일을 수행하면 응용 프로그램의 JAR 파일을 열지만 닫지는 않고, Windows에서는 배포 해제 시 그러한 파일을 삭제하지 못하거나 재배포 시 덮어쓰지 못합니다.
배포 해제는 응용 프로그램이 Application Server에서 논리적으로 제거된다는 점에서 어느 정도는 성공한 것으로 볼 수 있습니다. 하지만 asadmin 유틸리티가 오류 메시지를 반환하지 않지만 응용 프로그램의 디렉토리와 잠긴 jar 파일은 서버에 남아 있습니다. 서버의 로그 파일에는 파일 및 응용 프로그램의 디렉토리를 삭제하는 데 실패한 것을 설명하는 메시지가 포함됩니다.
배포 해제에 실패한 후 응용 프로그램을 재배포하려고 시도하면 서버에서 기존 파일과 디렉토리를 제거하려고 하기 때문에 역시 실패하게 됩니다. 이러한 문제는 원래 배포한 응용 프로그램과 동일한 모듈 아이디를 사용하는 응용 프로그램을 배포하려고 시도하면 서버가 응용 프로그램 파일을 저장할 디렉토리 이름을 선택할 때 모듈 아이디를 사용하기 때문에 발생할 수 있습니다.
먼저 응용 프로그램의 배포를 해제하지 않고 재배포하려고 시도하는 경우도 같은 이유 때문에 실패합니다.
응용 프로그램의 배포를 해제한 후 재배포하려고 시도하면 asadmin 유틸리티는 아래와 유사한 오류를 반환합니다.
An exception occurred while running the command. The exception message is: CLI171 Command deploy failed : Deploying application in domain failed; Cannot deploy. Module directory is locked and can\qt be deleted
응용 프로그램을 배포할 때 --precompilejsps=false(기본 설정)를 지정하면 이 문제가 발생하지 않습니다. 응용 프로그램을 처음 사용하면 JSP 컴파일이 트리거되어 첫 번째 요청에 대한 응답 시간은 이후의 요청에 대한 응답 시간보다 더 깁니다.
사전 컴파일을 수행하면 응용 프로그램을 배포 해제 또는 재배포하기 전에 서버를 중단하고 다시 시작해야 합니다. 서버를 종료하면 잠긴 JAR 파일의 잠금이 해제되어 재시작한 후 배포 해제 또는 재배포를 성공적으로 수행할 수 있습니다.
web.xml 파일에서 선택 요소인 load-on-startup 서블릿 요소는 연관된 서블릿이 자신을 선언한 웹 응용 프로그램 시작의 일부로 로드되고 초기화된다는 것을 나타냅니다.
이 요소의 옵션 부분은 서블릿이 웹 응용 프로그램의 다른 서블릿과 관련하여 로드되고 초기화되는 순서를 나타내는 정수입니다. <load-on-startup\> 요소가 비어 있으면 서블릿이 웹 응용 프로그램을 포함하는 시작 중에 로드되고 초기화되는 한 순서는 상관이 없음을 의미합니다.
web.xml을 위한 Servlet 2.4 스키마는 더 이상 빈 <load-on-startup\>을 지원하지 않습니다. 즉, Servlet 2.4 기반의 web.xml을 사용할 때 정수를 지정해야 합니다. <load-on-startup/\>에서와 같이 빈 <load-on-startup\>을 지정하면 web.xml은 web.xml을 위한 Servlet 2.4 스키마에 대한 검증에 실패하며 이 때문에 웹 응용 프로그램 배포에 실패하게 됩니다.
역호환성 문제에 있어서는 빈 <load-on-startup\>을 지정해도 Servlet 2.3 기반의 web.xml과는 아무 문제 없이 작동합니다.
Servlet 2.4 기반의 web.xml을 사용하여 서블릿 로드 순서가 중요하지 않다는 것을 나타낼 때 <load-on-startup\>0</load-on-startup\>을 지정합니다.
JSP 페이지에 액세스하지만 컴파일에 실패하며, 서버 로그에 다음과 같은 스택 추적과 함께 "Unable to execute command"라는 오류 메시지가 포함됩니다.
at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec (Execute.java:655) at org.apache.tools.ant.taskdefs.Execute.launch (Execute.java:416) at org.apache.tools.ant.taskdefs.Execute.execute (Execute.java:427) at org.apache.tools.ant.taskdefs.compilers. DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter. java:448) at org.apache.tools.ant.taskdefs.compilers.JavacExternal. execute(JavacExternal.java:81) at org.apache.tools.ant.taskdefs.Javac. compile(Javac.java:842) at org.apache.tools.ant.taskdefs.Javac.execute (Javac.java:682) at org.apache.jasper.compiler.Compiler.generateClass (Compiler.java:396)
JSP 컴파일 스위치인 fork를 false로 설정합니다.
이 작업은 다음 중 한 가지 방법으로 수행할 수 있습니다.
${S1AS_HOME}/domains/domain1/config/default-web.xml에서 JspServlet의 fork init 매개 변수를 false로 전역 설정합니다.
<servlet\> <servlet-name\>jsp</servlet-name\> <servlet-class\>org.apache. jasper.servlet.JspServlet</servlet-class\> .... <init-param\> <param-name\> fork</param-name\> <param-value\>false</param-value\> </init-param\> .... </servlet\>
웹 응용 프로그램별로 sun-web.xml의 fork JSP 구성 등록 정보를 false로 설정합니다.
<sun-web-app\> <jsp-config\> <property name="fork" value="false" /\> </jsp-config\> </sun-web-app\>
어떤 방법으로 설정하든 ant에서 javac 컴파일을 위한 새로운 프로세스를 생성하지 못하도록 합니다.
Application Server PE의 기본 구성은 다중 CPU 시스템에서 최적의 상태로 실행되지 않습니다. 시작이 더 빨라진다는 장점이 있지만 이는 웹 응용 프로그램의 성능에 부정적인 영향을 줄 수 있습니다.
다음 JVM 옵션을 사용하도록 Application Server를 구성합니다.
-Dcom.sun.enterprise.server.ss.ASQuickStartup=false
비호환 빠른 정보 집합 인코딩 SOAP 메시지가 JAX-RPC 서비스로 전송되면 서비스가 제대로 응답하지 않습니다. 그러나, 동일한 서비스 또는 동일한 JAX-RPC 런타임을 사용하여 배포된 서비스에 전송되는 이후의 호환 빠른 정보 집합 인코딩 SOAP 메시지에서 잘못된 오류가 발생할 수 있습니다.
다음과 같은 방법으로 해결할 수 있습니다.
XML 인코딩 SOAP 메시지만 전송되도록 클라이언트에서 빠른 정보 집합 지원을 비활성화합니다.
호환 빠른 정보 집합 인코딩 SOAP 메시지가 전송될 수 있도록 서비스를 배포하는 컨테이너를 다시 시작합니다.