как реализовать синглтон - в weblogic - PullRequest
0 голосов
/ 09 декабря 2010

Я попытался реализовать метод синглтон-класса, который вызывается классом фильтра. Класс фильтра и остальные классы добавляются в WLS в качестве общей библиотеки.

И у меня работают два отдельных веб-приложения - сервлеты с фильтром - оба на одном управляемом сервере.

Так что все работает нормально, за исключением того, что синглтон создается дважды. Пожалуйста, найдите ниже фрагмент кода.

public class Test
{
   private static Test ref ;

   private DataSource X;  
   static int Y;
   long Z ;   


   private Test ()
   {
      // Singleton 
   Z= 100 ;
   }

   public static synchronized Test getinstance()  throws NamingException, SQLException
   {
      if(ref == null)
      {         
         ref = new Test() ;         
         InitialContext ic = new InitialContext();

         ref.X = (DataSource)ic.lookup ("jdbc/Views");
      } 
      return ref ;    
   }

   public Object clone()throws CloneNotSupportedException
   {
       throw new CloneNotSupportedException(); 
   }

   public int sampleMethod (int X) throws SQLException
   {
   }

}

Метод фильтра:

public final class Filter implements Filter
{
 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException
 {
  try
  {  
   Test ref = Test.getinstance();
   log.logNow(ref.toString());
   .......

  }
 }
}

В журнале я получаю две разные ссылки - скажем,

Test @ f1a2e06 Test @ f180f10

Я что-то здесь не так делаю? Любая помощь будет отличной.

1 Ответ

7 голосов
/ 09 декабря 2010

Контейнер сервлета использует разные загрузчики классов для разных приложений.Поэтому я не верю, что можно поделиться примером.Что вы можете сделать, это, возможно, зарегистрировать экземпляр через JNDI.

...