Atmosphere 框架,BroadcasterFactory.getDefault() 替代方案

Posted

技术标签:

【中文标题】Atmosphere 框架,BroadcasterFactory.getDefault() 替代方案【英文标题】:Atmosphere framework, BroadcasterFactory.getDefault() alternative 【发布时间】:2014-08-14 07:22:04 【问题描述】:

我正在使用 Atmosphere 框架,它在库的最新版本中查找该方法: BroadcasterFactory.getDefault() 已弃用。 (而且这种方法基本上到处都在使用,我找不到如何使用新“方式”的示例)

javadoc 声明:

 @deprecated Use @link org.atmosphere.cpr.AtmosphereConfig#resourcesFactory()

但是我找不到单个文档如何让 AtmosphereConfig 能够获取 resourceFactory(这是一个实例方法)。

谁能告诉我如何获取配置 .. 或 AtmosphereFramework 对象本身,我可以从中获取配置或任何 up2date 示例?

【问题讨论】:

【参考方案1】:

不确定是否有效,但尝试获取ServletContext 并使用getAttribute(AtmosphereFramework.class.getName()) 获取AtmosphereFramework。如果您使用的是 Spring,请尝试直接自动装配 AtmosphereFramework。

您也可以从AtmosphereResource 获取BroadcasterFactory,然后查找Broadcaster,例如:

private String path;

private BroadcasterFactory broadcasterFactory;

@Ready(value = Ready.DELIVER_TO.ALL)
public void onReady(final AtmosphereResource r) 

    System.out.println("onConnect");

    r.addEventListener(new AtmosphereConnectionController());

    if(broadcasterFactory == null)
        path = r.getBroadcaster().getID();
        broadcasterFactory = r.getAtmosphereConfig().getBroadcasterFactory();
    

//later in code
broadcasterFactory.lookup(path).broadcast("message");

【讨论】:

【参考方案2】:

使用依赖注入。在我的项目中,它是这样的:

@MeteorService(path = "/recursos/fila-de-atendimento", interceptors = AtmosphereResourceLifecycleInterceptor.class)
public class FilaDeAtendimentoResource extends HttpServlet 

    @Inject
    private BroadcasterFactory broadcasterFactory;

    ...

    /** Used for registering for a message */
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException 
        ...
        Broadcaster broadcaster = broadcasterFactory.lookup(broadcasterId, true);
        meteor.setBroadcaster(broadcaster);
        ...
    


【讨论】:

这不起作用,至少对我来说,不知道为什么,但是 BroadcasterFactory 没有被正确注入并且为空。

以上是关于Atmosphere 框架,BroadcasterFactory.getDefault() 替代方案的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Atmosphere 框架调用传统的 REST-RPC 调用?

具有每个请求问题(Hibernate 和 Shiro)的 WebSocket(Atmosphere) - Vaadin

JULIA BOORSTIN — Interview a Broadcaster!

使用 java 和 Atmosphere 的基本聊天应用程序

获取 URL 并捕获 XML 响应 - SAM Broadcaster

JBoss EAP 6.1 上的 Atmosphere 和 WebSocket