KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > bsf > remoting > rmi > ServiceFactoryImpl


1 /**
2  *Copyright (c) 2002 Bright Side Factory. All rights
3  * reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in
14  * the documentation and/or other materials provided with the
15  * distribution.
16  *
17  * 3. The end-user documentation included with the redistribution,
18  * if any, must include the following acknowledgment:
19  * "This product includes software developed by the
20  * Bright Side Factory (http://www.bs-factory.org/)."
21  * Alternately, this acknowledgment may appear in the software itself,
22  * if and wherever such third-party acknowledgments normally appear.
23  *
24  * 4. The names "Bright Side", "BS Factory" and "Bright Side Factory" must
25  * not be used to endorse or promote products derived from this
26  * software without prior written permission. For written
27  * permission, please contact info@bs-factory.org.
28  *
29  * 5. Products derived from this software may not be called "Bright Side",
30  * nor may "Bright Side" appear in their name, without prior written
31  * permission of the Apache Software Foundation.
32  *
33  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
34  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
37  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
39  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
40  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
41  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
42  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
43  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44  * SUCH DAMAGE.
45  * ====================================================================
46  *
47  * This software consists of voluntary contributions made by many
48  * individuals on behalf of the Bright Side Factory. For more
49  * information on the Bright Side Factory, please see
50  * <http://www.bs-factory.org/>.
51  *
52  */

53 package org.bsf.remoting.rmi;
54
55 import org.apache.commons.logging.*;
56 import org.bsf.remoting.ServiceFactory;
57 import org.bsf.remoting.EJBDefinition;
58
59 import javax.ejb.EJBHome JavaDoc;
60 import javax.naming.Context JavaDoc;
61 import javax.naming.InitialContext JavaDoc;
62 import javax.naming.NamingException JavaDoc;
63 import javax.rmi.PortableRemoteObject JavaDoc;
64 import java.lang.reflect.Method JavaDoc;
65 import java.util.Hashtable JavaDoc;
66
67 public class ServiceFactoryImpl implements ServiceFactory {
68
69     private static Log log = LogFactory.getLog(ServiceFactoryImpl.class);
70
71     private Hashtable JavaDoc services = new Hashtable JavaDoc();
72
73     private static Context JavaDoc context = null;
74
75     public ServiceFactoryImpl() {
76     }
77
78     public Object JavaDoc getService(EJBDefinition service) {
79         if (service == null) throw new RuntimeException JavaDoc();
80         Object JavaDoc result = services.get(service);
81         if (result == null) {
82             result = createService(service);
83             services.put(service, result);
84         }
85         return result;
86     }
87
88     private Object JavaDoc createService(EJBDefinition service) {
89         Object JavaDoc result = null;
90         try {
91             String JavaDoc p_sEJBName = service.getJndiName();
92             Object JavaDoc objref = getContext().lookup(p_sEJBName);
93             EJBHome JavaDoc home = (EJBHome JavaDoc) PortableRemoteObject.narrow( objref, service.getHomeClass() );
94             Method JavaDoc create = service.getHomeClass().getDeclaredMethod("create", new Class JavaDoc[0]);
95             result = create.invoke(home, new Object JavaDoc[0]);
96         } catch (Exception JavaDoc e) {
97             log.fatal("Unable to lookup the service " + service.toString(), e);
98             throw new RuntimeException JavaDoc(e.getLocalizedMessage());
99         }
100         return result;
101     }
102
103     private static Context JavaDoc getContext(){
104         if (context == null){
105             try {
106                 context = new InitialContext JavaDoc();
107             } catch (NamingException JavaDoc e) {
108                 log.fatal(e.getLocalizedMessage());
109                 throw new RuntimeException JavaDoc(e.getLocalizedMessage());
110             }
111         }
112
113         return context;
114     }
115
116
117
118
119 }
Popular Tags