org/objectweb/proactive/core/runtime/http/HttpProActiveRuntime.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.http;
00032 
00033 import java.io.IOException;
00034 import java.lang.reflect.InvocationTargetException;
00035 import java.net.MalformedURLException;
00036 import java.net.URL;
00037 import java.net.UnknownHostException;
00038 import java.rmi.AlreadyBoundException;
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.body.UniversalBody;
00046 import org.objectweb.proactive.core.body.ft.checkpointing.Checkpoint;
00047 import org.objectweb.proactive.core.body.http.util.exceptions.HTTPRemoteException;
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.core.rmi.ClassServer;
00057 import org.objectweb.proactive.core.rmi.ClassServerServlet;
00058 import org.objectweb.proactive.core.runtime.ProActiveRuntime;
00059 import org.objectweb.proactive.core.runtime.ProActiveRuntimeImpl;
00060 import org.objectweb.proactive.core.runtime.RemoteProActiveRuntime;
00061 import org.objectweb.proactive.core.runtime.VMInformation;
00062 import org.objectweb.proactive.core.runtime.http.messages.RuntimeRequest;
00063 import org.objectweb.proactive.core.util.UrlBuilder;
00064 import org.objectweb.proactive.ext.security.Communication;
00065 import org.objectweb.proactive.ext.security.ProActiveSecurityManager;
00066 import org.objectweb.proactive.ext.security.SecurityContext;
00067 import org.objectweb.proactive.ext.security.crypto.KeyExchangeException;
00068 import org.objectweb.proactive.ext.security.exceptions.RenegotiateSessionException;
00069 import org.objectweb.proactive.ext.security.exceptions.SecurityNotAvailableException;
00070 import org.objectweb.proactive.ext.security.securityentity.Entity;
00071 
00072 
00081 public class HttpProActiveRuntime implements RemoteProActiveRuntime {
00082     private transient ProActiveRuntime localruntime;
00083     private boolean isLocal;
00084     private String url;
00085     protected VMInformation vmInformation;
00086 
00087     //    private int port;
00088     //this boolean is used when killing the runtime. Indeed in case of co-allocation, we avoid a second call to the runtime
00089     // which is already dead
00090     protected boolean alreadykilled = false;
00091 
00092     public HttpProActiveRuntime() {
00093         isLocal = true;
00094         this.localruntime = ProActiveRuntimeImpl.getProActiveRuntime();
00095 
00096         if (ProActiveConfiguration.osgiServletEnabled()) {
00097             this.url = ClassServerServlet.getUrl();
00098         } else {
00099             this.url = ClassServer.getUrl();
00100         }
00101 
00102         //we also cache the information here to avoid crossing the network when formatting
00103         //urls
00104         this.vmInformation = localruntime.getVMInformation();
00105     }
00106 
00110     public HttpProActiveRuntime(String newurl) {
00111         runtimeLogger.debug("Adapter URL = " + newurl);
00112 
00113         try {
00114             this.url = UrlBuilder.checkUrl(newurl);
00115             isLocal = false;
00116             runtimeLogger.debug("New Remote XML Adapter : " + url);
00117         } catch (UnknownHostException e) {
00118             // TODO Auto-generated catch block
00119             e.printStackTrace();
00120         }
00121     }
00122 
00123     //
00124     // -- Implements ProActiveRuntime -----------------------------------------------
00125     //
00126     public ExternalProcess getProcessToDeploy(
00127         ProActiveRuntime proActiveRuntimeDist, String creatorID, String vmName,
00128         String padURL) throws ProActiveException {
00129         ArrayList<Object> params = new ArrayList<Object>();
00130         params.add(proActiveRuntimeDist);
00131         params.add(creatorID);
00132         params.add(vmName);
00133         params.add(padURL);
00134 
00135         try {
00136             new RuntimeRequest("getProcessToDeploy", params, this.url).send();
00137         } catch (Exception e) {
00138             e.printStackTrace();
00139         }
00140 
00141         return null;
00142     }
00143 
00144     public String createLocalNode(String nodeName,
00145         boolean replacePreviousBinding,
00146         ProActiveSecurityManager securityManager, String vname, String jobId)
00147         throws NodeException, HTTPRemoteException, AlreadyBoundException {
00148         String nodeURL = null;
00149         try {
00150             nodeURL = buildNodeURL(nodeName);
00151         } catch (UnknownHostException e1) {
00152             e1.printStackTrace();
00153         }
00154 
00155         //      then take the name of the node
00156         String name = UrlBuilder.getNameFromUrl(nodeURL);
00157         if (isLocal) {
00158             localruntime.createLocalNode(name, replacePreviousBinding,
00159                 securityManager, vname, jobId);
00160         } else {
00161             ArrayList<Object> paramsList = new ArrayList<Object>();
00162             paramsList.add(name);
00163             paramsList.add(new Boolean(replacePreviousBinding));
00164             paramsList.add(securityManager);
00165             paramsList.add(vname);
00166             paramsList.add(jobId);
00167 
00168             RuntimeRequest req = new RuntimeRequest("createLocalNode",
00169                     paramsList, this.url);
00170             req.send();
00171         }
00172 
00173         runtimeLogger.info(nodeURL + " successfully registered ");
00174 
00175         return nodeURL;
00176     }
00177 
00178     public void killAllNodes() throws HTTPRemoteException, ProActiveException {
00179         if (isLocal) {
00180             localruntime.killAllNodes();
00181 
00182             return;
00183         }
00184 
00185         new RuntimeRequest("killAllNodes", this.url).send();
00186     }
00187 
00188     public void killNode(String nodeName)
00189         throws ProActiveException, HTTPRemoteException {
00190         String name = UrlBuilder.getNameFromUrl(nodeName);
00191 
00192         if (isLocal) {
00193             localruntime.killNode(name);
00194 
00195             return;
00196         }
00197 
00198         ArrayList<Object> params = new ArrayList<Object>();
00199         params.add(name);
00200         new RuntimeRequest("killNode", params, this.url).send();
00201     }
00202 
00203     public void createVM(UniversalProcess remoteProcess)
00204         throws IOException, ProActiveException {
00205         if (isLocal) {
00206             localruntime.createVM(remoteProcess);
00207 
00208             return;
00209         }
00210 
00211         ArrayList<Object> params = new ArrayList<Object>();
00212         params.add(remoteProcess);
00213         new RuntimeRequest("createVM", params, this.url).send();
00214     }
00215 
00216     public String[] getLocalNodeNames()
00217         throws ProActiveException, HTTPRemoteException {
00218         if (isLocal) {
00219             return localruntime.getLocalNodeNames();
00220         }
00221 
00222         RuntimeRequest req = new RuntimeRequest("getLocalNodeNames", this.url);
00223         req.send();
00224 
00225         try {
00226             return (String[]) req.getReturnedObject();
00227         } catch (Exception e) {
00228             throw new ProActiveException(e);
00229         }
00230     }
00231 
00232     public VMInformation getVMInformation() throws HTTPRemoteException {
00233         if (this.vmInformation == null) {
00234             if (isLocal) {
00235                 this.vmInformation = localruntime.getVMInformation();
00236             }
00237 
00238             RuntimeRequest req = new RuntimeRequest("getVMInformation", this.url);
00239             req.send();
00240 
00241             try {
00242                 this.vmInformation = (VMInformation) req.getReturnedObject();
00243             } catch (Exception e) {
00244                 e.printStackTrace();
00245             }
00246         }
00247 
00248         return this.vmInformation;
00249     }
00250 
00251     public void register(ProActiveRuntime proActiveRuntimeDist,
00252         String proActiveRuntimeName, String creatorID, String creationProtocol,
00253         String vmName) throws ProActiveException, HTTPRemoteException {
00254         if (isLocal) {
00255             localruntime.register(proActiveRuntimeDist, proActiveRuntimeName,
00256                 creatorID, creationProtocol, vmName);
00257 
00258             return;
00259         }
00260 
00261         ArrayList<Object> params = new ArrayList<Object>();
00262         ArrayList<Class> paramsTypes = new ArrayList<Class>();
00263 
00264         params.add(proActiveRuntimeDist);
00265         paramsTypes.add(ProActiveRuntime.class);
00266         params.add(proActiveRuntimeName);
00267         paramsTypes.add(String.class);
00268         params.add(creatorID);
00269         paramsTypes.add(String.class);
00270         params.add(creationProtocol);
00271         paramsTypes.add(String.class);
00272         params.add(vmName);
00273         paramsTypes.add(String.class);
00274 
00275         new RuntimeRequest("register", params, paramsTypes, this.url).send();
00276     }
00277 
00283     public void unregister(ProActiveRuntime proActiveRuntimeDist,
00284         String proActiveRuntimeUrl, String creatorID, String creationProtocol,
00285         String vmName) throws ProActiveException, HTTPRemoteException {
00286         if (isLocal) {
00287             localruntime.unregister(proActiveRuntimeDist, proActiveRuntimeUrl,
00288                 creatorID, creationProtocol, vmName);
00289 
00290             return;
00291         }
00292 
00293         ArrayList<Object> params = new ArrayList<Object>();
00294         ArrayList<Class> paramsTypes = new ArrayList<Class>();
00295 
00296         params.add(proActiveRuntimeDist);
00297         paramsTypes.add(ProActiveRuntime.class);
00298         params.add(proActiveRuntimeUrl);
00299         paramsTypes.add(String.class);
00300         params.add(creatorID);
00301         paramsTypes.add(String.class);
00302         params.add(creationProtocol);
00303         paramsTypes.add(String.class);
00304         params.add(vmName);
00305         paramsTypes.add(String.class);
00306 
00307         new RuntimeRequest("unregister", params, paramsTypes, this.url).send();
00308     }
00309 
00310     public ProActiveRuntime[] getProActiveRuntimes()
00311         throws ProActiveException, HTTPRemoteException {
00312         RuntimeRequest req = new RuntimeRequest("getProActiveRuntimes", this.url);
00313 
00314         if (isLocal) {
00315             return localruntime.getProActiveRuntimes();
00316         }
00317 
00318         req.send();
00319 
00320         try {
00321             return (ProActiveRuntime[]) req.getReturnedObject();
00322         } catch (Exception e) {
00323             throw new ProActiveException(e);
00324         }
00325     }
00326 
00327     public ProActiveRuntime getProActiveRuntime(String proActiveRuntimeName)
00328         throws ProActiveException, HTTPRemoteException {
00329         if (isLocal) {
00330             return localruntime.getProActiveRuntime(proActiveRuntimeName);
00331         }
00332 
00333         ArrayList<Object> params = new ArrayList<Object>();
00334         params.add(proActiveRuntimeName);
00335 
00336         RuntimeRequest req = new RuntimeRequest("getProActiveRuntime", params,
00337                 this.url);
00338         req.send();
00339 
00340         try {
00341             return (ProActiveRuntime) req.getReturnedObject();
00342         } catch (Exception e) {
00343             throw new ProActiveException(e);
00344         }
00345     }
00346 
00347     public void killRT(boolean softly) throws Exception {
00348         if (!alreadykilled) {
00349             if (isLocal) {
00350                 localruntime.killRT(softly);
00351             } else {
00352                 ArrayList<Object> params = new ArrayList<Object>();
00353                 params.add(new Boolean(softly));
00354 
00355                 new RuntimeRequest("killRT", params, this.url).send();
00356             }
00357         }
00358 
00359         alreadykilled = true;
00360     }
00361 
00362     public String getURL() throws ProActiveException {
00363         return this.url;
00364     }
00365 
00366     public ArrayList getActiveObjects(String nodeName)
00367         throws ProActiveException, HTTPRemoteException {
00368         if (isLocal) {
00369             return localruntime.getActiveObjects(nodeName);
00370         }
00371 
00372         ArrayList<Object> params = new ArrayList<Object>();
00373         params.add(nodeName);
00374 
00375         RuntimeRequest req = new RuntimeRequest("getActiveObjects", params,
00376                 this.url);
00377         req.send();
00378 
00379         try {
00380             return (ArrayList) req.getReturnedObject();
00381         } catch (Exception e) {
00382             throw new ProActiveException(e);
00383         }
00384     }
00385 
00386     public ArrayList getActiveObjects(String nodeName, String objectName)
00387         throws ProActiveException, HTTPRemoteException {
00388         if (isLocal) {
00389             return localruntime.getActiveObjects(nodeName, objectName);
00390         }
00391 
00392         ArrayList<Object> params = new ArrayList<Object>();
00393         params.add(nodeName);
00394         params.add(objectName);
00395 
00396         RuntimeRequest req = new RuntimeRequest("getActiveObjects", params,
00397                 this.url);
00398         req.send();
00399 
00400         try {
00401             return (ArrayList) req.getReturnedObject();
00402         } catch (Exception e) {
00403             throw new ProActiveException(e);
00404         }
00405     }
00406 
00407     public VirtualNode getVirtualNode(String virtualNodeName)
00408         throws ProActiveException, HTTPRemoteException {
00409         if (isLocal) {
00410             return localruntime.getVirtualNode(virtualNodeName);
00411         }
00412 
00413         ArrayList<Object> params = new ArrayList<Object>();
00414         params.add(virtualNodeName);
00415 
00416         RuntimeRequest req = new RuntimeRequest("getVirtualNode", params,
00417                 this.url);
00418         req.send();
00419 
00420         try {
00421             return (VirtualNode) req.getReturnedObject();
00422         } catch (Exception e) {
00423             throw new ProActiveException(e);
00424         }
00425     }
00426 
00427     public void registerVirtualNode(String virtualNodeName,
00428         boolean replacePreviousBinding)
00429         throws ProActiveException, HTTPRemoteException {
00430         //here we don't send the request to the remote runtime,
00431         //indeed the local registration occured when the vn was created.
00432         // It is the same behavior(for this method) in all remote parts
00433         String vn_url;
00434 
00435         try {
00436             vn_url = buildNodeURL(virtualNodeName);
00437         } catch (UnknownHostException e) {
00438             throw new ProActiveException(e);
00439         }
00440 
00441         runtimeLogger.info(virtualNodeName + " successfully registered at " +
00442             vn_url);
00443     }
00444 
00445     public void unregisterVirtualNode(String virtualNodeName)
00446         throws ProActiveException, HTTPRemoteException {
00447         if (isLocal) {
00448             localruntime.unregisterVirtualNode(virtualNodeName);
00449 
00450             return;
00451         }
00452 
00453         ArrayList<Object> params = new ArrayList<Object>();
00454         params.add(virtualNodeName);
00455 
00456         new RuntimeRequest("unregisterVirtualNode", params, this.url).send();
00457     }
00458 
00459     public void unregisterAllVirtualNodes() throws ProActiveException {
00460         if (isLocal) {
00461             localruntime.unregisterAllVirtualNodes();
00462 
00463             return;
00464         }
00465 
00466         try {
00467             new RuntimeRequest("unregisterAllVirtualNodes", this.url).send();
00468         } catch (HTTPRemoteException e) {
00469             // TODO Auto-generated catch block
00470             e.printStackTrace();
00471         }
00472     }
00473 
00474     public UniversalBody createBody(String nodeName,
00475         ConstructorCall bodyConstructorCall, boolean isNodeLocal)
00476         throws ProActiveException, ConstructorCallExecutionFailedException,
00477             InvocationTargetException, HTTPRemoteException {
00478         if (isLocal) {
00479             return localruntime.createBody(nodeName, bodyConstructorCall,
00480                 isNodeLocal);
00481         }
00482 
00483         ArrayList<Object> params = new ArrayList<Object>();
00484         params.add(nodeName);
00485         params.add(bodyConstructorCall);
00486         params.add(new Boolean(isNodeLocal));
00487 
00488         RuntimeRequest req = new RuntimeRequest("createBody", params, this.url);
00489         req.send();
00490 
00491         try {
00492             return (UniversalBody) req.getReturnedObject();
00493         } catch (ConstructorCallExecutionFailedException e) {
00494             throw e;
00495         } catch (InvocationTargetException e) {
00496             throw e;
00497         } catch (Exception e) {
00498             throw new ProActiveException(e);
00499         }
00500     }
00501 
00502     public UniversalBody receiveBody(String nodeName, Body body)
00503         throws ProActiveException, HTTPRemoteException {
00504         if (isLocal) {
00505             return localruntime.receiveBody(nodeName, body);
00506         }
00507 
00508         ArrayList<Object> params = new ArrayList<Object>();
00509         params.add(nodeName);
00510         params.add(body);
00511 
00512         RuntimeRequest req = new RuntimeRequest("receiveBody", params, this.url);
00513         req.send();
00514 
00515         try {
00516             return (UniversalBody) req.getReturnedObject();
00517         } catch (Exception e) {
00518             throw new ProActiveException(e);
00519         }
00520     }
00521 
00526     public String getJobID(String nodeUrl)
00527         throws ProActiveException, HTTPRemoteException {
00528         if (isLocal) {
00529             return localruntime.getJobID(nodeUrl);
00530         }
00531 
00532         ArrayList<Object> params = new ArrayList<Object>();
00533         params.add(nodeUrl);
00534 
00535         RuntimeRequest req = new RuntimeRequest("getJobID", params, this.url);
00536         req.send();
00537 
00538         try {
00539             return (String) req.getReturnedObject();
00540         } catch (Exception e) {
00541             throw new ProActiveException(e);
00542         }
00543     }
00544 
00545     public void addAcquaintance(String proActiveRuntimeName)
00546         throws ProActiveException, HTTPRemoteException {
00547         if (isLocal) {
00548             localruntime.addAcquaintance(proActiveRuntimeName);
00549 
00550             return;
00551         }
00552 
00553         ArrayList<Object> params = new ArrayList<Object>();
00554         params.add(proActiveRuntimeName);
00555 
00556         new RuntimeRequest("addAcquaintance", params, this.url).send();
00557     }
00558 
00559     public String[] getAcquaintances()
00560         throws ProActiveException, HTTPRemoteException {
00561         if (isLocal) {
00562             return localruntime.getAcquaintances();
00563         }
00564 
00565         RuntimeRequest req = new RuntimeRequest("getAcquaintances", this.url);
00566         req.send();
00567 
00568         try {
00569             return (String[]) req.getReturnedObject();
00570         } catch (Exception e) {
00571             throw new ProActiveException(e);
00572         }
00573     }
00574 
00580     public void rmAcquaintance(String proActiveRuntimeName)
00581         throws ProActiveException, HTTPRemoteException {
00582         if (isLocal) {
00583             localruntime.rmAcquaintance(proActiveRuntimeName);
00584 
00585             return;
00586         }
00587 
00588         ArrayList<Object> params = new ArrayList<Object>();
00589         params.add(proActiveRuntimeName);
00590 
00591         new RuntimeRequest("rmAcquaintance", params, this.url).send();
00592     }
00593 
00594     public byte[] getClassDataFromParentRuntime(String className)
00595         throws ProActiveException, HTTPRemoteException {
00596         if (isLocal) {
00597             return localruntime.getClassDataFromParentRuntime(className);
00598         }
00599 
00600         ArrayList<Object> params = new ArrayList<Object>();
00601         params.add(className);
00602 
00603         RuntimeRequest req = new RuntimeRequest("getClassDataFromParentRuntime",
00604                 params, this.url);
00605         req.send();
00606 
00607         try {
00608             return (byte[]) req.getReturnedObject();
00609         } catch (Exception e) {
00610             throw new ProActiveException(e);
00611         }
00612     }
00613 
00614     public byte[] getClassDataFromThisRuntime(String className)
00615         throws ProActiveException, HTTPRemoteException {
00616         if (isLocal) {
00617             return localruntime.getClassDataFromThisRuntime(className);
00618         }
00619 
00620         ArrayList<Object> params = new ArrayList<Object>();
00621         params.add(className);
00622 
00623         RuntimeRequest req = new RuntimeRequest("getClassDataFromThisRuntime",
00624                 params, this.url);
00625         req.send();
00626 
00627         try {
00628             return (byte[]) req.getReturnedObject();
00629         } catch (Exception e) {
00630             e.printStackTrace();
00631 
00632             return null;
00633         }
00634     }
00635 
00636     /* (non-Javadoc)
00637      * @see org.objectweb.proactive.core.runtime.ProActiveRuntime#receiveCheckpoint(java.lang.String, org.objectweb.proactive.core.body.ft.checkpointing.Checkpoint, int)
00638      */
00639     public UniversalBody receiveCheckpoint(String nodeURL, Checkpoint ckpt,
00640         int inc) throws ProActiveException, HTTPRemoteException {
00641         if (isLocal) {
00642             return localruntime.receiveCheckpoint(nodeURL, ckpt, inc);
00643         }
00644 
00645         ArrayList<Object> params = new ArrayList<Object>();
00646         params.add(nodeURL);
00647         params.add(ckpt);
00648         params.add(new Integer(inc));
00649 
00650         RuntimeRequest req = new RuntimeRequest("receiveCheckpoint", params,
00651                 this.url);
00652         req.send();
00653 
00654         try {
00655             return (UniversalBody) req.getReturnedObject();
00656         } catch (Exception e) {
00657             throw new ProActiveException(e);
00658         }
00659     }
00660 
00661     public ProActiveDescriptor getDescriptor(String url,
00662         boolean isHierarchicalSearch) throws IOException, ProActiveException {
00663         if (isLocal) {
00664             return localruntime.getDescriptor(url, isHierarchicalSearch);
00665         }
00666 
00667         ArrayList<Object> params = new ArrayList<Object>();
00668         params.add(url);
00669         params.add(new Boolean(isHierarchicalSearch));
00670 
00671         RuntimeRequest req = new RuntimeRequest("getDescriptor", params,
00672                 this.url);
00673         req.send();
00674 
00675         try {
00676             return (ProActiveDescriptor) req.getReturnedObject();
00677         } catch (Exception e) {
00678             throw new ProActiveException(e);
00679         }
00680     }
00681 
00682     public void launchMain(String className, String[] parameters)
00683         throws IOException, ClassNotFoundException, NoSuchMethodException,
00684             ProActiveException {
00685         if (isLocal) {
00686             localruntime.launchMain(className, parameters);
00687 
00688             return;
00689         }
00690 
00691         ArrayList<Object> params = new ArrayList<Object>();
00692         params.add(className);
00693         params.add(parameters);
00694 
00695         RuntimeRequest req = new RuntimeRequest("launchMain", params, this.url);
00696         req.send();
00697     }
00698 
00699     public void newRemote(String className)
00700         throws IOException, ClassNotFoundException, ProActiveException {
00701         if (isLocal) {
00702             localruntime.newRemote(className);
00703 
00704             return;
00705         }
00706 
00707         ArrayList<Object> params = new ArrayList<Object>();
00708         params.add(className);
00709 
00710         RuntimeRequest req = new RuntimeRequest("newRemote", params, this.url);
00711         req.send();
00712     }
00713 
00714     protected String buildNodeURL(String url)
00715         throws java.net.UnknownHostException {
00716         int i = url.indexOf('/');
00717 
00718         if (i != -1) {
00719             URL u_ = null;
00720             int port = 0;
00721             try {
00722                 u_ = new URL(url);
00723                 port = u_.getPort();
00724                 if ((port == 0) || (port == -1)) {
00725                     port = ClassServer.getServerSocketPort();
00726                     url = u_.getProtocol() + "://" + u_.getHost() + ":" + port +
00727                         u_.getPath();
00728                 }
00729             } catch (MalformedURLException e) {
00730             }
00731         } else {
00732             String host = null;
00733             try {
00734                 host = UrlBuilder.getHostNameorIP(getVMInformation()
00735                                                       .getInetAddress());
00736             } catch (HTTPRemoteException e) {
00737                 e.printStackTrace();
00738             }
00739             //            int n = host.indexOf(":");
00740             url = "http://" + host + ":" + ClassServer.getServerSocketPort() +
00741                 "/" + url;
00742             //            if (n == -1) {
00743             //                int port = Integer.parseInt(System.getProperty(
00744             //                            "proactive.http.port"));
00745             //                u = UrlBuilder.buildUrl(host, url, "http:", port);
00746             //
00747             //                //            System.out.println("U = " + u + " -- " + port);
00748             //            } else {
00749             //                u = UrlBuilder.buildUrl(host, url, "http:");
00750             //            }
00751         }
00752 
00753         //        } else {
00754         //           i = url.indexOf('/', 7);
00755         //
00756         //            String computerName = url.substring(7, i);
00757         //
00758         //            if (computerName.indexOf(':') == -1) {
00759         //                //no port
00760         //                //            computerName = computerName ;
00761         //                url = "http://" + computerName + url.substring(i);
00762         //            }
00763         url = UrlBuilder.checkUrl(url);
00764         return url;
00765     }
00766 
00767     private void readObject(java.io.ObjectInputStream in)
00768         throws IOException, ClassNotFoundException {
00769         in.defaultReadObject();
00770         this.isLocal = false;
00771     }
00772 
00773     public String getVNName(String nodename)
00774         throws ProActiveException, HTTPRemoteException {
00775         if (isLocal) {
00776             return localruntime.getVNName(nodename);
00777         }
00778 
00779         ArrayList<Object> params = new ArrayList<Object>();
00780         params.add(nodename);
00781 
00782         RuntimeRequest req = new RuntimeRequest("getVNName", params, this.url);
00783         req.send();
00784 
00785         try {
00786             return (String) req.getReturnedObject();
00787         } catch (Exception e) {
00788             throw new ProActiveException(e);
00789         }
00790     }
00791 
00792     public X509Certificate getCertificate()
00793         throws SecurityNotAvailableException, IOException {
00794         if (isLocal) {
00795             return localruntime.getCertificate();
00796         }
00797 
00798         ArrayList<Object> params = new ArrayList<Object>();
00799 
00800         RuntimeRequest req = new RuntimeRequest("getCertificate", params,
00801                 this.url);
00802         req.send();
00803 
00804         try {
00805             return (X509Certificate) req.getReturnedObject();
00806         } catch (SecurityException e) {
00807             throw e;
00808         } catch (IOException e) {
00809             throw e;
00810         } catch (Exception e) {
00811             e.printStackTrace();
00812 
00813             return null;
00814         }
00815     }
00816 
00817     public long startNewSession(Communication policy)
00818         throws SecurityNotAvailableException, RenegotiateSessionException,
00819             IOException {
00820         if (isLocal) {
00821             return localruntime.startNewSession(policy);
00822         }
00823 
00824         ArrayList<Object> params = new ArrayList<Object>();
00825         params.add(policy);
00826 
00827         RuntimeRequest req = new RuntimeRequest("startNewSession", params,
00828                 this.url);
00829 
00830         req.send();
00831 
00832         try {
00833             return ((Long) req.getReturnedObject()).longValue();
00834         } catch (SecurityException e) {
00835             throw e;
00836         } catch (IOException e) {
00837             throw e;
00838         } catch (Exception e) {
00839             e.printStackTrace();
00840 
00841             return 0;
00842         }
00843     }
00844 
00845     public PublicKey getPublicKey()
00846         throws SecurityNotAvailableException, IOException {
00847         if (isLocal) {
00848             return localruntime.getPublicKey();
00849         }
00850 
00851         ArrayList<Object> params = new ArrayList<Object>();
00852 
00853         RuntimeRequest req = new RuntimeRequest("getPublicKey", params, this.url);
00854 
00855         req.send();
00856 
00857         try {
00858             return (PublicKey) req.getReturnedObject();
00859         } catch (SecurityException e) {
00860             throw e;
00861         } catch (IOException e) {
00862             throw e;
00863         } catch (Exception e) {
00864             e.printStackTrace();
00865 
00866             return null;
00867         }
00868     }
00869 
00870     public byte[] randomValue(long sessionID, byte[] clientRandomValue)
00871         throws SecurityNotAvailableException, RenegotiateSessionException,
00872             IOException {
00873         if (isLocal) {
00874             return localruntime.randomValue(sessionID, clientRandomValue);
00875         }
00876 
00877         ArrayList<Object> params = new ArrayList<Object>();
00878         params.add(new Long(sessionID));
00879         params.add(clientRandomValue);
00880 
00881         RuntimeRequest req = new RuntimeRequest("randomValue", params, this.url);
00882 
00883         req.send();
00884 
00885         try {
00886             return (byte[]) req.getReturnedObject();
00887         } catch (SecurityException e) {
00888             throw e;
00889         } catch (IOException e) {
00890             throw e;
00891         } catch (Exception e) {
00892             e.printStackTrace();
00893 
00894             return null;
00895         }
00896     }
00897 
00898     public byte[][] publicKeyExchange(long sessionID, byte[] myPublicKey,
00899         byte[] myCertificate, byte[] signature)
00900         throws SecurityNotAvailableException, RenegotiateSessionException,
00901             KeyExchangeException, IOException {
00902         if (isLocal) {
00903             return localruntime.publicKeyExchange(sessionID, myPublicKey,
00904                 myCertificate, signature);
00905         }
00906 
00907         ArrayList<Object> params = new ArrayList<Object>();
00908         params.add(new Long(sessionID));
00909         params.add(myPublicKey);
00910         params.add(myCertificate);
00911         params.add(signature);
00912 
00913         RuntimeRequest req = new RuntimeRequest("publicKeyExchange", params,
00914                 this.url);
00915 
00916         req.send();
00917 
00918         try {
00919             return (byte[][]) req.getReturnedObject();
00920         } catch (SecurityException e) {
00921             throw e;
00922         } catch (IOException e) {
00923             throw e;
00924         } catch (Exception e) {
00925             e.printStackTrace();
00926 
00927             return null;
00928         }
00929     }
00930 
00931     public byte[][] secretKeyExchange(long sessionID, byte[] encodedAESKey,
00932         byte[] encodedIVParameters, byte[] encodedClientMacKey,
00933         byte[] encodedLockData, byte[] parametersSignature)
00934         throws SecurityNotAvailableException, RenegotiateSessionException,
00935             IOException {
00936         if (isLocal) {
00937             return localruntime.secretKeyExchange(sessionID, encodedAESKey,
00938                 encodedIVParameters, encodedClientMacKey, encodedLockData,
00939                 parametersSignature);
00940         }
00941 
00942         ArrayList<Object> params = new ArrayList<Object>();
00943         params.add(new Long(sessionID));
00944         params.add(encodedAESKey);
00945         params.add(encodedIVParameters);
00946         params.add(encodedClientMacKey);
00947         params.add(encodedLockData);
00948         params.add(parametersSignature);
00949 
00950         RuntimeRequest req = new RuntimeRequest("secretKeyExchange", params,
00951                 this.url);
00952 
00953         req.send();
00954 
00955         try {
00956             return (byte[][]) req.getReturnedObject();
00957         } catch (SecurityException e) {
00958             throw e;
00959         } catch (RenegotiateSessionException e) {
00960             throw e;
00961         } catch (IOException e) {
00962             throw e;
00963         } catch (Exception e) {
00964             e.printStackTrace();
00965 
00966             return null;
00967         }
00968     }
00969 
00970     public SecurityContext getPolicy(SecurityContext securityContext)
00971         throws SecurityNotAvailableException, IOException {
00972         if (isLocal) {
00973             return localruntime.getPolicy(securityContext);
00974         }
00975 
00976         ArrayList<Object> params = new ArrayList<Object>();
00977         params.add(securityContext);
00978 
00979         RuntimeRequest req = new RuntimeRequest("getPolicy", params, this.url);
00980 
00981         req.send();
00982 
00983         try {
00984             return (SecurityContext) req.getReturnedObject();
00985         } catch (SecurityNotAvailableException e) {
00986             throw e;
00987         } catch (IOException e) {
00988             throw e;
00989         } catch (Exception e) {
00990             e.printStackTrace();
00991 
00992             return null;
00993         }
00994     }
00995 
00996     public byte[] getCertificateEncoded()
00997         throws SecurityNotAvailableException, IOException {
00998         if (isLocal) {
00999             return localruntime.getCertificateEncoded();
01000         }
01001 
01002         ArrayList<Object> params = new ArrayList<Object>();
01003 
01004         RuntimeRequest req = new RuntimeRequest("getCertificateEncoded",
01005                 params, this.url);
01006 
01007         req.send();
01008 
01009         try {
01010             return (byte[]) req.getReturnedObject();
01011         } catch (SecurityException e) {
01012             throw e;
01013         } catch (IOException e) {
01014             throw e;
01015         } catch (Exception e) {
01016             e.printStackTrace();
01017 
01018             return null;
01019         }
01020     }
01021 
01022     public ArrayList<Entity> getEntities()
01023         throws SecurityNotAvailableException, IOException {
01024         if (isLocal) {
01025             return localruntime.getEntities();
01026         }
01027 
01028         ArrayList<Object> params = new ArrayList<Object>();
01029 
01030         RuntimeRequest req = new RuntimeRequest("getEntities", params, this.url);
01031 
01032         req.send();
01033 
01034         try {
01035             return (ArrayList<Entity>) req.getReturnedObject();
01036         } catch (SecurityException e) {
01037             throw e;
01038         } catch (IOException e) {
01039             throw e;
01040         } catch (Exception e) {
01041             e.printStackTrace();
01042 
01043             return null;
01044         }
01045     }
01046 
01047     public void terminateSession(long sessionID)
01048         throws IOException, SecurityNotAvailableException {
01049         if (isLocal) {
01050             localruntime.terminateSession(sessionID);
01051         }
01052 
01053         ArrayList<Object> params = new ArrayList<Object>();
01054         params.add(new Long(sessionID));
01055 
01056         RuntimeRequest req = new RuntimeRequest("terminateSession", params,
01057                 this.url);
01058 
01059         req.send();
01060 
01061         try {
01062             req.getReturnedObject();
01063         } catch (SecurityException e) {
01064             throw e;
01065         } catch (IOException e) {
01066             throw e;
01067         } catch (Exception e) {
01068             e.printStackTrace();
01069         }
01070     }
01071 
01072     public Object setLocalNodeProperty(String nodeName, String key, String value)
01073         throws IOException, ProActiveException {
01074         if (isLocal) {
01075             return localruntime.setLocalNodeProperty(nodeName, key, value);
01076         }
01077 
01078         ArrayList<Object> params = new ArrayList<Object>();
01079         params.add(nodeName);
01080         params.add(key);
01081         params.add(value);
01082 
01083         RuntimeRequest req = new RuntimeRequest("setLocalNodeProperty", params,
01084                 this.url);
01085 
01086         req.send();
01087 
01088         try {
01089             return (Object) req.getReturnedObject();
01090         } catch (SecurityException e) {
01091             throw e;
01092         } catch (IOException e) {
01093             throw e;
01094         } catch (Exception e) {
01095             e.printStackTrace();
01096 
01097             return null;
01098         }
01099     }
01100 
01101     public String getLocalNodeProperty(String nodeName, String key)
01102         throws IOException, ProActiveException {
01103         if (isLocal) {
01104             return localruntime.getLocalNodeProperty(nodeName, key);
01105         }
01106 
01107         ArrayList<Object> params = new ArrayList<Object>();
01108         params.add(nodeName);
01109         params.add(key);
01110 
01111         RuntimeRequest req = new RuntimeRequest("getLocalNodeProperty", params,
01112                 this.url);
01113 
01114         req.send();
01115 
01116         try {
01117             return (String) req.getReturnedObject();
01118         } catch (SecurityException e) {
01119             throw e;
01120         } catch (IOException e) {
01121             throw e;
01122         } catch (Exception e) {
01123             e.printStackTrace();
01124 
01125             return null;
01126         }
01127     }
01128 }

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