use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class ClientSessionImplTest method testAddAttribute.
@Test
public void testAddAttribute() {
// given:
ClientSession dolphinSession = new HttpClientSessionImpl(new HttpSessionMock());
// when:
dolphinSession.setAttribute("test-attribute", "Hello Dolphin Session");
// then:
Assert.assertEquals(1, dolphinSession.getAttributeNames().size());
Assert.assertTrue(dolphinSession.getAttributeNames().contains("test-attribute"));
Assert.assertEquals("Hello Dolphin Session", dolphinSession.getAttribute("test-attribute"));
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class DolphinPlatformSpringTestBootstrap method createEventBus.
/**
* Method to create a spring managed {@link RemotingEventBus} instance in singleton scope.
*
* @return the instance
*/
@Bean(name = "dolphinEventBus")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
protected RemotingEventBus createEventBus(final TestConfiguration testConfiguration) {
Assert.requireNonNull(testConfiguration, "testConfiguration");
final DolphinContextProvider contextProvider = new DolphinContextProvider() {
@Override
public DolphinContext getContext(ClientSession clientSession) {
return getCurrentDolphinContext();
}
@Override
public DolphinContext getContextById(String clientSessionId) {
return getCurrentDolphinContext();
}
@Override
public DolphinContext getCurrentDolphinContext() {
return testConfiguration.getDolphinTestContext();
}
};
final DefaultDolphinEventBus eventBus = new DefaultDolphinEventBus();
eventBus.init(contextProvider, new ClientSessionLifecycleHandlerImpl());
return eventBus;
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class ClientSessionModule method initialize.
@Override
public void initialize(final ServerCoreComponents coreComponents) throws ModuleInitializationException {
Assert.requireNonNull(coreComponents, "coreComponents");
final ServletContext servletContext = coreComponents.getInstance(ServletContext.class);
final PlatformConfiguration configuration = coreComponents.getConfiguration();
final ClasspathScanner classpathScanner = coreComponents.getInstance(ClasspathScanner.class);
final ManagedBeanFactory beanFactory = coreComponents.getInstance(ManagedBeanFactory.class);
final ClientSessionLifecycleHandlerImpl lifecycleHandler = new ClientSessionLifecycleHandlerImpl();
coreComponents.provideInstance(ClientSessionLifecycleHandler.class, lifecycleHandler);
coreComponents.provideInstance(ClientSessionProvider.class, new ClientSessionProvider() {
@Override
public ClientSession getCurrentClientSession() {
return lifecycleHandler.getCurrentDolphinSession();
}
});
final ClientSessionManager clientSessionManager = new ClientSessionManager(configuration, lifecycleHandler);
final List<String> endpointList = configuration.getListProperty(ID_FILTER_URL_MAPPINGS, ID_FILTER_URL_MAPPINGS_DEFAULT_VALUE);
final String[] endpoints = endpointList.toArray(new String[endpointList.size()]);
final ClientSessionFilter filter = new ClientSessionFilter(clientSessionManager);
final FilterRegistration.Dynamic createdFilter = servletContext.addFilter(DOLPHIN_CLIENT_ID_FILTER_NAME, filter);
createdFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, endpoints);
final HttpSessionCleanerListener sessionCleaner = new HttpSessionCleanerListener(clientSessionManager);
servletContext.addListener(sessionCleaner);
final Set<Class<?>> listeners = classpathScanner.getTypesAnnotatedWith(ServerListener.class);
for (final Class<?> listenerClass : listeners) {
if (ClientSessionListener.class.isAssignableFrom(listenerClass)) {
final ClientSessionListener listener = (ClientSessionListener) beanFactory.createDependentInstance(listenerClass);
lifecycleHandler.addSessionDestroyedListener(s -> listener.sessionDestroyed(s));
lifecycleHandler.addSessionCreatedListener(s -> listener.sessionCreated(s));
}
}
final ClientSessionMutextHolder mutextHolder = new ClientSessionMutextHolder();
lifecycleHandler.addSessionDestroyedListener(s -> mutextHolder.sessionDestroyed(s));
lifecycleHandler.addSessionCreatedListener(s -> mutextHolder.sessionCreated(s));
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class ClientScopeImpl method getLocalStore.
private Map<String, Object> getLocalStore() {
ClientSession session = getClientSession();
if (session == null) {
throw new IllegalStateException("No dolphin request found! Looks like you try to use the " + ClientScopeImpl.class.getSimpleName() + " ouside of the dolphin context!");
}
Map<String, Object> localStore = session.getAttribute(CLIENT_STORE_ATTRIBUTE);
if (localStore == null) {
localStore = Collections.synchronizedMap(new HashMap<String, Object>());
session.setAttribute(CLIENT_STORE_ATTRIBUTE, localStore);
}
return localStore;
}
use of com.canoo.platform.server.client.ClientSession in project dolphin-platform by canoo.
the class DolphinContextCommunicationHandler method handle.
public void handle(final HttpServletRequest request, final HttpServletResponse response) {
Assert.requireNonNull(request, "request");
Assert.requireNonNull(response, "response");
final HttpSession httpSession = Assert.requireNonNull(request.getSession(), "request.getSession()");
final ClientSession clientSession = sessionProvider.getCurrentClientSession();
if (clientSession == null) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
LOG.error("No client session provided for request in http session {}", httpSession.getId());
return;
}
final String userAgent = request.getHeader("user-agent");
LOG.trace("receiving RPM request for client session {} in http session {} from client with user-agent {}", clientSession.getId(), httpSession.getId(), userAgent);
final List<Command> commands = new ArrayList<>();
try {
commands.addAll(readCommands(request));
} catch (final Exception e) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
LOG.error("Can not parse request! (DolphinContext " + clientSession.getId() + ")", e);
return;
}
LOG.trace("Request for DolphinContext {} in http session {} contains {} commands", clientSession.getId(), httpSession.getId(), commands.size());
try {
DolphinContext context = getOrCreateContext(clientSession, commands);
final List<Command> results = new ArrayList<>();
try {
results.addAll(handle(context, commands));
} catch (final Exception e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
LOG.error("Can not withoutResult the the received commands (DolphinContext " + context.getId() + ")", e);
return;
}
LOG.trace("Sending RPM response for client session {} in http session {} from client with user-agent {}", context.getId(), httpSession.getId(), userAgent);
LOG.trace("RPM response for client session {} in http session {} contains {} commands", context.getId(), httpSession.getId(), results.size());
try {
writeCommands(results, response);
} catch (final Exception e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
LOG.error("Can not writeRequestContent response!", e);
return;
}
} catch (final Exception e) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
LOG.error("Can not find or create matching dolphin context in session " + httpSession.getId(), e);
return;
}
}
Aggregations