- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我开发了一个 JCA 出站适配器(具有 LocalTransaction 支持),但在连接管理方面遇到了一些麻烦。我的适配器运行良好,除了服务器 (WebLogic 12c) 不会将 ManagedConnections 放回池中。根据 JavaDoc,服务器必须调用 ManagedConnection.cleanup()
来重新初始化连接并将其放回池中,但事实并非如此。
当我使用来自 EJB 的适配器时,服务器创建一个新的 ManagedConnection,开始一个新的事务,提交它,但不调用 ManagedConnection.cleanup()
方法并且不把它放回去到游泳池。
下面你可以看到我的测试bean:
@Stateless(mappedName = "TestingBean")
@Local(value = TestingBeanLocal.class)
@Remote(value = TestingBeanRemote.class)
@TransactionManagement(value = TransactionManagementType.CONTAINER)
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public class TestingBean implements TestingBeanCommon{
@Resource(mappedName = "eis/myJCA")
private MyDataSource dataSource;
@Override
public void performTestAction(String param1, String param2) {
MyConnection connection = dataSource.getMyConnection();
connection.performAction(ActionFactory.getSomeAction(param1, param2));
}
}
10 次调用后,我得到以下信息:
Got Initial context javax.ejb.EJBException: EJB Exception: ; nested exception is: java.lang.RuntimeException: javax.resource.spi.ApplicationServerInternalException: Unable to get a connection for pool = "eis/myJCA", weblogic.common.resourcepool.ResourceLimitException: Configured maximum limit of (0) on number of threads allowed to wait for a resource reached for pool eis/myJCA
如您所见,它为每次调用使用一个新事务(REQUIRES_NEW
属性)。服务器首先创建一个新的 ManagedConnection 实例 10 次,然后连接池达到其最大容量。
从跟踪日志可以清楚地看出,没有发生任何一次 ManagedConnection.cleanup()
调用,并且池中的每个连接都处于繁忙状态。我阅读了 JCA 规范并发现适配器可以使用回调函数将生命周期事件发送给监听器,但是任何使用这些事件监听器回调的尝试都以新的异常结束:
javax.ejb.EJBException: BEA1-001471C1E76DE5A4E067; nested exception is: weblogic.transaction.nonxa.NonXAException: java.lang.IllegalStateException: [Connector:199175]This ManagedConnection is managed by a container for its transactional behavior and has been enlisted to a JTA transaction by a container; application/adapter must not call the local transaction begin/commit/rollback API. Reject event LOCAL_TRANSACTION_COMMITTED from adapter. javax.ejb.EJBException: EJB Exception: ; nested exception is: java.lang.IllegalStateException: [Connector:199175] This ManagedConnection is managed by a container for its transactional behavior and has been enlisted to a JTA transaction by a container; application/adapter must not call the local transaction begin/commit/rollback API. Reject event LOCAL_TRANSACTION_ROLLEDBACK from adapter.
我想 WebLogic 不会等待任何事件(也许我发送了错误的事件?)。
那么,我做错了什么?如何让服务器将连接放回池中?
UPD:我发现连接事件对服务器非常重要。服务器根据发送给监听器的事件信息管理连接,并将其注册到 ManagedConnection。现在我在我的适配器中支持事件,但 WebLogic 仍然不想将连接放回池中。目前我在日志中收到以下事件:
它对我来说看起来很好(CONNECTION_CLOSED 事件意味着应用程序关闭了连接,我添加了发送此事件的 close 方法)。提交成功,没有出现异常。似乎我已经以正确的顺序发送事件(早期的 WebLogic 抛出异常,但现在停止这样做),但服务器仍然没有将连接放回池中。
我很困惑。
最佳答案
看来我已经解决了这个问题。当我查看 WebLogic 控制台时,我发现 ManagedConnection 实例有 -1 个 Activity 处理程序。所以我决定对 MyConnection.close()
方法调用进行注释,我将其添加到我的测试 bean 中以发送 CONNECTION_CLOSED
事件。进行此更改后,连接池开始正常工作。我试图修改我的测试 bean 并将其事务属性设置为 NOT_SUPPORTED
。之后池中的 ManagedConnections
有 1 个 Activity 处理程序。所以我放回 MyConnection.close()
行,连接池再次开始工作。
我假设,在事务传播的情况下发送 CONNECTION_CLOSED
事件是错误的。我还假设在单个事务的情况下应该使用发送 CONNECTION_CLOSED
事件的方法 ManagedConnection.close()
。但对我来说似乎很奇怪,WebLogic 不想清理 ManagedConnections
并在它们有负数的 Activity 处理程序时将它们放回拉动。
非常感谢您的帮助。
关于java - JCA ManagedConnection 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783140/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!