<mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx> <mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx>>>>
wrote:
Hi Abhisek,
abhisek saikia wrote:
Hi Scott
Existing or new container both are ok for
me.For
me just
the service call should be successful which i guess
should be
the major specification of ECF :).I am currently
not going
with container.connect option with multiple
containers
as it
had the defect for which client(consumer) needs
to be
started
first ,Also been reproduced by angelo @
http://dev.eclipse.org/mhonarc/lists/ecf-dev/msg03635.html Could you and/or Angelo please open a bug about this
issue?...and
include the explanation from Angelo in the bug
description?
Also, please address this question on the bug:
On the consumer, if the spring framework is creating a
container,
and connecting to a targetId with code like this (the
following is
copied from Angelo's mailing list post):
protected IContainer createContainer() throws
ContainerCreateException,
ContainerConnectException {
IContainer container =
super.createBasicContainer();
if (targetId != null) {
container.connect(targetId, connectContext);
}
return container;
}
Whenever this code is executed (e.g. upon startup), then
this logic:
if (targetId != null) {
container.connect(targetId, connectContext);
}
*will* synchronously attempt to connect to the service
host...and
if the service host is not yet started (whether
localhost
or some
other process) you will get a a connect exception...e.g.
like he got:
Caused by:
org.eclipse.ecf.core.ContainerConnectException:
Exception during connection to
ecftcp://localhost:3787/server
<stack trace deleted>
... 17 more
Caused by: java.net.ConnectException: Connection
refused:
connect
This means simply that the spring initialization code is
trying to
connect directly to a given host container (i.e.
targetId), and
that container hasn't had a chance to startup,
register the
remote
service, and then publish the remote service for
discovery
by the
consumer. In other words, the consumer framework
startup is
racing against the startup/initialization of the host.
One way to avoid the need to explicitly call
container.connect(targetId, connectContext) at *all*
is to
(on the
consumer) wait until the remote service is
discovered via
discovery...and only *then* have the container
connect to the
target container. The logic for doing so (i.e.
connect to the
target container) is already present in the
DefaultProxyContainerFinder, and the equivalent to
targetId is
already included in the metadata available via
discovery. One
major change in DefaultProxyContainerFinder *since* the
release of
ECF 3.2 was represented by this bug:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=303979
This makes it unnecessary to even create a proxy
container in
advance of the service discovery, as after this bug was
addressed
a container will be automatically created (if one
doesn't
already
exist) for dealing with incoming remote services being
discovered.
In other words, I believe that with the most recent
code from
HEAD it should be unnecessary for the spring
framework bean
to be
created on the consumer side at all. Both the container
creation
and the connection can/could all be done lazily...at
remote
service discovery time instead of eagerly (at spring
bean
creation
time).
But I'm probably misunderstanding something about
your/Angelo's
use case. So let's please move this to a new bug,
however, and
we can discuss further/diagnose/etc on that new bug.
Thanks,
Scott
Anyway as per your suggestion i will try with the
unreleased
code chunk of ECF .
Thanks and Regards
Abhisek
On Mon, May 17, 2010 at 11:33 PM, Scott Lewis
<
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx> <mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx>>
<mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx> <mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx>>>
<mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx>
<mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx>> <mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx>
<mailto:
slewis@xxxxxxxxxxxxx
<mailto:
slewis@xxxxxxxxxxxxx>>>>>
wrote:
Hi Abhisek,
You seem to be using ECF 3.2 release version
(Release date:
Feb
19, 2010). There have been a number of bugs
fixed since
then...one of which having to do with a
problem of
not properly
publishing the same service multiple times. For
testing, bug
identification, etc I would urge you to get the
latest from
HEAD,
as we are in the testing phase for ECF 3.3/Helios
release right
now...and so it would be most helpful to get some
assistance from
the community with testing ECF 3.3/Helios for
your
specific use
cases. If you need instructions for how to
get the
lastest
from
HEAD in your workspace please let me
know...and/or
see section
'Anonymous CVS Access to ECF Source Code':
http://www.eclipse.org/ecf/dev_resources.php
abhisek saikia wrote:
Hi Scott
I used
org.eclipse.ecf.sdk_3.2.0.v20100219-1253.zip
<
http://www.eclipse.org/downloads/download.php?file=/rt/ecf/3.2/3.6/org.eclipse.ecf.sdk_3.2.0.v20100219-1253.zip>
My issue is a bit different.I have 2
providers(in 2
different machines) and one consumer in
another
machine.The
providers implement the same Interface.I am
using Service
tracker in consumer side.I am able to receive
only one
remote
reference.While debugging ECF code i
found if a
container is
already connected(i.e it already discovered
provider in
machine 1),it cant find the remote service
reference from
machine 2(as the code has a check for
isContainerConnect which
is true while remotelocation becomes
machine2,
as its
already
connected to provider of machine 1) .
A couple of things. First...since 3.2 there has
been some
improvement/change of the logic in
DefaultProxyContainerFinder wrt
handling of multiple remote services.
Second...it is possible that this represents a
bug/problem
in the
DefaultProxyContainerFinder for handling your
use case.
Third...it's also possible that for your use case
there is an
ambiguity about what you want to happen on the
multiple-service
consumer...i.e. do you want the *existing* proxy
container
to be
used, or do you want a *new* container to be
created/connected for
this remote service? There are some
facilities already
present in
ECF to support some of these use cases, so it
may be a
matter of
figuring out what you wish to happen and then
using
those
facilities.
So...I recommend that you get the latest code
from HEAD,
and try
this same use case again. If it still has
problems
then lets
identify them, and we'll address those problems
and/or needed
generalization to handle your use case.
Thanks,
Scott
_______________________________________________
ecf-dev mailing list
ecf-dev@xxxxxxxxxxx
<mailto:
ecf-dev@xxxxxxxxxxx> <mailto:
ecf-dev@xxxxxxxxxxx
<mailto:
ecf-dev@xxxxxxxxxxx>>
<mailto:
ecf-dev@xxxxxxxxxxx
<mailto:
ecf-dev@xxxxxxxxxxx> <mailto:
ecf-dev@xxxxxxxxxxx
<mailto:
ecf-dev@xxxxxxxxxxx>>>
<mailto:
ecf-dev@xxxxxxxxxxx
<mailto:
ecf-dev@xxxxxxxxxxx>
<mailto:
ecf-dev@xxxxxxxxxxx
<mailto:
ecf-dev@xxxxxxxxxxx>> <mailto:
ecf-dev@xxxxxxxxxxx
<mailto:
ecf-dev@xxxxxxxxxxx>