[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
|
[news.eclipse.technology.ecomm] My interpretation of your abstract model
|
Scott:
I'm going to try to do three things here:
1) Provide some broad comments about differneces in perspective
2) Provide my view of the major interfaces comprising your approach
3) Use that approach to characterize how online awareness and
conferences would be accomplished and see what questions arise.
Here goes.*
Broad comments:*
To some degree the abstract model that I originally outlined derives
from consideration of telephony-like concerns. The choice of terms
(conferences) reflects that. To some degree your approach seems to be
more driven from computer science approaches. The emphasis on shared
objects and state sharing reflects that. I do not mention this because
I prefer either approach. Both approaches provide insights; they are
simply different disciplines or cultures within which people have been
trying to solve these problems. A big part of the challenge in a
proposal like yours is to draw insights from all perspectives and fuse
them into a single approach.
*My interpretation of your approach:
*At its most basic, you seem to be talking in terms of three base
interfaces. Let me refer to these as a SharedObjectSpaceFactory, a
SharedObjectSpace, and a SharedObject.
_SharedObjectSpaceFactory_
This is an object that is used to create SharedObjectSpaces. It is
implementation neutral and can create SharedObjectSpaces that support
alternate implementations using different protocols. It is a
singleton. Alternate factories for implementing specific
SharedObjectSpaces are plugged into (or registered against) the
SharedObjectSpaceFactory. When a request to create a SharedObjectSpace
of a particular type is requested, the appropriate factory is found and
asked to create the SharedObjectSpace that is then returned from the
SharedObjectFactory. This is pretty much all the factory does. It
supports registration of implementation-specific factories and creation
requests. In addition, it should support queries regarding the
available types and the instantiated SharedObjectSpaces.
_SharedObjectSpace_
The SharedObjectSpace is a container for SharedObjects. Clients connect
to the SharedObjectSpace to gain access to the SharedObjects. They
disconnect from the SharedObjectSpace when access is no longer needed.
Connecting to the SharedObjectSpace is the primary authenticated
operation. Further operations on the space and the objects it contains
will refer back to the authenticated persona provided upon connection.
While other operations may require permission, authentication will not
occur again. Connection to the SharedObjectSpace does not in and of
itself convey any information to others about the presence of the
authenticated persona.
A SharedObjectSpace supports the abilities to attach SharedObjects to
and detach SharedObjects from the space. To convey presence, a client
attaches a presence object to the space. From the SharedObjectSpace one
can obtain a list of the currently attached SharedObjects.
One of the important operations on the SharedObjectSpace is the
registration of subscriptions for information about SharedObjects. I
assume these subscriptions can indicate both the properties (including
type) of a SharedObject that make its events interesting and the types
of events that are worth reporting. I assume that the SharedObjectSpace
generates the actual notifications. The "publication" of the event
occurs when the object is attached, deltached, updated, or manipulated
(e.g. send operation). (While subscription for creation cannot be
registered against the object itself, other subscriptions can be
registered on the individual objects. I'm still not sure what your
position on this is, but here I've chosen to assume that only the
SharedObjectSpace actually receives subscriptions and provides
notifications.)
_
SharedObject_
There are many different types of SharedObjects each of which supports a
different interface for interacting among the clients that are attached
to the SharedObjectSpace and subscribed for the interactions. The
SharedObjects enforce permissions so that one client may expose a
SharedObject, such as presence, and be assured that other clients are
not manipulating that object. The details of the interface for
SharedObjects will depend on the type, but they will have properties
against which subscriptions may be formed. They will also have
modifiable state that can generate events to which clients subscribe.
Many will also support a send event that supports messaging among the
subscribed clients without implying any state change.
*Mapping this approach onto online awareness and conferences*
_Online awareness_
To support online awareness let's assume that there is a type of
SharedObjectSpace against which clients will register their online
presence. Let's call this specialization a PresenceCommunity. To
obtain online presence information, I connect to the PresenceCommunity
and submit my subscription for the objects I am interested in. In this
case, I am asking for events related to PresenceObjects with the names
enumerated in my buddy list.
Upon joining the PresenceCommunity, I also attach a specialized
SharedObject called a PresenceObject. Before disconnecting from the
space, I detach this object. If I want to reflect my online status, I
change one of the modifiable properties of this PresenceObject. Others
learn of my presence when the PresenceObject first attaches, changes, or
detaches, provided they have registered for these events against my
presence. The PresenceObject enforces permissions such that only I may
change my PresenceObject. Others have a read-only version of the presence.
This formulation brings to mind two questions:
1) How do we support global presence? I think people do want this and
as I have indicated elsewhere fracturing presence into separate
communities raises issues about how many communities I must be in, how I
know where other people's communities are, etc.
2) Doesn't the PresenceObject need to be more specialized than this
implies? First, it is critical that no one be able to spoof my
presence, which means that the key attribute must be managed by the
system and not simply by the client. I suppose one might argue that
every SharedObject might have an attacher field filled in with the
authenticated name of the person who attaches the object. This might do
it and not require specialization. But what about this? Most
SharedObjects must survive beyond the presence of the attaching user,
while the presence object must not. If I disconnect from the
SharedObjectSpace without detaching my PresenceObject, then all clients
must somehow learn that my PresenceObject is stale. This implies that
the PresenceObject is specialized to the extent that its existence is
somehow tied to the disconnection operation. Consider further that I
might want to enforce reciprocity of presence and ensure that no client
may lurk by refusing to attach the PresenceObject. For these reasons, I
tend to think of the PresenceObject as tied to the connect and
disconnect operations and created and destroyed on behalf of the client
rather than managed by the client.
_
Conferences_
To support conferences, let's assume that there is a type of
SharedObjectSpace called a Conference. I create the Conference, add my
PresenceObject, and somehow make others aware of the Conference. Then,
they attach to the Conference and add their PresenceObjects. To
actually interact with each other, we attach a specialized SharedObject,
such as a Chat object. We use the send method of the Chat object to
transmit messages among the participants. In general, we subscribe to
learn about all the SharedObjects attached to the space, including the
PresenceObjects. Later, we decide that we would like a voice channel,
so one of us attaches an AudioChannelObject, then we continue to
interact using this new object.
This formulation raises these questions:
1) How do we do invites? Somehow we need a way to call someone into a
Conference that they are not currently in. We could create a Community
through which invitations will occur, but this brings us back to the
whole issue of multiple communities. Now, I have to listen on all the
communities that might contain someone who wants to call me. This does
not seem tenable. Instead, it seems necessary to provide a global
service for relaying invitations.
2) How do we negotiate streaming channels? It is an annoying fact of
life that communication resources require negotiation before they can be
effectively used. There are issues of codecs, preferred channels, and
quality of service parameters. I am uncertain how such negotiations
proceed in this formulation.
3) More than the Online awareness example, Conferences bring forward
concerns about ensuring against lurking. Won't we want to tie
PresenceObjects to the connect and disconnect operations?
*******
Enough for now.
jfp