SSISO Community

시소당

애플릿과 BEA WebLogic JMS 사용

애플릿과 BEA WebLogic JMS 사용


2004/05/12

목차


소개
Java 플러그인
프로토콜 및 용어
예제 서버 실행r
WebLogic Server 구성
애플릿 설정
애플릿 실행
WebLogic Server 씬 클라이언트 사용
Appletviewer 사용
기타 구성 고려 사항
Java Web Start 사용
첨부 1: applet.htm
첨부 2: applet1.java
첨부 3: applet.jnlp
첨부 4: 알려진 문제


소개


다음에서는 JMS를 사용하는 애플릿의 샘플 설정 및 이러한 애플릿의 설정과 실행에 관련된 다양한 분야의 설명서를 가리키는 포인터를 제공합니다. 이 문서에서는 비동기 JMS 사용자, AWT GUI, 정상 및 씬 클라이언트 jar, Java Web Start, 애플릿 뷰어 등의 사용을 비롯하여 애플릿에서 JMS를 사용하는 방법에 대해 설명합니다.

이 샘플은 D 드라이브(D:\bea)에 설치된 표준 WebLogic Server 8.1 설치를 사용하는 것으로 가정합니다. 이 자습서는 Windows에서 실행됩니다(경로 및 명령 실행은 다른 운영 체제에서는 조금 다릅니다).

WebLogic Server와 함께 애플릿을 사용하는 방법에 대한 설명은 http://e-docs.bea.com/wls/docs81/applets/index.html에서 확인할 수 있습니다.

이 예제를 WLS 8.1 GA 및 8.1 SP1에서 실행하는 데에는 몇 가지 문제가 있습니다. 첨부4에서 그 내용을 확인하십시오.

Java 플러그인


브라우저 내에서 애플릿을 실행하는 권장 방법은 Java 플러그인을 사용하는 것입니다. "이 방법은 플러그인을 지원하는 모든 브라우저에서 일관된 결과를 보장할 수 있으며 이로써 애플릿의 호환성과 신뢰성도 보장할 수 있습니다. 또한 플러그인을 통해 어느 JRE이 클라이언트 시스템에서 사용되고 있는지 쉽게 확인할 수 있습니다." 플러그인에 대한 자세한 내용은 http://www.java.sun.com/products/plugin/index.html 에서 확인할 수 있습니다(이 페이지에는 애플릿 개발에 대한 링크도 포함되어 있습니다). 플러그인은 JRE(Java Runtime Environment) 설치의 일부로 설치됩니다. WebLogic Server 8.1의 경우 JRE 1.4.1.03이 필요합니다. 앞 페이지에서 설치 방법을 참조하십시오.

프로토콜 및 용어


이 자습서 내용의 이해를 돕기 위해 이 단원에서는 프로토콜 및 프로토콜과 관련된 용어에 대해 약간의 설명을 제공합니다.

WebLogic Server communicates between Java Virtual Machines (JVMs) using Remote Method Invocation (RMI). Specifically for this tutorial, RMI is used to communicate between an applet and the server.

RMI는 여러 와이어 프로토콜을 사용할 수 있습니다. WebLogic Server의 경우 가장 효율적이고 확장 가능한 프로토콜은 t3입니다. 이 프로토콜은 다른 제약 사항이 없는 경우 기본으로 사용되는 프로토콜입니다. 처음 컨텍스트 URL을 “t3://hostname:7001/…”의 형태로 지정하여 사용합니다.

모든 메시지가 HTTP에 래핑되도록 하는 HTTP 터널링을 사용해야 하는 경우도 있습니다. 많은 방화벽들은 이 프로토콜이 통과되도록 설정되어 있기 때문에 이 방법을 사용하면 방화벽을 보다 쉽게 통과할 수 있습니다. 이 경우 URL은 “http://hostname:7001/…”의 형태가 됩니다. 이 경우 성능이 떨어질 수도 있기 때문에 꼭 필요한 경우에만 터널링을 사용해야 합니다.

