Search in sources :

Example 1 with RPCServiceImpl

use of org.exoplatform.services.rpc.jgv3.RPCServiceImpl in project kernel by exoplatform.

the class TestRPCServiceImpl method testParameters.

public void testParameters() {
    InitParams params = null;
    try {
        new RPCServiceImpl(container.getContext(), params, configManager);
        fail("We expect a IllegalArgumentException since the jgroups config cannot be found");
    } catch (IllegalArgumentException e) {
    // OK
    }
    params = new InitParams();
    try {
        new RPCServiceImpl(container.getContext(), params, configManager);
        fail("We expect a IllegalArgumentException since the jgroups config cannot be found");
    } catch (IllegalArgumentException e) {
    // OK
    }
    ValueParam paramConf = new ValueParam();
    paramConf.setName(RPCServiceImpl.PARAM_JGROUPS_CONFIG);
    params.addParameter(paramConf);
    try {
        new RPCServiceImpl(container.getContext(), params, configManager);
        fail("We expect a IllegalArgumentException since the jgroups config cannot be found");
    } catch (IllegalArgumentException e) {
    // OK
    }
    paramConf.setValue("fakePath");
    try {
        new RPCServiceImpl(container.getContext(), params, configManager);
        fail("We expect a IllegalArgumentException since the jgroups config cannot be found");
    } catch (IllegalArgumentException e) {
    // OK
    }
    paramConf.setValue("jar:/conf/portal/udp.xml");
    RPCServiceImpl service = null;
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        assertEquals(RPCServiceImpl.DEFAULT_TIMEOUT, service.getDefaultTimeout());
        assertEquals(RPCServiceImpl.DEFAULT_RETRY_TIMEOUT, service.getRetryTimeout());
        assertEquals(true, service.isAllowFailover());
        assertEquals(RPCServiceImpl.CLUSTER_NAME + "-" + container.getContext().getName(), service.getClusterName());
    } finally {
        if (service != null) {
            service.stop();
        }
    }
    ValueParam paramTimeout = new ValueParam();
    paramTimeout.setName(RPCServiceImpl.PARAM_DEFAULT_TIMEOUT);
    paramTimeout.setValue("fakeValue");
    params.addParameter(paramTimeout);
    try {
        new RPCServiceImpl(container.getContext(), params, configManager);
        fail("We expect a NumberFormatException since the timeout is not properly set");
    } catch (NumberFormatException e) {
    // OK
    }
    paramTimeout.setValue("60");
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        assertEquals(60, service.getDefaultTimeout());
        assertEquals(RPCServiceImpl.DEFAULT_RETRY_TIMEOUT, service.getRetryTimeout());
        assertEquals(true, service.isAllowFailover());
        assertEquals(RPCServiceImpl.CLUSTER_NAME + "-" + container.getContext().getName(), service.getClusterName());
    } finally {
        if (service != null) {
            service.stop();
        }
    }
    ValueParam paramRetryTimeout = new ValueParam();
    paramRetryTimeout.setName(RPCServiceImpl.PARAM_RETRY_TIMEOUT);
    paramRetryTimeout.setValue("fakeValue");
    params.addParameter(paramRetryTimeout);
    try {
        new RPCServiceImpl(container.getContext(), params, configManager);
        fail("We expect a NumberFormatException since the retry timeout is not properly set");
    } catch (NumberFormatException e) {
    // OK
    }
    paramRetryTimeout.setValue("60");
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        assertEquals(60, service.getDefaultTimeout());
        assertEquals(60, service.getRetryTimeout());
        assertEquals(true, service.isAllowFailover());
        assertEquals(RPCServiceImpl.CLUSTER_NAME + "-" + container.getContext().getName(), service.getClusterName());
    } finally {
        if (service != null) {
            service.stop();
        }
    }
    ValueParam paramAllowFailover = new ValueParam();
    paramAllowFailover.setName(RPCServiceImpl.PARAM_ALLOW_FAILOVER);
    paramAllowFailover.setValue("fakeValue");
    params.addParameter(paramAllowFailover);
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        assertEquals(60, service.getDefaultTimeout());
        assertEquals(60, service.getRetryTimeout());
        assertEquals(false, service.isAllowFailover());
        assertEquals(RPCServiceImpl.CLUSTER_NAME + "-" + container.getContext().getName(), service.getClusterName());
    } finally {
        if (service != null) {
            service.stop();
        }
    }
    paramAllowFailover.setValue("TRUE");
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        assertEquals(60, service.getDefaultTimeout());
        assertEquals(60, service.getRetryTimeout());
        assertEquals(true, service.isAllowFailover());
        assertEquals(RPCServiceImpl.CLUSTER_NAME + "-" + container.getContext().getName(), service.getClusterName());
    } finally {
        if (service != null) {
            service.stop();
        }
    }
    ValueParam paramClusterName = new ValueParam();
    paramClusterName.setName(RPCServiceImpl.PARAM_CLUSTER_NAME);
    paramClusterName.setValue("MyName");
    params.addParameter(paramClusterName);
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        assertEquals(60, service.getDefaultTimeout());
        assertEquals(paramClusterName.getValue() + "-" + container.getContext().getName(), service.getClusterName());
    } finally {
        if (service != null) {
            service.stop();
        }
    }
}
Also used : InitParams(org.exoplatform.container.xml.InitParams) ValueParam(org.exoplatform.container.xml.ValueParam) RPCServiceImpl(org.exoplatform.services.rpc.jgv3.RPCServiceImpl)

