问题标签 [hk2]

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 回答
901 浏览

jersey-2.0 - 如何将工厂绑定到当前请求范围?

如何将新工厂动态绑定到当前请求范围?我希望在当前 HTTP 请求结束时自动删除绑定。

0 投票
1 回答
1370 浏览

java - 如何在 HK2 中注入未绑定的泛型类型?

我正在使用 Jersey 2.9 编写一个网络服务,并且我也在使用 HK2 进行 DI。我有一个类可以处理与数据库的连接,可以像这样实例化:

如您所见,字段dbConnection具有无界的泛型类型。通过绑定实现目前如下所示:

但是,在运行时会引发以下异常;

如果我将变量声明DBHandler变成这样的原始类型:

它按预期工作。

我是否遗漏了什么,或者在 HK2 中无法指定这样的绑定?

最好的问候,
安德烈亚斯

0 投票
0 回答
99 浏览

spring - 如何在 HK2 中调用 Spring BeanPostProcessor

我有一个使用球衣弹簧桥的 Jersey 2 应用程序。但是,似乎BeanPostProcessors从未在 Jersey 创建的资源上调用在我的应用程序上下文中声明的资源(实际上将所有这些委托给 HK2)。我认为 Jersey-Spring 桥只关心带有注释的资源和带有注释的@Component字段@Autowired

我想知道如何在新创建的 Jersey 资源上自动调用 BeanPostProcessor。

我发现有一个InstanceLifecycleListener但我找不到任何可以使用的文档。

0 投票
1 回答
724 浏览

java - Jersey @BeanParam 和 HK2 ServiceLocatorImpl 之间的内存泄漏

我们已经在生产环境中运行 jersey 一段时间了,最​​近注意到我们开始泄漏内存。挖掘时我们发现从 HK2 2.3.0 开始,在 HK2 类中添加了一个 injecteeToResolverCache (org.jvnet.hk2.internal.ServiceLocatorImpl.class)

这是来自 ServiceLocatorImpl.class 的行

在我们的设置中,我们使用 jersey 2.9 (hk 2.3.0),并且我们有使用 @BeanParam 的资源方法,看起来像这样:

似乎正在发生的事情是 HK2 2.3.0 正在将标记为 BeanParameter 的任何内容的每个实例缓存为 injecteeToResolverCache 中的 Injectee。由于每次调用“getStuff”资源时都会创建“分页”和“过滤器”BeanParams 的新实例,因此每次调用时都会向缓存中添加 2 个新条目。在事情开始分崩离析之前,我们在这个缓存中拥有超过 1000 万个条目。

有没有其他人遇到过这种情况,或者我们是否错误地使用了框架?

现在我们已经降级到 jersey 2.8 并且这似乎正在工作,因为它依赖于没有注入缓存的 Hk2 的 2.2.0。

谢谢!克里斯

0 投票
1 回答
2359 浏览

junit - 注入 Jersey 资源,HK2 在 Java SE 中运行时进行注入而不是 Weld -> 不满足的依赖关系

我有一个简单的测试应用程序,我将它部署到 GlassFish(只有一个资源注入了一个简单的类)。在 GlassFish 上,一切正常(记录 FINE 时的例外情况除外,请参见此处)。我可以成功调用资源并且 Weld CDI 正在进行注入。

现在,当我在 Java SE 中启动应用程序以使用 JUnit 进行单元测试时,似乎 HK2 正在尝试提供注入,然后导致 UnsatisfiedDependencyException。

我可以定义一个将绑定 InjectMe 类的 AbtractBinder,以便 HK2 知道它。然后注入工作正常。但是 Weld CDI 应该将类注入 Jersey 资源,而不是 HK2。

引导是通过创建自定义 JUnit 运行器 (WeldJUnit4Runner) 和@RunWith(WeldJUnit4Runner.class)注释来完成的,示例见此处:http ://blog.rocketscience.io/dependency-injection-with-cdi-in-java-se/

Weld CDI 为 Java SE 环境成功引导,我可以成功地将 InjectMe 类注入到实际的 JUnit 测试类中,而不是注入到 Jersey 资源中。InjectMe 类是由 Weld 引导发现的:

问题:为什么 HK2 在 Java SE 中运行时尝试注入 InjectMe 类而不是 Weld?

编辑: 我创建了一个 Netbeans 项目,因此您可以轻松地重现此测试: simple-service.zip。不要忘记将 java 日志记录的属性设置为 logging.properties 文件:

我已经通过为 Netbeans“测试文件”操作定义它来做到这一点。在属性文件中,必须定义以下标志:

