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;
00032
00033 import java.io.IOException;
00034 import java.lang.reflect.Array;
00035 import java.net.UnknownHostException;
00036 import java.rmi.AlreadyBoundException;
00037 import java.util.Collection;
00038 import java.util.Vector;
00039 import java.util.concurrent.ExecutorService;
00040 import java.util.concurrent.Executors;
00041 import java.util.concurrent.TimeUnit;
00042
00043 import org.apache.log4j.Logger;
00044 import org.objectweb.fractal.api.Component;
00045 import org.objectweb.fractal.api.NoSuchInterfaceException;
00046 import org.objectweb.fractal.api.factory.GenericFactory;
00047 import org.objectweb.fractal.api.factory.InstantiationException;
00048 import org.objectweb.fractal.util.Fractal;
00049 import org.objectweb.proactive.core.Constants;
00050 import org.objectweb.proactive.core.ProActiveException;
00051 import org.objectweb.proactive.core.ProActiveRuntimeException;
00052 import org.objectweb.proactive.core.body.BodyAdapter;
00053 import org.objectweb.proactive.core.body.LocalBodyStore;
00054 import org.objectweb.proactive.core.body.MetaObjectFactory;
00055 import org.objectweb.proactive.core.body.ProActiveMetaObjectFactory;
00056 import org.objectweb.proactive.core.body.UniversalBody;
00057 import org.objectweb.proactive.core.body.future.Future;
00058 import org.objectweb.proactive.core.body.future.FuturePool;
00059 import org.objectweb.proactive.core.body.http.HttpBodyAdapter;
00060 import org.objectweb.proactive.core.body.ibis.IbisBodyAdapter;
00061 import org.objectweb.proactive.core.body.migration.Migratable;
00062 import org.objectweb.proactive.core.body.migration.MigrationException;
00063 import org.objectweb.proactive.core.body.proxy.AbstractProxy;
00064 import org.objectweb.proactive.core.body.proxy.BodyProxy;
00065 import org.objectweb.proactive.core.body.request.BodyRequest;
00066 import org.objectweb.proactive.core.body.rmi.RmiBodyAdapter;
00067 import org.objectweb.proactive.core.body.rmi.SshRmiBodyAdapter;
00068 import org.objectweb.proactive.core.component.ComponentParameters;
00069 import org.objectweb.proactive.core.component.ContentDescription;
00070 import org.objectweb.proactive.core.component.ControllerDescription;
00071 import org.objectweb.proactive.core.component.factory.ProActiveGenericFactory;
00072 import org.objectweb.proactive.core.config.ProActiveConfiguration;
00073 import org.objectweb.proactive.core.descriptor.data.ProActiveDescriptor;
00074 import org.objectweb.proactive.core.descriptor.data.VirtualNode;
00075 import org.objectweb.proactive.core.descriptor.data.VirtualNodeImpl;
00076 import org.objectweb.proactive.core.descriptor.xml.ProActiveDescriptorHandler;
00077 import org.objectweb.proactive.core.event.NodeCreationEventProducerImpl;
00078 import org.objectweb.proactive.core.exceptions.manager.ExceptionHandler;
00079 import org.objectweb.proactive.core.exceptions.manager.NFEListener;
00080 import org.objectweb.proactive.core.exceptions.manager.NFEManager;
00081 import org.objectweb.proactive.core.group.Group;
00082 import org.objectweb.proactive.core.group.ProActiveGroup;
00083 import org.objectweb.proactive.core.group.ProxyForGroup;
00084 import org.objectweb.proactive.core.mop.ClassNotReifiableException;
00085 import org.objectweb.proactive.core.mop.ConstructionOfProxyObjectFailedException;
00086 import org.objectweb.proactive.core.mop.MOP;
00087 import org.objectweb.proactive.core.mop.MOPException;
00088 import org.objectweb.proactive.core.mop.Proxy;
00089 import org.objectweb.proactive.core.mop.StubObject;
00090 import org.objectweb.proactive.core.node.Node;
00091 import org.objectweb.proactive.core.node.NodeException;
00092 import org.objectweb.proactive.core.node.NodeFactory;
00093 import org.objectweb.proactive.core.runtime.ProActiveRuntime;
00094 import org.objectweb.proactive.core.runtime.ProActiveRuntimeImpl;
00095 import org.objectweb.proactive.core.runtime.RuntimeFactory;
00096 import org.objectweb.proactive.core.util.NodeCreationListenerForAoCreation;
00097 import org.objectweb.proactive.core.util.NonFunctionalServices;
00098 import org.objectweb.proactive.core.util.ProcessForAoCreation;
00099 import org.objectweb.proactive.core.util.UrlBuilder;
00100 import org.objectweb.proactive.core.util.log.Loggers;
00101 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00102 import org.objectweb.proactive.core.util.profiling.PAProfilerEngine;
00103 import org.objectweb.proactive.core.util.profiling.Profiling;
00104 import org.objectweb.proactive.core.util.timer.CompositeAverageMicroTimer;
00105 import org.objectweb.proactive.core.xml.VariableContract;
00106 import org.objectweb.proactive.ext.security.ProActiveSecurityManager;
00107 import org.objectweb.proactive.ext.webservices.soap.ProActiveDeployer;
00108
00109 import ibis.rmi.RemoteException;
00110
00111
00201 public class ProActive {
00202 protected final static Logger logger = ProActiveLogger.getLogger(Loggers.CORE);
00203 public final static Logger loggerGroup = ProActiveLogger.getLogger(Loggers.GROUPS);
00204
00206 private static CompositeAverageMicroTimer timer;
00207
00208 static {
00209 ProActiveConfiguration.load();
00210
00211 @SuppressWarnings("unused")
00212 Class c = org.objectweb.proactive.core.runtime.RuntimeFactory.class;
00213 }
00214
00215
00216
00217
00218 private ProActive() {
00219 }
00220
00221
00222
00223
00224
00235 public static void newMain(String classname, String[] mainParameters,
00236 Node node)
00237 throws ClassNotFoundException, NoSuchMethodException, ProActiveException {
00238 ProActiveRuntime part = node.getProActiveRuntime();
00239 part.launchMain(classname, mainParameters);
00240 }
00241
00250 public static void newRemote(String classname, Node node)
00251 throws ClassNotFoundException, ProActiveException {
00252 ProActiveRuntime part = node.getProActiveRuntime();
00253 part.newRemote(classname);
00254 }
00255
00264 public static Object newActive(String classname,
00265 Object[] constructorParameters)
00266 throws ActiveObjectCreationException, NodeException {
00267 return newActive(classname, null, constructorParameters, (Node) null,
00268 null, null);
00269 }
00270
00281 public static Object newActive(String classname,
00282 Object[] constructorParameters, String nodeURL)
00283 throws ActiveObjectCreationException, NodeException {
00284 if (nodeURL == null) {
00285 return newActive(classname, null, constructorParameters,
00286 (Node) null, null, null);
00287 } else {
00288 return newActive(classname, null, constructorParameters,
00289 NodeFactory.getNode(nodeURL), null, null);
00290 }
00291 }
00292
00303 public static Object newActive(String classname,
00304 Object[] constructorParameters, Node node)
00305 throws ActiveObjectCreationException, NodeException {
00306 return newActive(classname, null, constructorParameters, node, null,
00307 null);
00308 }
00309
00327 public static Object[] newActiveInParallel(String className,
00328 Object[][] constructorParameters, Node[] nodes)
00329 throws ClassNotFoundException {
00330 return newActiveInParallel(className, null, constructorParameters, nodes);
00331 }
00332
00352 public static Object[] newActiveInParallel(String className,
00353 Object[] constructorParameters, VirtualNode virtualNode)
00354 throws NodeException, ClassNotFoundException {
00355 return newActiveInParallel(className, null, constructorParameters,
00356 virtualNode);
00357 }
00358
00372 public static Object newActiveAsGroup(String classname,
00373 Object[] constructorParameters, VirtualNode virtualnode)
00374 throws ActiveObjectCreationException, NodeException {
00375 return ProActive.newActiveAsGroup(classname, null,
00376 constructorParameters, virtualnode, null, null);
00377 }
00378
00397 public static Object newActiveAsGroup(String className,
00398 Object[] constructorParameters, VirtualNode virtualNode,
00399 Active activity, MetaObjectFactory factory)
00400 throws ActiveObjectCreationException, NodeException {
00401 return newActiveAsGroup(className, null, constructorParameters,
00402 virtualNode, activity, factory);
00403 }
00404
00427 public static Component newActiveComponent(String className,
00428 Object[] constructorParameters, Node node, Active activity,
00429 MetaObjectFactory factory, ComponentParameters componentParameters)
00430 throws ActiveObjectCreationException, NodeException {
00431 return newActiveComponent(className, null, constructorParameters, node,
00432 activity, factory, componentParameters);
00433 }
00434
00460 public static Component newActiveComponent(String className,
00461 Object[] constructorParameters, VirtualNode vn,
00462 ComponentParameters componentParameters)
00463 throws ActiveObjectCreationException, NodeException {
00464 return newActiveComponent(className, null, constructorParameters, vn,
00465 componentParameters);
00466 }
00467
00476 public static Object turnActive(Object target)
00477 throws ActiveObjectCreationException, NodeException {
00478 return turnActive(target, (Class[]) null, (Node) null);
00479 }
00480
00492 public static Object turnActive(Object target, String nodeURL)
00493 throws ActiveObjectCreationException, NodeException {
00494 if (nodeURL == null) {
00495 return turnActive(target, null, target.getClass().getName(), null,
00496 null, null);
00497 } else {
00498 return turnActive(target, null, target.getClass().getName(),
00499 NodeFactory.getNode(nodeURL), null, null);
00500 }
00501 }
00502
00514 public static Object turnActive(Object target, Node node)
00515 throws ActiveObjectCreationException, NodeException {
00516 return turnActive(target, null, target.getClass().getName(), node,
00517 null, null);
00518 }
00519
00535 public static Object turnActive(Object target, Node node, Active activity,
00536 MetaObjectFactory factory)
00537 throws ActiveObjectCreationException, NodeException {
00538 return turnActive(target, null, target.getClass().getName(), node,
00539 activity, factory);
00540 }
00541
00555 public static Object turnActive(Object target, String nameOfTargetType,
00556 Node node) throws ActiveObjectCreationException, NodeException {
00557 return turnActive(target, null, nameOfTargetType, node, null, null);
00558 }
00559
00581 public static Object turnActive(Object target, String nameOfTargetType,
00582 Node node, Active activity, MetaObjectFactory factory)
00583 throws ActiveObjectCreationException, NodeException {
00584 return turnActive(target, null, nameOfTargetType, node, activity,
00585 factory);
00586 }
00587
00601 public static Object turnActiveAsGroup(Object target,
00602 String nameOfTargetType, VirtualNode virtualnode)
00603 throws ActiveObjectCreationException, NodeException {
00604 return turnActiveAsGroup(target, null, nameOfTargetType, virtualnode);
00605 }
00606
00609
00619 public static Object newActive(String classname, Class[] genericParameters,
00620 Object[] constructorParameters)
00621 throws ActiveObjectCreationException, NodeException {
00622
00623 Node nullNode = null;
00624 return newActive(classname, genericParameters, constructorParameters,
00625 nullNode, null, null);
00626 }
00627
00639 public static Object newActive(String classname, Class[] genericParameters,
00640 Object[] constructorParameters, String nodeURL)
00641 throws ActiveObjectCreationException, NodeException {
00642 if (nodeURL == null) {
00643
00644 Node nullNode = null;
00645 return newActive(classname, genericParameters,
00646 constructorParameters, nullNode, null, null);
00647 } else {
00648 return newActive(classname, genericParameters,
00649 constructorParameters, NodeFactory.getNode(nodeURL), null, null);
00650 }
00651 }
00652
00664 public static Object newActive(String classname, Class[] genericParameters,
00665 Object[] constructorParameters, Node node)
00666 throws ActiveObjectCreationException, NodeException {
00667 return newActive(classname, genericParameters, constructorParameters,
00668 node, null, null);
00669 }
00670
00695 public static Object newActive(String classname, Class[] genericParameters,
00696 Object[] constructorParameters, Node node, Active activity,
00697 MetaObjectFactory factory)
00698 throws ActiveObjectCreationException, NodeException {
00699
00700 if (node == null) {
00701 node = NodeFactory.getDefaultNode();
00702 }
00703
00704 if (factory == null) {
00705 factory = ProActiveMetaObjectFactory.newInstance();
00706 }
00707
00708 if (Profiling.SECURITY) {
00709 if (timer == null) {
00710 timer = new CompositeAverageMicroTimer("newActiveSecurityTimer");
00711 PAProfilerEngine.registerTimer(timer);
00712 }
00713 timer.setTimer("constructing certificate");
00714 timer.start();
00715 }
00716
00717 MetaObjectFactory clonedFactory = factory;
00718
00719 ProActiveSecurityManager factorySM = factory.getProActiveSecurityManager();
00720 if (factorySM != null) {
00721 try {
00722 clonedFactory = (MetaObjectFactory) factory.clone();
00723 } catch (CloneNotSupportedException e) {
00724 e.printStackTrace();
00725 }
00726
00727 ProActiveSecurityManager psm = clonedFactory.getProActiveSecurityManager();
00728 psm = psm.generateSiblingCertificate(classname);
00729 clonedFactory.setProActiveSecurityManager(psm);
00730 }
00731 if (Profiling.SECURITY) {
00732 timer.stop();
00733 }
00734
00735 try {
00736
00737 Object stub = createStubObject(classname, genericParameters,
00738 constructorParameters, node, activity, clonedFactory);
00739
00740 return stub;
00741 } catch (MOPException e) {
00742 Throwable t = e;
00743
00744 if (e.getTargetException() != null) {
00745 t = e.getTargetException();
00746 }
00747
00748 throw new ActiveObjectCreationException(t);
00749 }
00750 }
00751
00770 public static Object[] newActiveInParallel(String className,
00771 Class[] genericParameters, Object[][] constructorParameters,
00772 Node[] nodes) throws ClassNotFoundException {
00773 if (constructorParameters.length != nodes.length) {
00774 throw new ProActiveRuntimeException(
00775 "The total of constructors must" +
00776 " be equal to the total of nodes");
00777 }
00778
00779 ExecutorService threadPool = Executors.newCachedThreadPool();
00780
00781 Vector result = new Vector();
00782
00783
00784
00785 for (int i = 0; i < constructorParameters.length; i++) {
00786 threadPool.execute(new ProcessForAoCreation(result, className,
00787 genericParameters, constructorParameters[i],
00788 nodes[i % nodes.length]));
00789 }
00790
00791 threadPool.shutdown();
00792 try {
00793 threadPool.awaitTermination(new Integer(System.getProperty(
00794 "components.creation.timeout")), TimeUnit.SECONDS);
00795 } catch (InterruptedException e1) {
00796
00797 e1.printStackTrace();
00798 }
00799
00800 Class classForResult = Class.forName(className);
00801 return result.toArray((Object[]) Array.newInstance(classForResult,
00802 result.size()));
00803 }
00804
00821 public static Object[] newActiveInParallel(String className,
00822 Class[] genericParameters, Object[] constructorParameters,
00823 VirtualNode virtualNode) throws NodeException, ClassNotFoundException {
00824
00825 ExecutorService threadPool = Executors.newCachedThreadPool();
00826
00827 Vector result = new Vector();
00828 if (virtualNode.isActivated()) {
00829
00830 Node[] nodes = virtualNode.getNodes();
00831 for (int i = 0; i < nodes.length; i++) {
00832 threadPool.execute(new ProcessForAoCreation(result, className,
00833 genericParameters, constructorParameters, nodes[i]));
00834 }
00835 } else {
00836
00837 ((NodeCreationEventProducerImpl) virtualNode).addNodeCreationEventListener(new NodeCreationListenerForAoCreation(
00838 result, className, genericParameters,
00839 constructorParameters, threadPool));
00840 virtualNode.activate();
00841 ((VirtualNodeImpl) virtualNode).waitForAllNodesCreation();
00842 }
00843 threadPool.shutdown();
00844 try {
00845 threadPool.awaitTermination(new Integer(System.getProperty(
00846 "components.creation.timeout")), TimeUnit.SECONDS);
00847 } catch (InterruptedException e1) {
00848
00849 e1.printStackTrace();
00850 }
00851
00852 Class classForResult = Class.forName(className);
00853 return result.toArray((Object[]) Array.newInstance(classForResult,
00854 result.size()));
00855 }
00856
00871 public static Object newActiveAsGroup(String classname,
00872 Class[] genericParameters, Object[] constructorParameters,
00873 VirtualNode virtualnode)
00874 throws ActiveObjectCreationException, NodeException {
00875 return ProActive.newActiveAsGroup(classname, genericParameters,
00876 constructorParameters, virtualnode, null, null);
00877 }
00878
00898 public static Object newActiveAsGroup(String classname,
00899 Class[] genericParameters, Object[] constructorParameters,
00900 VirtualNode virtualnode, Active activity, MetaObjectFactory factory)
00901 throws ActiveObjectCreationException, NodeException {
00902 if (virtualnode != null) {
00903 if (!virtualnode.isActivated()) {
00904 virtualnode.activate();
00905 }
00906 Node[] nodeTab = virtualnode.getNodes();
00907 Group aoGroup = null;
00908 try {
00909 aoGroup = ProActiveGroup.getGroup(ProActiveGroup.newGroup(
00910 classname, genericParameters));
00911 } catch (ClassNotFoundException e) {
00912 throw new ActiveObjectCreationException(
00913 "Cannot create group of active objects" + e);
00914 } catch (ClassNotReifiableException e) {
00915 throw new ActiveObjectCreationException(
00916 "Cannot create group of active objects" + e);
00917 }
00918 for (int i = 0; i < nodeTab.length; i++) {
00919 Object tmp = newActive(classname, null, constructorParameters,
00920 (Node) nodeTab[i], activity, factory);
00921 aoGroup.add(tmp);
00922 }
00923
00924 return aoGroup.getGroupByType();
00925 } else {
00926 throw new NodeException(
00927 "VirtualNode is null, unable to activate the object");
00928 }
00929 }
00930
00953 public static Object turnActive(Object target, String nameOfTargetType,
00954 Class[] genericParameters, Node node, Active activity,
00955 MetaObjectFactory factory)
00956 throws ActiveObjectCreationException, NodeException {
00957 if (node == null) {
00958
00959 node = NodeFactory.getDefaultNode();
00960 }
00961
00962 if (factory == null) {
00963 factory = ProActiveMetaObjectFactory.newInstance();
00964 }
00965
00966 ProActiveSecurityManager factorySM = factory.getProActiveSecurityManager();
00967
00968 MetaObjectFactory clonedFactory = factory;
00969
00970 if (factorySM != null) {
00971 try {
00972 clonedFactory = (MetaObjectFactory) factory.clone();
00973 } catch (CloneNotSupportedException e) {
00974 e.printStackTrace();
00975 }
00976
00977 clonedFactory.setProActiveSecurityManager(factory.getProActiveSecurityManager()
00978 .generateSiblingCertificate(nameOfTargetType));
00979
00980 ProActiveLogger.getLogger(Loggers.SECURITY)
00981 .debug("new active object with security manager");
00982 }
00983
00984 try {
00985 return createStubObject(target, nameOfTargetType,
00986 genericParameters, node, activity, clonedFactory);
00987 } catch (MOPException e) {
00988 Throwable t = e;
00989
00990 if (e.getTargetException() != null) {
00991 t = e.getTargetException();
00992 }
00993
00994 throw new ActiveObjectCreationException(t);
00995 }
00996 }
00997
01021 public static Component newActiveComponent(String classname,
01022 Class[] genericParameters, Object[] constructorParameters, Node node,
01023 Active activity, MetaObjectFactory factory,
01024 ComponentParameters componentParameters)
01025 throws ActiveObjectCreationException, NodeException {
01026 try {
01027 Component boot = Fractal.getBootstrapComponent();
01028 GenericFactory cf = Fractal.getGenericFactory(boot);
01029 return cf.newFcInstance(componentParameters.getComponentType(),
01030 new ControllerDescription(componentParameters.getName(),
01031 componentParameters.getHierarchicalType()),
01032 new ContentDescription(classname, constructorParameters,
01033 activity, factory));
01034 } catch (NoSuchInterfaceException e) {
01035 throw new ActiveObjectCreationException(e);
01036 } catch (InstantiationException e) {
01037 if (e.getCause() instanceof NodeException) {
01038 throw new NodeException(e);
01039 } else {
01040 throw new ActiveObjectCreationException(e);
01041 }
01042 }
01043 }
01044
01071 public static Component newActiveComponent(String className,
01072 Class[] genericParameters, Object[] constructorParameters,
01073 VirtualNode vn, ComponentParameters componentParameters)
01074 throws ActiveObjectCreationException, NodeException {
01075 try {
01076 Component boot = Fractal.getBootstrapComponent();
01077 ProActiveGenericFactory cf = (ProActiveGenericFactory) Fractal.getGenericFactory(boot);
01078 return cf.newFcInstance(componentParameters.getComponentType(),
01079 new ControllerDescription(componentParameters.getName(),
01080 componentParameters.getHierarchicalType()),
01081 new ContentDescription(className, constructorParameters));
01082 } catch (NoSuchInterfaceException e) {
01083 throw new ActiveObjectCreationException(e);
01084 } catch (InstantiationException e) {
01085 if (e.getCause() instanceof NodeException) {
01086 throw new NodeException(e);
01087 } else {
01088 throw new ActiveObjectCreationException(e);
01089 }
01090 }
01091 }
01092
01102 public static Object turnActive(Object target, Class[] genericParameters)
01103 throws ActiveObjectCreationException, NodeException {
01104 return turnActive(target, genericParameters, (Node) null,
01105 (Active) null, (MetaObjectFactory) null);
01106 }
01107
01120 public static Object turnActive(Object target, Class[] genericParameters,
01121 String nodeURL) throws ActiveObjectCreationException, NodeException {
01122 if (nodeURL == null) {
01123 return turnActive(target, genericParameters,
01124 target.getClass().getName(), null, null, null);
01125 } else {
01126 return turnActive(target, genericParameters,
01127 target.getClass().getName(), NodeFactory.getNode(nodeURL),
01128 null, null);
01129 }
01130 }
01131
01144 public static Object turnActive(Object target, Class[] genericParameters,
01145 Node node) throws ActiveObjectCreationException, NodeException {
01146 return turnActive(target, genericParameters,
01147 target.getClass().getName(), node, null, null);
01148 }
01149
01166 public static Object turnActive(Object target, Class[] genericParameters,
01167 Node node, Active activity, MetaObjectFactory factory)
01168 throws ActiveObjectCreationException, NodeException {
01169 return turnActive(target, genericParameters,
01170 target.getClass().getName(), node, activity, factory);
01171 }
01172
01187 public static Object turnActive(Object target, Class[] genericParameters,
01188 String nameOfTargetType, Node node)
01189 throws ActiveObjectCreationException, NodeException {
01190 return turnActive(target, genericParameters, nameOfTargetType, node,
01191 null, null);
01192 }
01193
01216 public static Object turnActive(Object target, Class[] genericParameters,
01217 String nameOfTargetType, Node node, Active activity,
01218 MetaObjectFactory factory)
01219 throws ActiveObjectCreationException, NodeException {
01220 if (node == null) {
01221
01222 node = NodeFactory.getDefaultNode();
01223 }
01224
01225 if (factory == null) {
01226 factory = ProActiveMetaObjectFactory.newInstance();
01227 }
01228
01229 ProActiveSecurityManager factorySM = factory.getProActiveSecurityManager();
01230
01231 MetaObjectFactory clonedFactory = factory;
01232
01233 if (factorySM != null) {
01234 try {
01235 clonedFactory = (MetaObjectFactory) factory.clone();
01236 } catch (CloneNotSupportedException e) {
01237 e.printStackTrace();
01238 }
01239
01240 clonedFactory.setProActiveSecurityManager(factory.getProActiveSecurityManager()
01241 .generateSiblingCertificate(nameOfTargetType));
01242
01243 ProActiveLogger.getLogger(Loggers.SECURITY)
01244 .debug("new active object with security manager");
01245 }
01246
01247 try {
01248 return createStubObject(target, nameOfTargetType,
01249 genericParameters, node, activity, clonedFactory);
01250 } catch (MOPException e) {
01251 Throwable t = e;
01252
01253 if (e.getTargetException() != null) {
01254 t = e.getTargetException();
01255 }
01256
01257 throw new ActiveObjectCreationException(t);
01258 }
01259 }
01260
01275 public static Object turnActiveAsGroup(Object target,
01276 Class[] genericParameters, String nameOfTargetType,
01277 VirtualNode virtualnode)
01278 throws ActiveObjectCreationException, NodeException {
01279 if (virtualnode != null) {
01280 Node[] nodeTab = virtualnode.getNodes();
01281 Group aoGroup = null;
01282 try {
01283 aoGroup = ProActiveGroup.getGroup(ProActiveGroup.newGroup(
01284 target.getClass().getName(), genericParameters));
01285 } catch (ClassNotFoundException e) {
01286 throw new ActiveObjectCreationException(
01287 "Cannot create group of active objects" + e);
01288 } catch (ClassNotReifiableException e) {
01289 throw new ActiveObjectCreationException(
01290 "Cannot create group of active objects" + e);
01291 }
01292
01293 for (int i = 0; i < nodeTab.length; i++) {
01294 Object tmp = turnActive(target, genericParameters,
01295 nameOfTargetType, (Node) nodeTab[i], null, null);
01296 aoGroup.add(tmp);
01297 }
01298
01299 return aoGroup;
01300 } else {
01301 throw new NodeException(
01302 "VirtualNode is null, unable to active the object");
01303 }
01304 }
01305
01319 public static void register(Object obj, String url)
01320 throws java.io.IOException {
01321 BodyAdapter body = getRemoteBody(obj);
01322 body.register(url);
01323 if (logger.isInfoEnabled()) {
01324 logger.info("Success at binding url " + url);
01325 }
01326 }
01327
01333 public static void unregister(String url) throws java.io.IOException {
01334 String protocol = UrlBuilder.getProtocol(url);
01335
01336
01337 if (protocol.equals("rmi:")) {
01338 new RmiBodyAdapter().unregister(url);
01339 } else if (protocol.equals("rmissh:")) {
01340 new SshRmiBodyAdapter().unregister(url);
01341 } else if (protocol.equals("http:")) {
01342 new HttpBodyAdapter().unregister(url);
01343 } else if (protocol.equals("ibis:")) {
01344 new IbisBodyAdapter().unregister(url);
01345 } else {
01346 throw new IOException("Protocol " + protocol + " not defined");
01347 }
01348 if (logger.isDebugEnabled()) {
01349 logger.debug("Success at unbinding url " + url);
01350 }
01351 }
01352
01369 public static Object lookupActive(String classname, String url)
01370 throws ActiveObjectCreationException, java.io.IOException {
01371
01372
01373
01374
01375
01376
01377
01378
01379 UniversalBody b = null;
01380
01381 String protocol = UrlBuilder.getProtocol(url);
01382
01383
01384 if (protocol.equals("rmi:")) {
01385 b = new RmiBodyAdapter().lookup(url);
01386 } else if (protocol.equals("rmissh:")) {
01387 b = new SshRmiBodyAdapter().lookup(url);
01388 } else if (protocol.equals("http:")) {
01389 b = new HttpBodyAdapter().lookup(url);
01390 } else if (protocol.equals("ibis:")) {
01391 b = new IbisBodyAdapter().lookup(url);
01392 } else {
01393 throw new IOException("Protocol " + protocol + " not defined");
01394 }
01395
01396 try {
01397 return createStubObject(classname, b);
01398 } catch (MOPException e) {
01399 Throwable t = e;
01400
01401 if (e.getTargetException() != null) {
01402 t = e.getTargetException();
01403 }
01404
01405 throw new ActiveObjectCreationException("Exception occured when trying to create stub-proxy",
01406 t);
01407 }
01408 }
01409
01419 public static String[] listActive(String url) throws java.io.IOException {
01420 String[] activeNames = null;
01421
01422 String protocol = UrlBuilder.getProtocol(url);
01423
01424
01425 if (protocol.equals("rmi:")) {
01426 activeNames = new RmiBodyAdapter().list(url);
01427 } else if (protocol.equals("rmissh:")) {
01428 activeNames = new SshRmiBodyAdapter().list(url);
01429 } else if (protocol.equals("http:")) {
01430 activeNames = new HttpBodyAdapter().list(url);
01431 } else if (protocol.equals("ibis:")) {
01432 activeNames = new IbisBodyAdapter().list(url);
01433 } else {
01434 throw new IOException("Protocol " + protocol + " not defined");
01435 }
01436
01437 return activeNames;
01438 }
01439
01445 public static String getActiveObjectNodeUrl(Object activeObject) {
01446 UniversalBody body = getRemoteBody(activeObject);
01447 return body.getNodeURL();
01448 }
01449
01455 public static boolean isException(Object future) {
01456
01457 if ((MOP.isReifiedObject(future)) == false) {
01458 return false;
01459 } else {
01460 org.objectweb.proactive.core.mop.Proxy theProxy = ((StubObject) future).getProxy();
01461
01462
01463 if (!(theProxy instanceof Future)) {
01464 return false;
01465 } else {
01466 return ((Future) theProxy).getRaisedException() != null;
01467 }
01468 }
01469 }
01470
01479 public static void waitFor(Object future) {
01480
01481 if ((MOP.isReifiedObject(future)) == false) {
01482 return;
01483 } else {
01484 org.objectweb.proactive.core.mop.Proxy theProxy = ((StubObject) future).getProxy();
01485
01486
01487 if (!(theProxy instanceof Future)) {
01488 return;
01489 } else {
01490 ((Future) theProxy).waitFor();
01491 }
01492 }
01493 }
01494
01505 public static void waitFor(Object future, long timeout)
01506 throws ProActiveException {
01507
01508 if ((MOP.isReifiedObject(future)) == false) {
01509 return;
01510 } else {
01511 org.objectweb.proactive.core.mop.Proxy theProxy = ((StubObject) future).getProxy();
01512
01513
01514 if (!(theProxy instanceof Future)) {
01515 return;
01516 } else {
01517 ((Future) theProxy).waitFor(timeout);
01518 }
01519 }
01520 }
01521
01529 public static ProActiveDescriptor getProactiveDescriptor()
01530 throws ProActiveException, IOException {
01531 String padURL = System.getProperty("proactive.pad");
01532
01533
01534 if (padURL == null) {
01535
01536 return null;
01537 } else {
01538 return getProActiveDescriptor(padURL, new VariableContract(), true);
01539 }
01540 }
01541
01552 public static ProActiveDescriptor getProactiveDescriptor(
01553 String xmlDescriptorUrl) throws ProActiveException {
01554 return getProActiveDescriptor(xmlDescriptorUrl, new VariableContract(),
01555 false);
01556 }
01557
01568 public static ProActiveDescriptor getProactiveDescriptor(
01569 String xmlDescriptorUrl, VariableContract variableContract)
01570 throws ProActiveException {
01571 if (variableContract == null) {
01572 throw new NullPointerException(
01573 "Argument variableContract can not be null");
01574 }
01575
01576 return getProActiveDescriptor(xmlDescriptorUrl, variableContract, false);
01577 }
01578
01579 private static ProActiveDescriptor getProActiveDescriptor(
01580 String xmlDescriptorUrl, VariableContract variableContract,
01581 boolean hierarchicalSearch) throws ProActiveException {
01582
01583 org.objectweb.proactive.core.xml.VariableContract.lock.aquire();
01584 org.objectweb.proactive.core.xml.VariableContract.xmlproperties = variableContract;
01585
01586
01587 ProActiveDescriptor pad;
01588 try {
01589 pad = internalGetProActiveDescriptor(xmlDescriptorUrl,
01590 variableContract, hierarchicalSearch);
01591 } catch (ProActiveException e) {
01592 org.objectweb.proactive.core.xml.VariableContract.lock.release();
01593 throw e;
01594 }
01595
01596
01597 variableContract.close();
01598
01599
01600 if (!variableContract.checkContract()) {
01601 logger.error(variableContract.toString());
01602 org.objectweb.proactive.core.xml.VariableContract.lock.release();
01603 throw new ProActiveException("Variable Contract has not been met!");
01604 }
01605
01606
01607 VariableContract.xmlproperties = new VariableContract();
01608 org.objectweb.proactive.core.xml.VariableContract.lock.release();
01609
01610 return pad;
01611
01612 }
01613
01622 private static ProActiveDescriptor internalGetProActiveDescriptor(
01623 String xmlDescriptorUrl, VariableContract variableContract,
01624 boolean hierarchicalSearch) throws ProActiveException {
01625 RuntimeFactory.getDefaultRuntime();
01626 if (!xmlDescriptorUrl.startsWith("file:")) {
01627 xmlDescriptorUrl = "file:" + xmlDescriptorUrl;
01628 }
01629 ProActiveRuntimeImpl part = (ProActiveRuntimeImpl) ProActiveRuntimeImpl.getProActiveRuntime();
01630 ProActiveDescriptor pad;
01631 try {
01632 if (!hierarchicalSearch) {
01633
01634
01635 pad = part.getDescriptor(xmlDescriptorUrl +
01636 ProActive.getJobId(), hierarchicalSearch);
01637 } else {
01638 pad = part.getDescriptor(xmlDescriptorUrl, hierarchicalSearch);
01639 }
01640 } catch (Exception e) {
01641 throw new ProActiveException(e);
01642 }
01643
01644
01645 if (pad != null) {
01646 return pad;
01647 }
01648
01649
01650 try {
01651 if (logger.isInfoEnabled()) {
01652 logger.info("************* Reading deployment descriptor: " +
01653 xmlDescriptorUrl + " ********************");
01654 }
01655 ProActiveDescriptorHandler proActiveDescriptorHandler = ProActiveDescriptorHandler.createProActiveDescriptor(xmlDescriptorUrl,
01656 variableContract);
01657 pad = (ProActiveDescriptor) proActiveDescriptorHandler.getResultObject();
01658 part.registerDescriptor(pad.getUrl(), pad);
01659 return pad;
01660 } catch (org.xml.sax.SAXException e) {
01661
01662 logger.fatal(
01663 "A problem occured when getting the proActiveDescriptor at location \""+xmlDescriptorUrl+"\".");
01664 throw new ProActiveException("A problem occured when getting the proActiveDescriptor at location \""+xmlDescriptorUrl+"\"."+e);
01665 } catch (java.io.IOException e) {
01666
01667 logger.fatal(
01668 "A problem occured when getting the proActiveDescriptor at location \""+xmlDescriptorUrl+"\".");
01669 throw new ProActiveException(e);
01670 }
01671 }
01672
01683 public static void registerVirtualNode(VirtualNode virtualNode,
01684 String registrationProtocol, boolean replacePreviousBinding)
01685 throws ProActiveException, AlreadyBoundException {
01686 if (!(virtualNode instanceof VirtualNodeImpl)) {
01687 throw new ProActiveException(
01688 "Cannot register such virtualNode since it results from a lookup!");
01689 }
01690 if (registrationProtocol == null) {
01691 registrationProtocol = System.getProperty(
01692 "proactive.communication.protocol");
01693 }
01694 String virtualnodeName = virtualNode.getName();
01695 ProActiveRuntime part = RuntimeFactory.getProtocolSpecificRuntime(registrationProtocol);
01696 VirtualNode vn = part.getVirtualNode(virtualnodeName);
01697 if (vn == null) {
01698 throw new ProActiveException("VirtualNode " + virtualnodeName +
01699 " has not been yet activated or does not exist! Try to activate it first !");
01700 }
01701 part.registerVirtualNode(UrlBuilder.appendVnSuffix(virtualnodeName),
01702 replacePreviousBinding);
01703 }
01704
01714 public static VirtualNode lookupVirtualNode(String url)
01715 throws ProActiveException {
01716 ProActiveRuntime remoteProActiveRuntime = null;
01717 try {
01718 remoteProActiveRuntime = RuntimeFactory.getRuntime(UrlBuilder.buildVirtualNodeUrl(
01719 url), UrlBuilder.getProtocol(url));
01720 } catch (UnknownHostException ex) {
01721 throw new ProActiveException(ex);
01722 }
01723 return remoteProActiveRuntime.getVirtualNode(UrlBuilder.getNameFromUrl(
01724 url));
01725 }
01726
01733 public static void unregisterVirtualNode(VirtualNode virtualNode)
01734 throws ProActiveException {
01735
01736 if (!(virtualNode instanceof VirtualNodeImpl)) {
01737 throw new ProActiveException(
01738 "Cannot unregister such virtualNode since it results from a lookup!");
01739 }
01740 String virtualNodeName = virtualNode.getName();
01741 ProActiveRuntime part = RuntimeFactory.getProtocolSpecificRuntime(((VirtualNodeImpl) virtualNode).getRegistrationProtocol());
01742 part.unregisterVirtualNode(UrlBuilder.appendVnSuffix(
01743 virtualNode.getName()));
01744 if (logger.isInfoEnabled()) {
01745 logger.info("Success at unbinding " + virtualNodeName);
01746 }
01747 }
01748
01763 public static Body getBodyOnThis() {
01764 return LocalBodyStore.getInstance().getCurrentThreadBody();
01765 }
01766
01773 public static StubObject getStubOnThis() {
01774 Body body = getBodyOnThis();
01775
01776 if (logger.isDebugEnabled()) {
01777
01778 }
01779 if (body == null) {
01780 return null;
01781 }
01782
01783 return getStubForBody(body);
01784 }
01785
01796 public static void migrateTo(Object activeObject) throws MigrationException {
01797 migrateTo(getNodeFromURL(getNodeURLFromActiveObject(activeObject)));
01798 }
01799
01810 public static void migrateTo(String nodeURL) throws MigrationException {
01811 if (logger.isDebugEnabled()) {
01812 logger.debug("migrateTo " + nodeURL);
01813 }
01814 ProActive.migrateTo(getNodeFromURL(nodeURL));
01815 }
01816
01826 public static void migrateTo(Node node) throws MigrationException {
01827 if (logger.isDebugEnabled()) {
01828 logger.debug("migrateTo " + node);
01829 }
01830 Body bodyToMigrate = getBodyOnThis();
01831 if (!(bodyToMigrate instanceof Migratable)) {
01832 throw new MigrationException(
01833 "This body cannot migrate. It doesn't implement Migratable interface");
01834 }
01835
01836 ((Migratable) bodyToMigrate).migrateTo(node);
01837 }
01838
01849 public static void migrateTo(Body bodyToMigrate, Object activeObject,
01850 boolean isNFRequest) throws MigrationException {
01851 ProActive.migrateTo(bodyToMigrate,
01852 getNodeFromURL(getNodeURLFromActiveObject(activeObject)),
01853 isNFRequest);
01854 }
01855
01866 public static void migrateTo(Body bodyToMigrate, String nodeURL,
01867 boolean isNFRequest) throws MigrationException {
01868 ProActive.migrateTo(bodyToMigrate, getNodeFromURL(nodeURL), isNFRequest);
01869 }
01870
01881 public static void migrateTo(Body bodyToMigrate, Node node,
01882 boolean isNFRequest) throws MigrationException {
01883
01884
01885 ProActive.migrateTo(bodyToMigrate, node, true,
01886 org.objectweb.proactive.core.body.request.Request.NFREQUEST_IMMEDIATE_PRIORITY);
01887 }
01888
01900 public static void migrateTo(Body bodyToMigrate, Node node,
01901 boolean isNFRequest, int priority) throws MigrationException {
01902 if (!(bodyToMigrate instanceof Migratable)) {
01903 throw new MigrationException(
01904 "This body cannot migrate. It doesn't implement Migratable interface");
01905 }
01906
01907 Object[] arguments = { node };
01908
01909 try {
01910 BodyRequest request = new BodyRequest(bodyToMigrate, "migrateTo",
01911 new Class[] { Node.class }, arguments, isNFRequest, priority);
01912 request.send(bodyToMigrate);
01913 } catch (NoSuchMethodException e) {
01914 throw new MigrationException("Cannot find method migrateTo this body. Non sense since the body is instance of Migratable",
01915 e);
01916 } catch (java.io.IOException e) {
01917 throw new MigrationException("Cannot send the request to migrate", e);
01918 }
01919 }
01920
01927 public static int waitForAny(java.util.Vector futures) {
01928 try {
01929 return waitForAny(futures, 0);
01930 } catch (ProActiveException e) {
01931
01932 e.printStackTrace();
01933 return -1;
01934 }
01935 }
01936
01946 public static int waitForAny(java.util.Vector futures, long timeout)
01947 throws ProActiveException {
01948 FuturePool fp = getBodyOnThis().getFuturePool();
01949
01950 synchronized (fp) {
01951 while (true) {
01952 java.util.Iterator it = futures.iterator();
01953 int index = 0;
01954
01955 while (it.hasNext()) {
01956 Object current = it.next();
01957
01958 if (!isAwaited(current)) {
01959 return index;
01960 }
01961
01962 index++;
01963 }
01964 fp.waitForReply(timeout);
01965 }
01966 }
01967 }
01968
01974 public static void waitForAll(java.util.Vector futures) {
01975 try {
01976 ProActive.waitForAll(futures, 0);
01977 } catch (ProActiveException e) {
01978
01979 e.printStackTrace();
01980 }
01981 }
01982
01991 public static void waitForAll(java.util.Vector futures, long timeout)
01992 throws ProActiveException {
01993 FuturePool fp = getBodyOnThis().getFuturePool();
01994
01995 synchronized (fp) {
01996 boolean oneIsMissing = true;
01997
01998 while (oneIsMissing) {
01999 oneIsMissing = false;
02000
02001 java.util.Iterator it = futures.iterator();
02002
02003 while (it.hasNext()) {
02004 Object current = it.next();
02005
02006 if (isAwaited(current)) {
02007 oneIsMissing = true;
02008 }
02009 }
02010
02011 if (oneIsMissing) {
02012 fp.waitForReply(timeout);
02013 }
02014 }
02015 }
02016 }
02017
02023 public static void waitForTheNth(java.util.Vector futures, int n) {
02024 FuturePool fp = getBodyOnThis().getFuturePool();
02025
02026 synchronized (fp) {
02027 Object current = futures.get(n);
02028
02029 if (isAwaited(current)) {
02030 waitFor(current);
02031 }
02032 }
02033 }
02034
02043 public static void waitForTheNth(java.util.Vector futures, int n,
02044 long timeout) throws ProActiveException {
02045 FuturePool fp = getBodyOnThis().getFuturePool();
02046
02047 synchronized (fp) {
02048 Object current = futures.get(n);
02049
02050 if (isAwaited(current)) {
02051 waitFor(current, timeout);
02052 }
02053 }
02054 }
02055
02063 public static boolean allAwaited(java.util.Vector futures) {
02064 FuturePool fp = getBodyOnThis().getFuturePool();
02065
02066 synchronized (fp) {
02067 java.util.Iterator it = futures.iterator();
02068
02069 while (it.hasNext()) {
02070 Object current = it.next();
02071
02072 if (!isAwaited(current)) {
02073 return false;
02074 }
02075 }
02076 return true;
02077 }
02078 }
02079
02085 public static boolean isAwaited(Object future) {
02086
02087 if ((MOP.isReifiedObject(future)) == false) {
02088 return false;
02089 } else {
02090 org.objectweb.proactive.core.mop.Proxy theProxy = ((StubObject) future).getProxy();
02091
02092
02093 if (!(theProxy instanceof Future)) {
02094 return false;
02095 } else {
02096 if (((Future) theProxy).isAwaited()) {
02097 return true;
02098 } else {
02099 return isAwaited(((Future) theProxy).getResult());
02100 }
02101 }
02102 }
02103 }
02104
02112 public static Object getFutureValue(Object future) {
02113
02114 if ((MOP.isReifiedObject(future)) == false) {
02115 return future;
02116 } else {
02117 org.objectweb.proactive.core.mop.Proxy theProxy = ((StubObject) future).getProxy();
02118
02119
02120 if (!(theProxy instanceof Future)) {
02121 return future;
02122 } else {
02123 Object o = ((Future) theProxy).getResult();
02124
02125 return getFutureValue(o);
02126 }
02127 }
02128 }
02129
02133 public static void enableAC(Object obj) throws java.io.IOException {
02134 UniversalBody body = getRemoteBody(obj);
02135 body.enableAC();
02136 }
02137
02141 public static void disableAC(Object obj) throws java.io.IOException {
02142 UniversalBody body = getRemoteBody(obj);
02143 body.disableAC();
02144 }
02145
02153 public static void terminateActiveObject(Object ao, boolean immediate) {
02154 Proxy proxy = ((StubObject) ao).getProxy();
02155 try {
02156 if (immediate) {
02157 NonFunctionalServices.terminateAOImmediately(proxy);
02158 } else {
02159 NonFunctionalServices.terminateAO(proxy);
02160 }
02161 } catch (Throwable e) {
02162 e.printStackTrace();
02163 }
02164 }
02165
02177 public static void setImmediateService(Object obj, String methodName)
02178 throws java.io.IOException {
02179 UniversalBody body = getRemoteBody(obj);
02180 body.setImmediateService(methodName);
02181 }
02182
02195 public static void setImmediateService(Object obj, String methodName,
02196 Class[] parametersTypes) throws IOException {
02197 UniversalBody body = getRemoteBody(obj);
02198 body.setImmediateService(methodName, parametersTypes);
02199 }
02200
02212 public static void removeImmediateService(Object obj, String methodName,
02213 Class[] parametersTypes) throws IOException {
02214 UniversalBody body = getRemoteBody(obj);
02215 body.removeImmediateService(methodName, parametersTypes);
02216 }
02217
02222 private static BodyAdapter getRemoteBody(Object obj) {
02223
02224 if (!(MOP.isReifiedObject(obj))) {
02225 throw new ProActiveRuntimeException("The given object " + obj +
02226 " is not a reified object");
02227 }
02228
02229
02230 org.objectweb.proactive.core.mop.Proxy myProxy = ((StubObject) obj).getProxy();
02231
02232 if (myProxy == null) {
02233 throw new ProActiveRuntimeException(
02234 "Cannot find a Proxy on the stub object: " + obj);
02235 }
02236
02237 BodyProxy myBodyProxy = (BodyProxy) myProxy;
02238 BodyAdapter body = myBodyProxy.getBody().getRemoteAdapter();
02239 return body;
02240 }
02241
02245 public static String getJobId() {
02246 return ProActive.getBodyOnThis().getJobID();
02247 }
02248
02256 public static void exposeAsWebService(Object o, String url, String urn,
02257 String[] methods) {
02258 ProActiveDeployer.deploy(urn, url, o, methods);
02259 }
02260
02266 public static void unExposeAsWebService(String urn, String url) {
02267 ProActiveDeployer.undeploy(urn, url);
02268 }
02269
02278 public static void exposeComponentAsWebService(Component component,
02279 String url, String componentName) {
02280 ProActiveDeployer.deployComponent(componentName, url, component);
02281 }
02282
02289 public static void unExposeComponentAsWebService(String componentName,
02290 String url, Component component) {
02291 ProActiveDeployer.undeployComponent(componentName, url, component);
02292 }
02293
02294
02295
02296
02297 private static String getNodeURLFromActiveObject(Object o)
02298 throws MigrationException {
02299
02300 if (!org.objectweb.proactive.core.mop.MOP.isReifiedObject(o)) {
02301 throw new MigrationException(
02302 "The parameter is not an active object");
02303 }
02304
02305
02306 BodyProxy destProxy = (BodyProxy) ((org.objectweb.proactive.core.mop.StubObject) o).getProxy();
02307
02308 return destProxy.getBody().getNodeURL();
02309 }
02310
02311 private static Node getNodeFromURL(String url) throws MigrationException {
02312 try {
02313 return NodeFactory.getNode(url);
02314 } catch (NodeException e) {
02315 throw new MigrationException("The node of given URL " + url +
02316 " cannot be localized", e);
02317 }
02318 }
02319
02320
02321
02322
02323
02324
02325 private static StubObject getStubForBody(Body body) {
02326 try {
02327 return createStubObject(body.getReifiedObject(),
02328 new Object[] { body },
02329 body.getReifiedObject().getClass().getName(), null);
02330 } catch (MOPException e) {
02331 throw new ProActiveRuntimeException(
02332 "Cannot create Stub for this Body e=" + e);
02333 }
02334 }
02335
02336 public static Object createStubObject(String className, UniversalBody body)
02337 throws MOPException {
02338 return createStubObject(className, null, null, new Object[] { body });
02339 }
02340
02341 private static Object createStubObject(String className,
02342 Class[] genericParameters, Object[] constructorParameters, Node node,
02343 Active activity, MetaObjectFactory factory) throws MOPException {
02344 return createStubObject(className, genericParameters,
02345 constructorParameters,
02346 new Object[] { node, activity, factory, ProActive.getJobId() });
02347 }
02348
02349 private static Object createStubObject(String className,
02350 Class[] genericParameters, Object[] constructorParameters,
02351 Object[] proxyParameters) throws MOPException {
02352 try {
02353 return MOP.newInstance(className, genericParameters,
02354 constructorParameters, Constants.DEFAULT_BODY_PROXY_CLASS_NAME,
02355 proxyParameters);
02356 } catch (ClassNotFoundException e) {
02357 throw new ConstructionOfProxyObjectFailedException(
02358 "Class can't be found e=" + e);
02359 }
02360 }
02361
02362 private static Object createStubObject(Object target,
02363 String nameOfTargetType, Class[] genericParameters, Node node,
02364 Active activity, MetaObjectFactory factory) throws MOPException {
02365 return createStubObject(target,
02366 new Object[] { node, activity, factory, ProActive.getJobId() },
02367 nameOfTargetType, genericParameters);
02368 }
02369
02370 private static StubObject createStubObject(Object object,
02371 Object[] proxyParameters, String nameOfTargetType,
02372 Class[] genericParameters) throws MOPException {
02373 try {
02374 return (StubObject) MOP.turnReified(nameOfTargetType,
02375 Constants.DEFAULT_BODY_PROXY_CLASS_NAME, proxyParameters,
02376 object, genericParameters);
02377 } catch (ClassNotFoundException e) {
02378 throw new ConstructionOfProxyObjectFailedException(
02379 "Class can't be found e=" + e);
02380 }
02381 }
02382
02383
02389 public static void tryWithCatch(Class c) {
02390 tryWithCatch(new Class[] { c });
02391 }
02392
02398 public static void tryWithCatch(Class[] c) {
02399 ExceptionHandler.tryWithCatch(c);
02400 }
02401
02405 public static void endTryWithCatch() {
02406 ExceptionHandler.endTryWithCatch();
02407 }
02408
02413 public static void removeTryWithCatch() {
02414 ExceptionHandler.removeTryWithCatch();
02415 }
02416
02421 public static void throwArrivedException() {
02422 ExceptionHandler.throwArrivedException();
02423 }
02424
02429 public static void waitForPotentialException() {
02430 ExceptionHandler.waitForPotentialException();
02431 }
02432
02438 public static void addNFEListenerOnJVM(NFEListener listener) {
02439 NFEManager.addNFEListener(listener);
02440 }
02441
02447 public static void removeNFEListenerOnJVM(NFEListener listener) {
02448 NFEManager.removeNFEListener(listener);
02449 }
02450
02457 public static void addNFEListenerOnAO(Object ao, NFEListener listener) {
02458
02459
02460 BodyAdapter body = getRemoteBody(ao);
02461 body.addNFEListener(listener);
02462 }
02463
02470 public static void removeNFEListenerOnAO(Object ao, NFEListener listener) {
02471 BodyAdapter body = getRemoteBody(ao);
02472 body.removeNFEListener(listener);
02473 }
02474
02481 public static void addNFEListenerOnProxy(Object ao, NFEListener listener) {
02482 try {
02483 ((AbstractProxy) ao).addNFEListener(listener);
02484 } catch (ClassCastException cce) {
02485 throw new IllegalArgumentException(
02486 "The object must be a proxy to an active object");
02487 }
02488 }
02489
02496 public static void removeNFEListenerOnProxy(Object ao, NFEListener listener) {
02497 try {
02498 ((AbstractProxy) ao).removeNFEListener(listener);
02499 } catch (ClassCastException cce) {
02500 throw new IllegalArgumentException(
02501 "The object must be a proxy to an active object");
02502 }
02503 }
02504
02505 private static ProxyForGroup getGroupProxy(Object group) {
02506 ProxyForGroup pfg;
02507
02508 try {
02509 pfg = (ProxyForGroup) ProActiveGroup.getGroup(group);
02510 } catch (ClassCastException cce) {
02511 pfg = null;
02512 }
02513
02514 if (pfg == null) {
02515 throw new IllegalArgumentException("The argument must be a group");
02516 }
02517
02518 return pfg;
02519 }
02520
02527 public static void addNFEListenerOnGroup(Object group, NFEListener listener) {
02528 getGroupProxy(group).addNFEListener(listener);
02529 }
02530
02537 public static void removeNFEListenerOnGroup(Object group,
02538 NFEListener listener) {
02539 getGroupProxy(group).removeNFEListener(listener);
02540 }
02541
02549 public static Collection getAllExceptions() {
02550 return ExceptionHandler.getAllExceptions();
02551 }
02552
02557 public static Node getNode() throws NodeException {
02558 BodyProxy destProxy = (BodyProxy) ((StubObject) getStubOnThis()).getProxy();
02559
02560 return NodeFactory.getNode(destProxy.getBody().getNodeURL());
02561 }
02562
02567 public static void exitSuccess() {
02568 System.exit(0);
02569 }
02570
02575 public static void exitFailure() {
02576 System.exit(1);
02577 }
02578
02584 public void enableExitOnEmpty() {
02585 LocalBodyStore.getInstance().enableExitOnEmpty();
02586 }
02587
02592 public static String getProActiveVersion() {
02593 return "3.2";
02594 }
02595 }