[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [ecf-dev] My first steap with ECF with Restlet | 
Hi Angelo,
On 6/10/2012 8:34 AM, Angelo zerr wrote:
Hi Scott,
<stuff deleted>
I have setted breakpoints in the method which add the service in the 
HelloConsumerApplication, but it is never called-(
So my problem comes from "a) Creates a local proxy for the remote 
service", and I'm searching where is the code which computes the base 
URL of the Rest server to consume it (on other words 
http://localhost:8080/hello ).
There are two things that immediately come to mind as possibly being 
wrong in your environment
1) Before running the consumer, did you start/run this (server) launch 
config?
/org.eclipse.ecf.examples.remoteservice.restlet.hello.host/Restlet RSA 
Server.launch
This launch config starts the Restlet server, and registers/exports the 
hello remote service.  As part of exporting the remote service, it 
*also* publishes the remote service's EndpointDescription via the 
zeroconf/jmdns lan-based discovery, which on my lan/system then 
discovers the remote service on the consumer (again via zeroconf/jmsdns 
lan-based discovery).
2) It's not impossible that zeroconf is not going to work on your 
lan...as on some lans it is intentionally disabled (usually to prevent 
usage of iTunes :).  If that's the case then you will possibly have to 
use some other discovery mechanism (e.g. file-based discovery, 
zookeeper, slp, dnssd, or one of your own choosing/creation.
<stuff deleted>
If you can read my articles it should be cool, because you will see 
what I want to do. But as I know you have not time, I will try to 
explain here what I want to do. I think my services to expose with 
remoting is a little complex but I have done that with success with 
cxf dosgi and I would like study if it's possible with ecf restlet. 
Here my UserService :
---------------------------------------------------------
public interface UserService {
    Page<User> findAll(Pageable pageable);
}
---------------------------------------------------------
This service is complex because :
1) It uses complex type in the method parameter (Pageable) and result 
method (Page)
2) Page and Pageable are interfaces and not Pojo.
3) Page and Pageable belongs to "Spring Data" framework, so you cannot 
modify it (to add some annotations or extend some classes).
As long as the actual implementation types (i.e. PageImpl or 
PageableImpl...or whatever you call them) are
1) Serializable
2) Available in an *exported package*
Then there's not difficulty with either OSGi remote services, or with 
ECF's implementation, of using complex types in the signature of the 
remote methods.
I must study restlet to see if it's possible. With JAX-RS+JAXB it's 
possible.
Since Restlet is an implementation of the JAX-RS spec, I expect that it 
is possible.  Because I'm not an expert on Restlet, however, I can't 
describe how to do it with Restlet.  I do know that Restlet has a 
pluggable architecture for...e.g....adding extensions to support 
different kinds of serialization/marshalling formats...e.g. json, xml, 
others, etc.
My goal is to have several configuration with my eclipser cp application:
1) Fat client: this confuguration means that rcp client consumes 
directly the implementation of the UserService retrieved from the OSGi 
registry services. As you can see here this implementation needs not 
to extend ServerResource (very shame to add in this config reslet bundles)
2) Client/Server: this config means that rcp client consumes the rest 
client which consumes the rest server (here the impl of Userviceisnot 
hosted with rcp but in other OSGi container (server side)
So for 1), I would like avoid extending ServerResource in my impl off 
UserService.
I still don't really understand why extending ServerResource is a 
problem (for either 1 or 2).  Actually, I don't really see...for either 
1 or 2...why ServerResource is even an issue...aren't both 1 and 2 the 
client/consumer side?  It's only the host/server side that actually 
needs ServerResource (for Restlet).
With CXF DOSGi you must just annotate the Uservice interface and 
that's all.As it's annotations you can import jax-rs packages in the 
Services API bundles and set it as optionnal.
So for Fat client config, you need NOT add jax-rs bundle.
Like I said, I'm not a Restlet expert, but it seems to me likely that 
Restlet also probably supports the standardized (Jax-rs) annotation 
specification.
Here a list of features that remoting must support (supported by cxf 
dosgi with jax-rs) :
1) more transparent like use only annotations (avoid developping some 
other classes).
2) support complex object in the param of the sevice (not only String 
but pojo).
3) support interface(eg: Page, Pageable) in the param of service.
4) configure the baseURL of the server  on client side (eg: you deploy 
the host side in a server A and B, you can configure the base URL of 
server A to use it)
As I understand Restlet, it's a JAX-RS compliant implementation...which 
means to me that it it probably supports exactly the same annotations as 
any other JAX-RS implementation.   If that's true, I don't see any 
technical reason why these features couldn't be supported with ECF + 
Restlet.
I think it should be very cool if ecf support JAX-RS (with cxf, 
jersey, etc?).
That would be great.  And I can tell you that everything about ECF's 
structure (e.g. it's remote services API and provider architecture) 
makes this straightforward.  By way of comparison, consider...for 
example...using cxf with some other distribution provider...e.g. r-OSGi 
underneath.  As I understand it' this sort of substitution would not be 
possible.
But, of course, implementing a new remote service provider (based upon 
cxf, or jersey, or whatever)...although doable...and quite well 
supported (e.g. there's a lot of the existing implementations that 
can/could be reused for the creation of some other provider)...will take 
some additional technical work[1].  I would welcome such 
contributions...but cannot commit to doing it myself...without some 
visible means of support or sponsorship.
>Hope you will understand my need.
I believe I do.   Hope this helps.
Scott
[1] As an example of what's necessary to create a new remote service 
provider...see the code in org.eclipse.ecf.provider.restlet project.