- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将我的 EE 应用程序迁移到 OSGi。我的应用程序由业务库、数据库 JPA/Entities 和一个 REST/WS 接口(interface)组成。它还有一个网络客户端。
我首先对结构进行原型(prototype)设计,并使所有接口(interface)和包以 OSGi 干净的方式相互通信。我想尽可能使用干净的规范,而不需要任何特定的供应商或框架。
我正在使用 bnd maven 插件来生成 list 和声明性服务。我想使用注入(inject)从我的其余资源调用 OSGI 服务(在另一个包上),如下所示:
@Path("some-resources")
@Component
public class SomeResources{
private SomeService service = null;
@Reference
public void setController(SomeService service) { // <- this is never called
this.service = service;
}
@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_XML)
public Object getSomeService() { // <- called
try {
service.process("Hello World"); // <- Error null object
}
...
}
@Component
注释资源吗?并且可以
@Resource
被注入(inject)?
<packaging>bundle</packaging>
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<dependencies>
<dependency>
<groupId>biz.aQute</groupId>
<artifactId>bndlib</artifactId>
<version>1.50.0</version>
</dependency>
</dependencies>
<configuration>
<supportedProjectTypes>
<supportedProjectType>ejb</supportedProjectType>
<supportedProjectType>war</supportedProjectType>
<supportedProjectType>wab</supportedProjectType>
<supportedProjectType>bundle</supportedProjectType>
<supportedProjectType>jar</supportedProjectType>
</supportedProjectTypes>
<instructions>
<_include>-osgi.bundle</_include>
</instructions>
</configuration>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
<execution>
<id>bundle-install</id>
<phase>install</phase>
<goals>
<goal>install</goal>
</goals>
</execution>
</executions>
</plugin>
...
Web-ContextPath: my-root-http/rest/
Service-Component: *
最佳答案
OSGi 有一部分规范称为远程服务。简而言之,它的工作方式是您可以使用特殊的服务属性注册服务,并且基于属性技术应该选择您的服务并从中创建一个端点。它不仅与 REST 有关,还与任何处理远程调用的技术有关。您可以在“远程服务”一章下的 OSGi 核心规范中找到信息。
好吧,它是一个规范,但谁来实现它?目前我尝试了两个更大的项目。 CXF DOSGi 和 Eclipse ECF。他们提供了多种支持远程服务规范的技术。 CXF 特别支持 Jax-RS,基于它在服务器端和客户端的实现。
因为我不想在 OSGi 中使用 spring 特定的解决方案,所以我最终没有使用 CXF,而是创建了我自己的解决方案。它基于 Jersey 和远程服务规范。当使用 service.exported.interfaces=* 和 service.exported.configs=org.everit.osgi.remote.jersey 指定 OSGi 服务时,它将使用 HttpService 在/rest/路径下创建一个休息端点。您的捆绑包不必是 wab,它可以是简单的捆绑包。
我必须提到,如果您通过任何远程服务实现公开您的服务,您应该将 Jax-RS 注释带入由您的原始类实现的接口(interface),并基于该接口(interface)公开您的服务。
我建议您应该使用与 Spring 惊人地相似的 Blueprint(OSGi 规范的一部分),而不是 OSGi 中的 @Resource 和 @Component 注释。目前 Apache Aries 和 Gemini Blueprint 实现了它。使用蓝图,您可以轻松创建 bean 并将它们相互连接。如果以这种方式注册您的远程服务,您可以在蓝图的帮助下设置任何属性(就像 spring applicationcontext.xml 中 bean 的属性一样)。
您可以在 https://source.everit.biz/svn/everit-osgi/trunk/samples/jaxrs/ 找到我制作的示例应用程序。 (用户/密码:访客/访客)。 http://cookbook.everit.org 上有一个指南解释了如何开始和开发这些示例。
我希望示例应用程序可以帮助您开始使用远程服务规范一章。
要了解如何使用 JPA 和注入(inject)(蓝图),您应该查看 OSGi 纲要规范以了解可能性并找到您喜欢的实现。我还制作了一个基于 blueprint 和 hibernate-jpa 的示例项目,您可以将其作为我已经提供的示例 url 的兄弟找到。
更新
还有一个 JAXRS 扩展器实现,我在 https://github.com/everit-org/osgi-remote-jersey .有关文档,请参阅自述文件。它与第一个不同之处在于它基于白板服务属性的工作方式。
关于rest - OSGi JAX-RS 和 bnd 声明式服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200347/
来自 JSR-339: For simplicity, JAX-RS implementations are NOT REQUIRED to support processing groups oth
JAX-RS 提供了 StreamingOutput 接口(interface),我们可以实现它来对我们的响应主体进行原始流处理。 public interface StreamingOutput {
有没有办法获得java.lang.reflect.Method为给定的 @Path 调用的方法(用 HttpServletRequest 注释) ? 这是我的用例:我在 Java EE 中 Filte
我接到了一家公司的任务,该任务向我发送了一台已完成所有设置的虚拟机。任务是我必须创建一个 API 来从数据库中检索人员详细信息并显示它。 问题是,当我运行应用程序时,服务器返回一个包含 hello w
我有一个 POST 方法调用,它接受很少的表单参数。我希望 JAX-RS 能够处理不存在特定表单参数的情况。 示例: @POST @Produces (MediaType.APPLICATION_JS
我有 JAX-RS 网络应用程序,我想记录从获取请求到响应的时间量。在带有 servlet 过滤器的 Spring Boot 中很容易。但是我的应用程序中的过滤器无法正常工作: @Provider p
使用以下网址。 http://doma.in/context/resource/some/.../undefined 我想获取 ../resource 之后的路径名,即 /some/.../undef
Closed. This question is off-topic。它当前不接受答案。
我花了几个小时在嵌入式 Jetty 9.1.0.v20131115 和 RESTEasy 3.0.5.Final 中安装自定义登录服务。我的登录服务将在数据库中查找用户并为他们分配角色。它看起来像这样
RESOURCE_STALLS.RS的说明Intel Broadwell 的硬件性能事件如下: This event counts stall cycles caused by absence of
我想从 java 服务器 (Restful Jax-rs) 发送图像。我的客户是安卓。 @GET public Response getUserImage() { byte[] image =new
(特别是 RESTeasy) 具有如下方法签名会很好(对于单个文件): public void upload(@FormParam("name") ..., @FormParam("file") fi
RESTEasy (JAX-RS) 允许通过子资源进行动态调度。例如: POST /customers/create {"name":"Smith","country":"jp"} 我们可以有一个根资
假设有一个 ResultSet rs 和 n 对象。 这段代码: while(rs.next()) { // do something on rs } 在算法上等于此代码(即两者给出相同的结果)
我正在使用 Visual Studio 2005 和 mysql 4.0,我有一个表,其中包含一个字段(十进制 16,4),用于存储发票金额和另一个表,其中包含对该发票的付款(这些字段也是十进制的)
我正在使用 JAX-RS、Microprofile 和 Payara 5 构建 REST 服务。我的方法返回类型为 Response 的对象。响应本身包含一个 MyClass 列表。实现看起来像这样:
我已经使用 Mock MVC 成功地为 Spring MVC REST 服务构建了无需部署的集成测试框架。我正在努力对 JAX-RS 服务做同样的事情。 REST Assured 看起来很有希望,但它
我有一个使用JAX-RS 2.0的Jersey实现的Java应用程序,并且我想在客户端启用gzip压缩。服务器已启用它,并且通过在Chrome中的开发人员工具中的“大小/内容”中查找客户端正在使用的特
我正在尝试与 Tomcat7 一起使用 RESTful Web 服务 (JAX-RS)。我尝试了 3 种不同的实现(Jersey、RESTeasy 和 ReSTLet),但都没有成功。这应该很容易,但
swagger-api有什么区别和 JAX-RS ? 是swagger-api仅用于文档? (例如 @ApiOperation ) 最佳答案 根据 API 文档,JAX-RS是用于 RESTful W
我是一名优秀的程序员,十分优秀!