首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Glassfish V4.0中创建ManagedThreadFactory实例

如何在Glassfish V4.0中创建ManagedThreadFactory实例
EN

Stack Overflow用户
提问于 2015-02-04 18:22:32
回答 1查看 2.2K关注 0票数 4

我正在从运行在Glassfish V4.0 (build 89)容器中运行的rabbitMQ代码中调用客户端(而不是服务器),以连接到另一台机器上的rabbitmq服务器。根据rabbitmq客户端文档,我们应该向rabbitmq连接提供一个ManagedThreadFactory实例,用于创建线程。

我试着用DefaultManagedThreadFactory注射

ctx.lookup("java:comp/DefaultManagedThreadFactory")

失败了

查找SerialContext.中的'java:comp/DefaultManagedThreadFactory‘失败

尝试@Resource(lookup="concurrent/__DefaultManagedThreadFactory")会导致NPE的发生。

我不太喜欢java,我正在使用这个容器作为我的运动衫web服务的前端。显然,我需要做一些更多/不同的事情。然而,除了

contextservice

http://javahowto.blogspot.in/2011/02/how-to-create-and-look-up-thread-pool.html

任何Java专家能告诉我正确的巫毒咒语来做这件事吗?

更新-1

代码语言:javascript
复制
@Resource(name = "concurrent/__defaultManagedThreadFactory")
ManagedThreadFactory threadFactory;

// set on rabbitmq connection Factory
factory.setThreadFactory(threadFactory);


java.lang.NullPointerException
at java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1312)
at java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1233)
at java.util.concurrent.Executors.newFixedThreadPool(Executors.java:114)
at com.rabbitmq.client.impl.ConsumerWorkService.<init>(ConsumerWorkService.java:36)

更新-2

阿克塞尔-我的案子没什么特别的。在GFV4中尝试一个rabbitmq客户机就是我想要看到的。所以要重现这些问题

  • 您需要运行rabbitmq服务器。
  • 使用部署在GF上的war的一部分客户端代码连接到rabbitmq服务器。
  • 按照rabbitmq指南(https://www.rabbitmq.com/api-guide.html) @,请参阅自定义线程工厂部分。它们将线程实例化委托给容器。
  • rabbitmq java客户端代码在Github上。

我可以从GF中看到ManagedThreadFactory名称,所以它应该在那里。

更新-3

托管线程工厂和托管执行器服务可以使用JNDI定位。但是,不能将相同的资源注入使用泽西岛web服务的代码中。资源注入与一个简单的servlet示例一起工作(例如,Github上的java EE7示例)。

这是由于泽西/Hk2 2/CDI/焊缝等相互作用造成的吗?我正在寻找一个权威的答案,为什么我不能使资源注入工作?

EN

回答 1

Stack Overflow用户

发布于 2015-02-05 07:22:04

我在运行Glassfish 4的Java项目中注入这样的默认托管线程工厂:

代码语言:javascript
复制
@Singleton
@Startup
public class Messenger {
    @EJB
    MyMessenger me;

    @Resource(name = "concurrent/__defaultManagedThreadFactory")
    ManagedThreadFactory threadFactory;

    @Resource
    ManagedExecutorService executorService;

    @PostConstruct
    public void postConstruct() {
        me.waitAndInitialize();
    }

    @Asynchronous
    public Future<?> waitAndInitialize() {
        try {
            final AtomicInteger done = new AtomicInteger(0);
            int i = 0;

            while (done.intValue() == 0 && i < 20) {
                i++;
                getExecutorService().submit(
                        new Runnable() {

                            @Override
                            public void run() {
                                int incrementAndGet = done.incrementAndGet();
                            }
                        });

                Thread.sleep(500);
            }

            if (done.intValue() == 0) {
                Logger.getAnonymousLogger().severe("Waited a long time for the ExecutorService do become ready, but it never did. Will not initialize!");
            } else {
                init();
            }
        } catch (Exception e) {
            Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Exception in waitAndInitialize: " + e.getMessage(), e);
        }

        return new AsyncResult<>(null);
    }

    protected void init() {
        connectionFactory.setExecutorService(executorService);
        connectionFactory.setThreadFactory(threadFactory);

        // connect to rabbit and listen to queues
    }
}

asadmin list-containers输出

代码语言:javascript
复制
List all known application containers
resources_ear
resources
ejb
weld
weld
grizzly
web
connector
webservices
appclient
jpa
jpa
ear
osgi
security
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28328594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档