2010-05-03 10 views
0

J'essaye de placer un objet dans JNDI, de sorte que seulement un des progam devrait pouvoir le placer dans JNDI. existe-t-il un verrou global pouvant être utilisé dans l'environnement J2EE. Le RMI peut-il être utilisé à cette fin? S'il vous plaît fournir des liens de référence. Merci d'avance. De plus, qu'est-ce que NameAlreadyBoundexception? J'essaie de l'utiliser comme une méthode pour synchroniser, c'est-à-dire qu'un seul programme le place dans JNDI et si d'autres essayant de lier devraient obtenir cette exception. Mais lorsque je teste la liaison multiple, je ne reçois pas l'exception. Et la deuxième liaison est terminée. La recherche donne le second objet lié. voici mon code:Comment synchroniser placer un objet dans JNDI à travers les processus?

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(); 
    } 


} 

Répondre

0

Lorsque vous fermez le premier contenu ctx1 vous relâchez tous les objets qui lui sont liés voir: Context

donc votre deuxième contexte n'a rien à voir avec le premier.