WebLogic Server8.1에서는 표준Jar 또는 클라이언트 Jar을 사용하여 실행할 수 있습니다. 표준 Jar인 weblogic.jar은 WebLogic Server를 실행하는 데에 필요한 모든 소프트웨어와 모든 기능을 제공하지만(클라이언트 및 서버 모두) 단 그 용량이 매우 큽니다(37 MB 이상임). 서버 측의 애플리케이션에는 괜찮지만 애플릿에서 사용하기 위해 다운로드하기에는 너무 파일이 큽니다. 클라이언트 Jar은 크기 면에서 훨씬 작습니다. 기본 클라이언트 Jar인 wlclient.jar의 크기는 약 300KB 정도이며 JMS 지원을 위한 추가Jar인 wljmsclient.jar은 400KB 정도입니다. 클라이언트 기능 일부가 제한되는(JDBC 및 JMX는 지원되지 않음) 훨씬 작은 클라이언트 점유 공간을 허용합니다. 클라이언트 Jar과 함께 실행하기 위해서는 IIOP(Internet Inter-ORB Protocol)를 사용해야 합니다. 이 경우 URL은 “iiop://hostname:7001/…”의 형태가 되지만 클라이언트 Jar은 자동으로 “t3:” 또는 “http:”를 변환하여 IIOP 프로토콜을 사용할 수 있게 합니다(따라서 프로그램을 변경할 필요가 없습니다). 자세한 정보는 Programming WebLogic JMSWebLogic JMS Thin Client를 참조하십시오.

SSL(Secure Sockets Layer)과 함께 실행할 경우를 위해 하나 이상의 옵션이 제공됩니다. 이 경우 URL의 앞부분에는 “t3s”, “iiops” 또는 “https”와 같이 “s” 접미사가 붙어야 합니다. 이 자습서에서는 SSL 사용을 위한 시스템 구성 방법까지는 다루지 않습니다. 자세한 내용은 http://e-docs.bea.com/wls/docs81/security/SSL_client.html#1046397을 참조하십시오.

예제 서버 실행


WebLogic Server Examples 서버를 시작하기 위해 필요한 경우 본 자습서에 일부 위치가 설명되어 있습니다. 다음의 시작 메뉴 링크를 사용하여 이를 실행할 수 있습니다.

All Programs/BEA WebLogic Platform 8.1/Examples/Weblogic Server Examples/Launch WebLogic Server Examples

WebLogic Server 구성


JMS와 함께 사용하기 위해서는 WebLogic Server 구성과 사용하고자 하는 프로토콜의 일부를 변경해야 합니다. 콘솔을 사용하거나(권장 방법) 구성 파일을 직접 편집하여 변경할 수 있습니다.

콘솔을 사용하려면 예제 서버를 위의 설명과 같이 시작합니다. 다음의 URL을 사용하여 웹 브라우저에서 콘솔을 실행한 후 로그인 및 암호(기본 암호: weblogic/weblogic)를 입력합니다.

http://localhost:7001/console
우선 서버의 명시적인 수신 주소를 설정할 수 있습니다. 이것은 서버가 수신되는 연결을 확인할 때 사용하는 IP 주소 또는 DNS 이름입니다. 다중 홈 컴퓨터에서 서버를 실행하는 경우 이를 설정해야 합니다. 특히 이 자습서의 경우에서는 IIOP 프로토콜을 사용하려면 이를 설정해야 합니다.

  1. 오른쪽 창의 Domains Configuration 섹션 아래에서 Servers를 선택합니다.
  2. 테이블에서 “examplesServer”를 선택한 후 General 탭을 선택합니다.
  3. Listen Address 상자에서 DNS 이름 또는 컴퓨터의 주소를 입력합니다.
  4. 입력 사항을 적용하기 위해서는 서버를 재시작해야 하지만 다른 구성 작업을 먼저 완료할 수 있습니다.

HTTP 터널링을 활성화해야 합니다.

  1. examplesServer 페이지에서 Protocols 탭을 선택합니다.
  2. Advanced Options Show 링크를 클릭합니다.
  3. “Enable Tunneling” 상자를 선택합니다.
  4. Apply를 클릭합니다.

JMS와 함께 사용하기 위해서 JMS 서버와 애플릿에서 사용할 대기열을 정의하여 구성을 변경함으로써 WebLogic Server 구성을 설정합니다.

  1. 상단 맨 오른쪽에 있는 홈 아이콘을 클릭하여 콘솔 홈 페이지로 돌아갑니다.
  2. 오른쪽의 JMS 아래에서 Servers를 선택합니다.
  3. Configure a New JMS Server를 선택합니다.
  4. Name:에 TestJMSServer를 입력합니다.
  5. Create를 클릭합니다.
  6. Target에 대해 examplesServer를 선택합니다.
  7. Apply를 클릭합니다.
  8. Configuration 탭을 클릭합니다.
  9. 하단에 있는 Configure Destinations를 클릭합니다.
  10. Configure a New JMS Queue를 클릭합니다.
  11. Name:에 TestQueue1을 입력합니다.
  12. JNDI Name:에 jms.queue.TestQueue1을 입력합니다.
  13. Create를 클릭합니다.

