Tôi muốn di chuyển ứng dụng EE của mình sang OSGi. ứng dụng của tôi bao gồm các thư viện nghiệp vụ, các cơ sở dữ liệu JPA/Entities và một giao diện REST/WS. nó cũng có một máy khách web.OSGi JAX-RS và dịch vụ khai báo bnd
Tôi bắt đầu bằng cách tạo mẫu cấu trúc và làm cho tất cả các giao diện và các nhóm nói chuyện với nhau theo cách sạch sẽ OSGi. Tôi muốn sử dụng một đặc điểm kỹ thuật sạch càng nhiều càng tốt mà không có bất kỳ nhà cung cấp hoặc khung công cụ cụ thể nào.
Tôi đang sử dụng plugin bnd maven để tạo tệp kê khai và dịch vụ khai báo. Tôi muốn thực hiện một cuộc gọi từ các nguồn lực còn lại của tôi để một dịch vụ OSGi (trên bó khác) sử dụng tiêm như vậy:
@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
}
...
}
Tôi có thể chú thích các tài nguyên với BND @Component
và @Resource
có thể được tiêm? mọi thứ đều hoạt động tốt nhưng dịch vụ luôn luôn là rỗng.
Điều gì sẽ là cách để khai báo gói của tôi cho BND để biến nó thành gói web/wab?
tôi sử dụng bó maven:
<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>
...
với các hướng dẫn BND
Web-ContextPath: my-root-http/rest/
Service-Component: *
Gần đây tôi đã gặp một vấn đề tương tự (dịch vụ không bị ràng buộc) và theo dõi nó xuống [gói chia tách] (http://wiki.osgi.org/wiki/ Split_Packages). Bạn đã thử đưa giao diện dịch vụ của mình vào một gói riêng chưa? –
cảm ơn @ BjörnPollex cho đề xuất. Tôi có 3 gói, một với chỉ giao diện, một với việc triển khai dịch vụ và gói REST. Tôi đã chuyển nó trở lại gói REST để xem nó có hoạt động không nhưng không may mắn. Nếu những gì tôi đang làm là currect hơn có lẽ vấn đề là với SCR không tìm thấy xml DS của tôi. – Gadi
cảm ơn bạn đã chỉnh sửa @donalfellows – Gadi