/** * Used to refresh the service registry after the Application Context is initialized. This way any * services that were exported on startup will be available in the service registry once startup * is complete. */ private void requeueMessages() { LOG.info("Refreshing Service Registry to export services to the bus."); KsbApiServiceLocator.getServiceBus().synchronizeLocalServices(); // automatically requeue documents sitting with status of 'R' MessageFetcher messageFetcher = new MessageFetcher((Integer) null); KSBServiceLocator.getThreadPool().execute(messageFetcher); }
@Override protected void doAdditionalModuleStartLogic() throws Exception { // this allows us to become aware of remote services, in case the application needs to use any // of them during startup LOG.info("Synchronizing remote services with service bus after KSB startup..."); long startTime = System.currentTimeMillis(); KsbApiServiceLocator.getServiceBus().synchronizeRemoteServices(); long endTime = System.currentTimeMillis(); LOG.info( "...total time to synchronize remote services with service bus after KSB startup: " + (endTime - startTime)); }
@Override public void start() throws Exception { if (serviceDefinitions != null && !serviceDefinitions.isEmpty()) { LOG.debug( "Configuring " + serviceDefinitions.size() + " services for application id " + CoreConfigHelper.getApplicationId() + " using config for classloader " + ClassLoaderUtils.getDefaultClassLoader()); KsbApiServiceLocator.getServiceBus().publishServices(serviceDefinitions, true); super.start(); } }
@Test public void testDelayedAsynchronousServiceCall() throws Exception { KSBTestUtils.setMessagingToAsync(); QName serviceName = new QName("testAppsSharedQueue", "sharedQueue"); // Queue up the service to be called asynchronously after 5 seconds KSBJavaService testJavaAsyncService = (KSBJavaService) KsbApiServiceLocator.getMessageHelper() .getServiceAsynchronously(serviceName, "context", "value1", "value2", 5000); testJavaAsyncService.invoke(new ClientAppServiceSharedPayloadObj("message content", false)); verifyServiceCalls(serviceName, false); // sleep for 1 second, should not have been called Thread.sleep(1000); verifyServiceCalls(serviceName, false); // sleep for 1 second, should not have been called Thread.sleep(1000); verifyServiceCalls(serviceName, false); // sleep for 1 second, should not have been called Thread.sleep(1000); verifyServiceCalls(serviceName, false); Thread.sleep(1000); verifyServiceCalls(serviceName, false); // TODO this isn't the best test ever because it's relying on waits and timing which is most // likely doomed to occasional // failure in the CI environment. If this occurs than I may need to yank this. A better long // term solution would be // to allow for the use of callbacks for delayed asynchronous services but that's not something // I wanted to try // to tackle at the moment // now sleep for 3 more seconds, the call should be invoked Thread.sleep(3000); verifyServiceCalls(serviceName, true); }