问题标签 [ibm-jvm]
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.
java - Spring batch 3,IBM JVM 上的配置加载错误(BackToBackPatternClassifier)
使用 IBM 的 JRE 1.7 启动春季批处理作业时出现错误。
Spring Batch 版本是 3.0.7,Spring 版本是 4.3.5
Oracle JDK 1.7 不会发生此错误。它出现在我加载我的 Spring Batch XML 配置时,jobs-configuration.xml 甚至在工作开始之前。这个问题出现在我升级 Spring Batch 和 Spring 之后: org.springframework.batch.classify.BackToBackPatternClassifier from Spring Batch 变成 org.springframework.classify.BackToBackPatternClassifier (in Spring Retry)
工作配置.xml:
和 ClassifierCcsb01Writer:
java - MQ 5.7 和 IBM jre8,密码规范“TRIPLE_DES_SHA_US”的等效密码套件
我正在尝试使用 IBM JRE-8 over SSL 连接 MQ7.5。在 MQ 系统中,他们配置了 TRIPLE_DES_SHA_US,我们在我的 java 程序中使用SSL_RSA_WITH_3DES_EDE_CBC_SHA密码套件来连接 MQ。
但它给出了以下给定的错误。
Steps i have followed
Certificated imported to truststore
executed java program with actual channel details of MQ.
Certificate Import to truststore:
Sample Program we are using.
调试日志:
任何人都可以请帮助/建议这个
java - SAXParserFactory 和 DocumentBuilderFactory 的区别
SAXParserFactory 和 DocumentBuilderFactory 有什么区别。什么时候用哪一个?
分别:
javax.xml.parsers.SAXParserFactory
选择 SAX 解析器。默认情况下,使用 XML4J 库中的 org.apache.xerces.jaxp.SAXParserFactoryImpl。
javax.xml.parsers.DocumentBuilderFactory
选择文档构建器。默认情况下,使用 XML4J 库中的 org.apache.xerces.jaxp.DocumentBuilderFactoryImpl。
spring-boot - 无法使用 IBM JRE 1.8 启动 Spring Boot 可执行 jar
我们有一个 Spring Boot 应用程序,它被构建为一个可执行的 jar,并且使用 Oracle 和 OpenJDK JRE(使用 1.8 版本)运行良好。
但是,尝试使用 IBM 1.8 JRE 运行它会导致命令行出现以下错误。
如果我们执行 jar (using ./application.jar
) 或 usingjava -jar application.jar
这导致我们更改打包以不使 jar 可执行,这允许我们使用java -jar application.jar
. 因此,IBM JRE 似乎不喜欢启动脚本。
问题是如果可能的话,我们不希望为不同的部署环境使用两种打包方法。
有没有人知道为什么 IBM JRE 不喜欢 jar 文件前面的脚本,以及是否有任何命令行选项可以禁用任何检查它的功能?
java - Websphere 配置/IBM JVM:纯 java 的工作速度比在 tomcat 中慢得多
大家好。我遇到了下一个问题:处理需要使用 WAS 和 tomcat 在不同环境中部署的项目。使用的 WAS docer img:common/base-ibm-websphere:8.0.0.10 - 8.0 架构:x86_64
使用的Tomcat docker img:common/base-tomcat:7
从一开始就假设 WAS 出了点问题,因为最简单的请求会慢得多(x8 慢):
它在 x8 中的 WAS 上执行比在 Tomcat 上慢。组合测试结果:
在 WAS 端只配置了堆大小(超过 enoph)和数据库连接(与这个问题无关)。
在调整 IBM jVM / WAS 配置时,首先我应该注意什么?(现在我已经在研究 IBM 手册了,你可能会节省我的时间来避免冒烟测试不同的无效 JVM 属性)。
java - OpenJ9 是否支持 sun.misc.Contended 注解?
我创建了一个程序来检查是否@sun.misc.Contended
生效。这个想法是,当@Contended
生效时,注释类中的字段偏移量会更大。
如果我指定了-XX:-RestrictContended
标志,我可以看到 OpenJDK 上偏移量的预期差异。我在 OpenJ9 11 (jdk-11.0.1+13, Eclipse OpenJ9 VM-11.0.1) 上没有看到任何区别。
OpenJDK 输出是
OpenJ9 的输出是
该程序是
java - spring-amqp 与 ibm jvm 的兼容性
我正在使用spring-amqp
IBM JVM,并且在初始化兔子模板以使用它使用的 ssl 时sunx509
,但 IBM JVM 与该算法不兼容,所以我得到:
我不确定如何覆盖使用,sunx509
因为使用的算法是在 spring-amqp 源代码中定义的
我如下所示初始化rabbitmq配置有什么建议吗?
谢谢
java - 为什么 uri 变量不为 null 时 HttpUriRequest.getURI() 返回 null?
概括
我遇到了一个独特的场景,当实例中的变量不是时,对 httpcomponentsHttpUriRequest
方法实例的调用getURI()
正在返回。在这种情况下,不可能返回 a ,但这就是正在发生的事情。null
null
HttpUriRequest.getURI()
null
代码演练
这是代码演练。它演示了该HttpUriRequest.getURI()
方法如何不可能返回 a null
,但它正在返回null
。
使用的相关库是
- com.sun.jersey.contribs:jersey-apache-client4:jar:1.19.4
- org.apache.httpcomponents:httpclient:jar:4.5.12
我们的内部应用程序调用第三方代码,这些代码用于jersey-apache-client4
通过apache httpcomponents httpclient
.
就本问题而言,请求从ApacheHttpClient4Handler.handle(ClientRequest)
以下来源的调用开始。
- 编号的内嵌注释将指导演练。
ApacheHttpClient4Handler
类v1.19.4的相关来源
接口HttpUriRequest
v4.5.12相关源码
抽象类HttpRequestBase
v4.5.12 的相关源代码(HttpGet
,HttpPost
等扩展了这个)
HttpGet
v4.5.12类的相关源代码(HttpPost
等实现类似)
鉴于源演练和证明 Object 实例状态的可行性的支持性评论,调用如何request.getURI()
返回null
?
环境
- 此代码在 Linux 服务器 (JVM 8.0-5.40) 上的 IBM Liberty 下运行。
- 此代码还在 Windows 服务器 (JVM 1.7) 上的 Wildfly 下运行。
- 两种系统类型的代码相同。
- 该代码在 Windows 服务器上从未出现上述问题。
- 该代码在安装了 Liberty 管理控制台的 Liberty 服务器上不存在上述问题。
观察结果
- 前2-3次直通
ApacheHttpClient4Hander.handle(ClientRequest)
成功不request.getURI()
返回null
;它仅在第 4 次和后续请求时才返回null
。
调查
以下是我迄今为止采取的一些调查步骤:
1 - 我在 SO 上创建了这个案例以获取群体思维洞察力。
2 - 我向 IBM 开了一个案例。
3 - 自定义ApacheHttpClient4Handler
- 我通过 SL4J 向所有方法添加调试日志记录。
结果
- 日志输出证明对的调用仅在进入
HttpUriRequest.getURI()
后才开始返回。null
ApacheHttpClient4Handler.getHost(final HttpUriRequest request)
getHost(HttpUriRequest)
在显示getURI()
返回非空之前的任何调用。- 在添加调试日志之后,而不是在 2-3 和后续请求(每个 OBSERVATIONS)之后,
HttpUriRequest.getURI()
现在在 1-2(和后续)请求之后返回 null。我怀疑这是由于 debug logging 主动调用HttpUriRequest.getURI()
,但我无法确认这一点,也不知道为什么场景现在更短了。
ApacheHttpClient4Handler
4 -进一步定制
HttpUriRequest
更改对的所有引用HttpRequestBase
结果
- 这样做并没有解决问题;
getURI()
仍然返回null
。
5 - 自定义HttpRequestBase
- 将调试日志添加到
getURI()
/setURI(...)
方法
结果
- 应用程序开始按设计工作,除了大量的调试日志!!!
- 请参阅下面的主要更新部分。
6 - 自定义HttpGet
,HttpPut
等。
- 向构造函数添加调试日志记录。
结果
- 请参阅下面的主要更新部分。
7 - 将 IBM JVM 从 8.0-5.40 更新到 8.0-6.11
- IBM 发行说明中与 NPE 相关的错误修复列表
- IJ17563 | 调用具有大偏移量的 JAVA.LANG.STRING.INDEXOF API 时的 NPE
- IJ19669 | 使用 JAVA 8 读取空的 PKCS12 密钥库时发生 NPE
- IJ20528 | 原始包装类型对象的方法调用的 NPE 或 SEGFAULT
- IJ23079 | 由不正确的 JIT 编译器优化导致的意外 NPE
- TODO:结果将在更新中发布
结论
这里发生了什么?
Liberty 使用的 JVM 的 IBM 实现是否滥用了此代码,还是有其他原因?
根据代码和演练,没有办法HttpUriRequest.getURI()
返回null
.
重大更新
根据 INVESTIGATION 中的第 5 步,我httpclient
使用来自全球发行版的源代码定制了调试日志记录。将 JAR 添加到我的项目后,它开始工作。我回滚了我的更改,从未修改的源代码重建了 JAR,将其添加到我的项目中,然后应用程序开始工作。
我使用全球分布httpclient-4.5.12.jar
的 My application failed 再次重新部署。
同样,我没有对代码进行任何更改;我httpclient-4.5.12-sources.jar
使用 .Eclipse 并在 Eclipse 中编译它并使用我新命名的 JAR 重新部署,httpclient-4.5.12.joshdm.jar
. 它有效。
我使用 JAD 反编译了两个 JAR 来检查代码。差异很小,仅在标签中,这意味着编译器不同。我比较了两个 JAR 的 MANIFEST.MF;Build-Jdk 条目不同。我使用 Jdk 1.8.0_191 编译。全局的使用 Jdk 1.8.0_1 8 1 编译。
我已经向 IBM 报告了这个奇怪的差异,提供了编译后的 JAR 和源 JAR,我正在等待回复为什么我的 JVM 可以与他们的 JVM 一起工作,以及为什么全局的 JAR 不能。我现在 99% 确定这是 IBM JVM 或服务器配置问题,与部署的应用程序无关。
更新#2
添加以下配置并回滚到全局 JAR 工作(也适用于重新编译的 JAR)。
-Xshareclasses:none
- 禁用共享类缓存和 AOT 编译。
-Xnojit
- 禁用 JIT 编译
在 Liberty 上禁用共享类缓存、禁用 AOT 编译和禁用 JIT 编译似乎已经解决了这个问题。一旦我从 IBM 收到为什么需要上述设置,我会写一个实际的答案。
db2 - 从 java 程序中读取 MVS DataSet
我正在尝试访问一个名为 XYZ 的数据集;我的代码是:
我得到这个例外:
有什么建议吗?谢谢。
websphere - IBM JVM WebSphere Application Server -XX:+UseG1GC 的作用是什么?-Xgcpolicy:gencon 是否取代?
根据 IBM 链接(https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/openj9/xgcpolicy/index.html),可以通过 -Xgcpolicy 设置来指定 gc 策略。默认 gcpolicy 是 gencon (-Xgcpolicy:gencon)。WAS 是 9.0,JVM 是 IBM J9(Java 版本 1.8)。接下来,从 IBM 的以下链接看来,使用标志 -XX 也可以设置 gc 算法,就像在其他 JVM 中一样。例如:-XX:+UseG1GC 可以工作。 https://www.ibm.com/support/knowledgecenter/en/SS3KLZ/com.ibm.java.diagnostics.visualizer.doc/verbosegc.html
我的意图是应用像 UseG1GC 这样的 gc 行为。堆大小为 -Xms16G 到 -Xmx20G。所以,我希望首先使用 Garbase 和并发,即 UseG1GC。-Xgcpolicy:gencon 也有点类似,但它会导致“停止世界”。当 gc 运行时,应用程序会暂停。有点困惑的是,即使我设置了 -XX:+UseG1GC,它会遵循并有效 UseG1GC 行为还是遵循 -Xgcpolicy:gencon 的机制?还是 gcpolicy 和 gc 算法是两个不同的东西?