Example 2 with RPCServiceImpl

use of org.exoplatform.services.rpc.jgv3.RPCServiceImpl in project kernel by exoplatform.

the class TestRPCServiceImpl method testExecOnCoordinator.

public void testExecOnCoordinator() throws Exception {
    InitParams params = new InitParams();
    ValueParam paramConf = new ValueParam();
    paramConf.setName(RPCServiceImpl.PARAM_JGROUPS_CONFIG);
    paramConf.setValue("jar:/conf/portal/udp.xml");
    params.addParameter(paramConf);
    final List<Boolean> calledCommands = Collections.synchronizedList(new ArrayList<Boolean>());
    RPCServiceImpl service1 = null;
    RPCServiceImpl service2 = null;
    try {
        service1 = new RPCServiceImpl(container.getContext(), params, configManager);
        RemoteCommand service1Cmd = new RemoteCommand() {

            public String getId() {
                return "CoordinatorExecutedCommand";
            }

            public String execute(Serializable[] args) throws Throwable {
                calledCommands.add(Boolean.TRUE);
                return "service 1";
            }
        };
        service1.registerCommand(service1Cmd);
        service2 = new RPCServiceImpl(container.getContext(), params, configManager);
        RemoteCommand service2Cmd = new RemoteCommand() {

            public String getId() {
                return "CoordinatorExecutedCommand";
            }

            public String execute(Serializable[] args) throws Throwable {
                calledCommands.add(Boolean.TRUE);
                return "service 2";
            }
        };
        service2.registerCommand(service2Cmd);
        // starting services
        service1.start();
        service2.start();
        Object o = service1.executeCommandOnCoordinator(service1Cmd, true);
        assertEquals("service 1", o);
        // it should be executed once
        assertEquals(1, calledCommands.size());
    } finally {
        if (service1 != null) {
            service1.stop();
        }
        if (service2 != null) {
            service2.stop();
        }
    }
}
Also used : InitParams(org.exoplatform.container.xml.InitParams) RemoteCommand(org.exoplatform.services.rpc.RemoteCommand) ValueParam(org.exoplatform.container.xml.ValueParam) RPCServiceImpl(org.exoplatform.services.rpc.jgv3.RPCServiceImpl)

Example 3 with RPCServiceImpl

use of org.exoplatform.services.rpc.jgv3.RPCServiceImpl in project kernel by exoplatform.

the class TestSimpleReplicatedExoCache method init.

@Before
public void init() throws Exception {
    container = PortalContainer.getInstance();
    ConfigurationManager configManager = container.getComponentInstanceOfType(ConfigurationManager.class);
    InitParams params = new InitParams();
    ValueParam paramConf = new ValueParam();
    paramConf.setName("jgroups-configuration");
    paramConf.setValue("jar:/conf/portal/udp.xml");
    params.addParameter(paramConf);
    service1 = new RPCServiceImpl(container.getContext(), params, configManager);
    service2 = new RPCServiceImpl(container.getContext(), params, configManager);
    cache1 = new SimpleReplicatedExoCache<String, String>(container.getContext(), service1);
    cache2 = new SimpleReplicatedExoCache<String, String>(container.getContext(), service2);
    cache1.setName("TestSimpleReplicatedExoCache");
    cache2.setName("TestSimpleReplicatedExoCache");
    service1.start();
    service2.start();
}
Also used : InitParams(org.exoplatform.container.xml.InitParams) ValueParam(org.exoplatform.container.xml.ValueParam) ConfigurationManager(org.exoplatform.container.configuration.ConfigurationManager) RPCServiceImpl(org.exoplatform.services.rpc.jgv3.RPCServiceImpl) Before(org.junit.Before)

