-
-
Notifications
You must be signed in to change notification settings - Fork 751
Configuring Atmosphere as a Spring Bean
Seamus McMorrow edited this page Feb 8, 2016
·
13 revisions
First, you need to define in your pom.xml the atmosphere-spring
. This jar contains the Spring related classes needed to make it work.
You can also cut and paste either the xml config or the java config below from step 2, and add the Servlet to the web.xml in your application.
##1. Add to your pom.xml
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-spring</artifactId>
<version>${atmosphere-version}</version>
</dependency>
##2. Define a Spring context:
@Configuration
public class AtmosphereConfig {
@Bean
public AtmosphereFramework atmosphereFramework() throws ServletException, InstantiationException, IllegalAccessException {
AtmosphereFramework atmosphereFramework = new AtmosphereFramework(false, false);
// atmosphereFramework.setBroadcasterCacheClassName(UUIDBroadcasterCache.class.getName());
atmosphereFramework.addAtmosphereHandler("/chat/*", atmosphereChatHandler(), interceptors());
return atmosphereFramework;
}
@Bean
public AtmosphereChatHandler atmosphereChatHandler() {
return new AtmosphereChatHandler();
}
private List<AtmosphereInterceptor> interceptors() {
List<AtmosphereInterceptor> atmosphereInterceptors = new ArrayList<>();
// atmosphereInterceptors.add(new TrackMessageSizeInterceptor());
return atmosphereInterceptors;
}
@Bean
public BroadcasterFactory broadcasterFactory() throws ServletException, InstantiationException, IllegalAccessException {
return atmosphereFramework().getAtmosphereConfig().getBroadcasterFactory();
}
@Bean
public AtmosphereSpringContext atmosphereSpringContext() {
AtmosphereSpringContext atmosphereSpringContext = new AtmosphereSpringContext();
Map<String, String> map = new HashMap<>();
map.put("org.atmosphere.cpr.broadcasterClass", org.atmosphere.cpr.DefaultBroadcaster.class.getName());
map.put(AtmosphereInterceptor.class.getName(), TrackMessageSizeInterceptor.class.getName());
map.put(AnnotationProcessor.class.getName(), VoidAnnotationProcessor.class.getName());
map.put("org.atmosphere.cpr.broadcasterLifeCyclePolicy", ATMOSPHERE_RESOURCE_POLICY.IDLE_DESTROY.toString());
atmosphereSpringContext.setConfig(map);
return atmosphereSpringContext;
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- Bean creation using appropriate constructor -->
<bean id="framework" class="org.atmosphere.cpr.AtmosphereFramework">
<constructor-arg index="0" value="false"/>
<constructor-arg index="1" value="false"/>
</bean>
<!-- Configure Atmosphere framework -->
<bean class="org.atmosphere.spring.bean.AtmosphereSpringContext">
<property name="config">
<map>
<entry key="org.atmosphere.cpr.broadcasterClass" value="org.atmosphere.cpr.DefaultBroadcaster"/>
<entry key="org.atmosphere.cpr.AtmosphereInterceptor" value="__LIST_OF_ATMOSPHEREINTERCEPTOR__"/>
<!-- If you don't want Atmosphere to scan for annotation -->
<entry key="org.atmosphere.cpr.AnnotationProcessor" value="org.atmosphere.util.VoidAnnotationProcessor"/>
<!-- Add you Atmosphere's Properties here. See @org.atmosphere.cpr.AtmosphereConfig -->
<entry key="org.atmosphere.cpr.broadcasterLifeCyclePolicy" value="IDLE_DESTROY"/>
</map>
</property>
</bean>
<!-- Add an Atomsphere handler (if necessary) -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref ="framework"/>
<property name="targetMethod" value="addAtmosphereHandler"/>
<property name="arguments">
<list>
<value>__PATH__</value>
<bean class="__YOUR_ATMOSPHERE_HANDLER__"/>
</list>
</property>
</bean>
<!-- Add an Atomsphere listener (if necessary) -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref ="framework"/>
<property name="targetMethod" value="addBroadcasterListener"/>
<property name="arguments">
<list>
<bean class="__YOUR_ATMOSPHERE_HANDLER__"/>
</list>
</property>
</bean>
</beans>
##3. Define servlet in web.xml with no configuration:
web.xml...
<servlet>
<servlet-name>AtmosphereServlet</servlet-name>
<servlet-class>org.atmosphere.spring.bean.AtmosphereSpringServlet</servlet-class>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>AtmosphereServlet</servlet-name>
<url-pattern>__PATH__</url-pattern>
</servlet-mapping>
- Understanding Atmosphere
- Understanding @ManagedService
- Using javax.inject.Inject and javax.inject.PostConstruct annotation
- Understanding Atmosphere's Annotation
- Understanding AtmosphereResource
- Understanding AtmosphereHandler
- Understanding WebSocketHandler
- Understanding Broadcaster
- Understanding BroadcasterCache
- Understanding Meteor
- Understanding BroadcastFilter
- Understanding Atmosphere's Events Listeners
- Understanding AtmosphereInterceptor
- Configuring Atmosphere for Performance
- Understanding JavaScript functions
- Understanding AtmosphereResourceSession
- Improving Performance by using the PoolableBroadcasterFactory
- Using Atmosphere Jersey API
- Using Meteor API
- Using AtmosphereHandler API
- Using Socket.IO
- Using GWT
- Writing HTML5 Server-Sent Events
- Using STOMP protocol
- Streaming WebSocket messages
- Configuring Atmosphere's Classes Creation and Injection
- Using AtmosphereInterceptor to customize Atmosphere Framework
- Writing WebSocket sub protocol
- Configuring Atmosphere for the Cloud
- Injecting Atmosphere's Components in Jersey
- Sharing connection between Browser's windows and tabs
- Understanding AtmosphereResourceSession
- Manage installed services
- Server Side: javadoc API
- Server Side: atmosphere.xml and web.xml configuration
- Client Side: atmosphere.js API