org/objectweb/proactive/core/descriptor/data/VirtualNodeLookup.java

00001 /* 
00002  * ################################################################
00003  * 
00004  * ProActive: The Java(TM) library for Parallel, Distributed, 
00005  *            Concurrent computing with Security and Mobility
00006  * 
00007  * Copyright (C) 1997-2007 INRIA/University of Nice-Sophia Antipolis
00008  * Contact: proactive@objectweb.org
00009  * 
00010  * This library is free software; you can redistribute it and/or
00011  * modify it under the terms of the GNU Lesser General Public
00012  * License as published by the Free Software Foundation; either
00013  * version 2.1 of the License, or any later version.
00014  *  
00015  * This library is distributed in the hope that it will be useful,
00016  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018  * Lesser General Public License for more details.
00019  * 
00020  * You should have received a copy of the GNU Lesser General Public
00021  * License along with this library; if not, write to the Free Software
00022  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
00023  * USA
00024  *  
00025  *  Initial developer(s):               The ProActive Team
00026  *                        http://www.inria.fr/oasis/ProActive/contacts.html
00027  *  Contributor(s): 
00028  * 
00029  * ################################################################
00030  */ 
00031 package org.objectweb.proactive.core.descriptor.data;
00032 
00033 import org.objectweb.proactive.ProActive;
00034 import org.objectweb.proactive.core.ProActiveException;
00035 import org.objectweb.proactive.core.ProActiveRuntimeException;
00036 import org.objectweb.proactive.core.node.Node;
00037 import org.objectweb.proactive.core.node.NodeException;
00038 import org.objectweb.proactive.core.process.ExternalProcess;
00039 import org.objectweb.proactive.core.runtime.ProActiveRuntimeImpl;
00040 import org.objectweb.proactive.core.util.UrlBuilder;
00041 import org.objectweb.proactive.filetransfer.FileVector;
00042 
00043 
00059 public class VirtualNodeLookup extends RuntimeDeploymentProperties
00060     implements VirtualNode {
00061     private VirtualNode virtualNode;
00062     private String name;
00063     private String urlForLookup;
00064     private String lookupProtocol;
00065     private String lookupHost;
00066     private boolean isActivated = false;
00067 
00068     //we use 1099 as default port
00069     private int portForLookup = 1099;
00070     private String message = "########## Calling this method on a VirtualNodeLookup has no sense, since such VirtualNode object references a remote VirtualNode ##########";
00071     private String notActivatedMessage = "This VirtualNode lookup is not yet activated. Activate it first";
00072     protected String runtimeHostForLookup = "LOOKUP_HOST";
00073     protected String runtimePortForLookup = "LOOKUP_PORT";
00074     private int fileBlockSize, overlapping;
00075     
00076     public VirtualNodeLookup(String name) {
00077         this.name = name;
00078         ProActiveRuntimeImpl proActiveRuntimeImpl = (ProActiveRuntimeImpl) ProActiveRuntimeImpl.getProActiveRuntime();
00079         proActiveRuntimeImpl.registerLocalVirtualNode(this, this.name);
00080         fileBlockSize=org.objectweb.proactive.core.filetransfer.FileBlock.DEFAULT_BLOCK_SIZE;
00081         overlapping=org.objectweb.proactive.core.filetransfer.FileTransferService.DEFAULT_MAX_SIMULTANEOUS_BLOCKS;
00082         
00083     }
00084 
00088     public String getProperty() {
00089         if (!isActivated) {
00090             vnLogger.error(notActivatedMessage);
00091         }
00092         return virtualNode.getProperty();
00093     }
00094 
00098     public String getName() {
00099         return this.name;
00100     }
00101 
00105     public long getTimeout() {
00106         if (!isActivated) {
00107             vnLogger.error(notActivatedMessage);
00108         }
00109         return virtualNode.getTimeout();
00110     }
00111 
00115     public void addVirtualMachine(VirtualMachine virtualMachine) {
00116         vnLogger.warn(message);
00117     }
00118 
00122     public VirtualMachine getVirtualMachine() {
00123         if (!isActivated) {
00124             vnLogger.error(notActivatedMessage);
00125         }
00126         return virtualNode.getVirtualMachine();
00127     }
00128 
00132     public void activate() {
00133         if (!isActivated) {
00134             if (isWaitingForProperties()) {
00135                 return;
00136             }
00137             try {
00138                 this.urlForLookup = UrlBuilder.buildUrl(this.lookupHost, this.name,
00139                       this.lookupProtocol, this.portForLookup);
00140                 //              this.remoteProActiveRuntime = RuntimeFactory.getRuntime(urlForLookup,lookupProtocol);
00141                 //              this.virtualNode = remoteProActiveRuntime.getVirtualNode(this.name);
00142                 this.virtualNode = ProActive.lookupVirtualNode(urlForLookup);
00143                 isActivated = true;
00144             } catch (ProActiveException e) {
00145                 e.printStackTrace();
00146                 throw new ProActiveRuntimeException(e);
00147             }
00148         } else {
00149             vnLogger.debug("VirtualNode " + this.name +
00150                 " already activated");
00151         }
00152     }
00153 
00157     public int getNbMappedNodes() {
00158         if (!isActivated) {
00159             vnLogger.error(notActivatedMessage);
00160         }
00161         return virtualNode.getNbMappedNodes();
00162     }
00163 
00167     public int createdNodeCount() {
00168         throw new RuntimeException(
00169             "This method is deprecated, use getNumberOfCurrentlyCreatedNodes() or getNumberOfCreatedNodesAfterDeployment()");
00170     }
00171 
00175     public int getNumberOfCurrentlyCreatedNodes() {
00176         if (!isActivated) {
00177             vnLogger.error(notActivatedMessage);
00178         }
00179         return virtualNode.getNumberOfCurrentlyCreatedNodes();
00180     }
00181 
00185     public Node getNode() throws NodeException {
00186         if (!isActivated) {
00187             throw new NodeException(notActivatedMessage);
00188         }
00189         try {
00190             checkActivation();
00191         } catch (ProActiveException pae) {
00192             throw new NodeException(pae);
00193         }
00194         return virtualNode.getNode();
00195     }
00196 
00197     /*
00198      *  (non-Javadoc)
00199      * @see org.objectweb.proactive.core.descriptor.data.VirtualNode#getNumberOfCreatedNodesAfterDeployment()
00200      */
00201     public int getNumberOfCreatedNodesAfterDeployment() {
00202         if (!isActivated) {
00203             vnLogger.error(notActivatedMessage);
00204         }
00205         return virtualNode.getNumberOfCreatedNodesAfterDeployment();
00206     }
00207 
00211     @Deprecated
00212     public Node getNode(int index) throws NodeException {
00213         if (!isActivated) {
00214             throw new NodeException(notActivatedMessage);
00215         }
00216         try {
00217             checkActivation();
00218         } catch (ProActiveException pae) {
00219             throw new NodeException(pae);
00220         }
00221         return virtualNode.getNode(index);
00222     }
00223 
00227     public String[] getNodesURL() throws NodeException {
00228         if (!isActivated) {
00229             throw new NodeException(notActivatedMessage);
00230         }
00231         try {
00232             checkActivation();
00233         } catch (ProActiveException pae) {
00234             throw new NodeException(pae);
00235         }
00236         return virtualNode.getNodesURL();
00237     }
00238 
00242     public Node[] getNodes() throws NodeException {
00243         if (!isActivated) {
00244             throw new NodeException(notActivatedMessage);
00245         }
00246         try {
00247             checkActivation();
00248         } catch (ProActiveException pae) {
00249             throw new NodeException(pae);
00250         }
00251         return virtualNode.getNodes();
00252     }
00253 
00257     public Node getNode(String url) throws NodeException {
00258         if (!isActivated) {
00259             throw new NodeException(notActivatedMessage);
00260         }
00261         try {
00262             checkActivation();
00263         } catch (ProActiveException pae) {
00264             throw new NodeException(pae);
00265         }
00266         return virtualNode.getNode(url);
00267     }
00268 
00269     public void killAll(boolean softly) {
00270         vnLogger.warn(message);
00271     }
00272 
00276     public void createNodeOnCurrentJvm(String protocol) {
00277         vnLogger.warn(message);
00278     }
00279 
00280     public Object getUniqueAO() throws ProActiveException {
00281         if (!isActivated) {
00282             throw new ProActiveException(notActivatedMessage);
00283         }
00284         checkActivation();
00285         return virtualNode.getUniqueAO();
00286     }
00287 
00288     public boolean isActivated() {
00289         return isActivated;
00290     }
00291 
00295     public boolean isLookup() {
00296         return true;
00297     }
00298 
00299     //
00300     //-------------------IMPLEMENTS Job-----------------------------------
00301     //
00302 
00306     public String getJobID() {
00307         if (!isActivated) {
00308             vnLogger.error(notActivatedMessage);
00309         }
00310         return virtualNode.getJobID();
00311     }
00312 
00317     public void setRuntimeInformations(String information, String value)
00318         throws ProActiveException {
00319         try {
00320             checkProperty(information);
00321         } catch (ProActiveException e) {
00322             throw new ProActiveException("only " + runtimeHostForLookup +
00323                 " and" + runtimePortForLookup +
00324                 " property can be set at runtime", e);
00325         }
00326         performTask(information, value);
00327     }
00328 
00329     //  //
00330     //  //-----------------------implements DeploymentPropertiesEventListener ----------
00331     //  //
00332     //  
00333     //  public void  lookForProperty(DeploymentPropertiesEvent event){
00334     //          
00335     //  }
00336     public void setLookupInformations(String host, String protocol, String port) {
00337         //this.urlForLookup = url;
00338         this.lookupProtocol = protocol;
00339         if (host.indexOf("*") > -1) {
00340             runtimeProperties.add(runtimeHostForLookup);
00341         } else {
00342             this.lookupHost = host;
00343         }
00344         if (port.indexOf("*") > -1) {
00345             runtimeProperties.add(runtimePortForLookup);
00346         } else {
00347             this.portForLookup = new Integer(port).intValue();
00348         }
00349     }
00350 
00354     public int getMinNumberOfNodes() {
00355         if (!isActivated) {
00356             vnLogger.error(notActivatedMessage);
00357         }
00358         return virtualNode.getMinNumberOfNodes();
00359     }
00360 
00364     public boolean isMultiple() {
00365         if (!isActivated) {
00366             vnLogger.error(notActivatedMessage);
00367         }
00368         return virtualNode.isMultiple();
00369     }
00370 
00371     //
00372     //-------------------PRIVATE METHODS---------------------------------
00373     //
00374     private boolean isWaitingForProperties() {
00375         return (runtimeProperties.size() >= 1);
00376     }
00377 
00378     private void performTask(String information, String value) {
00379         if (information.equals(runtimeHostForLookup)) {
00380             this.lookupHost = value;
00381         } else {
00382             this.portForLookup = new Integer(value).intValue();
00383         }
00384         runtimeProperties.remove(information);
00385         if (!isWaitingForProperties()) {
00386             this.urlForLookup = UrlBuilder.buildUrl(this.lookupHost, this.name,
00387                     this.lookupProtocol, this.portForLookup);
00388             activate();
00389         }
00390     }
00391 
00392     private void checkActivation() throws ProActiveException {
00393         if (isWaitingForProperties()) {
00394             String exceptionMessage = "This VirtualNode has not yet been activated since, it is waiting for runtime properties ";
00395             for (int i = 0; i < runtimeProperties.size(); i++) {
00396                 exceptionMessage = exceptionMessage.concat(runtimeProperties.get(
00397                             i) + " ");
00398             }
00399             throw new ProActiveException(exceptionMessage);
00400         }
00401     }
00402 
00403     public int startMPI() {
00404         throw new RuntimeException(
00405             " ERROR: No MPI process attached with the virtual node !");
00406     }
00407 
00408         /* (non-Javadoc)
00409          * @see org.objectweb.proactive.core.descriptor.data.VirtualNode#fileTransferRetrieve()
00410          */
00411         public FileVector fileTransferRetrieve() throws ProActiveException {
00412                 
00413                         throw new ProActiveException("No File Transfer Retrieve support from VirtualNodeLookup");
00414                 
00415         }
00416 
00417         public ExternalProcess getMPIProcess() {
00418                 // TODO Auto-generated method stub
00419                 return null;
00420         }
00421 
00422         public boolean hasMPIProcess() {
00423                 // TODO Auto-generated method stub
00424                 return false;
00425         }
00426         
00427         public void setFileTransferParams(int fileBlockSize, int overlapping) {
00428 
00429                 this.fileBlockSize=fileBlockSize;
00430                 this.overlapping=overlapping;
00431         }
00432         
00433 }

Generated on Mon Jan 22 15:16:07 2007 for ProActive by  doxygen 1.5.1