Sun GlassFish Communications Server 2.0 릴리스 노트

4장 Sun GlassFish Enterprise Server의 알려진 문제점 및 제한 사항

이 장에서는 Sun GlassFish Enterprise Server 2.1.1 소프트웨어의 알려진 문제점과 이를 해결하는 방법에 대해 설명합니다. 이러한 문제는 특히 Sun GlassFish Enterprise Server 2.1 위에 구축된 Communications Server에 영향을 줍니다. 요약문이 특정 플랫폼을 지정하지 않으면 문제는 모든 플랫폼에 적용됩니다. 이 정보는 다음 내용으로 구성되어 있습니다.

Administration

이 절에서는 관리와 관련된 알려진 문제점과 해결 방법을 설명합니다.

Communications Server이 클러스터의 하트비트 포트와의 충돌을 감지하지 못함(이슈 번호 1967)

설명

클러스터를 만들 때 Communications Server에서는 1026 ~ 45556 사이의 하트비트 포트를 임의로 지정합니다. Communications Server 설치 시 만들어진 기본 클러스터인 default-cluster의 경우 0 ~ 45556 사이에서 임의의 번호가 선택됩니다. 클러스터 만들기 프로세스는 다른 서비스에서 하트비트 포트를 이미 사용 중인지 여부를 정확히 감지하지 못합니다.

해결 방법

자동화된 클러스터 만들기 구성에서 해당 포트를 이미 사용 중인 다른 서비스와 충돌하는 하트비트 포트를 선택한 경우, 클러스터 하트비트 포트를 시스템에서 사용하지 않는 포트로 업데이트합니다.

클러스터의 하트비트 포트를 변경하려면 다음 asadmin 명령을 사용합니다.

asadmin set cluster-name.heartbeat-port= newportnumber

도메인 만들기가 64비트 Linux를 실행하는 NFS 서버에서 중지됨(이슈 번호 1961)

설명

NFS 서버가 64비트 Linux에서 실행 중인 상태에서 네트워크 파일 시스템(NFS)을 마운트한 파일 시스템에 도메인을 만들려고 시도하는 동안 asadmin create-domain 명령이 실패할 수 있습니다.

해결 방법

알려진 해결 방법은 없습니다.

거대한 로그 파일을 회전할 때 성능 저하가 발견됨(6718611)

설명

거대한 로그 파일을 회전할 때 응답 시간이 약간 증가했습니다.

해결 방법

로거 설정에서 파일 회전 제한 및 파일 회전 시간 제한 값을 수정하여 성능 저하를 최소화할 수 있습니다. 이러한 등록 정보 값은 응용 프로그램 및 사용자 환경에 따라 달라질 수 있습니다.

IBM MQ에서 일반 RA 리소스 어댑터 배포에 실패함(이슈 6605)

설명

IBM Message Queue 제품에서 일반 RA 어댑터 배포에 실패합니다. server.policy 파일에 부여된 권한은 다음과 같습니다.


grant {
      permission java.util.logging.LoggingPermission "control";
      permission java.util.PropertyPermission "*", "read,write";
      }

해결 방법

다음과 같이 server.policy 파일의 권한을 변경하십시오.


grant codeBase
"file:${com.sun.aas.installRoot}/lib/install/applications/adminapp/-" {
  permission java.util.logging.LoggingPermission "control";
 };

경우에 따라 독립 실행형 인스턴스가 다른 인스턴스에서 파일을 가져옴(6698604)

설명

실제로 일부 환경에서는 DAS에 설치되어 있고 특정 인스턴스와 동기화될 예정인 파일이 추가 인스턴스로 전송됩니다.

해결 방법

알려진 해결 방법은 없습니다.

start-cluster 명령의 시작 메시지가 너무 자세함(6728317)

설명

asadmin start-cluster 명령은 시작하는 동안 중요하지 않은 구성 요소가 실패한 경우에도 너무 많은 메시지를 표시합니다. 클러스터의 인스턴스에 관련된 중요하지 않은 요소가 실패한 경우 다음 예의 명령 출력을 참조하십시오.


