001 /*
002 @license.text@
003 */
004 package biz.hammurapi.config;
005
006 import java.net.MalformedURLException;
007 import java.rmi.Naming;
008 import java.rmi.NotBoundException;
009 import java.rmi.RemoteException;
010 import java.rmi.server.UnicastRemoteObject;
011
012 import org.w3c.dom.Element;
013 import org.w3c.dom.Node;
014
015 /**
016 * Base class for components exposed through RMI
017 * @author Pavel Vlasov
018 * @revision $Revision$
019 */
020 public class RmiComponent extends UnicastRemoteObject implements Component, DomConfigurable {
021
022 private int port;
023 private String name;
024 private String bindName;
025 protected Object owner;
026
027 public RmiComponent() throws RemoteException {
028 super();
029 }
030
031 public void start() throws ConfigurationException {
032 bindName = "//localhost:"+port+"/"+name;
033 try {
034 Naming.rebind(bindName, this);
035 } catch (RemoteException e) {
036 throw new ConfigurationException("Could not bind to name '"+bindName+"' - "+e, e);
037 } catch (MalformedURLException e) {
038 throw new ConfigurationException("Could not bind to name '"+bindName+"' - "+e, e);
039 }
040 }
041
042 public void stop() throws ConfigurationException {
043 if (bindName!=null) {
044 try {
045 Naming.unbind(bindName);
046 unexportObject(this, false);
047 bindName=null;
048 } catch (RemoteException e) {
049 throw new ConfigurationException("Could not unbind/unexport '"+bindName+"' - "+e, e);
050 } catch (MalformedURLException e) {
051 throw new ConfigurationException("Could not unbind name '"+bindName+"' - "+e, e);
052 } catch (NotBoundException e) {
053 throw new ConfigurationException("Could not unbind name '"+bindName+"' - "+e, e);
054 }
055 }
056 }
057
058 public void setOwner(Object owner) {
059 this.owner=owner;
060 }
061
062 public void configure(Node configNode, Context context) {
063 Element ce = (Element) configNode;
064 if (ce.hasAttribute("port")) {
065 port=Integer.parseInt(ce.getAttribute("port"));
066 }
067
068 name=ce.getAttribute("name");
069 }
070
071 }