Skip to content

Commit

Permalink
Fixes #1785
Browse files Browse the repository at this point in the history
  • Loading branch information
jfarcand committed Nov 21, 2014
1 parent 9371be0 commit 7e3d3bc
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1227,7 +1227,8 @@ public void configureBroadcasterFactory() {
if (broadcasterFactory == null) {
Class<? extends Broadcaster> bc =
(Class<? extends Broadcaster>) IOUtils.loadClass(getClass(), broadcasterClassName);
broadcasterFactory = new DefaultBroadcasterFactory(bc, broadcasterLifeCyclePolicy, config);
broadcasterFactory = newClassInstance(BroadcasterFactory.class, DefaultBroadcasterFactory.class);
broadcasterFactory.configure(bc, broadcasterLifeCyclePolicy, config);
}

for (BroadcasterListener b : broadcasterListeners) {
Expand Down Expand Up @@ -1487,8 +1488,10 @@ protected boolean detectSupportedFramework(ServletConfig sc) throws Exception {

broadcasterFactory.destroy();

broadcasterFactory = new DefaultBroadcasterFactory(bc, broadcasterLifeCyclePolicy, config);
broadcasterFactory = newClassInstance(BroadcasterFactory.class, DefaultBroadcasterFactory.class);
broadcasterFactory.configure(bc, broadcasterLifeCyclePolicy, config);
BroadcasterFactory.setBroadcasterFactory(broadcasterFactory, config);

for (BroadcasterListener b : broadcasterListeners) {
broadcasterFactory.addBroadcasterListener(b);
}
Expand Down Expand Up @@ -1760,7 +1763,9 @@ protected void loadAtmosphereDotXml(InputStream stream, URLClassLoader c)
broadcasterClassName = broadcasterClass;
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Class<? extends Broadcaster> bc = (Class<? extends Broadcaster>) cl.loadClass(broadcasterClassName);
broadcasterFactory = new DefaultBroadcasterFactory(bc, broadcasterLifeCyclePolicy, config);

broadcasterFactory = newClassInstance(BroadcasterFactory.class, DefaultBroadcasterFactory.class);
broadcasterFactory.configure(bc, broadcasterLifeCyclePolicy, config);
BroadcasterFactory.setBroadcasterFactory(broadcasterFactory, config);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ public abstract class BroadcasterFactory {
protected static AtmosphereConfig config;
protected final ConcurrentLinkedQueue<BroadcasterListener> broadcasterListeners = new ConcurrentLinkedQueue<BroadcasterListener>();

/**
* Configure the factory
* @param clazz {@link org.atmosphere.cpr.Broadcaster}
* @param broadcasterLifeCyclePolicy {@link org.atmosphere.cpr.BroadcasterLifeCyclePolicy}
* @param c {@link org.atmosphere.cpr.AtmosphereConfig}
*/
abstract public void configure(Class<? extends Broadcaster> clazz, String broadcasterLifeCyclePolicy, AtmosphereConfig c);

/**
* Return an instance of the default {@link Broadcaster}.
* <p/>
Expand Down Expand Up @@ -161,6 +169,7 @@ public BroadcasterFactory removeBroadcasterListener(BroadcasterListener b) {
return this;
}

@Deprecated
static void setBroadcasterFactory(BroadcasterFactory f, AtmosphereConfig c) {
factory = f;
config = c;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,21 +48,32 @@ public class DefaultBroadcasterFactory extends BroadcasterFactory {

private final ConcurrentHashMap<Object, Broadcaster> store = new ConcurrentHashMap<Object, Broadcaster>();

private final Class<? extends Broadcaster> clazz;
private Class<? extends Broadcaster> clazz;

private BroadcasterLifeCyclePolicy policy =
new BroadcasterLifeCyclePolicy.Builder().policy(NEVER).build();
protected Broadcaster.POLICY defaultPolicy = Broadcaster.POLICY.FIFO;
protected int defaultPolicyInteger = -1;
private final URI legacyBroadcasterURI = URI.create("http://127.0.0.0");
private AtmosphereConfig config;

public DefaultBroadcasterFactory(){
}

@Deprecated
protected DefaultBroadcasterFactory(Class<? extends Broadcaster> clazz, String broadcasterLifeCyclePolicy, AtmosphereConfig c) {
this.clazz = clazz;
this.factory = this;
config = c;
configure(broadcasterLifeCyclePolicy);
}

public void configure(Class<? extends Broadcaster> clazz, String broadcasterLifeCyclePolicy, AtmosphereConfig c) {
this.clazz = clazz;
config = c;
configure(broadcasterLifeCyclePolicy);
}

private void configure(String broadcasterLifeCyclePolicy) {

int maxIdleTime = 5 * 60 * 1000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ public void init(ServletConfig config) throws ServletException {

public final static class MyBroadcasterFactory extends BroadcasterFactory {

@Override
public void configure(Class<? extends Broadcaster> clazz, String broadcasterLifeCyclePolicy, AtmosphereConfig c) {
}

@Override
public Broadcaster get() {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import org.atmosphere.cpr.AtmosphereConfig;
import org.atmosphere.cpr.AtmosphereResource;
import org.atmosphere.cpr.Broadcaster;
import org.atmosphere.cpr.BroadcasterFactory;
Expand Down Expand Up @@ -86,6 +87,11 @@ BroadcasterFactory _get() {
return getAtmosphereResource(AtmosphereResource.class, true).getAtmosphereConfig().getBroadcasterFactory();
}

@Override
public void configure(Class<? extends Broadcaster> clazz, String broadcasterLifeCyclePolicy, AtmosphereConfig c) {
_get().configure(clazz, broadcasterLifeCyclePolicy, c);
}

@Override
public Broadcaster get() {
return _get().get();
Expand Down

0 comments on commit 7e3d3bc

Please sign in to comment.