Example 4 with RPCServiceImpl

use of org.exoplatform.services.rpc.jgv3.RPCServiceImpl in project kernel by exoplatform.

the class TestRPCServiceImpl method testStates.

public void testStates() throws Exception {
    InitParams params = new InitParams();
    ValueParam paramConf = new ValueParam();
    paramConf.setName(RPCServiceImpl.PARAM_JGROUPS_CONFIG);
    paramConf.setValue("jar:/conf/portal/udp.xml");
    params.addParameter(paramConf);
    RPCServiceImpl service = null;
    RemoteCommand foo = new RemoteCommand() {

        public String getId() {
            return "foo";
        }

        public String execute(Serializable[] args) throws Throwable {
            return null;
        }
    };
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        service.registerCommand(foo);
        try {
            service.executeCommandOnAllNodes(foo, true);
            fail("We expect a RPCException since the current state is not the expected one");
        } catch (RPCException e) {
        // OK
        }
        try {
            service.executeCommandOnAllNodes(foo, 10);
            fail("We expect a RPCException since the current state is not the expected one");
        } catch (RPCException e) {
        // OK
        }
        try {
            service.executeCommandOnCoordinator(foo, true);
            fail("We expect a RPCException since the current state is not the expected one");
        } catch (RPCException e) {
        // OK
        }
        try {
            service.executeCommandOnCoordinator(foo, 10);
            fail("We expect a RPCException since the current state is not the expected one");
        } catch (RPCException e) {
        // OK
        }
        try {
            service.isCoordinator();
            fail("We expect a RPCException since the current state is not the expected one");
        } catch (RPCException e) {
        // OK
        }
        service.start();
        assertEquals(true, service.isCoordinator());
        service.executeCommandOnAllNodes(foo, true);
        service.executeCommandOnAllNodes(foo, 10);
        service.executeCommandOnCoordinator(foo, true);
        service.executeCommandOnCoordinator(foo, 10);
    } finally {
        if (service != null) {
            service.stop();
        }
    }
    try {
        service.executeCommandOnAllNodes(foo, true);
        fail("We expect a RPCException since the current state is not the expected one");
    } catch (RPCException e) {
    // OK
    }
    try {
        service.executeCommandOnAllNodes(foo, 10);
        fail("We expect a RPCException since the current state is not the expected one");
    } catch (RPCException e) {
    // OK
    }
    try {
        service.executeCommandOnCoordinator(foo, true);
        fail("We expect a RPCException since the current state is not the expected one");
    } catch (RPCException e) {
    // OK
    }
    try {
        service.executeCommandOnCoordinator(foo, 10);
        fail("We expect a RPCException since the current state is not the expected one");
    } catch (RPCException e) {
    // OK
    }
}
Also used : InitParams(org.exoplatform.container.xml.InitParams) RPCException(org.exoplatform.services.rpc.RPCException) RemoteCommand(org.exoplatform.services.rpc.RemoteCommand) ValueParam(org.exoplatform.container.xml.ValueParam) RPCServiceImpl(org.exoplatform.services.rpc.jgv3.RPCServiceImpl)

Example 5 with RPCServiceImpl

use of org.exoplatform.services.rpc.jgv3.RPCServiceImpl in project kernel by exoplatform.

the class TestRPCServiceImpl method testSingleMethodCallCommand.