콘솔에서 할 일은 끝났습니다. 수신 주소를 변경한 경우 서버를 종료하고 재시작합니다.

표준 8.1 설치를 사용하여 다음을 수행함으로써 config.xml 파일을 직접 수정합니다(이는 기존의 Examples 구성을 사용한다는 것으로 가정합니다).
cd D:\bea\weblogic81\samples\domains\examples
JMS 서버와 대기열을 생성하려면 마지막 줄 바로 앞에 다음을 입력합니다.

     <JMSServer Name="TestJMSServer" Targets="examplesServer" >
        >JMSQueue Name="TestQueue1" JNDIName="jms.queue.TestQueue1" />
       </JMSServer>


수신 주소(Listen Address)를 설정하려면 <Server<Server ListenAddress="MYhostname"으로 변경합니다..

HTTP 터널링을 활성화하려면 <Server<Server TunnelingEnabled="true"로 변경합니다..

애플릿 설정


다음은 애플릿을 실행하기 위해 필요한 HTML, 클래스 및 Jar 파일을 설정합니다.

cd D:\bea\weblogic81\samples\server\examples\build\examplesWebApp
이는 WebLogic Server를 웹 서버로 실행하기 위한 문서의 루트로 콘솔에서 이것은 콘솔 홈 페이지 오른쪽의 Web Application Modules 아래에 있습니다. 이것은 다음의 웹 애플리케이션 입력 항목을 수정함으로써 config.xml에서 변경할 수 있습니다.

     <Application Deployed="true" Name="examplesWebApp"
           Path="D:\bea\weblogic81\samples\server\examples\build"
           TwoPhase="true">
           <WebAppComponent Name="examplesWebApp"
            Targets="examplesServer" URI="examplesWebApp"/>
       </Application>


본 자습서의 경우에는 이를 변경할 필요가 없습니다.

표준 Jar을 사용할 경우 weblogic.jar을 사용 가능하게 만들어 이 디렉토리로 복사해 놓을 수 있도록 해야 합니다(이 작업을 하지 않아도 되도록 HTML 파일에서 CODEBASE를 정의할 수 있지만 Jar 파일을 HTML 및 애플릿 클래스 파일과 동일한 디렉토리에 배치하면서 작동은 됩니다).

copy D:\bea\weblogic81\server\lib\weblogic.jar
weblogic.jar의 선언에는 애플리케이션에서 필요로 할 수도 있는 많은 jar 파일의 목록이 있습니다(최신 목록은 common/perf/java/AgtMX.jar, common/perf/java/dirig.jar, common/perf/java/dsJMX.jar, EccpressoAsn1.jar, EccpressoCore.jar, EccpressoJcae.jar, ant/ant.jar, ant/jakarta-oro-2.0.4.jar, ant/optional.jar, ojdbc14.jar, webservices.jar, wlbase.jar, wlcipher.jar, WebLogic Serverqlserver.jar, wlutil.jar,xmlx.jar입니다). 이는 Java 콘솔에 파일을 찾을 수 없음(file-not-found) 오류를 표시합니다. 애플릿이 이러한 Jar 파일에 존재하는 항목을 실제로 참조하지 않는 한 애플릿 실행이 차단되지는 않습니다. 참조하는 경우에는 추가로 필요한 Jar 파일을 복사합니다.

applet.htm애플릿을 테스트하기 위한 HTML 파일을 생성합니다. 첨부 1을 참조하십시오.

OBJECT 태그(CLASSID, CODEBASE 및 유형값 사용)는 IE 4.X 이상 버전에서, EMBED 태그(유형 및 플러그인 페이지 값 사용)는 Netscape에서 Java 플러그인을 정의하기 위해 사용됩니다. 애플릿은 CODE 값을 사용하여 정의되며 weblogic.jar에 있는 클래스는 ARCHIVE 값을 사용하여 활성화합니다. appletviewer 문서에서 유용한 정보를 확인할 수 있습니다. 이 예제에서는 플러그인 1.4.1.03 버전을 사용하도록 설정되어 있습니다(codebase 디렉토리, Version 및 심지어 classid까지 이 버전의 영향을 받습니다).

