00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.core.node;
00032
00033 import java.io.IOException;
00034 import java.io.ObjectInputStream;
00035 import java.io.Serializable;
00036 import java.util.ArrayList;
00037
00038 import org.objectweb.proactive.ActiveObjectCreationException;
00039 import org.objectweb.proactive.core.Constants;
00040 import org.objectweb.proactive.core.ProActiveException;
00041 import org.objectweb.proactive.core.body.UniversalBody;
00042 import org.objectweb.proactive.core.mop.ConstructionOfProxyObjectFailedException;
00043 import org.objectweb.proactive.core.mop.MOP;
00044 import org.objectweb.proactive.core.mop.MOPException;
00045 import org.objectweb.proactive.core.runtime.DeployerTag;
00046 import org.objectweb.proactive.core.runtime.ProActiveRuntime;
00047 import org.objectweb.proactive.core.runtime.RuntimeFactory;
00048
00049
00068 public class NodeImpl implements Node, Serializable {
00069 protected NodeInformation nodeInformation;
00070 protected ProActiveRuntime proActiveRuntime;
00071 protected String vnName;
00072 protected ArrayList fileTransferServicePool;
00073
00074
00075
00076
00077 public NodeImpl() {
00078 }
00079
00080 public NodeImpl(ProActiveRuntime proActiveRuntime, String nodeURL,
00081 String protocol, String jobID) {
00082 this(proActiveRuntime, nodeURL, protocol, jobID, null);
00083 }
00084
00085 public NodeImpl(ProActiveRuntime proActiveRuntime, String nodeURL,
00086 String protocol, String jobID, String vmName) {
00087 this.proActiveRuntime = proActiveRuntime;
00088 this.nodeInformation = new NodeInformationImpl(nodeURL, protocol,
00089 jobID, vmName, proActiveRuntime.getVMInformation().getDeployerTag());
00090 this.fileTransferServicePool = new ArrayList();
00091 }
00092
00093
00094
00095
00099 public NodeInformation getNodeInformation() {
00100 return nodeInformation;
00101 }
00102
00106 public ProActiveRuntime getProActiveRuntime() {
00107 return proActiveRuntime;
00108 }
00109
00113 public Object[] getActiveObjects()
00114 throws NodeException, ActiveObjectCreationException {
00115 ArrayList bodyArray;
00116 try {
00117 bodyArray = this.proActiveRuntime.getActiveObjects(this.nodeInformation.getName());
00118 } catch (ProActiveException e) {
00119 throw new NodeException(
00120 "Cannot get Active Objects registered on this node: " +
00121 this.nodeInformation.getURL(), e);
00122 }
00123 if (bodyArray.size() == 0) {
00124 return new Object[0];
00125 } else {
00126 Object[] stubOnAO = new Object[bodyArray.size()];
00127 for (int i = 0; i < bodyArray.size(); i++) {
00128 UniversalBody body = (UniversalBody) ((ArrayList) bodyArray.get(i)).get(0);
00129 String className = (String) ((ArrayList) bodyArray.get(i)).get(1);
00130 try {
00131 stubOnAO[i] = createStubObject(className, body);
00132 } catch (MOPException e) {
00133 throw new ActiveObjectCreationException("Exception occured when trying to create stub-proxy",
00134 e);
00135 }
00136 }
00137 return stubOnAO;
00138 }
00139 }
00140
00144 public int getNumberOfActiveObjects() throws NodeException {
00145 ArrayList bodyArray;
00146 try {
00147 bodyArray = this.proActiveRuntime.getActiveObjects(this.nodeInformation.getName());
00148 } catch (ProActiveException e) {
00149 throw new NodeException(
00150 "Cannot get Active Objects registered on this node: " +
00151 this.nodeInformation.getURL(), e);
00152 }
00153 return bodyArray.size();
00154 }
00155
00159 public Object[] getActiveObjects(String className)
00160 throws NodeException, ActiveObjectCreationException {
00161 ArrayList bodyArray;
00162 try {
00163 bodyArray = this.proActiveRuntime.getActiveObjects(this.nodeInformation.getName(),
00164 className);
00165 } catch (ProActiveException e) {
00166 throw new NodeException("Cannot get Active Objects of type " +
00167 className + " registered on this node: " +
00168 this.nodeInformation.getURL(), e);
00169 }
00170 if (bodyArray.size() == 0) {
00171 throw new NodeException("no ActiveObjects of type " + className +
00172 " are registered for this node: " +
00173 this.nodeInformation.getURL());
00174 } else {
00175 Object[] stubOnAO = new Object[bodyArray.size()];
00176 for (int i = 0; i < bodyArray.size(); i++) {
00177 UniversalBody body = (UniversalBody) bodyArray.get(i);
00178 try {
00179 stubOnAO[i] = createStubObject(className, body);
00180 } catch (MOPException e) {
00181 throw new ActiveObjectCreationException("Exception occured when trying to create stub-proxy",
00182 e);
00183 }
00184 }
00185 return stubOnAO;
00186 }
00187 }
00188
00189 private void readObject(ObjectInputStream in)
00190 throws java.io.IOException, ClassNotFoundException, ProActiveException {
00191 in.defaultReadObject();
00192 if (NodeFactory.isNodeLocal(this)) {
00193 this.proActiveRuntime = RuntimeFactory.getProtocolSpecificRuntime(nodeInformation.getProtocol());
00194 }
00195 }
00196
00197
00198
00199
00200
00201
00202 private static Object createStubObject(String className, UniversalBody body)
00203 throws MOPException {
00204 return createStubObject(className, null, new Object[] { body });
00205 }
00206
00207 private static Object createStubObject(String className,
00208 Object[] constructorParameters, Object[] proxyParameters)
00209 throws MOPException {
00210 try {
00211 return MOP.newInstance(className, (Class[])null, constructorParameters,
00212 Constants.DEFAULT_BODY_PROXY_CLASS_NAME, proxyParameters);
00213
00214 } catch (ClassNotFoundException e) {
00215 throw new ConstructionOfProxyObjectFailedException(
00216 "Class can't be found e=" + e);
00217 }
00218 }
00219
00220
00221
00222
00223 protected class NodeInformationImpl implements NodeInformation {
00224 private String nodeName;
00225 private String nodeURL;
00226 private String protocol;
00227 private String jobID;
00228 private java.net.InetAddress hostInetAddress;
00229 private java.rmi.dgc.VMID hostVMID;
00230 private String hostname;
00231 private String vmName;
00232 private DeployerTag deployerTag;
00233
00234 public NodeInformationImpl(String url, String protocol, String jobID,
00235 String vmName, DeployerTag deployerTag) {
00236 this.nodeURL = url;
00237 this.hostVMID = proActiveRuntime.getVMInformation().getVMID();
00238 this.hostInetAddress = proActiveRuntime.getVMInformation()
00239 .getInetAddress();
00240 this.hostname = proActiveRuntime.getVMInformation().getHostName();
00241 this.protocol = protocol;
00242 this.nodeName = extractNameFromUrl(url);
00243 this.jobID = jobID;
00244 this.vmName = vmName;
00245 this.deployerTag = deployerTag;
00246 }
00247
00251 public java.rmi.dgc.VMID getVMID() {
00252 return hostVMID;
00253 }
00254
00258 public String getName() {
00259 return nodeName;
00260 }
00261
00265 public String getProtocol() {
00266 return protocol;
00267 }
00268
00272 public String getURL() {
00273 return nodeURL;
00274 }
00275
00279 public java.net.InetAddress getInetAddress() {
00280 return hostInetAddress;
00281 }
00282
00283 public String getCreationProtocolID() {
00284 return proActiveRuntime.getVMInformation().getCreationProtocolID();
00285 }
00286
00291 public void setCreationProtocolID(String protocolId) {
00292
00293 }
00294
00300 private String extractNameFromUrl(String url) {
00301 int n = url.lastIndexOf("/");
00302 String name = url.substring(n + 1);
00303 return name;
00304 }
00305
00309 public String getJobID() {
00310 return jobID;
00311 }
00312
00318 public void setJobID(String jobId) {
00319 this.jobID = jobId;
00320 }
00321
00325 public String getHostName() {
00326 return this.hostname;
00327 }
00328
00332 public String getDescriptorVMName() {
00333 return vmName;
00334 }
00335
00339 public DeployerTag getDeployerTag() {
00340 return deployerTag;
00341 }
00342 }
00343
00344
00345
00351 public void killAllActiveObjects() throws NodeException, IOException {
00352 ArrayList bodyArray;
00353 try {
00354 bodyArray = this.proActiveRuntime.getActiveObjects(this.nodeInformation.getName());
00355 } catch (ProActiveException e) {
00356 throw new NodeException(
00357 "Cannot get Active Objects registered on this node: " +
00358 this.nodeInformation.getURL(), e);
00359 }
00360 for (int i = 0; i < bodyArray.size(); i++) {
00361 UniversalBody body = (UniversalBody) ((ArrayList) bodyArray.get(i)).get(0);
00362 body.terminate();
00363 }
00364 }
00365
00369 public Object setProperty(String key, String value)
00370 throws ProActiveException {
00371 return this.proActiveRuntime.setLocalNodeProperty(this.nodeInformation.getName(),
00372 key, value);
00373 }
00374
00378 public String getProperty(String key) throws ProActiveException {
00379 return this.proActiveRuntime.getLocalNodeProperty(this.nodeInformation.getName(),
00380 key);
00381 }
00382
00401 }