http://wxg6203.iteye.com/blog/680830 

return new InitialContext(environment); 





然后这样调用: 

Java代码 
EJBHomeFactory f = EJBHomeFactory.getInstance();   
Object o = f.lookup(remote);  

EJBHomeFactory f = EJBHomeFactory.getInstance(); 
Object o = f.lookup(remote); 

这样就可以保证只初始化一次上下文实例,节省大量的时间。 

评论
2 楼 surpassno 2013-08-29  
InitialContext和lookup
1 楼 ybzshizds 2010-08-06  
这种用工厂模式解决的办法其实还是有一个问题,就是ejb容器重启后,客户端应该也要重新去new InitialContext,否则用原来的InitialContext去lookup,会抛出错。

想想后,我是这样去解决的。

为每个ejbhome,新建一个ejbHelper类

如:

Java代码  InitialContext和lookup
  1. package com.company.vas.ejb.helper;  
  2.   
  3. import java.rmi.RemoteException;  
  4.   
  5. import javax.ejb.CreateException;  
  6. import javax.naming.NamingException;  
  7.   
  8. import com.company.util.Log;  
  9. import com.company.vas.ejb.Invoice;  
  10. import com.company.vas.ejb.home.InvoiceHome;  
  11.   
  12. public class InvoiceHelper {  
  13.   
  14.     private static final String CLASS_NAME = "InvoiceHelpler";  
  15.     private static InvoiceHome home;  
  16.   
  17.     public static Invoice getInvoice() {  
  18.     try {  
  19.         if (home == null) {  
  20.         home = (InvoiceHome) EjbGetter.getEJBHome(  
  21.                         IInvoice.JNDI_NAME, InvoiceHome.class);  
  22.          }  
  23.          return home.create();  
  24.     } catch (NamingException e) {  
  25.             Log.error(CLASS_NAME, "getInvoice()", e.getMessage());  
  26.             home = null;  
  27.     } catch (RemoteException e) {  
  28.             Log.error(CLASS_NAME, "getInvoice()", e.getMessage());  
  29.             home = null;  
  30.     } catch (CreateException e) {  
  31.             Log.error(CLASS_NAME, "getInvoice()", e.getMessage());  
  32.             home = null;  
  33.     }  
  34.        return null;  
  35.     }  
  36. }  
  37.   
  38.   
  39. package com.company.vas.ejb.helper;  
  40.   
  41. import java.util.Properties;  
  42.   
  43. import javax.ejb.EJBHome;  
  44. import javax.naming.Context;  
  45. import javax.naming.InitialContext;  
  46. import javax.naming.NamingException;  
  47.   
  48. public class EjbGetter {  
  49.   
  50.     public static EJBHome getEJBHome(String service_jndiname, Class homeInterface) throws NamingException{  
  51.         Properties env = new Properties();  
  52.         env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");  
  53.         env.put(Context.PROVIDER_URL, "192.168.60.120:1099");  
  54.         env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");  
  55.       
  56.         Context ic = new InitialContext(env);  
  57.         EJBHome ejbHome = (EJBHome)javax.rmi.PortableRemoteObject.narrow(ic.lookup(service_jndiname), homeInterface);  
  58.           
  59.         return ejbHome;  
  60.     }  
  61. }  

相关文章: