Я пытаюсь поместить объект в 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();
}
}