Search in sources :

Example 11 with RemoteEJBDirectory

use of org.jboss.as.test.clustering.ejb.RemoteEJBDirectory in project wildfly by wildfly.

the class RemoteFailoverTestCase method testStatefulFailover.

@InSequence(2)
@Test
public void testStatefulFailover() throws Exception {
    // TODO Elytron: Once support for legacy EJB properties has been added back, actually set the EJB properties
    // that should be used for this test using CLIENT_PROPERTIES and ensure the EJB client context is reset
    // to its original state at the end of the test
    EJBClientContextSelector.setup(CLIENT_PROPERTIES);
    try (EJBDirectory context = new RemoteEJBDirectory(MODULE_NAME)) {
        Incrementor bean = context.lookupStateful(StatefulIncrementorBean.class, Incrementor.class);
        Result<Integer> result = bean.increment();
        String target = result.getNode();
        int count = 1;
        Assert.assertEquals(count++, result.getValue().intValue());
        // Bean should retain weak affinity for this node
        for (int i = 0; i < COUNT; ++i) {
            result = bean.increment();
            Assert.assertEquals(count++, result.getValue().intValue());
            Assert.assertEquals(String.valueOf(i), target, result.getNode());
        }
        undeploy(this.findDeployment(target));
        result = bean.increment();
        // Bean should failover to other node
        String failoverTarget = result.getNode();
        Assert.assertEquals(count++, result.getValue().intValue());
        Assert.assertNotEquals(target, failoverTarget);
        deploy(this.findDeployment(target));
        // Allow sufficient time for client to receive new topology
        Thread.sleep(CLIENT_TOPOLOGY_UPDATE_WAIT);
        result = bean.increment();
        String failbackTarget = result.getNode();
        Assert.assertEquals(count++, result.getValue().intValue());
        // Bean should retain weak affinity for this node
        Assert.assertEquals(failoverTarget, failbackTarget);
        result = bean.increment();
        // Bean may have acquired new weak affinity
        target = result.getNode();
        Assert.assertEquals(count++, result.getValue().intValue());
        // Bean should retain weak affinity for this node
        for (int i = 0; i < COUNT; ++i) {
            result = bean.increment();
            Assert.assertEquals(count++, result.getValue().intValue());
            Assert.assertEquals(String.valueOf(i), target, result.getNode());
        }
        stop(this.findContainer(target));
        result = bean.increment();
        // Bean should failover to other node
        failoverTarget = result.getNode();
        Assert.assertEquals(count++, result.getValue().intValue());
        Assert.assertNotEquals(target, failoverTarget);
        start(this.findContainer(target));
        // Allow sufficient time for client to receive new topology
        Thread.sleep(CLIENT_TOPOLOGY_UPDATE_WAIT);
        result = bean.increment();
        failbackTarget = result.getNode();
        Assert.assertEquals(count++, result.getValue().intValue());
        // Bean should retain weak affinity for this node
        Assert.assertEquals(failoverTarget, failbackTarget);
        result = bean.increment();
        // Bean may have acquired new weak affinity
        target = result.getNode();
        Assert.assertEquals(count++, result.getValue().intValue());
        // Bean should retain weak affinity for this node
        for (int i = 0; i < COUNT; ++i) {
            result = bean.increment();
            Assert.assertEquals(count++, result.getValue().intValue());
            Assert.assertEquals(String.valueOf(i), target, result.getNode());
        }
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Incrementor(org.jboss.as.test.clustering.cluster.ejb.remote.bean.Incrementor) RemoteEJBDirectory(org.jboss.as.test.clustering.ejb.RemoteEJBDirectory) RemoteEJBDirectory(org.jboss.as.test.clustering.ejb.RemoteEJBDirectory) EJBDirectory(org.jboss.as.test.clustering.ejb.EJBDirectory) InSequence(org.jboss.arquillian.junit.InSequence) Test(org.junit.Test)

Example 12 with RemoteEJBDirectory

use of org.jboss.as.test.clustering.ejb.RemoteEJBDirectory in project wildfly by wildfly.

the class RemoteFailoverTestCase method testClientException.

/**
     * Test for WFLY-5788.
     */
@InSequence(5)
@Test
public void testClientException() throws Exception {
    // TODO Elytron: Once support for legacy EJB properties has been added back, actually set the EJB properties
    // that should be used for this test using CLIENT_PROPERTIES and ensure the EJB client context is reset
    // to its original state at the end of the test
    EJBClientContextSelector.setup(CLIENT_PROPERTIES);
    try (EJBDirectory context = new RemoteEJBDirectory(MODULE_NAME)) {
        Incrementor bean = context.lookupStateful(InfinispanExceptionThrowingIncrementorBean.class, Incrementor.class);
        bean.increment();
    } catch (Exception ejbException) {
        assertTrue("Expected exception wrapped in EJBException", ejbException instanceof EJBException);
        assertNull("Cause of EJBException has not been removed", ejbException.getCause());
        return;
    }
    fail("Expected EJBException but didn't catch it");
}
Also used : Incrementor(org.jboss.as.test.clustering.cluster.ejb.remote.bean.Incrementor) RemoteEJBDirectory(org.jboss.as.test.clustering.ejb.RemoteEJBDirectory) EJBException(javax.ejb.EJBException) RemoteEJBDirectory(org.jboss.as.test.clustering.ejb.RemoteEJBDirectory) EJBDirectory(org.jboss.as.test.clustering.ejb.EJBDirectory) NamingException(javax.naming.NamingException) CancellationException(java.util.concurrent.CancellationException) EJBException(javax.ejb.EJBException) InSequence(org.jboss.arquillian.junit.InSequence) Test(org.junit.Test)

Example 13 with RemoteEJBDirectory

use of org.jboss.as.test.clustering.ejb.RemoteEJBDirectory in project wildfly by wildfly.

the class RemoteFailoverTestCase method testStatelessFailover.

private void testStatelessFailover(String properties, Class<? extends Incrementor> beanClass) throws Exception {
    // TODO Elytron: Once support for legacy EJB properties has been added back, actually set the EJB properties
    // that should be used for this test using properties and ensure the EJB client context is reset
    // to its original state at the end of the test
    EJBClientContextSelector.setup(properties);
    try (EJBDirectory context = new RemoteEJBDirectory(MODULE_NAME)) {
        Incrementor bean = context.lookupStateless(beanClass, Incrementor.class);
        // Allow sufficient time for client to receive full topology
        Thread.sleep(CLIENT_TOPOLOGY_UPDATE_WAIT);
        List<String> results = new ArrayList<>(COUNT);
        for (int i = 0; i < COUNT; ++i) {
            Result<Integer> result = bean.increment();
            results.add(result.getNode());
            Thread.sleep(INVOCATION_WAIT);
        }
        for (String node : NODES) {
            int frequency = Collections.frequency(results, node);
            assertTrue(String.valueOf(frequency) + " invocations were routed to " + node, frequency > 0);
        }
        undeploy(DEPLOYMENT_1);
        for (int i = 0; i < COUNT; ++i) {
            Result<Integer> result = bean.increment();
            results.set(i, result.getNode());
            Thread.sleep(INVOCATION_WAIT);
        }
        Assert.assertEquals(0, Collections.frequency(results, NODE_1));
        Assert.assertEquals(COUNT, Collections.frequency(results, NODE_2));
        deploy(DEPLOYMENT_1);
        // Allow sufficient time for client to receive new topology
        Thread.sleep(CLIENT_TOPOLOGY_UPDATE_WAIT);
        for (int i = 0; i < COUNT; ++i) {
            Result<Integer> result = bean.increment();
            results.set(i, result.getNode());
            Thread.sleep(INVOCATION_WAIT);
        }
        for (String node : NODES) {
            int frequency = Collections.frequency(results, node);
            assertTrue(String.valueOf(frequency) + " invocations were routed to " + node, frequency > 0);
        }
        stop(CONTAINER_2);
        for (int i = 0; i < COUNT; ++i) {
            Result<Integer> result = bean.increment();
            results.set(i, result.getNode());
            Thread.sleep(INVOCATION_WAIT);
        }
        Assert.assertEquals(COUNT, Collections.frequency(results, NODE_1));
        Assert.assertEquals(0, Collections.frequency(results, NODE_2));
        start(CONTAINER_2);
        // Allow sufficient time for client to receive new topology
        Thread.sleep(CLIENT_TOPOLOGY_UPDATE_WAIT);
        for (int i = 0; i < COUNT; ++i) {
            Result<Integer> result = bean.increment();
            results.set(i, result.getNode());
            Thread.sleep(INVOCATION_WAIT);
        }
        for (String node : NODES) {
            int frequency = Collections.frequency(results, node);
            assertTrue(String.valueOf(frequency) + " invocations were routed to " + node, frequency > 0);
        }
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ArrayList(java.util.ArrayList) Incrementor(org.jboss.as.test.clustering.cluster.ejb.remote.bean.Incrementor) RemoteEJBDirectory(org.jboss.as.test.clustering.ejb.RemoteEJBDirectory) RemoteEJBDirectory(org.jboss.as.test.clustering.ejb.RemoteEJBDirectory) EJBDirectory(org.jboss.as.test.clustering.ejb.EJBDirectory)

Aggregations

RemoteEJBDirectory (org.jboss.as.test.clustering.ejb.RemoteEJBDirectory)13 EJBDirectory (org.jboss.as.test.clustering.ejb.EJBDirectory)10 Test (org.junit.Test)8 Incrementor (org.jboss.as.test.clustering.cluster.ejb.remote.bean.Incrementor)4 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)3 JBossEJBProperties (org.jboss.ejb.client.legacy.JBossEJBProperties)3 BeforeClass (org.junit.BeforeClass)3 ArrayList (java.util.ArrayList)2 CancellationException (java.util.concurrent.CancellationException)2 InSequence (org.jboss.arquillian.junit.InSequence)2 ClusterTopology (org.jboss.as.test.clustering.cluster.dispatcher.bean.ClusterTopology)2 ClusterTopologyRetriever (org.jboss.as.test.clustering.cluster.dispatcher.bean.ClusterTopologyRetriever)2 ServiceProviderRetriever (org.jboss.as.test.clustering.cluster.provider.bean.ServiceProviderRetriever)2 RegistryRetriever (org.jboss.as.test.clustering.cluster.registry.bean.RegistryRetriever)2 CountDownLatch (java.util.concurrent.CountDownLatch)1 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)1 EJBException (javax.ejb.EJBException)1 NamingException (javax.naming.NamingException)1