问题标签 [jca]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2009 浏览

java - JCA 资源适配器如何读取 ra.xml 中定义的自定义属性

我正在尝试编写一个 JCA 资源适配器。在 ra.xml 中,我添加了自定义属性的条目,例如:

当我在 WebSphere 中加载资源适配器时,这些条目显示在 RA 的自定义属性下。可以编辑和保存这些值,WebSphere 会在重新启动后重新加载它们。

然而,资源适配器本身如何读取访问这些值?我猜它涉及注入和注释或其他东西,但我似乎找不到任何简单解释它应该如何工作的东西。

谢谢,

0 投票
1 回答
3492 浏览

java - JCA ManagedConnection 生命周期

目前,我开发了一个 JCA 出站适配器(支持 LocalTransaction),但在连接管理方面遇到了一些麻烦。我的适配器运行良好,除了服务器 (WebLogic 12c) 没有将 ManagedConnections 放回池中。根据 JavaDoc,服务器必须调用ManagedConnection.cleanup()以重新初始化连接并将其放回池中,但事实并非如此。

当我使用来自 EJB 的适配器时,服务器会创建一个新的 ManagedConnection,开始一个新事务,提交它,但不调用该ManagedConnection.cleanup()方法,也不将其放回池中。

下面你可以看到我的测试 bean:

10次​​调用后,我得到以下信息:

得到初始上下文 javax.ejb.EJBException: EJB Exception: ; 嵌套异常是:java.lang.RuntimeException:javax.resource.spi.ApplicationServerInternalException:无法获得池 =“eis/myJCA”的连接,weblogic.common.resourcepool.ResourceLimitException:配置的最大限制为 (0) 的数量允许线程等待池 eis/myJCA 达到的资源

REQUIRES_NEW正如您所注意到的,它为每个调用(属性)使用一个新事务。服务器首先创建一个新的 ManagedConnection 实例 10 次,然后连接池达到其最大容量。

从跟踪日志中可以清楚地看出,没有ManagedConnection.cleanup()发生单个调用,并且池中的每个连接都处于忙碌状态。我已经阅读了 JCA 规范,发现适配器可以使用回调函数将生命周期事件发送到侦听器,但是任何使用这些事件侦听器回调的尝试都以新的异常结束:

javax.ejb.EJBException:BEA1-001471C1E76DE5A4E067;嵌套异常是:weblogic.transaction.nonxa.NonXAException: java.lang.IllegalStateException: [Connector:199175] 这个 ManagedConnection 由一个容器管理它的事务行为,并且已经被一个容器登记到一个 JTA 事务中;应用程序/适配器不得调用本地事务开始/提交/回滚 API。拒绝来自适配器的事件 LOCAL_TRANSACTION_COMMITTED。javax.ejb.EJBException:EJB 异常:;嵌套异常是: java.lang.IllegalStateException: [Connector:199175] 此 ManagedConnection 由容器管理其事务行为,并已被容器登记到 JTA 事务中;应用程序/适配器不得调用本地事务开始/提交/回滚 API。拒绝来自适配器的事件 LOCAL_TRANSACTION_ROLLEDBACK。

我想 WebLogic 不会等待任何事件(也许我发送了错误的事件?)。

那么,我做错了什么?如何让服务器将连接放回池中?

UPD:我发现连接事件对服务器非常重要。服务器根据事件信息管理连接,这些事件信息被发送到监听器,它注册到 ManagedConnection。现在我在我的适配器中支持事件,但 WebLogic 仍然不想将连接放回池中。目前我在日志中收到以下事件:

  1. LOCAL_TRANSACTION_STARTED
  2. CONNECTION_CLOSED
  3. LOCAL_TRANSACTION_COMMITTED

对我来说看起来不错(CONNECTION_CLOSED 事件意味着应用程序关闭了连接,我添加了 close 方法,发送此事件)。提交成功,没有出现异常。似乎我已经按正确的顺序发送了事件(早期的 WebLogic 抛出异常,但现在停止这样做),但服务器仍然没有将连接放回池中。

我很困惑。

0 投票
1 回答
235 浏览

java - 具有 KeyStore 和公共证书别名的 Java 安全性

我在密钥库别名中面临 java 安全问题。

我的问题是我们从浏览器获取密钥库别名,但是当我们获取列表时,有时两个 .pfx 证书具有相同的别名,因为它们都用于同一家公司,但一个用于登录,另一个用于加密。这意味着当我们尝试唯一区分时它会失败,因为该keystore.aliases方法为两个别名返回相同的结果,因此它无法判断返回哪个。

0 投票
1 回答
522 浏览

java - IBM WESB/WAS JCA 安全配置

我正在使用 IBM 工具。我有一个 Websphere ESB (WESB) 和一个 CICS 事务网关 (CTG)。基本设置如下:

SOAP 服务需要来自 CICS 的数据。SOAP 服务连接到服务总线 (WESB) 以处理数据和协议转换,然后 WESB 调用 CTG,CTG 反过来又调用 CICS,反之亦然(同步)处理回复。WESB 使用资源适配器和 JCA 连接器(或在 WESB 中称为 CICS 适配器)调用 CTG。现在,我已经准备好所有部件并开始工作了。

我的问题是关于安全性的,即使我正在使用 WESB,答案也可能与 Websphere Application Server (WAS) 中的相同。Resource Adaper 使用 JAAS - J2C 身份验证数据进行保护。我已经使用 J2C 身份验证数据条目配置了安全性,所以基本上我在正在运行的应用程序中有一个引用,并且在运行时应用程序会从服务器查找安全属性。所以基本上我总是使用相同的安全参考访问 CICS 适配器。

我的问题是我将来需要以更动态的方式访问资源。安全性不能再焊接到应用程序中,而是作为参数给出。

一些 WESB 或 WAS 专家可以帮助我吗,这如何在 WESB/WAS 中完成?

0 投票
1 回答
390 浏览

ejb - 我应该实现自己的 JCA 适配器来访问文件系统吗?还是使用现有的?

我正在 Weblogic 上进行 Java EE 开发,我的 EJB 之一需要处理来自文件的数据。由于不建议直接从 EJB 访问文件系统,我认为需要一个 JCA 适配器。

有一些创建JCA适配器的例子,但我想知道我是否需要自己实现它。如果有一些实现良好的 JCA 适配器,我想我可以通过做一些配置来利用它?

Oracle® 融合中间件似乎提供了一些 JCA 适配器,称为“技术适配器”。我可以通过一些配置来使用它们吗?还是我必须按照 JCA 规范开发自己的适配器?

0 投票
2 回答
100 浏览

ejb - 我在哪里可以找到 Oracle 的“技术适配器”?

我想使用 Oracle® Fusion Middleware 的文件适配器以推荐的方式访问文件系统。我可以从http://docs.oracle.com/cd/E15523_01/integration.1111/e10231/intro.htm找到适配器的文档。该文档仅提及适配器是 Oracle® 融合中间件的一部分,但从未提及包含适配器的具体产品。我下载并安装了 Weblogic Server 和 JDeveloper,但它们似乎不包括适配器。

谁能给我一些建议?先谢谢了。

0 投票
1 回答
5970 浏览

ejb - Weblogic 找不到用于绑定的“正确”JNDI 名称的资源适配器

我正在尝试将我的消息驱动 bean 与 Weblogic 10.3.5 上的 Oracle JCA 文件适配器(包含在 SOA 套件中)绑定。这样当有任何 .txt 文件移动到特定目录时,我的 MDB 可以得到通知。

启动支持 SOA 功能的 Weblogic 域后,将自动部署文件适配器。在 Weblogic 控制台上我可以看到文件适配器部署为“资源适配器”,健康为“OK”,状态为“Active”,如下图所示:

在 Weblogic 中部署文件适配器

我还运行了文件适配器的测试,它们都通过了:

在此处输入图像描述

所以我认为文件适配器已正确部署并且应该可以正常工作。

然后我的消息驱动 bean 代码如下所示:

这是我的ejb-jar.xml文件的内容:

还有我的weblogic-ejb-jar.xml文件:

在部署 EAR 项目时,我收到以下消息:

我不知道为什么 Weblogic 会抱怨这个,因为适配器的官方用户指南中提到了“eis/FileAdapter”JNDI 名称。我也可以在 Weblogic 的 JNDI 树中看到它:

在此处输入图像描述

更重要的是,当我在测试 Web 服务中运行以下代码时:

它打印出“ eis/FileAdapter => oracle.tip.adapter.file.FileConnectionFactory@ff51dc ”,这意味着 JNDI 名称是正确的!

所以我的问题是,为什么 Weblogic 找不到用于绑定的“正确”JNDI 名称的资源适配器? 有人可以给我一些关于如何解决它的想法吗?

0 投票
0 回答
133 浏览

jakarta-ee - 在 Java EE 应用程序中集成不同的持久性技术

我正在考虑如何将不同的持久性技术(如 SQL-DB、Non-SQL-DB、纯文件存储)灵活地集成到 Java EE 应用程序中。我在这里写了一些指示,如果您对它们发表评论,我会很高兴。

在集成层中,我们将使用 DAO 模式来本地化数据访问的代码。这对于 SQL-DB 的实体类来说非常简单。然而,除了这个 DAO,还有一个用于非 SQL-DB 的 DAO 和一个用于普通文件的 DAO。DAO 将是无状态会话 bean,以确保事务能力、位置透明性和并发性。尽管如此,似乎需要在非 SQL-DB 和普通文件存储的数据层中实现并发性和位置透明性。

我想知道 DAO 设计模式是否最适合实现整个机制。我还遇到了我不熟悉的 JCA 模式,并且有很多关于它的文档。如果您评论这些想法,我会很高兴。你已经有类似的任务了吗?感谢您到目前为止的阅读。

0 投票
0 回答
88 浏览

jakarta-ee - LocalTransaction.commit() 中的异常处理

