use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class DefaultDolphinEventBusTest method create.
private DefaultDolphinEventBus create(final DolphinContext context) {
DefaultDolphinEventBus eventBus = new DefaultDolphinEventBus();
eventBus.init(new DolphinContextProvider() {
@Override
public DolphinContext getContext(ClientSession clientSession) {
return getContextById(clientSession.getId());
}
@Override
public DolphinContext getContextById(String clientSessionId) {
if (context != null && context.getId().equals(clientSessionId)) {
return context;
}
return null;
}
@Override
public DolphinContext getCurrentDolphinContext() {
return context;
}
}, new ClientSessionLifecycleHandlerImpl());
return eventBus;
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class DolphinContextTaskQueue method executeTasks.
public void executeTasks() {
final ClientSession currentSession = sessionProvider.getCurrentClientSession();
if (currentSession == null || !dolphinSessionId.equals(currentSession.getId())) {
throw new IllegalStateException("Not in Dolphin Platform session " + dolphinSessionId);
}
LOG.trace("Running {} tasks in Dolphin Platform session {}", tasks.size(), dolphinSessionId);
final long startTime = System.currentTimeMillis();
final long endTime = startTime + maxExecutionTimeUnit.toMillis(maxExecutionTime);
while (!communicationManager.hasResponseCommands()) {
if (interrupted.get()) {
interrupted.set(false);
break;
}
final Runnable task = tasks.poll();
if (task == null) {
try {
taskLock.lock();
try {
if (tasks.isEmpty() && !taskCondition.await(endTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS)) {
interrupted.set(false);
break;
}
} finally {
taskLock.unlock();
}
if (tasks.isEmpty()) {
break;
}
} catch (InterruptedException e) {
String exceptionMessage = String.format("Concurrency error in task executor for Dolphin Platform session %s", dolphinSessionId);
LOG.error(exceptionMessage, e);
throw new IllegalStateException(exceptionMessage, e);
}
} else {
try {
task.run();
LOG.trace("Task executor executed task in Dolphin Platform session {}", dolphinSessionId);
} catch (Exception e) {
String exceptionMessage = String.format("Error in running task in Dolphin Platform session %s", dolphinSessionId);
LOG.error(exceptionMessage, e);
throw new DolphinTaskException(exceptionMessage, e);
}
}
}
final long runTime = System.currentTimeMillis() - startTime;
LOG.trace("Task executor for Dolphin Platform session {} ended after {} seconds with {} task still open", dolphinSessionId, maxExecutionTimeUnit.toSeconds(runTime), tasks.size());
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class RemotingModule method initialize.
@Override
public void initialize(ServerCoreComponents coreComponents) throws ModuleInitializationException {
LOG.info("Starting Dolphin Platform");
try {
final ServletContext servletContext = coreComponents.getInstance(ServletContext.class);
final ClasspathScanner classpathScanner = coreComponents.getInstance(ClasspathScanner.class);
final ManagedBeanFactory beanFactory = coreComponents.getInstance(ManagedBeanFactory.class);
final RemotingConfiguration configuration = new RemotingConfiguration(coreComponents.getConfiguration());
final ClientSessionProvider sessionProvider = coreComponents.getInstance(ClientSessionProvider.class);
final DolphinContextFactory dolphinContextFactory = new DefaultDolphinContextFactory(configuration, sessionProvider, beanFactory, classpathScanner);
final DolphinContextCommunicationHandler communicationHandler = new DolphinContextCommunicationHandler(sessionProvider, dolphinContextFactory);
final DolphinContextProvider contextProvider = new DolphinContextProvider() {
@Override
public DolphinContext getContext(final ClientSession clientSession) {
return communicationHandler.getContext(clientSession);
}
@Override
public DolphinContext getContextById(String clientSessionId) {
return communicationHandler.getContextById(clientSessionId);
}
@Override
public DolphinContext getCurrentDolphinContext() {
return communicationHandler.getCurrentDolphinContext();
}
};
coreComponents.provideInstance(DolphinContextProvider.class, contextProvider);
final ClientSessionLifecycleHandler lifecycleHandler = coreComponents.getInstance(ClientSessionLifecycleHandler.class);
servletContext.addServlet(DOLPHIN_SERVLET_NAME, new DolphinPlatformServlet(communicationHandler)).addMapping(configuration.getDolphinPlatformServletMapping());
servletContext.addServlet(INTERRUPT_SERVLET_NAME, new InterruptServlet(contextProvider)).addMapping(configuration.getDolphinPlatformInterruptServletMapping());
LOG.debug("Dolphin Platform initialized under context \"" + servletContext.getContextPath() + "\"");
LOG.debug("Dolphin Platform endpoint defined as " + configuration.getDolphinPlatformServletMapping());
Iterator<EventBusProvider> iterator = ServiceLoader.load(EventBusProvider.class).iterator();
boolean providerFound = false;
boolean flag = false;
while (iterator.hasNext()) {
EventBusProvider provider = iterator.next();
if (configuration.getEventbusType().equals(provider.getType())) {
if (providerFound) {
throw new IllegalStateException("More than 1 event bus provider found");
}
LOG.debug("Using event bus of type {} with provider class {}", provider.getType(), provider.getClass());
providerFound = true;
RemotingEventBus eventBus = provider.create(configuration);
if (eventBus instanceof AbstractEventBus) {
((AbstractEventBus) eventBus).init(contextProvider, lifecycleHandler);
}
coreComponents.provideInstance(RemotingEventBus.class, eventBus);
flag = true;
}
}
if (!flag) {
throw new ModuleInitializationException("Configured event bus is not on the classpath.");
}
} catch (ControllerValidationException cve) {
throw new ModuleInitializationException("Can not start Remote Presentation Model support based on bad controller definition", cve);
}
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class ClientSessionImplTest method testImmutableAttributeSet.
@Test(expectedExceptions = UnsupportedOperationException.class)
public void testImmutableAttributeSet() {
// given:
ClientSession dolphinSession = new HttpClientSessionImpl(new HttpSessionMock());
// then:
dolphinSession.getAttributeNames().add("att");
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class ClientSessionImplTest method testMultipleAttributes.
@Test
public void testMultipleAttributes() {
// given:
ClientSession dolphinSession = new HttpClientSessionImpl(new HttpSessionMock());
// when:
dolphinSession.setAttribute("test-attribute1", "Hello Dolphin Session");
dolphinSession.setAttribute("test-attribute2", "Yeah!");
dolphinSession.setAttribute("test-attribute3", "Dolphin Platform");
// then:
Assert.assertEquals(3, dolphinSession.getAttributeNames().size());
Assert.assertTrue(dolphinSession.getAttributeNames().contains("test-attribute1"));
Assert.assertTrue(dolphinSession.getAttributeNames().contains("test-attribute2"));
Assert.assertTrue(dolphinSession.getAttributeNames().contains("test-attribute3"));
Assert.assertEquals("Hello Dolphin Session", dolphinSession.getAttribute("test-attribute1"));
Assert.assertEquals("Yeah!", dolphinSession.getAttribute("test-attribute2"));
Assert.assertEquals("Dolphin Platform", dolphinSession.getAttribute("test-attribute3"));
}
Aggregations