public void testSingleMethodCallCommand() throws Exception {
    try {
        new SingleMethodCallCommand(null, null);
        fail("we expect an IllegalArgumentException");
    } catch (IllegalArgumentException e) {
    // OK
    }
    MyService myService = new MyService();
    try {
        new SingleMethodCallCommand(myService, null);
        fail("we expect an IllegalArgumentException");
    } catch (IllegalArgumentException e) {
    // OK
    }
    try {
        new SingleMethodCallCommand(myService, "foo");
        fail("we expect an NoSuchMethodException");
    } catch (NoSuchMethodException e) {
    // OK
    }
    try {
        new SingleMethodCallCommand(myService, "getPrivateName");
        fail("we expect an IllegalArgumentException since only the public methods are allowed");
    } catch (IllegalArgumentException e) {
    // OK
    }
    InitParams params = new InitParams();
    ValueParam paramConf = new ValueParam();
    paramConf.setName(RPCServiceImpl.PARAM_JGROUPS_CONFIG);
    paramConf.setValue("jar:/conf/portal/udp.xml");
    params.addParameter(paramConf);
    RPCServiceImpl service = null;
    try {
        service = new RPCServiceImpl(container.getContext(), params, configManager);
        RemoteCommand getName = service.registerCommand(new SingleMethodCallCommand(myService, "getName"));
        RemoteCommand add = service.registerCommand(new SingleMethodCallCommand(myService, "add", int.class));
        RemoteCommand evaluate1 = service.registerCommand(new SingleMethodCallCommand(myService, "evaluate", int[].class));
        RemoteCommand evaluate2 = service.registerCommand(new SingleMethodCallCommand(myService, "evaluate", List.class));
        RemoteCommand total1 = service.registerCommand(new SingleMethodCallCommand(myService, "total", int.class));
        RemoteCommand total2 = service.registerCommand(new SingleMethodCallCommand(myService, "total", int.class, int.class));
        RemoteCommand total3 = service.registerCommand(new SingleMethodCallCommand(myService, "total", int[].class));
        RemoteCommand total4 = service.registerCommand(new SingleMethodCallCommand(myService, "total", String.class, long.class, int[].class));
        RemoteCommand testTypes1 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", String[].class));
        RemoteCommand testTypes2 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", int[].class));
        RemoteCommand testTypes3 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", long[].class));
        RemoteCommand testTypes4 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", byte[].class));
        RemoteCommand testTypes5 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", short[].class));
        RemoteCommand testTypes6 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", char[].class));
        RemoteCommand testTypes7 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", double[].class));
        RemoteCommand testTypes8 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", float[].class));
        RemoteCommand testTypes9 = service.registerCommand(new SingleMethodCallCommand(myService, "testTypes", boolean[].class));
        service.start();
        List<Object> result;
        assertEquals("name", service.executeCommandOnCoordinator(getName, true));
        result = service.executeCommandOnAllNodes(getName, true);
        assertTrue(result != null && result.size() == 1);
        assertEquals("name", result.get(0));
        assertEquals(10, service.executeCommandOnCoordinator(add, true, 10));
        result = service.executeCommandOnAllNodes(add, true, 10);
        assertTrue(result != null && result.size() == 1);
        assertEquals(20, result.get(0));
        assertEquals(100, service.executeCommandOnCoordinator(evaluate1, true, new int[] { 10, 10, 10, 30, 40 }));
        result = service.executeCommandOnAllNodes(evaluate1, true, new int[] { 10, 10, 10, 30, 40 });
        assertTrue(result != null && result.size() == 1);
        assertEquals(100, result.get(0));
        List<Integer> values = new ArrayList<Integer>();
        values.add(10);
        values.add(10);
        values.add(10);
        values.add(30);
        values.add(40);
        assertEquals(100, service.executeCommandOnCoordinator(evaluate2, true, (Serializable) values));
        result = service.executeCommandOnAllNodes(evaluate2, true, (Serializable) values);
        assertTrue(result != null && result.size() == 1);
        assertEquals(100, result.get(0));
        assertEquals(10, service.executeCommandOnCoordinator(total1, true, 10));
        result = service.executeCommandOnAllNodes(total1, true, 10);
        assertTrue(result != null && result.size() == 1);
        assertEquals(10, result.get(0));
        assertEquals(20, service.executeCommandOnCoordinator(total2, true, 10, 10));
        result = service.executeCommandOnAllNodes(total2, true, 10, 10);
        assertTrue(result != null && result.size() == 1);
        assertEquals(20, result.get(0));
        assertEquals(100, service.executeCommandOnCoordinator(total3, true, new int[] { 10, 10, 10, 30, 40 }));
        result = service.executeCommandOnAllNodes(total3, true, new int[] { 10, 10, 10, 30, 40 });
        assertTrue(result != null && result.size() == 1);
        assertEquals(100, result.get(0));
        assertEquals(100, service.executeCommandOnCoordinator(total4, true, "foo", 50, new int[] { 10, 10, 10, 30, 40 }));
        result = service.executeCommandOnAllNodes(total4, true, "foo", 50, new int[] { 10, 10, 10, 30, 40 });
        assertTrue(result != null && result.size() == 1);
        assertEquals(100, result.get(0));
        assertEquals(0, service.executeCommandOnCoordinator(total4, true, "foo", 50, null));
        result = service.executeCommandOnAllNodes(total4, true, "foo", 50, null);
        assertTrue(result != null && result.size() == 1);
        assertEquals(0, result.get(0));
        try {
            service.executeCommandOnCoordinator(total4, true, "foo", 50);
            fail("We expect a RPCException since the list of arguments mismatch with what is expected");
        } catch (RPCException e) {
        // OK
        }
        result = service.executeCommandOnAllNodes(total4, true, "foo", 50);
        assertTrue(result != null && result.size() == 1);
        assertTrue("We expect a RPCException since the list of arguments mismatch with what is expected", result.get(0) instanceof RPCException);
        assertEquals("foo", service.executeCommandOnCoordinator(testTypes1, true, (Serializable) new String[] { "foo" }));
        result = service.executeCommandOnAllNodes(testTypes1, true, (Serializable) new String[] { "foo" });
        assertTrue(result != null && result.size() == 1);
        assertEquals("foo", result.get(0));
        assertEquals(10, service.executeCommandOnCoordinator(testTypes2, true, new int[] { 10 }));
        result = service.executeCommandOnAllNodes(testTypes2, true, new int[] { 10 });
        assertTrue(result != null && result.size() == 1);
        assertEquals(10, result.get(0));
        assertEquals(11L, service.executeCommandOnCoordinator(testTypes3, true, new long[] { 10 }));
        result = service.executeCommandOnAllNodes(testTypes3, true, new long[] { 10 });
        assertTrue(result != null && result.size() == 1);
        assertEquals(11L, result.get(0));
        assertEquals((byte) 12, service.executeCommandOnCoordinator(testTypes4, true, new byte[] { 10 }));
        result = service.executeCommandOnAllNodes(testTypes4, true, new byte[] { 10 });
        assertTrue(result != null && result.size() == 1);
        assertEquals((byte) 12, result.get(0));
        assertEquals((short) 13, service.executeCommandOnCoordinator(testTypes5, true, new short[] { 10 }));
        result = service.executeCommandOnAllNodes(testTypes5, true, new short[] { 10 });
        assertTrue(result != null && result.size() == 1);
        assertEquals((short) 13, result.get(0));
        assertEquals('a', service.executeCommandOnCoordinator(testTypes6, true, new char[] { 'a' }));
        result = service.executeCommandOnAllNodes(testTypes6, true, new char[] { 'a' });
        assertTrue(result != null && result.size() == 1);
        assertEquals('a', result.get(0));
        assertEquals(10.5, service.executeCommandOnCoordinator(testTypes7, true, new double[] { 10 }));
        result = service.executeCommandOnAllNodes(testTypes7, true, new double[] { 10 });
        assertTrue(result != null && result.size() == 1);
        assertEquals(10.5, result.get(0));
        assertEquals((float) 11.5, service.executeCommandOnCoordinator(testTypes8, true, new float[] { 10 }));
        result = service.executeCommandOnAllNodes(testTypes8, true, new float[] { 10 });
        assertTrue(result != null && result.size() == 1);
        assertEquals((float) 11.5, result.get(0));
        assertEquals(true, service.executeCommandOnCoordinator(testTypes9, true, new boolean[] { true }));
        result = service.executeCommandOnAllNodes(testTypes9, true, new boolean[] { true });
        assertTrue(result != null && result.size() == 1);
        assertEquals(true, result.get(0));
    } finally {
        if (service != null) {
            service.stop();
        }
    }
}
Also used : InitParams(org.exoplatform.container.xml.InitParams) Serializable(java.io.Serializable) ArrayList(java.util.ArrayList) RPCException(org.exoplatform.services.rpc.RPCException) RemoteCommand(org.exoplatform.services.rpc.RemoteCommand) SingleMethodCallCommand(org.exoplatform.services.rpc.SingleMethodCallCommand) ArrayList(java.util.ArrayList) List(java.util.List) ValueParam(org.exoplatform.container.xml.ValueParam) RPCServiceImpl(org.exoplatform.services.rpc.jgv3.RPCServiceImpl)

Aggregations

InitParams (org.exoplatform.container.xml.InitParams)7 ValueParam (org.exoplatform.container.xml.ValueParam)7 RPCServiceImpl (org.exoplatform.services.rpc.jgv3.RPCServiceImpl)7 RemoteCommand (org.exoplatform.services.rpc.RemoteCommand)5 RPCException (org.exoplatform.services.rpc.RPCException)4 Serializable (java.io.Serializable)2 ArrayList (java.util.ArrayList)2 MemberHasLeftException (org.exoplatform.services.rpc.impl.AbstractRPCService.MemberHasLeftException)2 List (java.util.List)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 ConfigurationManager (org.exoplatform.container.configuration.ConfigurationManager)1 SingleMethodCallCommand (org.exoplatform.services.rpc.SingleMethodCallCommand)1 Address (org.jgroups.Address)1 Before (org.junit.Before)1