问题标签 [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.
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
jpa - Jersey + HK2 + Grizzly:注入EntityManager的正确方法?
我已经设法在 Jersey、HK2 和一个普通的 GrizzlyServer 中设置了我自己的服务类的注入(到资源类中)。(基本上按照这个例子。)
我现在很好奇将 JPA EntityManagers 注入到我的资源类中最好的方法是什么?(我目前正在考虑将一个请求作为一个工作单元)。我目前正在探索的一个选项是以Factory<EntityManager>
下列方式使用 a :
并将其绑定如下:
问题是dispose
- 方法从未被调用。
我的问题:
- 这是在 Jersey+HK2 中注入 EntityManagers 的正确方法吗?
- 如果是这样,我应该如何确保我的 EntityManagers 正确关闭?
(我宁愿不依赖重量级容器或额外的依赖注入库来覆盖这个用例。)
java - 带有 Jersey 2.x 的 InjectionResolver -- 资源被调用两次
我试图弄清楚如何使用自定义注释和 HK2 将某些东西注入 Resource 方法。因为我在 Spring webapp 环境中,所以我只是堆放在现有的 helloworld-spring-webapp Jersey 2 示例上。我的问题是,资源方法被调用了两次。第一次,注入成功,第二次,它没有。
InjectionResolver.resolve() 方法
Binder.configure() 方法
Binder 的 ResourceConfig 注册
JerseyResource.getHello()
SINGLE调用的服务器输出
我是否错过了某处的配置?我不明白为什么它被调用了两次。我假设如果我解决了这个问题,InjectionResolver 在第二次调用中不起作用的问题将不是问题。
java - 泽西岛 2.* 和 HK2。根据路径参数注入不同的对象(例如 DAO)
我正在实现一个多租户应用程序。我的许多资源都有类似“/api/tenant/{tenant_id}/resource/path/”的路径。我想做的是根据“{tenant_id}”路径参数向资源注入不同的 DAO(或可能的其他对象)。
关于如何实现类似的目标,我有两个次优的想法:
使用这样的包装类:
然后在我的资源类中,我将拥有
SomeDAOWrapper
一个用@BeanParam
.在路径“/api/tenant/{tenant_id}”上使用子资源定位器,它将返回具有正确 DAO 的资源。
还有其他想法吗?理想情况下,我想做的是SomeDAO
在我的资源类中简单地使用带有@Inject
或类似注释的属性(并且将使用一些考虑tenant_id
路径参数的工厂)。
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 服务定位器。
java - 单元测试 JSR-330 注入对象
我以前使用过 Spring DI,我认为的好处之一是我可以在不涉及 Spring 的情况下测试我的 Spring bean 类(为简洁起见省略了导入):
现在我正在试验 JSR-330,这意味着不显式编写 setter。
到目前为止,我一直在使用 Hk2,纯粹是因为一些关于 Jersey 与 Hk2 相关联的轶事,并且很难与其他 JSR-330 实现共存。
我有一半预计会发生一些神奇的事情,@Inject 注释导致设置器可用,但事实并非如此:
- 我如何(方便地)在不调用框架的情况下测试这种带注释的类?
- 如果做不到这一点,我如何以可移植的方式调用框架(即,不将我的测试代码紧密耦合到 Hk2、Guice 等)
- 如果做不到这一点,那么测试以这种方式注释的类的典型、干净的方法是什么?
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。
谢谢
java - 如何配置 HK2 以注入由工厂方法创建的对象?
在 HK2 中,配置注入的基本示例代码是这样的(在扩展的类中AbstractBinder
:
这会导致 HK2FooImpl()
在需要创建FooInterface
.
如果 FooImpl 没有构造函数怎么办?
- 如果打算用静态工厂方法实例化怎么办
FooImpl.getInstance()
- 如果它打算由工厂对象实例化怎么办
fooFactory.create()
我看到ResourceConfig
有一个方法bind(FactoryDescriptors factoryDescriptors)
,但我不清楚构建FactoryDescriptors
对象的习语是什么,并且无法在网上找到任何示例。
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 在绑定期间为我的工厂提供定位器。
我真的很感激任何建议和建议。我希望我不是第一个想要统一代理我的服务的人。
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; 对于实体经理。
谢谢。