你好,
作为迁移到 jdk11 的一部分,我们被要求升级支持 jdk11 的 guice 版本。
所以在 pom.xml 中我尝试从 4.0 => 4.2.2 升级 guice 版本并保留其他依赖版本,但是当我启动我们的 REST 应用程序时,它无法获得成功的 C3p0 连接。 但是,如果我恢复到 4.0 版本,它工作正常。
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
**<version>4.2.2</version>**
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-jndi</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- END: C3P0 database connection and google guice for inject -->
Java 代码:
导入 javax.sql.DataSource;
导入 org.slf4j.Logger;
导入 org.slf4j.LoggerFactory;
导入 com.google.inject.AbstractModule;
导入 com.google.inject.Provider;
导入 com.google.inject.jndi.JndiIntegration;
公共类 DemoDataSource 扩展 AbstractModule {
私有静态最终字符串 JNDI_ENV = " java:comp/env/jdbc/c3p0DataSource ";
<strong i="21">@Override</strong>
protected void configure() {
绑定(javax.naming.Context.class).to(javax.naming.InitialContext.class).asEagerSingleton();
提供者
bind(DataSource.class).toProvider(dataSourceProvider).asEagerSingleton();
绑定(DBConnectionPool.class).to(C3P0ConnectionProvider.class).asEagerSingleton();
}
}
}
任何帮助深表感谢。
目前没有支持 JDK 11 (JPMS) 的 guice 版本 - 我提出了一些拉取请求,但看起来该项目仅在维护模式下运行。
但我还是继续做了——版本是 4.2.3-SNAPSHOT 并且始终保持最新,所有这些都在大型生产企业环境中。
除了 JCache API 中的一个忽略合成方法(破坏或重复缓存)之外,与原始没有任何变化
在转发之前 - 不要使用任何插件日志库 - 删除 sl4j,学习新的 jdk9 日志系统,它可以满足所有需求
Rest 服务 - 使用 Rest v4,这是 JPMS 兼容的。 然后使用 JPMS 杰克逊 (https://mvnrepository.com/artifact/com.jwebmp.jpms.jackson)
https://mvnrepository.com/artifact/com.jwebmp.jpms.guice
这些都是独立的,是 guiced-ee 框架的一部分,它还包含一个对 JLink 友好的 C3P0 模块()
javax.inject (jdk1.5 编译的 jars 不会在 JDK9 上运行^)
<dependency>
<groupId>com.jwebmp.thirdparty</groupId>
<artifactId>javax.inject</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
JCache - 当前的 ri 和 api 不允许合成方法,并且没有严格命名
<dependency>
<groupId>com.jwebmp.thirdparty.jcache</groupId>
<artifactId>cache-api</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.thirdparty.jcache</groupId>
<artifactId>cache-annotations-ri-common</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.thirdparty.jcache</groupId>
<artifactId>cache-annotations-ri-guice</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
2) 激活 - jakarta.activation 包与 javax.activation 发生冲突,因此使 jpms 兼容通过允许这两个包。 jakarta.activation 用于 jaxb 2.3^
<dependency>
<groupId>com.jwebmp.thirdparty</groupId>
<artifactId>javax.activation</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.thirdparty</groupId>
<artifactId>jakarta.activation</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
javax.transaction - 事务 API 必须严格命名才能与 guice-persist 一起使用
<dependency>
<groupId>com.jwebmp.thirdparty</groupId>
<artifactId>javax.transaction</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
BTM - 事务管理器
<dependency>
<groupId>com.jwebmp.guicedee.persistence</groupId>
<artifactId>btm</artifactId>
<version>${project.version}</version>
<type>jar</type>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
</exclusions>
</dependency>
Guice JPMS 库
<!-- Guice until there is a named module-info for jlink-->
<dependency>
<groupId>com.jwebmp.jpms.guice</groupId>
<artifactId>guice-parent</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject</groupId>
<artifactId>guice-parent</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject</groupId>
<artifactId>guice-bom</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject</groupId>
<artifactId>guice</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<!-- Guice Extensions -->
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>extensions-parent</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-assistedinject</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-dagger-adapter</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-grapher</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-jmx</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-jndi</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-persist</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-spring</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-testlib</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.jwebmp.inject.extensions</groupId>
<artifactId>guice-throwingproviders</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
带有温和教程的 Guiced-EE 在这里 (https://jwebmp.com/)
非常感谢 GedMarc 的回复。
所以 Google Guice 仍然不支持 Jdk11,这有点奇怪,因为 4.2.2 的文档表明它支持 jdk11!
https://github.com/google/guice/wiki/Guice422 。 (向下滚动,它说它支持 jdk11)
请留下与 REST 相关的内容,我不应该提及它,但由于触发了 C3P0 数据库连接设置代码,因此在我们将 WAR 部署到 tomcat 后初始化期间出现了问题。
任何想法为什么上述代码在使用 guice-inject 4.0 时可以正常工作,而在使用 guice 4.2.2 时不能正常工作(均使用 jdk11 编译器编译)
在更高版本中添加了自动模块名称作为占位符,
没有它,库会被扔进未命名的模块部分,有了它,它会被识别但不兼容 JPMS
请注意,MANIFEST.MF 中的自动模块名称是 PLACEHOLDER,而不是标识符,它在 JPMS 土地上除了保留名称之外没有任何作用,所以不,它根本不是 JDK 11 (JPMS) 友好的.
您将无法构建 JLink 工件,您将无法在严格的模块信息模块中运行(如在非开放模块中),并且您将无法利用使用模块带来的巨大性能提升。
您不能在 JDK 11 JPMS 中使用 WAR/EAR/EJB,托管部署的概念本身就是与模块化开发和 DDD 的直接矛盾。 它们不再存在,因此为什么 EE 被 Oracle 取消并抛弃了——因为它没有交给 eclipse,它被扔掉了,eclipse 决定拿起它来支持选择保留 JDK 8 的系统.
对于 JPMS,请查看为其设计的系统 - 例如 undertow(不是 wildfly ....)或 jetty(不是 tomcat)。
这是大多数声称支持 jpms 的库的常见误解,他们只是说“但我更改了我的清单文件”
感谢您确认 guice 4.2.2 确实不支持 jdk11
最后一个问题。
抱歉,如果我听起来很愚蠢或烦人,但我想重复需要澄清的问题的后面部分。
所以问题又来了
有效的组合:guice-inject 4.0 +(使用jdk11编译器编译)+(部署在使用jdk11的tomcat 11中)
但以下组合不起作用。
guice-inject 4.2.2 +(使用jdk11编译器编译)+(部署在使用jdk11的tomcat 11中)
好奇你是否有任何想法。
manifest.mf 中添加的自动模块名称
非常感谢 GedMarc 的快速回复和耐心。
非常感激
PJ
我有类似的设置,但我不是在寻找任何 JPMS 支持。 应用程序是旧的并且是为 Java 8 编写的。迁移到 Java11 的意图只是从 Oracle8 到 OpenJDK11 而不重构代码。
guice-inject 4.0 +(使用 jdk11 编译器编译)+(部署在使用 jdk11 的 tomcat 9 中)会成为问题吗?
Guice 注入 4 使用 jdk 11 编译器编译(你将如何将 jar/jar cglib 和 asm 放入已编译的项目中?也许是 Shade?)
@sameerinbox因为您不是“使用” jdk 11,而是更多“滥用”向后兼容性,所以您会受到警告和较大的性能冲击,仅此而已。
请记住,您永远不要在生产中运行 JDK,否则,不用担心。
如果其中一位项目维护人员对此问题发表评论,那将非常有帮助。 它是持久性,以及 #1277 #1274 以及自发布以来已经快一年了,在过去 3 个月内用代码关闭了零错误(快速浏览一下,我可能错过了一些东西)使得这个项目看起来非常死气沉沉。 我希望在一个新项目中再次使用它,但如果它快要消失了,我不想在它的基础上继续构建......
@nsoft我将发布 guice 库 4.2.2 的重新打包,具有完全严格的封装支持,包括 jlink 和 jpackage。
它已经永远了,我也很厌倦等待:)
4.2.3-SNAPSHOT 中的变化看起来也并不令人难以置信......移动......
@nsoft 就个人而言,我将继续致力于改进 AOP,以帮助 JDK11+。
(我有各种基于 Guice 构建的应用程序,所以我还想确保它与最新的 JDK 一起工作得尽可能好。)
我切换到没有AOP的版本com.google.inject:guice:4.2.2:no_aop
这对我有用,因为我的项目现在不需要这些功能(https://github.com/google/guice/wiki/AOP)
我已经发布了可以使用的 JDK 11 Guice 4.2.2 Modular artifacts,
最有用的评论
我已经发布了可以使用的 JDK 11 Guice 4.2.2 Modular artifacts,
https://www.guicedee.com