免责声明:我刚刚开始使用OSGI,所以请忍受我和我的知识不足...
为了本练习,假设我有一个基于泽西岛 (2.17.0) 的 REST 应用程序在 OSGI 环境中的 Jetty (9.2.10) 下运行,它为用户提供了一些通过 SOAP 从单独的服务器收集的统计信息。
我现在尝试在另一个应用程序中重用一些现有代码,该应用程序应该通过JMS(或其他东西)检索统计信息。
我的目的是在捆绑包中为客户端 API 引入一个抽象层,为每个应用程序实现一个具有适当通信通道的捆绑包,并使用 CDI 在运行时将客户端注入到我的 REST 资源中。例如:
REST资源(捆绑包1,两个应用程序通用)
@Path("statistics")
public class StatisticsResource {
@Inject
private StatisticsClient client;
@GET
@Path("users")
public List<User> getActiveUsers(){
return client.getActiveUsers();
}
}
通用 API(捆绑包 2,两个应用都通用)
public interface StatisticsClient {
List<User> getActiveUsers();
}
SOAP实现(应用程序1的捆绑包3)
@ApplicationScoped
public class SOAPClient implements StatisticsClient {
@Override
public List<User> getActiveUsers() {
// connect to server via SOAP
}
}
JMS实现(应用程序2的捆绑包3)
@ApplicationScoped
public class JMSClient implements StatisticsClient {
@Override
public List<User> getActiveUsers() {
// connect to server via JMS
}
}
我一直在阅读和搜索关于如何将injection与Jersey、HK2 (2.4.0)和OSGI一起使用的信息,但我迄今为止还没有找到与上述想法相匹配的相关信息。
到目前为止,我看到的大多数Jersey CDI注入示例都使用具体的类来定义绑定,比如< code>bind(MyService.class)。to(my service . class);鉴于我希望能够在运行时切换实现,并根据代码当前运行的应用程序使用< code>SOAPClient或< code>JMSClient。理想情况下,框架将从可用的OSGI服务(或者类路径或类似的东西)中推导/检测实现...
这可行吗?如果可行,我错过了什么?或者,我可能误解或错过了什么基本概念?
您可以使用带有CDI生产者的简单EJB(生产者注入bean,或者产生要注入的bean实例,这取决于一些标准)。
伪代码:
public interface Service;
@Stateless
@ServiceImplementation(A) //Qualifier *
public class ServiceImplA implements Service{
//impl code
}
@Stateless
@ServiceImplementation(B) //Qualifier *
public class ServiceImplB implements Service{
// impl code
}
@Produces
@ApplicationScoped
public Service produceServiceInstances(){
if(condition)
return ServiceImplA
else
return ServiceImplB
}
检查这个链接https://docs.oracle.com/javaee/7/tutorial/cdi-adv003.htm
需要使用 Jax-Rs Jersey-1.x 资源提供文件上传功能。我想知道是否最好使用“File”作为参数或“InputStream”创建方法? 资源将接受内容类型,并且不绑定到表单数据。它将需要处理小到大(最多千兆)的文件。 想知道使用<code>InputStream
Java 元数据(Metadata)规范(JSR-175),是J2SE 5.0和更高版本的一部分,提供一种在Java代码中指定配置数据的方法。Java代码中的元数据也被称为注解。在JavaEE中,注解用于声明对外部资源的依赖和在Java代码中的配置数据而无需在配置文件中定义该数据。 本节描述了在Java EE技术兼容的Servlet容器中注解和资源注入的行为。本节扩展了Java EE规范第5节标题
我需要编写一个无状态会话bean,并将其部署到WLS10.3。3.会话bean应该能够向通过WLS控制台创建的已知JMS队列发送文本消息。因此,我编写了以下代码: 我现在需要做的是提供一个有效的weblogic-ejb-jar.xml与资源参考到jndi-name映射。有人能为weblogic-ejb-jar.xml提供一个例子吗? jmsConnectionFactory应该绑定到jndi-na
void unregister_resource(string name) Use this to dynamically unregister a resource plugin. Pass in the name of the resource. 动态注销一个资源插件,参数是资源的名称。 Example 13-27. unregister_resource 例子 13-27. 注销资源 $sm
void register_resource(string name, array resource_funcs) Use this to dynamically register a resource plugin with Smarty. Pass in the name of the resource and the array of PHP functions implementing i
我正在泽西岛应用程序中使用 CDI。在根资源上,CDI 注入按预期工作,但每当我返回子资源时,CDI 注入源都不可用。 具有子资源定位器的根资源: 子资源: 错误: 我正在使用和Weld依赖项,在Undertow上运行,并将Weld servlet侦听器添加到部署中。 同样,对根资源的相同注入确实有效。< code>@Named("name ")字符串由< code>@ApplicationSco