我们尝试编写一个应该支持本地事务的 JCA 适配器。我们想使用最后一个代理优化来将我们的连接器与 XADataSource 放在同一个事务中。

根据规范,在提交期间LocalTransactions.commit应该 throwLocalTransactionException指示错误,并且应该导致回滚 XA 事务。但是,这不会发生。我们只是在 server.log 中看到一些堆栈跟踪,并且事务保持在准备状态(并挂在那里)。我们调试了调用,glassfish 确实执行了最后一个代理优化,但是ConnectorXAResource.commit(调用它)将其LocalTransactionException转换为不会导致回滚的异常。

有什么建议可以解决这个问题吗?

0 投票
2 回答
669 浏览

jakarta-ee - 布尔成员上的 @ConfigProperty

我正在尝试编译和部署neo4j-connector

neo4j-connector-impl (Neo4jManagedConnectionNeo4jResourceAdapter) 中的两个类具有以下注释:

这编译得很好,但是当我尝试部署到 glassfish 3.1.1 时,我得到了一系列错误:

[boolean] 不是 org.glassfish.apf.AnnotationInfo@118944a 处允许的属性值类型.deployment.archivist.Archivist.readAnnotations(Archivist.java:490) 在 com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:432) 在 com.sun.enterprise.deployment.archivist.Archivist.readRestDeploymentDescriptors (Archivist.java:408) 在 com.sun.enterprise.deployment.archivist.Archivist.readDeploymentDescriptors(Archivist.java:383) 在 com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:246) 在com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:255) 在 com.sun.enterprise.deployment。archivist.Archivist.open(Archivist.java:216) at com.sun.enterprise.deployment.archivist.ApplicationFactory.openArchive(ApplicationFactory.java:165) at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider. java:181) 在 org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:93) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:828) 在 com.sun .enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:770) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:368) 在 com.sun.enterprise.v3.server.ApplicationLifecycle .deploy(ApplicationLifecycle.java:240) 在 org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:382) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370) 在 com.sun。 Enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1064) at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96) at com.sun.enterprise.v3.admin.CommandRunnerImpl $ExecutionContext.execute(CommandRunnerImpl.java:1244) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1232) at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter .java:459) 在 com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:209) 在 com.sun.grizzly.tcp.http11.GrizzlyAdapter。com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 上的服务(GrizzlyAdapter.java:168) com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java: 238) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) 在 com.sun.grizzly.http.ProcessorTask .process(ProcessorTask.java:1019) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在 com.sun。 grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask .java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun.grizzly。 util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:680) 原因:[boolean] 不是 org.glassfish.apf.AnnotationInfo@ 中允许的属性值类型118944a 在 org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java:367) 在 org.glassfish.apf.impl.AnnotationProcessorImpl。org.glassfish.apf.impl.AnnotationProcessorImpl.processAnnotations(AnnotationProcessorImpl.java:271) 上 org.glassfish.apf.impl.AnnotationProcessorImpl.processAnnotations(AnnotationProcessorImpl.java:289) 上的过程(AnnotationProcessorImpl.java:375) .apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java:199) at org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java:134) at com.sun.enterprise.deployment.archivist.Archivist.processAnnotations(Archivist .java:606) at com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:445) ... 39 更多原因:java.lang.IllegalArgumentException:[boolean] 不是允许的属性值类型在 com.sun.enterprise.deployment.EnvironmentProperty。checkType(EnvironmentProperty.java:178) 在 com.sun.enterprise.deployment.EnvironmentProperty.setType(EnvironmentProperty.java:239) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.getConfigProperty(ConfigPropertyHandler.java: 221)在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.handleConfigPropertyAnnotation(ConfigPropertyHandler.java:142) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.processAnnotation(ConfigPropertyHandler.java: 91) 在 org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java:344) ... 46 更多239) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.getConfigProperty(ConfigPropertyHandler.java:221) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.handleConfigPropertyAnnotation(ConfigPropertyHandler.java: 142) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.processAnnotation(ConfigPropertyHandler.java:91) 在 org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java:344) ... 46更多的239) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.getConfigProperty(ConfigPropertyHandler.java:221) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.handleConfigPropertyAnnotation(ConfigPropertyHandler.java: 142) 在 com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.processAnnotation(ConfigPropertyHandler.java:91) 在 org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java:344) ... 46更多的handleConfigPropertyAnnotation(ConfigPropertyHandler.java:142) at com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.processAnnotation(ConfigPropertyHandler.java:91) at org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java: 344) ... 46 更多handleConfigPropertyAnnotation(ConfigPropertyHandler.java:142) at com.sun.enterprise.connectors.deployment.annotation.handlers.ConfigPropertyHandler.processAnnotation(ConfigPropertyHandler.java:91) at org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java: 344) ... 46 更多

我可以想出一些方法来解决它(例如,添加一个setXa(String)方法),但这感觉不对:这段代码自一年多前提交以来一直没有改变,那么为什么它不适合我呢?这里可能出了什么问题?