gpt4 book ai didi

java - TomEE 嵌入式 ActiveMQ 使用 JMSContext : No ManagedConnections available within configured blocking timeout ( 5000 [ms] )

转载 作者:行者123 更新时间:2023-11-30 12:06:47 29 4
gpt4 key购买 nike

我的应用程序使用嵌入了 TomEE Plus-8.0.0-M1 的 ActiveMQ。

无论使用使用 resources.xml 显式定义的 javax.jms.ConnectionFactory 还是让 TomEE 即时生成连接,用完池连接的行为都是相同的。

连接超时的不同设置似乎没有影响:

connectionMaxIdleTime = 3 seconds
connectionMaxIdleTime = 15 minutes

如果连续调用 ExampleSessionBean.sendMessage() 11 次,则放弃连接警告将记录在消息 1-10 上。在消息 #11 上,抛出 JMSRuntimeException:没有可用的托管连接。

然后,如果我等待几分钟,JMSContext 生产者就可以再次发送。

我的第一个想法是需要关闭 JMSContext 中的底层连接

jmsContext.close();

但来自Interface JMSContext

“如果 JMSContext 是容器管理的(注入(inject)的),则不得使用此方法。”

这里需要进行哪些编程或配置更改?

谢谢,泰德·S

资源.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<Resource id="jmsConnectionFactory" type="javax.jms.ConnectionFactory">
connectionMaxIdleTime = 3 seconds
connectionMaxWaitTime = 5 seconds
poolMaxSize = 10
poolMinSize = 0
resourceAdapter = Default JMS Resource Adapter
transactionSupport = xa
</Resource>
</resources>

ExampleSessionBean.java

@Named
@LocalBean
@Stateless
public class ExampleSessionBean
{

@Resource(name = "jms/localNotificationQueue")
private Queue _localNotificationQueue;

@Inject
@JMSConnectionFactory("jmsConnectionFactory")
private JMSContext _jmsContext;

public void sendMessage(String message)
{
try
{
TextMessage textMessage =
_jmsContext.createTextMessage(message);
_jmsContext.createProducer().
setDeliveryMode(DeliveryMode.PERSISTENT).
send(_localNotificationQueue, textMessage);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

警告 - 消息 1-10:(请原谅格式化。SE 格式化程序出于某种原因不会格式化此文本 block )

开始警告文本

警告:事务完成,但连接仍有关联的句柄:ManagedConnectionInfo:... org.apache.openejb.resource.activemq.jms2.cdi.JMS2CDIExtension$InternalJMSContext.createProducer(JMS2CDIExtension.java:370), com.myorg.jms.ExampleSessionBean.sendMessage(ExampleSessionBean.java:46),

...

结束警告文本

消息 #11 异常

javax.jms.JMSRuntimeException: No ManagedConnections available within configured blocking timeout ( 5000 [ms] ) for pool org.apache.geronimo.connector.outbound.SinglePoolConnectionInterceptor@12aff7fa
at org.apache.openejb.resource.activemq.jms2.JMS2.toRuntimeException(JMS2.java:83)
at org.apache.openejb.resource.activemq.jms2.JMSContextImpl.connection(JMSContextImpl.java:85)
at org.apache.openejb.resource.activemq.jms2.JMSContextImpl.session(JMSContextImpl.java:102)
at org.apache.openejb.resource.activemq.jms2.JMSContextImpl.getInnerProducer(JMSContextImpl.java:124)
at org.apache.openejb.resource.activemq.jms2.JMSContextImpl.createProducer(JMSContextImpl.java:302)
at org.apache.openejb.resource.activemq.jms2.cdi.JMS2CDIExtension$InternalJMSContext.createProducer(JMS2CDIExtension.java:370)
at com.myorg.jms.ExampleSessionBean.sendMessage(ExampleSessionBean.java:46)
...

更新:此行为已复制并添加到 TomEE issues tracker .

最佳答案

我放弃了 JMSContext 并返回到手动管理连接。即使加载了 100 条消息,所有功能都按预期运行。

ExampleSessionBean.java

@Named
@LocalBean
@Stateless
public class ExampleSessionBean
{
@Resource(name = "jms/localNotificationQueue")
private Queue _localNotificationQueue;

@Resource(mappedName = "jmsConnectionFactory")
private ConnectionFactory _connectionFactory;

public void sendMessage(String message)
{
Connection connection = null;
Session session = null;
MessageProducer messageProducer = null;
try
{
connection =
_connectionFactory.createConnection();
connection.start();
session =
connection.createSession();
messageProducer =
session.createProducer(null);
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
TextMessage textMessage = session.createTextMessage(message);
messageProducer.send(_localNotificationQueue,
textMessage);
}
catch (Exception e)
{
// TODO Handle exception
}
finally
{
if (connection != null)
{
try
{
connection.close();
}
catch (JMSException e) {}
}
}
}
}

关于java - TomEE 嵌入式 ActiveMQ 使用 JMSContext : No ManagedConnections available within configured blocking timeout ( 5000 [ms] ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55326854/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com