Applet1.java를 생성하려면 첨부 2를 참조하십시오. javac Applet1.java를 사용하여 컴파일합니다. 이 애플릿의 코드는 연결 팩토리, 대기열 이름 등을 위해 일부 하드 코드 값을 가진다는 점에 주의하십시오. 이 값을 HTML에 있는 애플릿에 배치할 수 있습니다. 특히 프로토콜은 “t3:”으로 하드 코드화되어 있습니다. 애플릿에는 사용자가 데이터 줄을 입력할 수 있는 텍스트 필드가 있습니다. Enter를 치면 입력한 텍스트 줄은 대기열로 보내집니다. 애플릿은 대기열에서 메시지를 비동기식으로 수신하도록 설정되어 있습니다. 메시지를 수신하면 수신된 메시지의 내역을 보관하기 위해 메시지는 텍스트 영역에 첨부됩니다. 이는 매우 단순하지만 애플릿에서 JMS를 사용하는 방법을 설명합니다.

애플릿 실행


위에서 설명한 대로 WebLogic ServerExamples 서버를 시작합니다. http://hostname:7001/examplesWebApp/applet.htm 을 통해 애플릿에 액세스할 수 있어야 합니다.

WebLogic Server 씬 클라이언트 사용


다른 방법으로는 씬 클라이언트로 실행할 수도 있습니다. 이는 애플릿 권장 실행 방법으로 애플릿이 시작할 때 다운로드되는 jar의 크기를 대폭으로 줄여줍니다. applet.htm 파일에서 “weblogic.jar”“wlclient.jar, wljmsclient.jar”로 변경하고 weblogic.jar 대신 이 두 jar 파일(크기가 훨씬 작아짐)을 문서 루트로 복사합니다.

위의 설명대로 애플릿을 다시 실행합니다. jar 파일을 다운로드하는 시간이 훨씬 빨라집니다.

Appletviewer 사용


appletviewer를 통해 애플릿을 테스트하려면 JRE이 PATH에 설치되어 있는지 확인합니다. WebLogic Server가 설치된 시스템에서 이를 가장 빨리 수행하려면 다음과 같이 합합니다.
cd D:\bea\weblogic81\config\mydomain
setExamplesEnv.cmd
Web Server에 대한 URL을 사용하여 뷰어를 실행합니다.
appletviewer http://hostname:7001/examplesWebApp/applet.htm

기타 구성 고려 사항


":7001"을 지정하지 않고 URL을 지정하고자 할 경우 표준 포트 80을 사용하도록 구성을 변경하고 서버 부분에서 ListenPort="80"을 정의한 후 Applet1.java를 ":7001"에서 ":80"으로 수정합니다.

HTTP 터널링을 사용하여 실행하려면 Applet1.java의 URL을 t3: 대신 http:를 사용하도록 변경하고 WebLogic Server를 활성화합니다(위의 설명과 같이).

Java Web Start 사용


“Java Web Start는 웹 브라우저와 관련된 헬퍼 애플리케이션입니다. 사용자가 특별 실행 파일(JNLP 파일)로 연결되는 링크를 클릭할 때 브라우저는 Java Web Start를 실행시킵니다. 그런 다음 지정진 Java 기반 애플리케이션을 자동으로 다운로드, 캐싱 및 실행합니다. Java Web Start로 실행한 애플리케이션은 로컬에서 캐싱됩니다. 따라서 이미 다운로드한 애플리케이션은 기존에 설치된 애플리케이션과 동일하게 실행됩니다.” 자세한 내용은 href="http://java.sun.com/products/javawebstart/developers.html">http://java.sun.com/products/javawebstart/developers.html을 참조하십시오.

Java WebStart를 사용하여 애플릿을 실행하려면 JNLP 파일을 생성해야 합니다. 첨부 3을 참조하십시오. 이 파일을 examplesWebApp에 있는 applet.jnlp로 저장합니다(문서 루트). 다음을 실행하여 애플릿을 위한 jar 파일을 생성합니다.

jar -cvf Applet1.jar Applet1.class
브라우저에서 다음을 실행합니다.

http://hostname:7001/examplesWebApp/applet.jnlp

첨부 1: applet.htm


