问题标签 [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 投票
8 回答
110252 浏览

java - Jersey 2.0 的依赖注入

在没有任何以前的 Jersey 1.x 知识的情况下从头开始,我很难理解如何在我的 Jersey 2.0 项目中设置依赖注入。

我也知道 HK2 在 Jersey 2.0 中可用,但我似乎找不到有助于 Jersey 2.0 集成的文档。

pom.xml

我可以让容器启动并提供我的资源,但是只要我将@Inject 添加到 MyService,框架就会引发异常:


我的入门项目在 GitHub 上可用:https ://github.com/donaldjarmstrong/jaxrs

0 投票
1 回答
3252 浏览

jpa - Jersey + HK2 + Grizzly:注入EntityManager的正确方法?

我已经设法在 Jersey、HK2 和一个普通的 GrizzlyServer 中设置了我自己的服务类的注入(到资源类中)。(基本上按照这个例子。)

我现在很好奇将 JPA EntityManagers 注入到我的资源类中最好的方法是什么?(我目前正在考虑将一个请求作为一个工作单元)。我目前正在探索的一个选项是以Factory<EntityManager>下列方式使用 a :

并将其绑定如下:

问题是dispose- 方法从未被调用。

我的问题:

  1. 这是在 Jersey+HK2 中注入 EntityManagers 的正确方法吗?
  2. 如果是这样,我应该如何确保我的 EntityManagers 正确关闭?

(我宁愿不依赖重量级容器或额外的依赖注入库来覆盖这个用例。)

0 投票
1 回答
2400 浏览

java - 带有 Jersey 2.x 的 InjectionResolver -- 资源被调用两次

我试图弄清楚如何使用自定义注释和 HK2 将某些东西注入 Resource 方法。因为我在 Spring webapp 环境中,所以我只是堆放在现有的 helloworld-spring-webapp Jersey 2 示例上。我的问题是,资源方法被调用了两次。第一次,注入成功,第二次,它没有。

InjectionResolver.resolve() 方法

Binder.configure() 方法

Binder 的 ResourceConfig 注册

JerseyResource.getHello()

SINGLE调用的服务器输出

我是否错过了某处的配置?我不明白为什么它被调用了两次。我假设如果我解决了这个问题,InjectionResolver 在第二次调用中不起作用的问题将不是问题。

0 投票
1 回答
721 浏览

java - 泽西岛 2.* 和 HK2。根据路径参数注入不同的对象(例如 DAO)

我正在实现一个多租户应用程序。我的许多资源都有类似“/api/tenant/{tenant_id}/resource/path/”的路径。我想做的是根据“{tenant_id}”路径参数向资源注入不同的 DAO(或可能的其他对象)。

关于如何实现类似的目标,我有两个次优的想法:

  1. 使用这样的包装类:

    然后在我的资源类中,我将拥有SomeDAOWrapper一个用@BeanParam.

  2. 在路径“/api/tenant/{tenant_id}”上使用子资源定位器,它将返回具有正确 DAO 的资源。

还有其他想法吗?理想情况下,我想做的是SomeDAO在我的资源类中简单地使用带有@Inject或类似注释的属性(并且将使用一些考虑tenant_id路径参数的工厂)。

0 投票
3 回答
1544 浏览

jersey - Jersey 2.3 在 servlet 容器关闭时不调用 HK2 服务定位器关闭

问题:是否有适当的方法来确保 HK2 与 Jersey 2 一起关闭;如果不是,这会被认为是一个错误吗?

使用 jersey-server 2.3.1,我注意到@PreDestroy托管单例上的 HK2 方法和实现上的dispose()方法Factory<T>没有被调用。稍微摸索了一下,我看到它ConfigHelper定义了一个在服务定位器上调用的生命周期侦听preDestroy()器,但仅此而已。这在和ServletContainer上都从 Jersey 调用,但在关闭方面没有对服务定位器进行任何进一步的处理。 shutdown()reload()

我已经看过了ServletContainer,但似乎没有办法通过任何公共或受保护的 API 访问 HK2 服务定位器。

0 投票
4 回答
1753 浏览

java - 单元测试 JSR-330 注入对象

我以前使用过 Spring DI,我认为的好处之一是我可以在不涉及 Spring 的情况下测试我的 Spring bean 类(为简洁起见省略了导入):

现在我正在试验 JSR-330,这意味着不显式编写 setter。

到目前为止,我一直在使用 Hk2,纯粹是因为一些关于 Jersey 与 Hk2 相关联的轶事,并且很难与其他 JSR-330 实现共存。

我有一半预计会发生一些神奇的事情,@Inject 注释导致设置器可用,但事实并非如此:

  • 我如何(方便地)在不调用框架的情况下测试这种带注释的类?
  • 如果做不到这一点,我如何以可移植的方式调用框架(即,不将我的测试代码紧密耦合到 Hk2、Guice 等)
  • 如果做不到这一点,那么测试以这种方式注释的类的典型、干净的方法是什么?
0 投票
1 回答
1123 浏览

jersey - 泽西岛和 Guice 管理的资源

我正在开发一个在 OSGI 环境中动态加载 JAX 资源的应用程序。这些资源由 Guice 管理,在每个 Bundle 中,它们被加载到在核心包上运行的 JAX 应用程序中。

其中 context 是由 Guice 管理的 Jersey ServletContext。

这一切都完美无缺。出现问题是因为我们想要在加载资源时操纵路径。然后,我们创建我们的 ModelProcessor。

错误是无法处理注入资源的所有依赖项。例如:如果资源注入了日期(@Inject Date 日期),则错误如下:

……………………

我认为错误在于新实例(资源 r1)由 H2K 而不是 Guice 处理,并且不能满足您的依赖关系。

我们尝试在 OSGI 环境中使用 guice-bridge 工件,但这会产生错误:未找到 ServiceLocator 的实现。

但是所有依赖项都在类路径中:

那么,如果解决方案是使用 guice-bridge,那么如何更改 guice 管理的资源的路径,这是最好的配置方式吗?

我正在使用球衣 2.4。

谢谢

0 投票
2 回答
7867 浏览

java - 如何配置 HK2 以注入由工厂方法创建的对象?

在 HK2 中,配置注入的基本示例代码是这样的(在扩展的类中AbstractBinder

这会导致 HK2FooImpl()在需要创建FooInterface.

如果 FooImpl 没有构造函数怎么办?

  • 如果打算用静态工厂方法实例化怎么办FooImpl.getInstance()
  • 如果它打算由工厂对象实例化怎么办fooFactory.create()

我看到ResourceConfig有一个方法bind(FactoryDescriptors factoryDescriptors),但我不清楚构建FactoryDescriptors对象的习语是什么,并且无法在网上找到任何示例。

0 投票
1 回答
1172 浏览

java - 如何在 HK2 中为服务创建代理

我正在使用 Jersey 2.x 和内置于 Jersey 中的 HK2。我需要在我的服务中装饰一些由注释标记的方法,即我想在这些方法调用之前和之后执行一些额外的操作。不幸的是,HK2 没有任何 AOP 功能。我认为我可以将我的工厂绑定到服务的接口,并在provide调用工厂的方法时创建服务的代理。但是,我的工厂需要做几件事才能工作:

1)服务的类和接口创建代理

2)ServiceLocator实例正确注入所有服务的依赖项

