Mehmet Can Cömert created CXF-8958:
--------------------------------------

             Summary: A migration Guide for CXF-DOSGI Users
                 Key: CXF-8958
                 URL: https://issues.apache.org/jira/browse/CXF-8958
             Project: CXF
          Issue Type: Wish
            Reporter: Mehmet Can Cömert


As I noticed, CXF-DOSGI project is retired in the middle of 2022.
We have a big REST API implementation relying on this framework.

Now we want to update other components such as Jetty and they need newer 
version of Javax.Servlet-API (4.0.0 or above) however DOSGI components seems to 
request older Javax.Servlet-API (from 2.0.0 until 4.0.0)

We do not need to provide REST API resources as OSGI services, but they still 
need to consume OSGI Services from the Business Logic layer.

A resource definition is done in an interface and implementation done in 
another class with the help of DOSGI Intents and calling OSGI Services.

Here is the API for Resource definition in an API Bundle:
{code:java}
@Path("")
public interface IJobStatusResource {

    @GET
    @Produces({MediaType.APPLICATION_JSON})
    Response getJobStatusEntries(@Context UriInfo uriInfo,
                                 @QueryParam(IFieldKeys.IDENTIFIER) String 
identifier)
        throws RestApiException;
}
{code}
Here is the implementation exposing the Resource over OSGI and supplying the 
DOSGI Intents provider for HTML/JSON serialization.
{code:java}
import org.apache.cxf.dosgi.common.api.IntentsProvider;
@Component(name = "JobStatusConfigurationResource", immediate = true, //
    service = {
        IJobStatusResource.class, IntentsProvider.class
    }, property = {
        "service.exported.configs=org.apache.cxf.rs", //
        "service.exported.interfaces=*", //
        "org.apache.cxf.rs.address=" + 
IRestResourcePaths.JOB_STATUS_ENTRIES_PATH, //
        "org.apache.cxf.rs.provider.expected=true", //
    })
@ServiceDescription("JobStatus Configuration Resouce DOSGI implementation.")
public class JobStatusResource implements IJobStatusResource, IntentsProvider { 
   
        
        @Reference(name = "jobstatus.service.ref", //
        policy = ReferencePolicy.DYNAMIC, cardinality = 
ReferenceCardinality.MANDATORY, //
        bind = "registerConnector", unbind = "unregisterConnector")
    public void registerConnector(IJobStatusService jobStatusService) {
        service = jobStatusService;
    }    public void unregisterConnector(IJobStatusService jobStatusService) {
        service = null;
    }    @Reference(name = "jobstatus.intent.service.ref", //
        policy = ReferencePolicy.DYNAMIC, cardinality = 
ReferenceCardinality.MANDATORY, //
        bind = "registerIntentFactory", unbind = "unregisterIntentFactory")
    public void registerIntentFactory(IIntentFactory intentFactory) {
        intentFactoryService = intentFactory;
    }    public void unregisterIntentFactory(IIntentFactory intentFactory) {
        intentFactoryService = null;
    }    @Override
    public Response getJobStatusEntries(UriInfo uriInfo, String id) throws 
RestApiException {
        // use Service from osgi to call business logic.    }    @Override
    public List< ? > getIntents() {
        return intentFactoryService.createDefaultIntents();
    }} {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to