<html>
<head>
  <title>Applet sample</title>
</head>

<body>
<h1>Applet Sample</h1>

<hr>

<!--"CONVERTED_APPLET"-->
<!-- HTML CONVERTER -->
<OBJECT
  classid = "clsid:CAFEEFAC-0014-0001-0003-ABCDEFFEDCBA"
  codebase = "http://java.sun.com/products/plugin/autodl/jinstall-
1_4_1_03-windows-i586.cab#Version=1,4,1,3"
  WIDTH = 600 HEIGHT = 300 >
  <PARAM NAME = CODE VALUE = Applet1.class >
  <PARAM NAME = ARCHIVE VALUE = "weblogic.jar">
  <PARAM NAME = "type" VALUE = "application/x-java-applet;jpiversion=
1.4.1.03">
  <PARAM NAME = "scriptable" VALUE = "false">

  <COMMENT>
    <EMBED
      type = "application/x-java-applet;jpi-version=1.4.1.03" \
      CODE = Applet1.class \
      ARCHIVE = "weblogic.jar"
      WIDTH = 600 \
      HEIGHT = 300 \
      scriptable = false \
      pluginspage =
"http://java.sun.com/products/plugin/index.html#download">
      <NOEMBED>
      alt="Your browser understands the <APPLET> tag but isn't
running the applet, for some reason."
      Your browser is completely ignoring the <APPLET> tag!
      </NOEMBED>
    </EMBED>
  </COMMENT>
</OBJECT>

<!--
<APPLET CODE = Applet1.class ARCHIVE = "weblogic.jar" WIDTH = 600
HEIGHT = 300>
alt="Your browser understands the <APPLET> tag but isn't running
the applet, for some reason."
      Your browser is completely ignoring the <APPLET> tag!
</APPLET>
-->
<!--"END_CONVERTED_APPLET"-->
</body>
</html>


첨부 2: applet1.java


import java.awt.*;
import java.applet.*;
import java.net.*;
import java.util.*;
import javax.naming.*;
import javax.jms.*;

public class Applet1 extends Applet implements MessageListener {
  private boolean started = false;

  // JMS Stuff
  private InitialContext jmsContext = null;
  private QueueConnectionFactory jmsConnFactory = null;
  private QueueConnection jmsConnection = null;
  private Queue jmsQueue = null;
  private QueueSession jmsSession = null;
  private QueueSender jmsSender = null;
  private QueueReceiver jmsReceiver = null;

  // init - called to inform this applet that it has been
  //      loaded into the system
  public void init() {
    // Initialize Controls
    setLayout(null);
    setSize(426,266);
    jmslabel.setText("JMS Applet");
    add(jmslabel);
    jmslabel.setBounds(144,12,148,24);
    textArea1.setEnabled(false);
    add(textArea1);
    textArea1.setBounds(24,36,375,100);
    jmsleaveButton.setLabel("Leave");
    add(jmsleaveButton);
    jmsleaveButton.setBackground(java.awt.Color.lightGray);
    jmsleaveButton.setBounds(312,240,78,20);
    add(jmsMessageField);
    jmsMessageField.setBounds(24,168,367,38);
    //}}

    initJMS();
  }

  // Declare Controls
  java.awt.Label jmslabel = new java.awt.Label();
  java.awt.TextArea textArea1 = new java.awt.TextArea();
  java.awt.Button jmsleaveButton = new java.awt.Button();
  java.awt.TextField jmsMessageField = new java.awt.TextField();

  // getAppletInfo - Returns information about this applet.
  public String getAppletInfo() {
    return "JMS Applet\r\n";
  }

  // destroy - called to inform this applet that it is being
  // reclaimed and that it should destroy any resources that
  // it has allocated.
  public void destroy() {
    try {
      if(started) {
        if (jmsConnection != null) {
          jmsConnection.stop();
          jmsConnection = null;
        }
        started = false;
        stop();
      }
    }
    catch(Exception e) {
    }
  }

  // start - called to inform this applet that it should start its
execution
  public void start() {
    if(!started) {
      started = true;
    }
  }

  // stop - Called to inform this applet that it should stop its
execution
  public void stop() {
    textArea1.setEnabled(false);
    jmsMessageField.setEnabled(false);
  }

