브라우저 자바 애플릿에서 싱글톤 객체 문제

alwaysN00b의 이미지

고수분들이 모인 장소 생각나는곳이 여기뿐이군요.

주로 C를 사용했는데, 이번에 어쩌다 java를 사용하게되었습니다.

문제는...

브라우저(메인화면)에서 2개의 팝업창을 띄우는데 양쪽다 같은 애플릿이 있습니다.
(편의상 1번창, 2번창으로 하겠습니다)

양쪽다 서버에서 받는 자료를 화면에 그려주는 역할을 합니다.
(조금 틀리긴 하지만 내부적으로 큐에 넣어서 빼오고 있습니다.)

두창을 띄워 놓으니 2번창에서 request를 날렸는데 1번창, 2번창 번갈아가며
화면에 그려주고 있습니다.

확인해 보니 큐가 싱글톤인데 아마도 자바VM이 브라우저 그룹(?)에 하나만 invoke되는것 같습니다.
(브라우저를 새로 실행하면 애플릿 그런현상이 없습니다)

읽어주셔서 감사하고 답변 부탁드립니다.

ps. 용어선택이나 설명이 부족하면 지적부탁드립니다.

M.W.Park의 이미지

백마디 말보다 한줄의 소스코드가 더 많은 것을 알게해주는 경우가 많더군요.
대충 짐작은 갑니다만 코드 한 줄도 없는 질문에 답변을 다는 것은 마치 코끼리를 마주한 장님과 같다는 생각이 듭니다.

코드로 이야기합시다!!
-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

alwaysN00b의 이미지

먼저 답변감사합니다.

회사 네트웍이 폐쇠되어있어 소스는 가져오질 못하지만
간략히 적어보겠습니다.

-- Queue2Object.java

class Queue2Object extends Thread {
   MyObjectHandler objectHandler = null;
   Queue q = null;
   boolean runFlag = true;
 
   private Queue2Object(MyObjectHandler m,Queue q){
      this.objectHandler = m;
      this.q = q;
   }
   public void run(){
       while(runFlag){
           if(!q.isEmpty()){
               syncronized(Queue.<span>MONITOR</span>){
                  objectHandler.add(q.pop());
               }
           }           
           // 생략
       }
   }
}

MyObjectHandler 는 Observale을 상속받았고, 해당 observer는 add된 데이터를 그려주기만 합니다.

-- ObjectQueue.java

class ObjectQueue implement Queue{
   private static <span>instance</span> = null;
   private LinkedList<Object> list = null;
   private ObjectQueue(){
      list = new LinkedList<Object>();
   }
   public static Queue getInstance(){
      if(null != <span>instance</span>) <span>instance</span> = new ObjectQueue();
      return <span>instance</span>;       
   }
   public Object pop(){
     // 생략
   }
   public void put(Object o){
    //생략
   //...
}

큐에 넣어주는 쓰레드는 단위테스트 모두 해보았고 다른 프로젝트에도 사용되고 있습니다.
nio로 작성되어있으며 생성할때 Queue를 인자로 넘겨줍니다.

질문중에 빠트린 부분이 있는데 브라우저는 IE6입니다.

요점은 브라우저그룹에서 자바vm을 같이 쓰는것 같은데, 해결방법이 없는가 하는것입니다.

다시한번 답변 부탁드립니다.

언제나 시작

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.