001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.proxy.provider.remoting; 019 020 import org.apache.commons.proxy.ObjectProvider; 021 import org.apache.commons.proxy.exception.ObjectProviderException; 022 023 import java.rmi.NotBoundException; 024 import java.rmi.RemoteException; 025 import java.rmi.registry.LocateRegistry; 026 import java.rmi.registry.Registry; 027 import java.rmi.server.RMIClientSocketFactory; 028 029 /** 030 * Provides an object by looking it up in an RMI registry. 031 * 032 * @author James Carman 033 * @since 1.0 034 */ 035 public class RmiProvider implements ObjectProvider 036 { 037 //---------------------------------------------------------------------------------------------------------------------- 038 // Fields 039 //---------------------------------------------------------------------------------------------------------------------- 040 041 private String host = "localhost"; 042 private int port = Registry.REGISTRY_PORT; 043 private RMIClientSocketFactory clientSocketFactory; 044 private String name; 045 046 //---------------------------------------------------------------------------------------------------------------------- 047 // Constructors 048 //---------------------------------------------------------------------------------------------------------------------- 049 050 public RmiProvider() 051 { 052 } 053 054 public RmiProvider( String name ) 055 { 056 setName( name ); 057 } 058 059 public RmiProvider( String host, String name ) 060 { 061 setHost( host ); 062 setName( name ); 063 } 064 065 public RmiProvider( String host, int port, String name ) 066 { 067 setHost( host ); 068 setName( name ); 069 setPort( port ); 070 } 071 072 public RmiProvider( String host, int port, RMIClientSocketFactory clientSocketFactory, String name ) 073 { 074 setHost( host ); 075 setPort( port ); 076 setClientSocketFactory( clientSocketFactory ); 077 setName( name ); 078 } 079 080 //---------------------------------------------------------------------------------------------------------------------- 081 // ObjectProvider Implementation 082 //---------------------------------------------------------------------------------------------------------------------- 083 084 public Object getObject() 085 { 086 Registry reg = null; 087 try 088 { 089 reg = getRegistry(); 090 return reg.lookup( name ); 091 } 092 catch( NotBoundException e ) 093 { 094 throw new ObjectProviderException( "Name " + name + " not found in registry at " + host + ":" + port + ".", 095 e ); 096 } 097 catch( RemoteException e ) 098 { 099 throw new ObjectProviderException( 100 "Unable to lookup service named " + name + " in registry at " + host + ":" + port + ".", e ); 101 } 102 } 103 104 //---------------------------------------------------------------------------------------------------------------------- 105 // Getter/Setter Methods 106 //---------------------------------------------------------------------------------------------------------------------- 107 108 public void setName( String name ) 109 { 110 this.name = name; 111 } 112 113 public void setClientSocketFactory( RMIClientSocketFactory clientSocketFactory ) 114 { 115 this.clientSocketFactory = clientSocketFactory; 116 } 117 118 public void setHost( String host ) 119 { 120 this.host = host; 121 } 122 123 public void setPort( int port ) 124 { 125 this.port = port; 126 } 127 128 //---------------------------------------------------------------------------------------------------------------------- 129 // Other Methods 130 //---------------------------------------------------------------------------------------------------------------------- 131 132 private Registry getRegistry() 133 { 134 try 135 { 136 if( clientSocketFactory != null ) 137 { 138 return LocateRegistry.getRegistry( host, port, clientSocketFactory ); 139 } 140 else 141 { 142 return LocateRegistry.getRegistry( host, port ); 143 } 144 } 145 catch( RemoteException e ) 146 { 147 throw new ObjectProviderException( "Unable to locate registry at " + host + ":" + port + ".", e ); 148 } 149 } 150 } 151