-
-
Notifications
You must be signed in to change notification settings - Fork 750
Configuring Atmosphere's Classes Creation and Injection
Jeanfrancois Arcand edited this page Oct 3, 2013
·
21 revisions
Starting with Atmosphere 2.1, it is possible to configure a AtmosphereObjectFactory and configure Atmosphere to use it. You can define your own and pass it to the framework by defining an init-param:
<init-param>
<param-name>org.atmosphere.cpr.objectFactory</param-name>
<param-value> << an implementation of AtmosphereObjectFactory >> </param-value>
</init-param>
By default, Atmosphere will use the following code for injecting/creating object:
public class CDIObjectFactory implements AtmosphereObjectFactory {
@Override
@SuppressWarnings("unchecked")
public <T> T newClassInstance(AtmosphereFramework framework, Class<T> classToInstantiate) throws InstantiationException, IllegalAccessException {
CreationalContext cc = null;
final BeanManager bm;
try {
bm = (BeanManager) new InitialContext().lookup("java:comp/BeanManager");
final Iterator<Bean<?>> i = bm.getBeans(classToInstantiate).iterator();
if (!i.hasNext()) {
return classToInstantiate.newInstance();
}
Bean<T> bean = (Bean<T>) i.next();
CreationalContext<T> ctx = bm.createCreationalContext(bean);
T dao = (T) bm.getReference(bean, classToInstantiate, ctx);
return dao;
} catch (Exception e) {
// Log ME. Fallback to normal.
return classToInstantiate.newInstance();
} finally {
if (cc != null) cc.release();
}
}
}
You can install it by adding in your pom.xml:
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-cdi</artifactId>
<version>2.1.0</version>
</dependency>
Atmosphere will auto-detect it and use it automatically.
By default, Atmosphere will use the following code for injecting/creating object:
public class SpringObjectFactory implements AtmosphereObjectFactory {
@Override
public <T> T newClassInstance(AtmosphereFramework framework, Class<T> tClass) throws InstantiationException, IllegalAccessException {
return WebApplicationContextUtils.getWebApplicationContext(framework.getServletContext()).getBean(tClass);
}
}
You can install it by adding in your pom.xml:
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-spring</artifactId>
<version>2.1.0</version>
</dependency>
By default, Atmosphere will use the following code for injecting/creating object:
public class GuiceObjectFactory implements AtmosphereObjectFactory {
@Override
public <T> T newClassInstance(AtmosphereFramework framework, Class<T> tClass) throws InstantiationException, IllegalAccessException {
com.google.inject.Injector injector = (com.google.inject.Injector)
framework.getServletContext().getAttribute(com.google.inject.Injector.class.getName());
if (injector == null)
throw new IllegalStateException("No Guice Injector found in current ServletContext !");
return injector.getInstance(tClass);
}
}
You can install it by adding in your pom.xml:
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-guice</artifactId>
<version>2.1.0</version>
</dependency>
- 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