  // action - handles entering message, Leave button clicked
  public boolean action(Event evt, Object obj) {
    if(evt.id == Event.ACTION_EVENT) {
      if(obj.equals(jmsMessageField.getText())) {
        sendData(jmsMessageField.getText());
        jmsMessageField.setText("");
        return true;
      }
      if(obj.equals(jmsleaveButton.getLabel())) {
        destroy();
      }
    }
    return true;
  }

  // initJMS - initialize all of the JMS stuff
  private void initJMS() {
    try {
      String hostName = this.getCodeBase().getHost();
      Hashtable env = new Hashtable();
      env.put(Context.PROVIDER_URL,
        "t3://" + hostName + ":7001");
      env.put(Context.INITIAL_CONTEXT_FACTORY,
        "weblogic.jndi.WLInitialContextFactory");
      jmsContext = new InitialContext(env);
      jmsConnFactory =(QueueConnectionFactory)
        jmsContext.lookup("javax.jms.QueueConnectionFactory");
      jmsConnection = jmsConnFactory.createQueueConnection();
      jmsSession = jmsConnection.createQueueSession(false,
        Session.AUTO_ACKNOWLEDGE);
      jmsQueue =(Queue)jmsContext.lookup("jms.queue.TestQueue1");
      jmsConnection.start();
      jmsSender = jmsSession.createSender(jmsQueue);
      jmsReceiver = jmsSession.createReceiver(jmsQueue);
      jmsReceiver.setMessageListener(this);
    }
    catch(Exception e) {
      e.printStackTrace();
      System.out.println("Initialization failed");
    }
  }

  // sendData - sends a message
  void sendData(String data) {
    try {
      TextMessage message = jmsSession.createTextMessage();
      message.setText(data);
      jmsSender.send(message);
    }
    catch(Exception e) {
      System.out.println("Failed to send message");
    }
  }

  // onMessage - asynchronously receives a message
  public void onMessage(Message message) {
    String data;
    try {
      data = ((TextMessage)message).getText();
      textArea1.append(data + "\n");
      repaint();
    }
    catch(Exception e) {
      System.out.println("Failed to receive message");
    }
  }
}


첨부 3: applet.jnlp



<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for Demo Applet -->
<jnlp
  spec="1.0+"
  codebase="http://localhost:7001/examplesWebApp"
  href="applet.jnlp">
  <information>
    <title>Demo Applet</title>
    <vendor>BEA Systems, Inc.</vendor>
    <description>Demo Applet</description>
    <description kind="short">Demo.</description>
    <offline-allowed/>
  </information>
  <resources>
    <j2se version="1.4"/>
    <jar href="Applet1.jar"/>
    <jar href="weblogic.jar"/>
  </resources>
  <applet-desc name="Applet1" main-class="Applet1" width="600"
height="300"/>
</jnlp>


첨부 4: 알려진 문제


  1. CR109268 - 8.1 GA를 통해 t3 또는 http를 사용하여 예제를 실행할 경우 weblogic.jar은 작동하지 않습니다. 이는 8.1SP1에 고정되어 있습니다. 이러한 증상은 AssertionError 내에 위치한 java.lang.NoClassDefFoundError입니다.
  2. CR111935 - 8.1 GA를 통해 http 터널링을 사용하여 예제를 실행할 경우 씬 클라이언트는 작동하지 않습니다. 첫 번째 입력 항목은 사라지는 것 같고 두 번째 입력 항목은 애플릿과 Java 콘솔의 오류를 일으킵니다. 메시지가 서버에 도착하기는 하지만 비동기적으로 애플릿에서 다시 수신되지 않습니다.
  3. CR111518 - 8.1 SP1를 통해 IIOP를 사용하여 예제를 실행할 경우 씬 클라이언트는 작동하지 않습니다. 첫 번째 입력 항목은 사라지는 것 같고 두 번째 입력 항목은 애플릿과 Java 콘솔의 오류를 일으킵니다. 메시지가 서버에 도착하기는 하지만 비동기적으로 애플릿에서 다시 수신되지 않습니다. 임시 패치인 CR111518_810sp1.jar이 있습니다. 8.1SP1에서 이 클라이언트 측의 임시 패치를 사용하려면 다음을 지정함으로써 애플릿을 위한 HTML 파일을 변경해야 합니다.

    ARCHIVE VALUE="CR111518_810sp1.jar,wlclient.jar,wljmsclient.jms"

    ARCHIVE="CR111518_810sp1.jar,wlclient.jar,wljmsclient.jar"

1773 view

4.0 stars