KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > springframework > remoting > rmi > JndiRmiProxyFactoryBean


1 /*
2  * Copyright 2002-2007 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.springframework.remoting.rmi;
18
19 import javax.naming.NamingException JavaDoc;
20
21 import org.springframework.aop.framework.ProxyFactory;
22 import org.springframework.beans.factory.BeanClassLoaderAware;
23 import org.springframework.beans.factory.FactoryBean;
24 import org.springframework.util.ClassUtils;
25
26 /**
27  * Factory bean for RMI proxies from JNDI.
28  *
29  * <p>Typically used for RMI-IIOP (CORBA), but can also be used for EJB home objects
30  * (for example, a Stateful Session Bean home). In contrast to a plain JNDI lookup,
31  * this accessor also performs narrowing through {@link javax.rmi.PortableRemoteObject}.
32  *
33  * <p>With conventional RMI services, this invoker is typically used with the RMI
34  * service interface. Alternatively, this invoker can also proxy a remote RMI service
35  * with a matching non-RMI business interface, i.e. an interface that mirrors the RMI
36  * service methods but does not declare RemoteExceptions. In the latter case,
37  * RemoteExceptions thrown by the RMI stub will automatically get converted to
38  * Spring's unchecked RemoteAccessException.
39  *
40  * <p>The JNDI environment can be specified as "jndiEnvironment" property,
41  * or be configured in a <code>jndi.properties</code> file or as system properties.
42  * For example:
43  *
44  * <pre class="code">&lt;property name="jndiEnvironment"&gt;
45  * &lt;props>
46  * &lt;prop key="java.naming.factory.initial"&gt;com.sun.jndi.cosnaming.CNCtxFactory&lt;/prop&gt;
47  * &lt;prop key="java.naming.provider.url"&gt;iiop://localhost:1050&lt;/prop&gt;
48  * &lt;/props&gt;
49  * &lt;/property&gt;</pre>
50  *
51  * @author Juergen Hoeller
52  * @since 1.1
53  * @see #setServiceInterface
54  * @see #setJndiName
55  * @see #setJndiTemplate
56  * @see #setJndiEnvironment
57  * @see #setJndiName
58  * @see JndiRmiServiceExporter
59  * @see org.springframework.remoting.RemoteAccessException
60  * @see java.rmi.RemoteException
61  * @see java.rmi.Remote
62  * @see javax.rmi.PortableRemoteObject#narrow
63  */

64 public class JndiRmiProxyFactoryBean extends JndiRmiClientInterceptor implements FactoryBean, BeanClassLoaderAware {
65
66     private ClassLoader JavaDoc beanClassLoader = ClassUtils.getDefaultClassLoader();
67
68     private Object JavaDoc serviceProxy;
69
70
71     public void setBeanClassLoader(ClassLoader JavaDoc classLoader) {
72         this.beanClassLoader = classLoader;
73     }
74
75     public void afterPropertiesSet() throws NamingException JavaDoc {
76         super.afterPropertiesSet();
77         if (getServiceInterface() == null) {
78             throw new IllegalArgumentException JavaDoc("Property 'serviceInterface' is required");
79         }
80         this.serviceProxy = new ProxyFactory(getServiceInterface(), this).getProxy(this.beanClassLoader);
81     }
82
83
84     public Object JavaDoc getObject() {
85         return this.serviceProxy;
86     }
87
88     public Class JavaDoc getObjectType() {
89         return getServiceInterface();
90     }
91
92     public boolean isSingleton() {
93         return true;
94     }
95
96 }
97
Popular Tags