./asadmin start-cluster --port 9898 cluster1
Please enter the admin user name>admin
Please enter the admin password>
The clustered instance, instance2, was successfully started.
error 0 [#|2008-07-17T14:58:16.496+0200|WARNING|sun-appserver9.1|javax.jms|
_ThreadID=10;_ThreadName=main;
_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|[C4003]: 
Error occurred on connection creation [localhost:37676]. - cause: 
java.net.ConnectException: Connection refused|#]


error 1 [#|2008-07-17T14:58:17.517+0200|WARNING|sun-appserver9.1|javax.jms|
_ThreadID=10;_ThreadName=main;
_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|[C4003]: 
Error occurred on connection creation [localhost:37676]. - cause: 
java.net.ConnectException: Connection refused|#]


error 2 [#|2008-07-17T14:58:30.596+0200|WARNING|sun-appserver9.1|
javax.enterprise.system.container.ejb|
_ThreadID=13;_ThreadName=pool-1-thread-4;TimerBean;
_RequestID=5954a044-df06-4a3e-902a-0c40b4b6cddb;
|EJB5108:Unable to initialize EJB Timer Service. 
The likely cause is the database has not been 
started or the timer database table has not been created.|#]


error 3 [#|2008-07-17T14:58:32.512+0200|WARNING|sun-appserver9.1|
javax.enterprise.resource.resourceadapter|_ThreadID=10;_ThreadName=main;
__CallFlowPool;_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|
RAR5005:Error in accessing XA resource with JNDI name [__CallFlowPool] for recovery|#]


The clustered instance, instance1, was successfully started.
error 0 [#|2008-07-17T14:58:21.117+0200|WARNING|sun-appserver9.1|
javax.enterprise.system.container.ejb|
_ThreadID=13;_ThreadName=pool-1-thread-4;TimerBean;
_RequestID=30827d9a-72ac-4854-b216-06494b6a9fb5;
|EJB5108:Unable to initialize EJB Timer Service. The likely cause is the database has 
not been started or the timer database table has not been created.|#]


error 1 [#|2008-07-17T14:58:23.106+0200|WARNING|sun-appserver9.1|
javax.enterprise.resource.resourceadapter|
_ThreadID=10;_ThreadName=main;__CallFlowPool;
_RequestID=b41d76fa-0203-49f7-a2ae-83bf242d3e7a;
|RAR5005:Error in accessing XA resource with JNDI name [__CallFlowPool] for recovery|#]


Command start-cluster executed successfully.

해결 방법

알려진 해결 방법은 없습니다. 이러한 예외 메시지는 무시할 수 있습니다.

domain1이 없는 경우 package-appclient 스크립트가 작동하지 않음(6171458)

설명

기본적으로 as-install/lib/package-appclient.xml에는 asenv.conf 파일이 가리키는 domain1AS_ACC_CONFIG 변수를 위해 하드 코드된 값이 있습니다. domain1을 삭제하고 새 도메인을 만든 경우 AS_ACC_CONFIG 변수가 새 도메인 이름으로 업데이트되지 않아 package-appclient 스크립트의 실패 요인이 됩니다.

해결 방법

다음 중 한 가지를 수행합니다.

  1. domain1을 그대로 두고 그 주위에 다른 도메인을 만듭니다.

  2. domain1을 제거하고 as-install/lib/package-appclient.xml에서 domain1의 하드 코드된 값을 새 도메인 이름으로 변경합니다.

domain1이 없는 경우에는 새 도메인이 생성될 때마다 이 작업을 수행해야 합니다.

추가 JMX 에이전트를 사용하여 Application Server를 시작하는 기능이 지원되지 않음(6200011)

설명

J2SE 1.4.x, 5.0 이상을 Application Server에서 구성할 수 있습니다. J2SE 5.0 플랫폼의 중요한 기능은 JMX 에이전트를 시작하는 능력입니다. 이 기능은 서버를 시작할 때 시스템 등록 정보를 명시적으로 설정하면 활성화됩니다.

예를 들면 다음과 같습니다.


name="com.sun.management.jmxremote" value="true"
name="com.sun.management.jmxremote.port" value="9999"
name="com.sun.management.jmxremote.authenticate" value="false"
name="com.sun.management.jmxremote.ssl" value="false"

JMX 등록 정보를 구성하고 서버를 시작한 후 새 jmx-connector 서버가 Application Server VM 내에서 시작됩니다. 이로 인한 원하지 않는 부작용으로 관리 기능이 역으로 영향을 받고 Application Server 관리 콘솔과 명령줄 인터페이스에서 예기치 못한 결과가 발생할 수 있습니다. 문제는 내장된 jmx-connector 서버와 새 jmx-connector 서버 간에 충돌이 발생하는 것입니다.

해결 방법

jconsole(또는 다른 JMX 준수 클라이언트)을 사용할 경우 Application Server 시작과 함께 시작되는 표준 JMX Connector Server를 다시 사용할 것을 고려합니다.

서버를 시작하면 아래에 나오는 것과 유사한 행이 server.log에 나타납니다. 거기에 지정된 JMXService URL에 연결하여 자격 증명을 성공적으로 제공한 후 동일한 관리/구성 작업을 수행할 수 있습니다. 예를 들면 다음과 같습니다.


[#|2004-11-24T17:49:08.203-0800|INFO|sun-appserver-ee8.1|
javax.enterprise.system.tools.admin|_ThreadID=10;|ADM1501: 
Here is the JMXServiceURL for the JMXConnectorServer: 
[service:jmx:rmi:///jndi/rmi://hostname:8686/management/
rmi-jmx-connector]. This is where the remote administrative 
clients should connect using the JSR 160 JMX Connectors.|#]

.asadmintruststore 파일이 설명서에 설명되어 있지 않음(6315957)

설명

설명서에 .asadmintruststore 파일에 대한 설명이 없습니다. 이 파일이 서버 관리자의 디렉토리에 없으면 서버에 호스트된 일정 응용 프로그램을 업그레이드할 때 심각한 버그가 발생할 수 있습니다.

해결 방법

JMS 브로커에 도달하면 시간 제한 때문에 클러스터링된 인스턴스가 시작되지 않음(6523663)

설명

Communications Server 클러스터 인스턴스의 기본 MQ 통합 모드는 LOCAL입니다. Communications Server가 긴("not short") 위치(PATH)에 설치된 경우 클러스터 인스턴스가 시작되면 imqbrokerscv.exe가 충돌됩니다. 문제는 imqbrokersvc의 메모리 할당 문제입니다.

해결 방법

클러스터 인스턴스의 JMS 서비스 유형을 기본 LOCAL에서 REMOTE로 변경해야 합니다. 이 구성에서 모든 인스턴스는 다시 DAS 브로커를 가리킵니다. 다음 지침에 따라 REMOTE 모드로 클러스터를 구성합니다.


주 –

REMOTE 모드를 사용하면 모든 인스턴스가 한 브로커(DAS)를 사용하기 때문에 Communications Server 클러스터가 시작될 때 브로커 클러스터가 만들어지지 않습니다. 보다 자세한 정보는 http://www.glassfishwiki.org/gfwiki/attach/OnePagersOrFunctionalSpecs/as-mq-integration-gfv2.txt의 4.1절, iii 항목에서 "Auto-clustering"를 참조하십시오. 위의 기능은 사용할 수 없습니다.


Procedure명령줄 사용

시작하기 전에

환경에 따라 포트 및 비밀번호 파일을 수정합니다. 아래의 지침에서 클러스터 이름은 racluster, DAS 관리 포트는 5858, DAS JMS 포트는 7676입니다.

  1. JMS 유형을 REMOTE로 변경하여 클러스터 구성을 수정합니다.


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.type=REMOTE
  2. DAS JMS 호스트에 해당되는 JMS 호스트를 만듭니다.


    as-install/bin/asadmin.bat create-jms-host --port 5858 --user admin --passwordfile \
    as-install/bin/password_file --target racluster --mqhost localhost --mqport 7676 \
    --mquser admin --mqpassword admin dashost
  3. 기본 JMS 호스트를 이전 단계에서 만든 DAS JMS 호스트로 설정합니다.


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.default-jms-host=dashost

Procedure관리 GUI 사용

  1. 구성->cluster-name-config->Java Message Service->JMS 호스트로 이동합니다.

  2. 새로 만들기를 눌러 새 JMS 호스트를 만들고 이름을 dashost로 지정합니다.

  3. DAS의 JMS 서비스에 해당되는 구성 설정을 입력합니다. 기본값은 다음과 같습니다.

    • 호스트 이름: localhost

    • 포트: 7676

    • 관리자: admin

    • 비밀번호: admin

    이 설정을 DAS JMS 서비스에 맞게 수정합니다.

  4. Java Message Service 탭으로 돌아와 JMS 서비스 유형을 REMOTE로 변경합니다(기본값: LOCAL).

  5. default-jms-host 드롭다운 목록에서 dashost를 선택합니다.

  6. 변경 사항을 저장한 다음 노드 에이전트 또는 클러스터를 시작합니다.

Netscape 8.1.3, Mozilla 1.7 및 Safari 2.0.4 브라우저에서 jmaki 차트를 표시할 수 없음(6543014)

설명

지원되지 않는 브라우저를 사용하여 로그 통계 모니터링 페이지의 차트를 표시하려고 하면 다음 오류가 발생할 수 있습니다.


Error loading jmaki.widgets.jmaki.charting.line.Widget : id=form1:jmaki_chart11
Script: http://easqelx5.red.iplanet.com:4848/resources/jmaki/charting/ \
line/component.js (line:5437).
Message: area.initialize is not a function

해결 방법

지원되는 브라우저를 사용합니다. Communications Server에서 지원되는 브라우저의 목록은 브라우저를 참조하십시오.

create-domain 명령이 AIX의 사용자 정의 비밀번호에서 실패(6628170)

설명

AIX 운영 체제에서 사용자 정의 마스터 비밀번호로 도메인을 만드는 시도가 다음 오류와 함께 실패합니다.


keytool error (likely untranslated): java.lang.NullPointerException
 Enter keystore password:  New keystore password:

응용 프로그램 클라이언트

이 절에서는 응용 프로그램 클라이언트와 관련된 알려진 문제점과 해결 방법을 설명합니다.

Application Client Archive에 패키지로 포함된 라이브러리 JAR이 MANIFEST 파일을 덮어씀(6193556)

설명

클라이언트 JAR 내에 최상위 JAR 파일이 있는 경우(이 경우에는 reporter.jar) 클라이언트 JAR을 배포할 때 해당 JAR의 MANIFEST 파일이 클라이언트 JAR의 MANIFEST 파일을 덮어씁니다.

해결 방법

현재는 해결 방법이 없습니다.

ACC가 항상 localhost:3700에 연결하려 함(6527987)

설명

응용 프로그램 클라이언트에서는 항상 localhost:3700에 연결하려 합니다. 문제는 클라이언트 코드를 호출하려면 몇 가지 시스템 등록 정보를 읽어야 한다는 것입니다.

해결 방법

다음을 시스템 등록 정보로 설정합니다( JAVA_CMD에서 -D). 응용 프로그램 코드에서 다음을 설정하지 마십시오.


org.omg.CORBA.ORBInitialHost = server-instance-host
org.omg.CORBA.ORBInitialPort = server-instance-port

ASQuickStartupSocketChannel.keyFor()를 중단하여 SelectionKey 대신 null이 반환됨(이슈 트랙커 3027)

설명

SocketChannel이 여러 선택기에 등록되어 있는 경우 socketChannel.keyFor(lastRegisteredSelector)를 수행하면 SelectionKey 대신 null이 반환됩니다.

해결 방법

JDK 버그 6562829와 관련된 문제이며 6.0 U3에서 수정될 예정입니다. keyFor API가 호출되기 전에 선택기 래핑을 해제하는 해결 방법이 Communications Server에 포함되었습니다. JDK 버그가 수정될 때까지는 이 방법을 사용하여 keyFor를 성공시킬 수 있습니다.

번들로 제공되는 Sun JDBC 드라이버

이 절에서는 번들로 제공되는 Sun JDBC 드라이버와 관련된 알려진 문제점과 해결 방법을 설명합니다.

PreparedStatement 오류(6170432)

설명 1

응용 프로그램에서 한 트랜잭션에서 3000개 이상의 PreparedStatement 개체를 생성하는 경우 DB2에서 다음 오류가 발생할 수 있습니다.

[sunm][DB2 JDBC Driver] No more available statements. Please recreate your package with a larger dynamicSections value.

해결 방법 1

연결 풀 정의에 다음 등록 정보를 추가하여 드라이버에서 더 큰 동적 섹션 값으로 DB2 패키지를 다시 바인드하도록 합니다.

createDefaultPackage=true replacePackage=true dynamicSections=1000

설명 2

위의 PrepardStatement 오류와 관련하여 발생할 수 있는 다른 오류 메시지는 다음과 같습니다.

[sunm][DB2 JDBC Driver][DB2]Virtual storage or database resource is not available.

해결 방법 2

DB2 서버 구성 매개 변수 APPLHEAPSZ를 증가시킵니다. 권장 값은 4096입니다.

설명 3

TRANSACTION_SERIALIZABLE 격리 수준 응용 프로그램에서 TRANSACTION_SERIALIZABLE 격리 수준을 사용하고 위에 제시한 매개 변수 중 하나를 사용하면 연결하는 동안 응용 프로그램이 중단될 수 있습니다.

해결 방법 3

연결을 위해 바람직한 격리 수준을 설정하려면 상응하는 연결 풀을 같은 격리 수준에 만들어야 합니다.

시스템을 재부트하거나 Application Server를 시작한 후 Java DB가 시작되지 않음(6515124)

설명

호스트 시스템 또는 Solaris 영역을 재부트하거나 Communications Server를 시작한 후에 번들로 제공된 Java DB 데이터베이스가 자동으로 다시 시작되지 않습니다. 이 문제는 버그가 아니며 번들로 제공되는 응용 프로그램이나 타사 응용 프로그램에서 일어날 수 있는 동작입니다. 문제는 Communications Server 인스턴스보다 먼저 Java DB를 시작해야 한다는 것입니다.

해결 방법

호스트 시스템이나 Solaris 영역을 재부트한 후에는Communications Server를 시작하기 전에 Java DB를 시작해야 합니다. 예를 들면 다음과 같습니다.


/opt/SUNWappserver/appserver/bin/asadmin start-database

배포

경우에 따라 자동 배포가 클러스터에서 실패함(6610527)

설명

타이밍 문제로 인해 클러스터를 지원하도록 구성된 도메인에서 자동 배포가 실패하는 경우가 있습니다. 이 문제는 클러스터를 지원하지 않는 도메인에서 발견되지 않습니다.

해결 방법

다음 해결 방법 중 하나를 사용합니다.

응용 프로그램 특정 클래스 로더가 JSP 컴파일에서 사용되지 않음(6693246)

설명

응용 프로그램 특정 클래스 로더(applibs 또는 --libraries)가 JPS 컴파일에서 사용되지 않습니다. 따라서 이러한 JAR을 참조하는 JSP가 컴파일되지 않습니다.

해결 방법

알려진 해결 방법은 없습니다.

설명서

이 절에서는 설명서와 관련된 알려진 문제점과 해결 방법을 설명합니다.

Javadoc 불일치(다양한 ID)

몇 가지 AMX 인터페이스와 메소드를 위한 Javadoc가 누락되었거나 잘못되어 있습니다.

번들로 제공되는 ANT에서 java.lang.NoClassDefFoundError 발생(6265624)

설명

다음 예외는 스레드 "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher에서 발생합니다.

해결 방법

Communications Server 외부의 항목에 대해 번들로 제공되는 ANT를 사용하는 것은 좋지 않습니다.

EJB

HandlerChain에서 자원 삽입이 수행되지 않음(6750245)

설명

EJB 초기화 순서로 인해 HandlerChain에서 자원 삽입이 수행되지 않습니다.

해결 방법

알려진 해결 방법은 없습니다.

Java EE Tutorial

관리 콘솔을 사용하여 자원을 만들 때 대상 탭을 사용하여 서버를 대상으로 지정합니다. 명령줄 또는 asant 대상을 사용하는 경우에는 서버가 기본 대상이며 더 이상의 조치가 필요하지 않습니다.

Java Persistence

TopLink에서 Collection 필드/등록 정보가 복제 가능할 것이라고 예상함(이슈 트랙커 556)

설명

java.util.Arrays.asList() API를 사용하여 Object[]Collection으로 변환하는 경우 JDK에서 복제할 수 없는 java.util.ArrayList 구현을 반환합니다. 그러면 다음 예외가 발생합니다.


The method invocation of the method [protected native java.lang.Object 
java.lang.Object.clone() throws java.lang.CloneNotSupportedException] on the object 
[[pkg.A id = xxx]], of class [class java.util.Arrays$ArrayList], triggered an 
exception. Internal Exception: java.lang.reflect.InvocationTargetException Target 
Invocation Exception: java.lang.CloneNotSupportedException: 
java.util.Arrays$ArrayList

이 문제는 https://glassfish.dev.java.net/issues/show_bug.cgi?id=556에 설명되어 있습니다.

해결 방법

구성자를 사용하여 다른 모음을 만듭니다. 예를 들면 다음과 같습니다.


myCollection = new ArrayList(java.util.Arrays.asList(a))

GenerationType.IDENTITY 및 SyBase에서의 DataDirect 드라이버(이슈 트랙커 2431)

설명

DataDirect 드라이버가 SyBase에서 사용될 경우 GenerationType.IDENTITY를 사용하는 엔티티를 삽입하려는 시도가 실패합니다. DataDirect 드라이버가 모든 매개 변수화된 준비된 명령문에 대해 저장 프로시저를 생성하기 때문에 시도가 실패합니다.

해결 방법

domain.xml 파일에서 해당 데이터 소스에 대해 PrepareMethod=direct 등록 정보를 설정합니다.

라이프사이클 관리

이 절에서는 라이프사이클 관리와 관련된 알려진 문제점과 해결 방법을 설명합니다.

ejb-timer-service 등록 정보를 설정하면 set 명령이 실패함(6193449)

설명

ejb-timer-service 등록 정보 minimum-delivery-interval9000으로 설정한 후에 ejb-timer-service 등록 정보 redelivery-interval-in-mills7000으로 설정하려고 하면 다음 오류가 표시되면서 set 명령이 실패합니다.


[echo] Doing admin task set
[exec] [Attribute(id=redelivery-interval-internal-in-millis) : 
Redelivery-Interval (7,000) 
should be greater than or equal to Minimum-delivery-interval-
in-millis (9,000)]
[exec] CLI137 Command set failed.

문제는 재전달 간격 등록 정보를 최소 전달 등록 정보와 관련시키는 로직이 잘못되어 최소 전달 간격이 재전달 간격보다 큰 곳에서 GUI 또는 CLI를 사용하여 값을 설정하지 못한다는 것입니다.

minimum-delivery-interval-in-millis는 항상 ejb-timer-service 등록 정보 redelivery-interval-in-millis와 같거나 그보다 크게 설정해야 합니다. 문제는 Application Server에서 redelivery-interval-in-millis 값이 minimum-delivery-interval-in-millis 값보다 크다고 잘못 검증하는 것입니다.

해결 방법

다음과 같이 등록 정보의 기본값을 사용합니다.


minimum-delivery-interval(default)=7000
redelivery-interval-in-millis(default)=5000

기본값 외의 값을 사용하면 오류가 발생합니다.

비DAS 구성 내에 JMS 물리적 대상을 나열하면 오류 발생(6532532)

설명

default-config를 사용하여 JMS 물리적 대상을 보려고 하면 오류 메시지가 표시됩니다.

해결 방법

예상되는 동작입니다. Communications Server 2.0에서 default-config는 구성 정보의 템플리트이기 때문에 default-config에 대해 JMS 작업(listcreate 등)을 실행할 수 없습니다. 하지만 클러스터 또는 독립 실행형 인스턴스의 구성에 대해서는 이 JMS 작업을 실행할 수 있습니다.

Win2003에만 해당: 페이지가 지정되지 않은 풀 누수 메모리로 인해 tcp 스택 및 richaccess 테스트 중단(6575349)

설명

(Windows 2003에만 해당) rich access 기능을 수행하려고 하면 Windows 2003 시스템에서 메모리 누수가 발생합니다. 문제가 발생하는 이유는 페이지가 지정되지 않은 Win32 풀이 계속 커져서 결국 TCP/IP 스택 전체를 중지시키기 때문입니다. 오류가 발생하고 나면 TCP/IP 스택은 복구할 수 있는 상태가 되며, 유일한 복원 방법은 Windows 2003 시스템을 재부트하는 것입니다.

해결 방법

이 문제를 해결하는 방법에는 두 가지가 있습니다.

로깅

이 절에서는 로깅과 관련된 알려진 문제점과 해결 방법을 설명합니다.

access,failure의 디버그 명령문을 설정하면 Application Server 시작이 중단됨(6180095)

설명

JVM에 대해 java.security.debug 옵션을 설정하면 서버 인스턴스 시작이 교착 상태로 중단됩니다. 예를 들어 domain.xml에 다음과 같이 설정하면 이러한 문제가 발생합니다.


<jvm-options>-Djava.security.debug=access,failure</jvm-options>

해결 방법

현재는 해결 방법이 없습니다. 이 플래그를 설정하는 것을 피하십시오.

Message Queue

이 절에서는 Java Message Queue와 관련된 알려진 문제점과 해결 방법을 설명합니다.

타이밍에 따라 JMS 재연결을 성공적으로 완료할 수 없는 경우가 있음(6173308, 6189645, 6198481, 6199510, 6208728)

설명

몇 가지 문제로 인해 타이밍 종속 시나리오에서 재연결에 실패할 수 있습니다.

해결 방법

다음과 같은 방법으로 이 문제를 해결할 수 있습니다.

MQ 브로커가 시작되지 않으면 서버가 시작되지 않음(6740797)

설명

JMS를 REMOTE로 구성하면 MQ 브로커가 시작되지 않은 경우 Enterprise Server도 시작할 수 없습니다.

해결 방법

다음 JVM 옵션을 다음과 같이 설정합니다. com.sun.enterprise.jms.CONNECT_MQ_LAZILY=true . JVM 옵션을 설정했으면 MQ 브로커가 시작되지 않은 경우 Communications Server를 시작할 수 있습니다. 그러나 서버를 시작하기 전에 MQ를 시작하는 것이 좋습니다.

Linux에서 클러스터 프로필로 MQ 브로커를 시작하지 못함(6524871)

설명

Linux 시스템에 클러스터 프로필로 도메인을 만들고 나면 MQ 브로커가 시작되지 않아 java.lang.OutOfMemoryError: Java heap space 오류가 발생하고 서버 인스턴스가 다시 시작되지 않을 수 있습니다. 이 조건이 발생하면 시스템이 복구되지 않습니다. /etc/hosts 파일이 잘못 구성된 것이 문제입니다. 서버 호스트 이름이 루프백 주소 127.0.0.1을 가리키고 있습니다.

해결 방법

설계에 따라 루프백 주소를 가리키도록 구성된 네트워크 장치로는 MQ 브로커 클러스터를 시작할 수 없습니다. 이 문제는 버그가 아닙니다. 해결 방법은 Communications Server 호스트의 /etc/hosts 파일이 127.0.0.1을 가리키지 않게 하는 것입니다.

imqjmsra.jar가 업그레이드 전에 로드되는 경우 일치하지 않는 이전 클래스 및 새 클래스가 생성됨(6740794)

설명

Application Server가 시작되는 동안 해당 서버에서는 Message Queue 버전을 확인합니다. Message Queue 버전이 잘못된 경우 서버에서 imqjmsra.jar를 사용하여 업그레이드합니다. 이러한 업그레이드 JAR 및 관련 클래스는 다음에 Application Server를 다시 시작할 때까지 서버에서 사용할 수 없습니다. 이 문제는 Message Queue가 단독으로 업그레이드되거나 Application Server가 단독으로 패치되는 경우에만 발생합니다. 이에 대한 부작용으로 간혹 Application Server가 시작되지 않습니다.

해결 방법

Message Queue와 Application Server를 동일한 패치 수준으로 유지 관리하거나 Application Server를 다시 시작해야 합니다.

모니터링

이 절에서는 모니터링과 관련된 알려진 문제점과 해결 방법을 설명합니다.

HTTP 서비스 모니터링 통계 중 일부가 유용한 정보를 제공하지 않아 무시해야 함(6174518)

설명

HTTP 서비스의 일부 요소에 대한 모니터링 통계를 볼 경우 표시된 일부 값이 현재 값에 해당하지 않거나 항상 0으로 표시됩니다. 특히, 다음 HTTP 서비스 통계는 Application Server에 해당하는 정보를 표시하지 않으므로 무시해야 합니다.

해결 방법

이러한 모니터는 이후의 릴리스에서 제거되고 더 적절한 정보로 대체될 예정입니다.

관리 UI에서 JNDI 찾아보기를 열면 server.log에 대량의 예외가 덤프됨(6591734)

설명

관리 UI에서 JNDI 브라우저를 열면 수많은 예외가 발생합니다.

해결 방법

현재는 해결 방법이 없습니다.

보안

이 절에서는 Communications Server 및 웹 응용 프로그램 보안과 인증에 관련된 알려진 문제점과 해결 방법을 설명합니다.

과도한 스트레스 하에 SSL 시나리오에 OutOfMemoryError가 발생함(JDK 6 이슈 23)

설명

JDK6 Sun PKCS11 공급자에 있는 JDK 버그(https://jdk6.dev.java.net/issues/show_bug.cgi?id=23 참조)는 과도한 스트레스 하에 특정 SSL 시나리오를 실행하는 경우 OutOfMemoryError를 일으킬 수 있습니다.

해결 방법

이 문제가 발생하면 sun.security.pkcs11.SunPKCS11 공급자를 JRE 설치 경로에 있는 java.security 파일에서 제거하십시오.

SSL 종료가 작동하지 않음(6269102)

설명

SSL 종료가 작동하지 않습니다. 로드 밸런서(하드웨어)가 SSL 종료에 맞게 구성되었다면 Communications Server는 리디렉션 동안 프로토콜을 https 에서 http로 변경합니다.

해결 방법

하드웨어 로드 밸런서와 Communications Server 사이에 소프트웨어 로드 밸런서를 추가합니다.

SSL에서 소켓 연결 누수 발생(6492477)

설명

JVM 버그 때문에 HTTP Listener에서 security-enabledtrue로 설정되어 있는 경우 일부 JDK 버전에서 누수 문제가 발생합니다. 이 버그를 재현할 수 있는 단계는 다음과 같습니다.

  1. HTTP Listener에서 security-enabledtrue로 설정합니다.


    <http-listener acceptor-threads="1" address="0.0.0.0" 
    blocking-enabled="false" default-virtual-server="server" enabled="true" 
    family="inet" id=" http-listener-1" port="8080" security-enabled="true" 
    server-name="" xpowered-by="true">
  2. quicklook 테스트의 끝에서 정지 도메인을 주석으로 처리합니다.

  3. quicklook 테스트를 실행합니다.

  4. 소켓 사용을 검사합니다.


    netstat -an | grep 8080

    다음이 사용 중인 것으로 표시됩니다.


    *.8080               *.*                0      0 49152      0 LISTEN
    *.8080               *.*                0      0 49152      0 BOUND

이 문제는 GlassFish 사이트(https://glassfish.dev.java.net/issues/show_bug.cgi?id=849)에 설명되어 있습니다.

해결 방법

최신 JDK 버전으로 업그레이드합니다.

웹 컨테이너

이 절에서는 웹 컨테이너와 관련된 알려진 문제점과 해결 방법을 설명합니다.

Windows에서 --precompilejsp=true를 사용하여 응용 프로그램을 배포하면 JAR 파일이 응용 프로그램 내에서 잠겨 이후의 배포 해제나 재배포가 실패할 수 있음(5004315)

설명

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't 
be deleted.

해결 방법

응용 프로그램을 배포할 때 --precompilejsps=false(기본 설정)를 지정한 경우에는 이 문제가 발생하지 않습니다. 응용 프로그램을 처음 사용하면 JSP 컴파일이 트리거되어 첫 번째 요청에 대한 응답 시간은 이후의 요청에 대한 응답 시간보다 더 깁니다.

사전 컴파일을 수행하면 응용 프로그램을 배포 해제 또는 재배포하기 전에 서버를 중단하고 다시 시작해야 합니다. 서버를 종료하면 잠긴 JAR 파일의 잠금이 해제되어 재시작한 후 배포 해제 또는 재배포를 성공적으로 수행할 수 있습니다.

<load-on-startup> 요소가 포함된 Servlet 2.4 기반 web.xml로 WAR을 배포할 수 없음(6172006)

설명

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.xmlweb.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 페이지를 컴파일할 수 없음(6184122)

설명

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"로 설정합니다.

이 작업은 다음 중 한 가지 방법으로 수행할 수 있습니다.

어떤 방법으로 설정하든 ant에서 javac 컴파일을 위한 새로운 프로세스를 생성하지 못하도록 합니다.

웹 서비스

이 절에서는 웹 컨테이너와 관련된 알려진 문제점과 해결 방법을 설명합니다.

wscompile이 JDK6 u4 b3에서 "package javax.xml.rpc does not exist"라는 메시지와 함께 실패함(6638567)

설명

JDK 6 Update 4에 대해 wscompile ant 작업이 실패합니다. 각 JAX-RPC API 클래스의 경우 다음 오류 메시지가 표시됩니다.


package package-name does not exist

해결 방법

wscompile ant 작업을 실행하기 전에 클래스 경로에 j2ee.jar아니라 javaee.jar이 지정되어 있는지 확인합니다.