当我昨天进行测试时,有一段时间这个确切的设置确实有效,没有给我那些例外。我认为,静态初始化存在问题,HK2 有时会先初始化,我认为这会导致此错误。

资源:

应用配置:

聚甲醛:

例外:

注入类:

我正在使用:Glassfish 4.0 (build 89) (Java EE 7 Web)/NetBeans 8.0/maven 3.2.1/JDK 1.7/Weld 2.2.1

0 投票
1 回答
759 浏览

java - 如何在 jersey 2 和 hk2 中使用自定义 DI

我只是想在此处关注有关依赖注入的球衣文档:https ://jersey.java.net/documentation/latest/ioc.html#d0e15100

如果我尝试在参数上使用@Inject,我只会得到 grizzly 的请求失败页面。

有人可以告诉我我做错了什么吗?

主.java

TodoResource.java

道工厂.java

0 投票
0 回答
789 浏览

java - Jersey:无法注入自定义参数注释

我创建了一个自定义注释来将查询参数注入到我的 JAXB 生成的类中:

添加了活页夹:

并在我的应用程序中注册:

不幸的是,HK2给了我:

web.xml

我已经阅读了泽西提供的注释的源代码,它们看起来都像我的代码。装订器也是如此。错误在哪里?我很困惑,迷失在这里。

我也读过这个那个,没有用。

0 投票
1 回答
3108 浏览

java - HK2为什么要重新包装所有东西?

我最近在我从事的一些项目中从 Jersey 1 切换到 Jersey 2。我在 Jersey 2 中遇到的最大烦恼是它使用了 HK2,它出于某种原因重新打包了标准的 Maven 工件。为了避免潜在的令人讨厌的调试问题,我尽量避免从不同的项目中引入相同的类。如果发生这种情况,我使用 Extra Enforcer Rules 依赖项中的Ban Duplicate Classes Maven 执行器规则来中断构建。

根据前面提到的 Ban Duplicate Classes 强制执行规则,切换到 Jersey 2 会在其工件和我之前使用的标准工件之间引入以下冲突:

我的解决方案是从传递拉取它们的依赖项中排除标准工件,因此仅使用 hk2 工件。我认为这更安全:我不知道 hk2 工件还引入了什么,如果我要排除它们,我可能会丢失(例如,bean-validator 工件似乎正在重新打包至少四个工件)。这样做的缺点是,首先,我的依赖项中出现了大量排除项,这些依赖项引入了其他无害的 API 依赖项,例如验证 API。其次,我的工件现在正在导出 HK2 重新打包的依赖项,而不是我希望导出的实际 API 类。

最后,我的问题是:

  1. HK2为什么要重新包装所有东西?这有什么好的理由吗?
  2. HK2实际上重新包装了什么,我可以只使用标准的API版本吗?我将如何解决这个问题?我已经克隆了 HK2 项目,但我在弄清楚从哪里开始找到它时遇到了一些麻烦。

除了这些问题的实际答案之外,联系 HK2 背后的开发人员以便我可以直接提问的好论坛是什么?我浏览了该网站,虽然我找到了一些邮件列表,但我没有看到任何明显适合问这个问题的东西。

0 投票
1 回答
251 浏览

glassfish - 在 GlassFish 4 中编写 HK2 组件?

在版本 3 中有关于如何编写组件(包括 HK2 组件)的指南:Oracle GlassFish Server 3.0.1 Add-On Component Development Guide

该文档不适用于 GF4。为什么不?

我为什么要问?

因为我想编写一个自定义日志处理程序,如管理指南第 7 章所述(https://glassfish.java.net/docs/4.0/administration-guide.pdf)。

“注意:自定义处理程序类应打包在 OSGi 模块中,并将 JAR 文件放置在 as-install/modules 目录中。”

那么我该如何为 GF4 创建 HK2 组件呢?和GF3一样吗?

0 投票
1 回答
959 浏览

java - Jersey 注入了错误的 SecurityContext

我们最近通过“guice-bridge”将 Guice 与 Jersey 集成,并且必须在此过程中升级依赖版本。但是随后在生产中的子资源(只有它们)有时会注入错误的 SecurityContext,而主体来自另一个线程!这种行为似乎是完全随机的,以前从未出现过。我们如何解决这个问题?

这是身份验证过滤器:

这是根资源:

这是子资源:

这是基类:

PS:我们使用 JDK7、Jersey 2.10.2 和 HK2 2.3.0-b04。

编辑

SecurityContext 实现:

还有校长: