Как синхронизировать размещение объекта в JNDI между процессами? - PullRequest
0 голосов
/ 03 мая 2010

Я пытаюсь поместить объект в JNDI, чтобы только один из программ мог разместить его в JNDI. есть ли глобальная блокировка, которая может быть использована в среде J2EE. Можно ли использовать RMI для этой цели? Пожалуйста, предоставьте любые ссылки. Заранее спасибо.

Кроме того, что такое NameAlreadyBoundexception ? Я пытаюсь использовать его как метод для синхронизации, то есть только одна программа помещает его в JNDI, и если другая попытка привязки должна получить это исключение. Но когда я тестирую множественную привязку, я не получаю исключение. И вторая привязка выполнена. взгляд дает второй объект, связанный. вот мой код:

public class TestJNDI {
 private static String JNDI_NAME = "java:comp/env/test/something";

   public static void main(String[] args) throws NamingException {

      Hashtable<String, String> env = new Hashtable<String, String>();
      env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
      env.put(Context.PROVIDER_URL,"t3://127.0.0.1:7001");

      Context ctx = new InitialContext(env);
      System.out.println("Initial Context created");

      String obj1 = "obj1";
      String obj2 = "obj2";

      try{
          ctx.bind(JNDI_NAME, obj1);
           System.out.println("Bind Sucess");
        }catch(NameAlreadyBoundException ne ){
         // already bound
         System.out.println("Name already bound");
        } 


     ctx.close();

     Context ctx2 = new InitialContext(env);
    try{
      // Second binding to the same name not giving the Exception??
      ctx2.bind(JNDI_NAME, obj2);
      System.out.println("Re Bind Sucess");
      }catch(NameAlreadyBoundException ne ){
     // already bound
     System.out.println("Name already bound");
      } 


    String lookedUp = (String) ctx2.lookup(JNDI_NAME);

    System.out.println("LookedUp Object"+lookedUp);
    ctx2.close();
  }


}

1 Ответ

0 голосов
/ 03 мая 2010

Когда вы закрываете первый контент ctx1, вы освобождаете любые связанные с ним объекты, смотрите: Context

Итак, ваш второй контекст не имеет ничего общего с первым.

...