-
-
Notifications
You must be signed in to change notification settings - Fork 749
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. All you need to do is to define an init-param:
<init-param>
<param-name>org.atmosphere.cpr.objectFactory</param-name>
<param-value> << an implementation of AtmosphereObjectFactory >> </param-value>
</init-param>
Foe example, using CDI
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();
}
}
}
For Spring, you can define:
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);
}
}
For Guice, you can do:
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);
}
}
The Atmosphere's extension project contains both Guice and Spring integration as explained above and can be adding the atmosphere-spring/guice 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