/** Basic load balance testing. A random distribution is used amongst nodes for client now. */ private void loadbalance(EJBDirectory directory, String deployment1, String deployment2) throws Exception { this.start(CONTAINER_1); this.deploy(CONTAINER_1, deployment1); this.start(CONTAINER_2); this.deploy(CONTAINER_2, deployment2); final ContextSelector<EJBClientContext> previousSelector = EJBClientContextSelector.setup(CLIENT_PROPERTIES); int numberOfServers = 2; int numberOfCalls = 40; // there will be at least 20% of calls processed by all servers double serversProccessedAtLeast = 0.2; try { StatelessRemoteHome home = directory.lookupHome(StatelessBean.class, StatelessRemoteHome.class); StatelessRemote bean = home.create(); String node = bean.getNodeName(); log.info("Node called : " + node); validateBalancing(bean, numberOfCalls, numberOfServers, serversProccessedAtLeast); Properties contextChangeProperties = new Properties(); contextChangeProperties.put(REMOTE_PORT_PROPERTY_NAME, PORT_2.toString()); contextChangeProperties.put(REMOTE_HOST_PROPERTY_NAME, HOST_2.toString()); EJBClientContextSelector.setup(CLIENT_PROPERTIES, contextChangeProperties); bean = home.create(); node = bean.getNodeName(); log.info("Node called : " + node); validateBalancing(bean, numberOfCalls, numberOfServers, serversProccessedAtLeast); } finally { // reset the selector if (previousSelector != null) { EJBClientContext.setSelector(previousSelector); } // undeploy&shutdown the containers undeployAll(); shutdownAll(); } }
private void doFailover( boolean isStop, EJBDirectory directory, String deployment1, String deployment2) throws Exception { this.start(CONTAINER_1); this.deploy(CONTAINER_1, deployment1); final ContextSelector<EJBClientContext> selector = EJBClientContextSelector.setup(CLIENT_PROPERTIES); try { StatelessRemoteHome home = directory.lookupHome(StatelessBean.class, StatelessRemoteHome.class); StatelessRemote bean = home.create(); assertEquals( "The only " + NODES[0] + " is active. Bean had to be invoked on it but it wasn't.", NODES[0], bean.getNodeName()); this.start(CONTAINER_2); this.deploy(CONTAINER_2, deployment2); if (isStop) { this.stop(CONTAINER_1); } else { this.undeploy(CONTAINER_1, deployment1); } assertEquals( "Only " + NODES[1] + " is active. The bean had to be invoked on it but it wasn't.", NODES[1], bean.getNodeName()); } finally { // reset the selector if (selector != null) { EJBClientContext.setSelector(selector); } // need to have the container started to undeploy deployment afterwards this.start(CONTAINER_1); // shutdown the containers undeployAll(); shutdownAll(); } }
@AfterClass public static void destroy() throws NamingException { directoryAnnotation.close(); directoryDD.close(); }