org/objectweb/proactive/core/runtime/ProActiveRuntimeAdapterImpl.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.runtime;
00032 
00033 import java.io.IOException;
00034 import java.io.ObjectStreamException;
00035 import java.io.Serializable;
00036 import java.lang.reflect.InvocationTargetException;
00037 import java.rmi.AlreadyBoundException;
00038 import java.rmi.UnmarshalException;
00039 import java.security.PublicKey;
00040 import java.security.cert.X509Certificate;
00041 import java.util.ArrayList;
00042 
00043 import org.objectweb.proactive.Body;
00044 import org.objectweb.proactive.core.ProActiveException;
00045 import org.objectweb.proactive.core.UniqueRuntimeID;
00046 import org.objectweb.proactive.core.body.UniversalBody;
00047 import org.objectweb.proactive.core.body.ft.checkpointing.Checkpoint;
00048 import org.objectweb.proactive.core.config.ProActiveConfiguration;
00049 import org.objectweb.proactive.core.descriptor.data.ProActiveDescriptor;
00050 import org.objectweb.proactive.core.descriptor.data.VirtualNode;
00051 import org.objectweb.proactive.core.mop.ConstructorCall;
00052 import org.objectweb.proactive.core.mop.ConstructorCallExecutionFailedException;
00053 import org.objectweb.proactive.core.node.NodeException;
00054 import org.objectweb.proactive.core.process.ExternalProcess;
00055 import org.objectweb.proactive.core.process.UniversalProcess;
00056 import org.objectweb.proactive.ext.security.Communication;
00057 import org.objectweb.proactive.ext.security.ProActiveSecurityManager;
00058 import org.objectweb.proactive.ext.security.SecurityContext;
00059 import org.objectweb.proactive.ext.security.crypto.KeyExchangeException;
00060 import org.objectweb.proactive.ext.security.exceptions.RenegotiateSessionException;
00061 import org.objectweb.proactive.ext.security.exceptions.SecurityNotAvailableException;
00062 import org.objectweb.proactive.ext.security.securityentity.Entity;
00063 
00064 
00075 public class ProActiveRuntimeAdapterImpl extends ProActiveRuntimeAdapter
00076     implements Serializable {
00077     protected RemoteProActiveRuntime proActiveRuntime;
00078     protected String proActiveRuntimeURL;
00079     private UniqueRuntimeID urid; // Cached for speed issue
00080 
00081     //this boolean is used when killing the runtime. Indeed in case of co-allocation, we avoid a second call to the runtime
00082     // which is already dead
00083     protected boolean alreadykilled = false;
00084 
00085     //
00086     // -- Constructors -----------------------------------------------
00087     //
00088     public ProActiveRuntimeAdapterImpl() {
00089     }
00090 
00091     public ProActiveRuntimeAdapterImpl(RemoteProActiveRuntime proActiveRuntime)
00092         throws ProActiveException {
00093         this.proActiveRuntime = proActiveRuntime;
00094 
00095         try {
00096             this.vmInformation = proActiveRuntime.getVMInformation();
00097             this.proActiveRuntimeURL = proActiveRuntime.getURL();
00098             this.urid = new UniqueRuntimeID(proActiveRuntime.getVMInformation()
00099                                                             .getName(),
00100                     proActiveRuntime.getVMInformation().getVMID());
00101         } catch (IOException e) {
00102             throw new ProActiveException(e);
00103         }
00104     }
00105 
00106     protected Object readResolve() throws ObjectStreamException {
00107         if (ProActiveConfiguration.isForwarder()) {
00108             ProActiveRuntimeForwarderImpl partf = (ProActiveRuntimeForwarderImpl) ProActiveRuntimeImpl.getProActiveRuntime();
00109 
00110             if (!partf.registeredRuntimes.containsKey(urid)) {
00111                 partf.registeredRuntimes.put(urid, this);
00112             }
00113 
00114             try {
00115                 ProActiveRuntime part = RuntimeFactory.getDefaultRuntime();
00116                 ProActiveRuntimeAdapterForwarderImpl partAdapter = (ProActiveRuntimeAdapterForwarderImpl) part;
00117 
00118                 return new ProActiveRuntimeAdapterForwarderImpl(partAdapter,
00119                     this);
00120             } catch (ProActiveException e) {
00121                 runtimeLogger.warn(e.getMessage());
00122 
00123                 return this;
00124             }
00125         }
00126 
00127         return this;
00128     }
00129 
00130     //
00131     // -- PUBLIC METHODS -----------------------------------------------
00132     //
00133     public boolean equals(Object o) {
00134         if (!(o instanceof ProActiveRuntimeAdapterImpl)) {
00135             return false;
00136         }
00137 
00138         ProActiveRuntimeAdapterImpl runtime = (ProActiveRuntimeAdapterImpl) o;
00139 
00140         return proActiveRuntime.equals(runtime.proActiveRuntime);
00141     }
00142 
00143     public int hashCode() {
00144         return proActiveRuntime.hashCode();
00145     }
00146 
00147     //
00148     // -- Implements ProActiveRuntime -----------------------------------------------
00149     //
00150 
00155     public String createLocalNode(String nodeName,
00156         boolean replacePreviousBinding, ProActiveSecurityManager policyServer,
00157         String vnName, String jobId)
00158         throws NodeException, AlreadyBoundException {
00159         try {
00160             return proActiveRuntime.createLocalNode(nodeName,
00161                 replacePreviousBinding, policyServer, vnName, jobId);
00162         } catch (IOException e) {
00163             throw new NodeException(e);
00164         }
00165     }
00166 
00171     public void killAllNodes() throws ProActiveException {
00172         try {
00173             proActiveRuntime.killAllNodes();
00174         } catch (IOException e) {
00175             throw new ProActiveException(e);
00176         }
00177     }
00178 
00183     public void killNode(String nodeName) throws ProActiveException {
00184         try {
00185             proActiveRuntime.killNode(nodeName);
00186         } catch (IOException e) {
00187             throw new ProActiveException(e);
00188         }
00189     }
00190 
00196     public void createVM(UniversalProcess remoteProcess)
00197         throws IOException, ProActiveException {
00198         proActiveRuntime.createVM(remoteProcess);
00199     }
00200 
00205     public String[] getLocalNodeNames() throws ProActiveException {
00206         try {
00207             return proActiveRuntime.getLocalNodeNames();
00208         } catch (IOException e) {
00209             throw new ProActiveException(e);
00210         }
00211     }
00212 
00216     public VMInformation getVMInformation() {
00217         return vmInformation;
00218     }
00219 
00224     public void register(ProActiveRuntime proActiveRuntimeDist,
00225         String proActiveRuntimeUrl, String creatorID, String creationProtocol,
00226         String vmName) throws ProActiveException {
00227         try {
00228             proActiveRuntime.register(proActiveRuntimeDist,
00229                 proActiveRuntimeUrl, creatorID, creationProtocol, vmName);
00230         } catch (IOException e) {
00231             throw new ProActiveException(e);
00232         }
00233     }
00234 
00239     public void unregister(ProActiveRuntime proActiveRuntimeDist,
00240         String proActiveRuntimeUrl, String creatorID, String creationProtocol,
00241         String vmName) throws ProActiveException {
00242         try {
00243             this.proActiveRuntime.unregister(proActiveRuntimeDist,
00244                 proActiveRuntimeUrl, creatorID, creationProtocol, vmName);
00245         } catch (IOException e) {
00246             throw new ProActiveException(e);
00247         }
00248     }
00249 
00254     public ProActiveRuntime[] getProActiveRuntimes() throws ProActiveException {
00255         try {
00256             return proActiveRuntime.getProActiveRuntimes();
00257         } catch (IOException e) {
00258             throw new ProActiveException(e);
00259         }
00260     }
00261 
00266     public ProActiveRuntime getProActiveRuntime(String proActiveRuntimeName)
00267         throws ProActiveException {
00268         try {
00269             return proActiveRuntime.getProActiveRuntime(proActiveRuntimeName);
00270         } catch (IOException e) {
00271             throw new ProActiveException(e);
00272         }
00273     }
00274 
00279     public void addAcquaintance(String proActiveRuntimeName)
00280         throws ProActiveException {
00281         try {
00282             proActiveRuntime.addAcquaintance(proActiveRuntimeName);
00283         } catch (IOException e) {
00284             throw new ProActiveException(e);
00285         }
00286     }
00287 
00292     public String[] getAcquaintances() throws ProActiveException {
00293         try {
00294             return proActiveRuntime.getAcquaintances();
00295         } catch (IOException e) {
00296             throw new ProActiveException(e);
00297         }
00298     }
00299 
00304     public void rmAcquaintance(String proActiveRuntimeName)
00305         throws ProActiveException {
00306         try {
00307             proActiveRuntime.rmAcquaintance(proActiveRuntimeName);
00308         } catch (IOException e) {
00309             throw new ProActiveException(e);
00310         }
00311     }
00312 
00316     public void killRT(boolean softly) throws Exception {
00317         try {
00318             if (!alreadykilled) {
00319                 proActiveRuntime.killRT(softly);
00320             }
00321 
00322             alreadykilled = true;
00323         } catch (UnmarshalException e) {
00324             //here should be caught the exception from System.exit
00325             alreadykilled = true;
00326             throw e;
00327         }
00328     }
00329 
00333     public String getURL() {
00334         return proActiveRuntimeURL;
00335     }
00336 
00341     public ArrayList getActiveObjects(String nodeName)
00342         throws ProActiveException {
00343         try {
00344             return proActiveRuntime.getActiveObjects(nodeName);
00345         } catch (IOException e) {
00346             throw new ProActiveException(e);
00347         }
00348     }
00349 
00354     public ArrayList getActiveObjects(String nodeName, String className)
00355         throws ProActiveException {
00356         try {
00357             return proActiveRuntime.getActiveObjects(nodeName, className);
00358         } catch (IOException e) {
00359             throw new ProActiveException(e);
00360         }
00361     }
00362 
00367     public VirtualNode getVirtualNode(String virtualNodeName)
00368         throws ProActiveException {
00369         try {
00370             return proActiveRuntime.getVirtualNode(virtualNodeName);
00371         } catch (IOException e) {
00372             throw new ProActiveException(e);
00373         }
00374     }
00375 
00380     public void registerVirtualNode(String virtualNodeName,
00381         boolean replacePreviousBinding)
00382         throws ProActiveException, AlreadyBoundException {
00383         try {
00384             proActiveRuntime.registerVirtualNode(virtualNodeName,
00385                 replacePreviousBinding);
00386         } catch (IOException e) {
00387             throw new ProActiveException(e);
00388         }
00389     }
00390 
00395     public void unregisterVirtualNode(String virtualNodeName)
00396         throws ProActiveException {
00397         try {
00398             proActiveRuntime.unregisterVirtualNode(virtualNodeName);
00399         } catch (IOException e) {
00400             throw new ProActiveException(e);
00401         }
00402     }
00403 
00408     public void unregisterAllVirtualNodes() throws ProActiveException {
00409         try {
00410             proActiveRuntime.unregisterAllVirtualNodes();
00411         } catch (IOException e) {
00412             throw new ProActiveException(e);
00413         }
00414     }
00415 
00420     public String getJobID(String nodeUrl) throws ProActiveException {
00421         try {
00422             return proActiveRuntime.getJobID(nodeUrl);
00423         } catch (IOException e) {
00424             throw new ProActiveException(e);
00425         }
00426     }
00427 
00432     public UniversalBody createBody(String nodeName,
00433         ConstructorCall bodyConstructorCall, boolean isNodeLocal)
00434         throws ConstructorCallExecutionFailedException,
00435             InvocationTargetException, ProActiveException {
00436         try {
00437             return proActiveRuntime.createBody(nodeName, bodyConstructorCall,
00438                 isNodeLocal);
00439         } catch (IOException e) {
00440             throw new ProActiveException(e);
00441         }
00442     }
00443 
00448     public UniversalBody receiveBody(String nodeName, Body body)
00449         throws ProActiveException {
00450         try {
00451             return proActiveRuntime.receiveBody(nodeName, body);
00452         } catch (IOException e) {
00453             throw new ProActiveException(e);
00454         }
00455     }
00456 
00461     public UniversalBody receiveCheckpoint(String nodeName, Checkpoint ckpt,
00462         int inc) throws ProActiveException {
00463         try {
00464             return proActiveRuntime.receiveCheckpoint(nodeName, ckpt, inc);
00465         } catch (IOException e) {
00466             throw new ProActiveException(e);
00467         }
00468     }
00469 
00474     public String getVNName(String Nodename) throws ProActiveException {
00475         try {
00476             return proActiveRuntime.getVNName(Nodename);
00477         } catch (IOException e) {
00478             throw new ProActiveException(e);
00479         }
00480     }
00481 
00486     public byte[] getClassDataFromThisRuntime(String className)
00487         throws ProActiveException {
00488         try {
00489             return proActiveRuntime.getClassDataFromThisRuntime(className);
00490         } catch (IOException e) {
00491             throw new ProActiveException(e);
00492         }
00493     }
00494 
00499     public byte[] getClassDataFromParentRuntime(String className)
00500         throws ProActiveException {
00501         try {
00502             return proActiveRuntime.getClassDataFromParentRuntime(className);
00503         } catch (IOException e) {
00504             throw new ProActiveException(e);
00505         }
00506     }
00507 
00508     public ExternalProcess getProcessToDeploy(
00509         ProActiveRuntime proActiveRuntimeDist, String creatorID, String vmName,
00510         String padURL) throws ProActiveException {
00511         try {
00512             return proActiveRuntime.getProcessToDeploy(proActiveRuntimeDist,
00513                 creatorID, vmName, padURL);
00514         } catch (IOException e) {
00515             throw new ProActiveException(e);
00516         }
00517     }
00518 
00519     //
00520     // Implements Job Interface
00521     //
00522 
00526     public String getJobID() {
00527         return vmInformation.getJobID();
00528     }
00529 
00530     //
00531     // Implements SecurityEntity Interface
00532     //
00533     public X509Certificate getCertificate()
00534         throws SecurityNotAvailableException {
00535         try {
00536             return proActiveRuntime.getCertificate();
00537         } catch (IOException e) {
00538             e.printStackTrace();
00539 
00540             return null;
00541         }
00542     }
00543 
00544     public long startNewSession(Communication policy)
00545         throws SecurityNotAvailableException, RenegotiateSessionException {
00546         try {
00547             return proActiveRuntime.startNewSession(policy);
00548         } catch (IOException e) {
00549             e.printStackTrace();
00550 
00551             return 0;
00552         }
00553     }
00554 
00555     public PublicKey getPublicKey() throws SecurityNotAvailableException {
00556         try {
00557             return proActiveRuntime.getPublicKey();
00558         } catch (IOException e) {
00559             e.printStackTrace();
00560 
00561             return null;
00562         }
00563     }
00564 
00565     public byte[] randomValue(long sessionID, byte[] clientRandomValue)
00566         throws SecurityNotAvailableException, RenegotiateSessionException {
00567         try {
00568             return proActiveRuntime.randomValue(sessionID, clientRandomValue);
00569         } catch (IOException e) {
00570             e.printStackTrace();
00571 
00572             return null;
00573         }
00574     }
00575 
00576     public byte[][] publicKeyExchange(long sessionID, byte[] myPublicKey,
00577         byte[] myCertificate, byte[] signature)
00578         throws SecurityNotAvailableException, RenegotiateSessionException,
00579             KeyExchangeException {
00580         try {
00581             return proActiveRuntime.publicKeyExchange(sessionID, myPublicKey,
00582                 myCertificate, signature);
00583         } catch (IOException e) {
00584             e.printStackTrace();
00585 
00586             return null;
00587         }
00588     }
00589 
00590     public byte[][] secretKeyExchange(long sessionID, byte[] encodedAESKey,
00591         byte[] encodedIVParameters, byte[] encodedClientMacKey,
00592         byte[] encodedLockData, byte[] parametersSignature)
00593         throws SecurityNotAvailableException, RenegotiateSessionException {
00594         try {
00595             return proActiveRuntime.secretKeyExchange(sessionID, encodedAESKey,
00596                 encodedIVParameters, encodedClientMacKey, encodedLockData,
00597                 parametersSignature);
00598         } catch (IOException e) {
00599             e.printStackTrace();
00600 
00601             return null;
00602         }
00603     }
00604 
00605     public SecurityContext getPolicy(SecurityContext securityContext)
00606         throws SecurityNotAvailableException {
00607         try {
00608             return proActiveRuntime.getPolicy(securityContext);
00609         } catch (IOException e) {
00610             e.printStackTrace();
00611 
00612             return null;
00613         }
00614     }
00615 
00616     public byte[] getCertificateEncoded() throws SecurityNotAvailableException {
00617         try {
00618             return proActiveRuntime.getCertificateEncoded();
00619         } catch (IOException e) {
00620             e.printStackTrace();
00621 
00622             return null;
00623         }
00624     }
00625 
00626     public ArrayList<Entity> getEntities() throws SecurityNotAvailableException {
00627         try {
00628             return proActiveRuntime.getEntities();
00629         } catch (IOException e) {
00630             e.printStackTrace();
00631 
00632             return null;
00633         }
00634     }
00635 
00636     public void terminateSession(long sessionID)
00637         throws SecurityNotAvailableException {
00638         try {
00639             proActiveRuntime.terminateSession(sessionID);
00640         } catch (IOException e) {
00641             e.printStackTrace();
00642         }
00643     }
00644 
00645     public void launchMain(String className, String[] parameters)
00646         throws ClassNotFoundException, NoSuchMethodException, ProActiveException {
00647         try {
00648             proActiveRuntime.launchMain(className, parameters);
00649         } catch (IOException e) {
00650             throw new ProActiveException(e);
00651         }
00652     }
00653 
00654     public void newRemote(String className)
00655         throws ClassNotFoundException, ProActiveException {
00656         try {
00657             proActiveRuntime.newRemote(className);
00658         } catch (IOException e) {
00659             throw new ProActiveException(e);
00660         }
00661     }
00662 
00663     public ProActiveDescriptor getDescriptor(String url,
00664         boolean isHierarchicalSearch) throws IOException, ProActiveException {
00665         return proActiveRuntime.getDescriptor(url, isHierarchicalSearch);
00666     }
00667 
00668     public Object setLocalNodeProperty(String nodeName, String key, String value)
00669         throws ProActiveException {
00670         try {
00671             return this.proActiveRuntime.setLocalNodeProperty(nodeName, key,
00672                 value);
00673         } catch (IOException e) {
00674             throw new ProActiveException(e);
00675         }
00676     }
00677 
00678     public String getLocalNodeProperty(String nodeName, String key)
00679         throws ProActiveException {
00680         try {
00681             return this.proActiveRuntime.getLocalNodeProperty(nodeName, key);
00682         } catch (IOException e) {
00683             throw new ProActiveException(e);
00684         }
00685     }
00686 }

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