cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Bosschaert <david.bosscha...@gmail.com>
Subject Re: Default endpoint via Zookeeper (D-OSGi) (repost to get its own thread, sorry all)
Date Fri, 21 Aug 2009 10:29:35 GMT
Hi Thom,

Just to let you know that using two machines I have reproduced your problem.
I'm currently working on a fix.

Best regards,

David

2009/8/18 David Bosschaert <david.bosschaert@gmail.com>:
> Ah, right, and it did work for me because I was trying it out on a
> single machine.
> Let me go back and try to fix this issue.
>
> Cheers,
>
> David
>
> 2009/8/13 Shulok, Thomas <thomas.shulok@lmco.com>:
>> Hi David,
>>
>> I don't think I explained the problem clearly enough.  The node does indeed get
registered, but it's missing a property.  Instead of doing an ls on the entry, do a get.
 Inside the entry, I think you'll see that it's missing the  org.apache.cxf.ws.address property.
 Without that, the remote client will bind to localhost (itself) because it can't find the
server.
>>
>> Thanks,
>> Thom
>>
>> -----Original Message-----
>> From: David Bosschaert [mailto:david.bosschaert@gmail.com]
>> Sent: Thursday, August 13, 2009 8:37 AM
>> To: users@cxf.apache.org
>> Subject: Re: Default endpoint via Zookeeper (D-OSGi) (repost to get its own thread,
sorry all)
>>
>> That works for me too.
>>
>> I'm now using the following code:
>>  Dictionary props = new Hashtable();
>>
>>  props.put("service.exported.interfaces", "*");
>>
>>  reg = bc.registerService(DisplayService.class.getName(), new DisplayServiceImpl(""),
props);
>>
>> Its working fine for me. Could you give it a try?
>>
>> David
>>
>> 2009/8/13 Shulok, Thomas <thomas.shulok@lmco.com>:
>>>
>>> Hi David,
>>>
>>> Still one difference...I don't specify (the equivalent of)
>>>
>>>  props.put("service.exported.configs", "org.apache.cxf.ws");
>>>
>>> in the service decorator.  Maybe I've been leveraging some undocumented default
behavior, but if you just specify the service.exported.interfaces property, the current D-OSGi
implementation will assume you want the web service config and set it up for you.
>>>
>>> Thanks,
>>> Thom
>>> -----Original Message-----
>>> From: David Bosschaert [mailto:david.bosschaert@gmail.com]
>>> Sent: Thursday, August 13, 2009 3:11 AM
>>> To: users@cxf.apache.org
>>> Subject: Re: Default endpoint via Zookeeper (D-OSGi) (repost to get
>>> its own thread, sorry all)
>>>
>>> Hi Thomas,
>>>
>>> I changed my copy of the Discovery demo to reflect your situation, and it seems
to work for me.
>>> In the file
>>> http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/discovery/impl
>>> /src/main/java/org/apache/cxf/dosgi/samples/discovery/impl/Activator.j
>>> ava I'm registering my services as follows:
>>>  Dictionary props = new Hashtable();
>>>
>>>  props.put("service.exported.interfaces", "*");
>>>  props.put("service.exported.configs", "org.apache.cxf.ws");
>>>
>>>  reg = bc.registerService(DisplayService.class.getName(), new DisplayServiceImpl(""),
props); This registers the service under the default name in ZooKeeper, in this case the DefaultService
interface name, so if I look in the location for org.apache.cxf.dosgi.samples.discovery.DisplayService
in the ZooKeeper registry I can see my service there:
>>>  zkCli> ls
>>> /osgi/service_registry/org/apache/cxf/dosgi/samples/discovery/DisplayS
>>> ervice
>>>
>>> [10.2.4.18#9000##org#apache#cxf#dosgi#samples#discovery#DisplayService
>>> ]
>>>
>>> running the client that is part of this demo works, it can find the service that
is exposed using the defaults.
>>>
>>> Is this what you're trying to do or am I missing something?
>>>
>>> David
>>>
>>> 2009/8/12 Shulok, Thomas <thomas.shulok@lmco.com>:
>>>> One bug leads to another... :-)
>>>>
>>>> Your fix puts the correct endpoint location into the Zookeeper node.  Works
great, thanks!  But...
>>>>
>>>> If I don't specify org.apache.cxf.ws.address in the service decorator, I
would expect it to default to http://localhost:9000/fully/qualified/ClassName as described
in the reference guide (http://cxf.apache.org/distributed-osgi-reference.html) under service
provider properties.  The default would then get transmorgrified into the actual IP of localhost
just like the endpoint and inserted into the node.  Unfortunately, if I don't specify org.apache.cxf.ws.address,
it doesn't show up in the Zookeeper node at all, which means the remote client thinks the
web service address is localhost (i.e. bad).
>>>>
>>>> Any hope/plan to incorporate the default behavior with the Zookeeper integration?
>>>>
>>>> Thanks!
>>>> Thom
>>>>
>>>> -----Original Message-----
>>>> From: David Bosschaert [mailto:david.bosschaert@gmail.com]
>>>> Sent: Monday, August 10, 2009 6:49 AM
>>>> To: users@cxf.apache.org
>>>> Subject: Re: Default endpoint via Zookeeper (D-OSGi) (repost to get
>>>> its own thread, sorry all)
>>>>
>>>> Hi Thomas,
>>>>
>>>> Just to let you know I've just committed a fix for this to trunk (1.1-SNAPSHOT).
The builds should publish a new snapshot of this tonight.
>>>>
>>>> With this fix you can set the org.apache.cxf.ws.address property to a localhost
value, like this:
>>>>  props.put("org.apache.cxf.ws.address",
>>>> "http://localhost:9100/display");
>>>>
>>>> Once it's pushed into the zookeeper server, the localhost and
>>>> 127.0.0.1 URLs are changed to contain the real IP address of the host, like
this:
>>>>
>>>> Hope this works for you too.
>>>> zkCli> get
>>>> zkCli> /osgi/service_registry/org/apache/cxf/dosgi/samples/discovery/
>>>> zkCli> D is playService/10.2.4.18#9100##display
>>>> #
>>>> #Mon Aug 10 14:37:47 BST 2009
>>>> osgi.remote.endpoint.location=http\://10.2.4.18\:9100/display
>>>> service.id=40
>>>> objectClass=[Ljava.lang.String;@188f506
>>>> osgi.remote.interfaces=*
>>>> osgi.remote.configuration.pojo.address=http\://10.2.4.18\:9100/displa
>>>> y
>>>> osgi.remote.configuration.type=pojo
>>>> osgi.remote.endpoint.id=f5a3d0ef-b1f6-4fe4-b03f-33190ec28dab
>>>> ...
>>>>
>>>> Cheers,
>>>>
>>>> David
>>>>
>>>> 2009/8/10 David Bosschaert <david.bosschaert@gmail.com>:
>>>>> Hi Thomas,
>>>>>
>>>>> Here are a couple of pointers.
>>>>>
>>>>> If you look at the Discovery demo, the Service Implementation
>>>>> Activator, you can see that in this activator it figures out the
>>>>> host name and sets that in the "osgi.remote.configuration.pojo.address"
>>>>> property:
>>>>> https://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/discovery/i
>>>>> m
>>>>> p
>>>>> l/src/main/java/org/apache/cxf/dosgi/samples/discovery/impl/Activator.
>>>>> java So you could do something similar when setting the property.
>>>>>
>>>>> However, if you are setting the property from a static file, this
>>>>> isn't really convenient. Therefore there is some additional support
>>>>> for translating 'localhost' into the machine name/IP addr when its
>>>>> registered in Discovery. If you specify the host in your address
>>>>> property as 'localhost', the zookeeper code will do a lookup on your
>>>>> machine name and register it under that (or the IP address). So in
>>>>> my case I'm getting the following registration in ZooKeeper:
>>>>> zkCli> ls
>>>>> zkCli> /osgi/service_registry/org/apache/cxf/dosgi/samples/discovery
>>>>> zkCli> /
>>>>> zkCli> D
>>>>> zkCli> isplayService
>>>>>  [10.2.4.18#9100##display]
>>>>> So it translated 'localhost' into 10.2.4.18
>>>>>
>>>>> However, looking at the properties inside the registration, I see
>>>>> that 'localhost' is still in there:
>>>>> zkCli> get
>>>>> zkCli> /osgi/service_registry/org/apache/cxf/dosgi/samples/discovery
>>>>> zkCli> / D isplayService/10.2.4.18#9100##display
>>>>> #
>>>>> #Mon Aug 10 10:50:22 BST 2009
>>>>> osgi.remote.endpoint.location=http\://localhost\:9100/display
>>>>> service.id=40
>>>>> objectClass=[Ljava.lang.String;@1292ba7
>>>>> osgi.remote.interfaces=*
>>>>> osgi.remote.configuration.pojo.address=http\://localhost\:9100/displ
>>>>> a
>>>>> y
>>>>> osgi.remote.configuration.type=pojo
>>>>> osgi.remote.endpoint.id=464a4c2f-205c-4a06-a5e2-2f5127dc0894
>>>>> ...
>>>>>
>>>>> So that's clearly a bug, I've filed
>>>>> https://issues.apache.org/jira/browse/CXF-2385 and will try to fix
>>>>> this over the coming few days.
>>>>>
>>>>> Hope this helps,
>>>>>
>>>>> David
>>>>>
>>>>> 2009/8/7 Shulok, Thomas <thomas.shulok@lmco.com>:
>>>>>> Hi All,
>>>>>>
>>>>>> Working with the Zookeeper discovery setup, and things are working
>>>>>> as long as I explicitly specify org.apache.cxf.ws.address in my
>>>>>> service decoration xml file. If I don't specify it, it will default
>>>>>> to localhost. Not unreasonable, but the problem is, localhost will
>>>>>> be the endpoint that gets registered with Zookeeper. So, when
>>>>>> another box looks for the interface, Zookeeper will tell it that
it is on localhost (i.e.
>>>>>> the client itself), and that will fail. With this setup, do you
>>>>>> have to explicitly specify the endpoint, or is there some other
>>>>>> default behavior to leverage that will actually use the real IP of
>>>>>> the registering localhost when it gets entered into Zookeeper so
>>>>>> other clients can find it?
>>>>>>
>>>>>> Many thanks,
>>>>>>
>>>>>> Thom
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Mime
View raw message