我正在从运行在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服务的前端。显然,我需要做一些更多/不同的事情。然而,除了
http://javahowto.blogspot.in/2011/02/how-to-create-and-look-up-thread-pool.html
任何Java专家能告诉我正确的巫毒咒语来做这件事吗?
更新-1
@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客户机就是我想要看到的。所以要重现这些问题
我可以从GF中看到ManagedThreadFactory名称,所以它应该在那里。
更新-3
托管线程工厂和托管执行器服务可以使用JNDI定位。但是,不能将相同的资源注入使用泽西岛web服务的代码中。资源注入与一个简单的servlet示例一起工作(例如,Github上的java EE7示例)。
这是由于泽西/Hk2 2/CDI/焊缝等相互作用造成的吗?我正在寻找一个权威的答案,为什么我不能使资源注入工作?
发布于 2015-02-04 23:22:04
我在运行Glassfish 4的Java项目中注入这样的默认托管线程工厂:
@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
输出
List all known application containers
resources_ear
resources
ejb
weld
weld
grizzly
web
connector
webservices
appclient
jpa
jpa
ear
osgi
security
https://stackoverflow.com/questions/28328594
复制相似问题