而且我只是看不出有什么办法可以两者兼得。如果我使用绑定工厂,bindFactory(MyFactory.class)那么我无法将有关服务的信息传递给它,但可以将 ServiceLocator 实例注入其中。如果我使用绑定工厂,bindFactory(new MyFactory(Service.class, ServiceImpl.class))那么我有关于服务的信息,但我没有ServiceLocator实例来正确创建该服务,因为 HK2 没有向工厂实例注入任何东西,而且我也看不到从中获取 ServiceLocator 实例AbstractBinder 在绑定期间为我的工厂提供定位器。

我真的很感激任何建议和建议。我希望我不是第一个想要统一代理我的服务的人。

0 投票
1 回答
4230 浏览

java - 如何在 Jersey 中设置 AbstractBinder

我正在尝试在泽西岛的 servlet / tomcat 上下文中实现我的 HK2 绑定。

我这样做,在一个扩展 org.glassfish.jersey.servlet.ServletContainer 的 servlet 中:

...但我得到:

那么我该如何进行自己的 HK2 绑定呢?

为什么这么问 ?(编辑)

它适用于泽西岛的 EntityManager 和 JPA。

使用 Netbeans,如果我生成一个 AbstractFacade 它放

... 和 :

但是,当我调用服务时,em 为空。所以我想是@PersistenceContext 不起作用?

如果我使用解决方案Tutorial: Put JPA in your Web App (tomcat, EclipseLink) 并提供 Rest JSON 输出,所有工作都像魅力一样,但我不喜欢使用静态变量private static EntityManagerFactory emf; 对于实体经理。

谢谢。