<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Mohamed Abdelaziz&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/" />
<modified>2008-02-23T00:54:15Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/hamada/139</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2008, hamada</copyright>
<entry>
<title>JXTA on SDN</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2008/02/post.html" />
<modified>2008-02-23T00:54:15Z</modified>
<issued>2008-02-22T19:38:48Z</issued>
<id>tag:weblogs.java.net,2008:/blog/hamada/139.9257</id>
<created>2008-02-22T19:38:48Z</created>
<summary type="text/plain">Recently, I was interviewed by &quot;Edward Ort&quot; host of the Sun Developer Network, to provide an insight on the kinds of devices and applications JXTA technology supports.  </summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>J2ME</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[<iframe src="http://sunfeedroom.sun.com/linking/index.jsp?skin=twoclip&fr_story=FRdamp251624&rf=ev&hl=true" width="627" height="277" scrolling="no" frameborder="0" marginwidth="0" marginheight="0" ></iframe>]]>

</content>
</entry>
<entry>
<title>New JXTA Micro Edition (CLDC/MIDP 2.0)</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2008/02/new_jxta_micro.html" />
<modified>2008-02-02T20:21:16Z</modified>
<issued>2008-02-02T20:21:08Z</issued>
<id>tag:weblogs.java.net,2008:/blog/hamada/139.9120</id>
<created>2008-02-02T20:21:08Z</created>
<summary type="text/plain"><![CDATA[ jxme Last week a new version of the JXTA edge protocols was open sourced at the "Java Mobile and Embedded Developer Days".&nbsp; Up until recently the JXTA protocols have been implemented under JavaSE, C, JavaME CDC profile, and proxy...]]></summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>J2ME</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title>jxme</title>
</head>
<body>
Last week a new version of the JXTA edge protocols was open sourced at
the "<a href="https://developerdays.dev.java.net/">Java Mobile and
Embedded Developer Days</a>".&nbsp; Up until recently the JXTA
protocols have been implemented under JavaSE, C, JavaME CDC profile,
and proxy version under CLDC.&nbsp; The JXTA ME/CLDC proxy version had
been pretty limited in the functionality it provided under CLDC, due to
that fact that relied on a proxy for it's participation within a
network, however, now with the new addition of the protocols, it is now
possible for a MIDP 2.0 compliant device to participate in a JXTA
network as first class device.&nbsp; <br>
<br>
A mobile device is now able to:<br>
<ul>
<li>Describe and publish advertisements about phone resources</li>
<li>Discover network resources</li>
<li>Establish direct and virtual multicast connections to other nodes</li>
<li>Use portable JxtaSocket, JxtaMulticastSocket (sub-class of
java.net.Socket and MutlicastSocket respectively) <br>
</li>
<li>Use a datagram like asynchronous bidirectional JxtaBiDiPipe</li>
</ul>
<div style="margin-left: 160px;"><img
style="width: 205px; height: 174px;"
alt="JXTA Micro Edition (CLDC/MIDP 2.0)"
title="JXTA Micro Edition (CLDC/MIDP 2.0)"
src="http://weblogs.java.net/blog/hamada/archive/JXME.png"><br>
</div>
<ul>
<li>Join or create a virtual private domain</li>
</ul>
<div style="margin-left: 120px;"><img
style="width: 379px; height: 281px;" alt="Virtual Private Domain"
title="Virtual Private Domain"
src="http://weblogs.java.net/blog/hamada/archive/jxta-vpn.png"><br>
</div>
&nbsp;<br>
<br>
In the past few years mobile devices have advanced in their multi-media
and networking capabilities, however the usefulness of such features
has been very limited,
due to access difficulty of content or the need for multiple
services.&nbsp; In most
cases a user must transfer content to/from the mobile device through
wired or Bluetooth connection, or rely a central point of
exchange, making it cumbersome for seamless content/data
access.&nbsp;&nbsp; <br>
<br>
With the availability of the JXTA platform on such devices, it is
now possible for a user to create and define members of a virtual
private
domain, where discovery and full connectivity is possible within the
domain.&nbsp; Thus enabling seamless cross internet data access and
synchronization (imagine photo album, calendars, and contacts), and
connectivity (imagine multi-media streaming between home (desktop/TV),
office, and mobile device).&nbsp; This functionality was demoed at the
"Java Mobile and Embedded Developer Days", whereby a desktop and mobile
device seamless shared photos, the mobile device discovering a printer
within the domain, and remotely printing one of the photos. If you
missed the conference or the web-cast, you can access the slides from <a
href="http://download.java.net/mobileembedded/developerdays/2008/TS-19-ME2008-final.pdf">here</a>.<br>
<br>
The sources have been opened under <a
href="http://jxta-jxme.dev.java.net">http://jxta-jxme.dev.java.net</a>
(under midp2), under the JXTA license. We encourage community
participation in testing and writing applications which take advantage
of seamless discovery and connectivity in creating useful applications
for mobile devices.<br>
<br>
</body>
</html>

]]>

</content>
</entry>
<entry>
<title>Dynamic Scalable Clustering</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2007/10/dynamic_scalabl_1.html" />
<modified>2007-10-06T23:01:10Z</modified>
<issued>2007-10-06T23:00:56Z</issued>
<id>tag:weblogs.java.net,2007:/blog/hamada/139.8386</id>
<created>2007-10-06T23:00:56Z</created>
<summary type="text/plain">In today&apos;s information technology world, fault tolerance has become an expected system characteristic, as demands on such systems, not only requires the availability of data, but also the efficiency of such systems.</summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[In today's information technology world, fault tolerance has become an expected system characteristic, as demands on such systems, not only requires the availability of data, but also the efficiency of such systems.<br /><br />By clustering a set of servers, with minimal, or no configuration,&nbsp; through a dynamic discovery protocol, a compute cluster can be formed to increase compute power, availability, security, and geographical distribution. &nbsp;<br /><br />As a fault tolerance strategy, the Shoal clustering framework devises a self organization protocol, allowing nodes to autonomously elect a master for the cluster (based on discovery views), as well as candidates in the case of master failure.&nbsp; This allows for dynamic deployment of clusters as well as expanding/shrinking an existing cluster.<br /><table cellspacing="0" border="0" align="right" style="width: 50%;"><tbody><tr><td style="width: 100%;">&nbsp;<img width="170" vspace="0" hspace="0" height="88" border="0" align="bottom" src="https://shoal.dev.java.net/Shoal_244_179_0.JPG" alt="Shoal" /></td></tr></tbody></table><br />Shoal, the cluster management framework, provides the foundation for network configuration and dynamic and autonomous cluster formation. The goals of the framework are:<ul><li>Near Zero-configuration</li><li>Multi cluster support</li><ul><li>Application specific clustering, eg. load balancer/HA cluster</li><li>Cluster traffic isolation<table width="299" height="36" cellspacing="0" cellpadding="0" border="0" align="right"><tbody><tr><td style="width: 100%;">&nbsp;<img vspace="0" hspace="0" border="0" align="bottom" alt="Multi Cluster Support" src="http://blogs.sun.com/hamada/resource/multiCluster.png" style="width: 309px; height: 149px;" /></td></tr></tbody></table></li><li>Added security</li><li>improved resource utilization<br /></li></ul><li>Dynamic clustering</li><ul><li>Hot pluggable</li></ul><li>Simplified addressing</li><ul><li>By cluster, node, and channel name</li></ul><li>Adaptive communication channels</li><ul><li>Fault tolerance</li></ul><ul><li>Transparent multi protocol support&nbsp; (tcp, udp, http)</li></ul></ul><p>Shoal 1.0 was release August 30th, and is utilized in GlassFish V2, which was released September 17th, for clustering and http session HA.&nbsp;</p><p> Currently the following features are being worked on :</p><ul><li>Enabling multi cluster support</li><li>Enabling cross sub-net and cross firewall&nbsp; deployment</li><li>Solidifying lightweight cluster multicast <br /></li></ul>We encourage community participation in enabling and identifying missing features by joining and participating in the <a title="Shoal Home Page" href="http://shoal.dev.java.net">shoal</a> community.<br /><p>
</p>]]>

</content>
</entry>
<entry>
<title>JXTA 2.5 FCS is just around the corner</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2007/09/jxta_25_fcs_is.html" />
<modified>2007-09-05T04:48:48Z</modified>
<issued>2007-09-05T04:48:41Z</issued>
<id>tag:weblogs.java.net,2007:/blog/hamada/139.8179</id>
<created>2007-09-05T04:48:41Z</created>
<summary type="text/plain">JXTA-JXSE 2.5 stable release is just around the corner</summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>Community: JXTA</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body>
The next release of JXTA for Java SE/EE 5.0, JXSE 2.5 "Pavlova", is
finally nearing completion. The Pavlova release is the result of
tremendous effort over the last ten months. Pavlova will contain
significant enhancements to JXSE along with the usual mix of
refinements and bug fixes.&nbsp;&nbsp;&nbsp; By far this release of the
JXTA for JavaSE is the most stable and performant release to
date.&nbsp; JXTA for JavaSE 2.5 includes the following features and
enhancements, but not limited to :<br>
<ul>
<li>An NIO based Scalable TCP/IP message transport</li>
<li>A per PeerGroup ThreadPool, and retiring of the service message
quota logic</li>
<li>Introduced an complement to the NetworkConfigurator, which
abstracts node operating modes, and manages the platform lifecycle</li>
<li>Much improved Tutorials and programmers guide</li>
<li>Optimized route healing, beneficial to mobile nodes</li>
<li>Improved connectivity (rendezvous, relay, JxtaSocket,
JxtaBiDiPipe, pipes</li>
<li>Improved JxtaServerPipe concurrent connection handling</li>
<li>Expose and make use of direct messengers whenever possible, thus
achieving 10x performance.</li>
<li>Improved startup time to sub-second from a previous 5 second
startup time</li>
<li>Optimized directed propagated pipes to utilize direct messengers,
and avoid two layers of overhead, resulting in higher reliability and
improved performance</li>
<li>Improved SRDI GC which caused CPU spikes at times</li>
<li>Improved endpoint messenger concurrency which lead to improved
message delivery latency</li>
<li>Countless bug fixes throughout the code base, which improves the
overall reliability of the platform</li>
</ul>
<br>
Special thanks to all of the community members who have already
contributed ideas, reported problems, provided patches, and have helped
greatly to improve the quality, and robustness of this release.<br>
<br>
Especially deserving of recognition for the Pavlova release are the
Shoal/Glassfish team and separately, Roger 'malveaux' Karis. The 2.5
release would not be nearly as robust, stable nor complete without your
contributions.<br>
<br>
Also, thanks in advance to all of the community members who spend time
trying this test release, file issues and contribute to the final
release. We won't be able to do it without you!<br>
<br>
<br>
&nbsp;
</body>
</html>

]]>

</content>
</entry>
<entry>
<title>Shoal Dynamic Clustering</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2006/11/shoal_dynamic_c.html" />
<modified>2006-11-09T23:31:02Z</modified>
<issued>2006-11-09T19:57:53Z</issued>
<id>tag:weblogs.java.net,2006:/blog/hamada/139.5904</id>
<created>2006-11-09T19:57:53Z</created>
<summary type="text/plain">A few days ago http://shoal.dev.java.net was open sourced. Shoal is a java based clustering framework that provides the foundation for building fault tolerance, reliability and availability. The Shoal project was initiated a few months ago as a collaborative effort between the GlassFish appserver group at Sun and the JXTA group at Sun.</summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>Community: JXTA</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[The <a
href="http://shoal.dev.java.net">Shoal</a> Framework provides a
cluster communication and event mechanisms. Shoal's&nbsp; core service
(GMS), enables an application to dynamically become a member of&nbsp; a
predefined cluster, and as such, is subscribed to cluster events, such
as :<br>
<br>
- <a
href="https://shoal.dev.java.net/ShoalGroupEventNotifications.html">Member
join, planned shutdown, failures</a><br>
- Recovery member selection<br>
- Automated delegated recovery initiation<br>
<br>
A cluster member is also able to broadcast messages to an individual
member or all members of the cluster(see <a
href="https://shoal.dev.java.net/ShoalMessaging.html">Messaging</a>).
In addition to messaging, members can share data using GMS's Shared
Cache (see <a
href="https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/ee/cms/core/DistributedStateCache.java?rev=1.2&amp;view=markup">DistributedStateCache</a>).<br>
<br>
The main goal for the shoal project to provide a clustering framework
for the GlassFish project, however it does not preclude it from being
used for purposes, such as the foundation for a grid deployment, or a
deployment of a highly available service, etc (I would be interested in
hearing about other use cases).<br>
<br>
Shoal/GMS utilizes the JxtaManagement component (a <a
href="http://www.jxta.org">JXTA</a> based group service provider) for
dynamic cluster configuration, formation, and monitoring.&nbsp; This
component is broken out as follows :<br>
<ul>
<li><a
href="https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/jxtamgmt/NetworkManager.java?rev=1.2&amp;view=auto&amp;content-type=text/vnd.viewcvs-markup">NetworkManager</a>.&nbsp;
Given a instance and group name, NetworkManager uses a SHA-1 hash to
encode the cluster GroupID, and NodeID, in addition it also defines a
set of predefined communication identifiers which are used for
formation, monitoring and messaging.&nbsp; In addition, an application
may pass additional configuration parameters, such as bootstrapping
addresses to facilitate cross sub-net and firewall communication.</li>
<li><a
href="https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/jxtamgmt/SystemAdvertisement.java?rev=1.1.1.1&amp;view=auto&amp;content-type=text/vnd.viewcvs-markup">SystemAdvertisement</a>.
An extensible XML document describing system characteristics (HW/SW
configuration. CPU load would be a nice extension). This information is
exchanged during cluster formation, and monitoring.&nbsp; It is
envisioned that such information would serve at the foundation of a
Grid&nbsp; framework.</li>
<li><a
href="https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/jxtamgmt/MasterNode.java?rev=1.2&amp;view=auto&amp;content-type=text/vnd.viewcvs-markup">MasterNode</a>.
Is a lightweight protocol allowing a set of nodes to discover one
another, and autonomously elect a master for the cluster.&nbsp; The
protocol is resilient to multi node collisions and employs an
autonomous mechanism to avoid network chatter to resolve collisions.</li>
<ul>
<li><a
href="https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/jxtamgmt/ClusterView.java?rev=1.1.1.1&amp;view=auto&amp;content-type=text/vnd.viewcvs-markup">ClusterView</a>.
Maintains an ordered view of the Cluster<br>
</li>
</ul>
<li><a
href="https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/jxtamgmt/HealthMonitor.java?rev=1.1.1.1&amp;view=auto&amp;content-type=text/vnd.viewcvs-markup">HealthMonitor</a>.&nbsp;
Is a&nbsp; lightweight protocol allowing a set of nodes to monitor the
health of a cluster. The HealthMonitor relies on a tunable heart beat,
which is acted upon by the MasterNode to notify the group of failures,
and by other members to elect a new master if the master node fails.</li>
<li><a
href="https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/jxtamgmt/ClusterManager.java?rev=1.1.1.1&amp;view=auto&amp;content-type=text/vnd.viewcvs-markup">ClusterManger</a>.
Manages lifecycle of this SPI<br>
</li>
</ul>
<div style="margin-left: 120px;"><a
href="https://shoal.dev.java.net/source/browse/*checkout*/shoal/www/ClusterManager.png"><img
alt="ClusterManager Stack" title="ClusterManager Stack"
src="https://shoal.dev.java.net/source/browse/*checkout*/shoal/www/ClusterManager.png"
style="border: 0px solid ; width: 396px; height: 267px;"></a><br>
</div>
<div style="margin-left: 160px;">
<address>Figure 1. ClusterManager Software Stack</address>
</div>
<br>
By using JXTA as the foundation for the ClusterManager, shoal is able
to :<br>
<ul>
<li>Use logical name cluster and node addressing (requires unique
naming)<br>
</li>
<li>Achieve near Zero configuration for cross sub-net and firewall
connectivity</li>
<li>Inherit dynamic transport selection without application
intervention (multicast vs. unicast)</li>
<li>Inherit dynamic route repair <br>
</li>
<ul>
<li>Enables mobility, same name different physical addresses</li>
<li>Automatic rerouting on/to available interfaces on multi-homed
nodes<br>
</li>
</ul>
<li>Inherit traffic scoping to cluster members</li>
<li>Establish secure end-to-end channels</li>
</ul>
<br>
for additional blogs on the project, see blog entries by <a href="http://blogs.sun.com/shreedhar/entry/project_shoal_graduates_with_source">Shreedhar</a>,   <a href="http://blogs.sun.com/tra/entry/glassfish_%2B_jxta_%3D_shoal">Bernard, Traversat</a> and <a href="http://blogs.sun.com/MortazaviBlog/entry/congratulations_to_shoal">Masood Mortazvi</a>]]>

</content>
</entry>
<entry>
<title>Demystifying Pipes, JxtaSockets, JxtaMulticastSocket, and JxtaBiDiPipes</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2005/08/demystifying_pi.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-08-23T17:20:02Z</issued>
<id>tag:weblogs.java.net,2005:/blog/hamada/139.3136</id>
<created>2005-08-23T17:20:02Z</created>
<summary type="text/plain">Lately there has been several inquiries about JXTA&apos;s PipeService, and companion utilities (JxtaSocket, JxtaMulticastSocket, and JxtaBiDiPipe) on JXTA&apos;s discussion lists, hence this blog to shed more light on the PipeService and utilities provided, and their inherit features.</summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>Community: JXTA</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[<p>Lately there has been several inquiries about JXTA's PipeService, and companion utilities (JxtaSocket, JxtaMulticastSocket, and JxtaBiDiPipe) on JXTA's discussion lists, hence this blog to shed more light on the PipeService and utilities provided, and their inherit features.<br>
</p>
<p>
The initial goal of the PipeService was to provide primitive (unidirectional, and unreliable) message based communication channels upon which complex and sophisticated communication channels can be built.  The PipeService provides three types of pipes described as follows:</p>

<b><i>JxtaUnicast</b></i>
<ul>
 <li>Unidirectional
 <li>Unreliable
 <li>Many to one
 <li>Limited to 64KB messages</li>
</ul>
<b><i>JxtaUnicastSecure</b></i>
<ul>
 <li>Unidirectional
 <li>Limited reliability (no direct notification of failures other than channel failure)
 <li>Many to one
 <li>Limited to 64KB messages</li>
</ul>
<b><i>JxtaPropagate</b></i>
<ul>
 <li>Multidirectional (many to many)
 <li>Unreliable
 <li>Limited to 64KB messages in infrastructure mode, and limited by physical transport limitation where applicable</li>
</ul>
<p>
<div style="margin-left: 120px;">
<a href="http://blogs.sun.com/roller/resources/hamada/platform.png" onclick="window.open('http://blogs.sun.com/roller/resources/hamada/platform.png','popup','width=200,height=300,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0');return false"><img src="http://blogs.sun.com/roller/resources/hamada/platform.png" height="100" width="133" border="1" hspace="4" vspace="4" alt="JXTA JSE platform software stack" /></a>
JXTA JSE platform software stack<br>
</div>
</p>
<p>
Unicast pipes (clear, and secure) are bound by the PipeResolver, which provides two modes of bindings, a static (where a set of peers is specified), and a dynamic (no peers specified) binding.  Static binding is beneficial in constraining communication to a limited set of peers, while dynamic is beneficial in implementing unconstrained mobile communication channels.  Both modes can be utilized in implementing fault tolerant communication channels.<br>
</p>

<p>
Propagated pipes employ a mechanism similar to that of IGMP, where a creation of an input pipe results in propagated pipe channel join message (a pipe SRDI message to a the peer's rendezvous). In infrastructure mode propagated pipe messages are sent to the rendezvous for propagation to the subscribers of the propagated pipe channel, while in ad-hoc mode messages are propagated over the endpoint (currently only the TCP transport supports such function over multicast).  A pipe closure results in a channel resign message (a pipe SRDI message to the rendezvous expiring the previous join). It's worth noting that the PipeResolver plays no part in binding of such pipe type<br>
</p>
<b>Pipe Binding</b>
<p>
An InputPipe creation results in the creation of an endpoint incoming messenger, and an SRDI message with the pipe ID with an infinite expiration time. Once the InputPipe is closed another SRDI message is emitted with the pipe ID, and expiration time of 0, invalidating any reference for the pipe and peer. Note: This behavior applies to all pipe types.
</p>
<p>
An output pipe creation results in a PipeResolver query message emitted querying for instances of the pipe. A match results in a PipeResolver response to the querying peer, where an endpoint messenger to responding peer is created. Note that such messenger may not be fully resolved until the EndpointRouter has determined a valid route. During such event few messages maybe queued (3 to be exact) until the messenger has been resolved.  In addition, as part of the pipe resolver protocol the pipe resolver periodically reattempts pipe resolutions in the background to validate resolved pipe endpoints.  It is through this mechanisms pipes can migrate from one peer to another.  note: this behavior is limited to unicast pipe types.
</p>
<p>
<div style="margin-left: 120px;">
<a href="http://blogs.sun.com/roller/resources/hamada/srdi.png" onclick="window.open('http://blogs.sun.com/roller/resources/hamada/srdi.png','popup','width=200,height=300,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0');return false"><img src="http://blogs.sun.com/roller/resources/hamada/srdi.png" height="100" width="133" border="1" hspace="4" vspace="4" alt="SRDI message path within the JXTA network" /></a>
SRDI message path within the JXTA network<br>
</div>
</p>
<b>Pipe Endpoint</b>
<p>
A pipe endpoint is composed of a peer, group, and pipe ID, through this definition there are two inherit modes of pipe endpoint migration:
<ol>
 <li>Peer endpoint migration, an inherit feature of the Endpoint-Router, where a peer may change physical, or virtual addresses.
 <li>Pipe endpoint migration, where a pipe endpoint ceases to exists on a peer, where the PipeResolver, attempts to rebind to the pipe (which I always refer to as a virtual channel)
</ol>
</p>
<p>
The first mode is transparent the application, while the second may result in an IOException.
</p>
<b>Reliability</b>
<p>
A standalone message and stream based reliability layer over non reliable messengers, is provided in the platform to facilitate reliable communication channels.
</p>

<b><i>Reliability Library</b></i>
<ul>
 <li>Ensures message sequencing
 <li>Interfaces to pipes or messengers
 <li>Ensures delivery
 <li>Exposes message, and stream interfaces
 <li>Spawns a single thread to deal with retransmission
 <li>Does not ensure message integrity</li>
</ul>

<b>Bidirectional communication channels</b>
<p>
JxtaServerSocket, and JxtaServerPipe expose a input pipe to process connection requests and negotiate communication parameters,  whereby a JxtaSocket, or JxtaBiDipipe bind to respectively to establish private dedicated pipes independent of the connection request pipe. JxtaSocket, and JxtaBiDiPipe utilize a messenger instead of an output pipe for the back channel to reduce connection latency (avoids 4 messages), therefore only peer endpoint migration is inherited, and one should always expect an IOException if a PipeEndpoint migrates, or ceases to exist.<br>
</p>
<b><i>JxtaSocket, JxtaServerSocket</b></i>
<ul>
 <li>Subclass java.net.Socket, and java.net.ServerSocket respectively
 <li>Built on top of pipes, endpoint messengers, and the reliability library
 <li>Provides bidirectional and reliable communication channels
 <li>Exposes stream based interface a la Socket
 <li>Provides configurable internal buffering, and message chunking
 <li>Does not implement the Nagels algorithm, therefore streams must be flushed as needed (a common oversight when wrapping object and data streams over the socket stream)
</ul>

<b><i>JxtaBiDiPipe, JxtaServerPipe</b></i>
<ul>
 <li>Built on top of pipes, endpoint messengers, and the reliability library
 <li>Provides bidirectional and reliable communication channels
 <li>Exposes message based interface
 <li>Requires no heart beat to maintain an open connection
 <li>Provides no message chunking</li>
</ul>

<b>Multidirectional communication utility</b>
<p>
JxtaMulticastSocket extends java.net.MutlicastSocket and provides mutlicast functionality over JXTA propagated pipes.
</p>
<b><i>JxtaMulticastSocket</b></i>
<ul>
 <li>Subclass java.net.MulticastSocket
 <li>Built on top of propagated pipes
 <li>Exposes datagram based interface a la MulticastSocket
 <li>Provides unicasting through datagram addressing
</ul>

<b>Message size and limiting factors</b>
<ol>
<li>The JXTA platform imposes a soft MTU of 64KB (which becomes a hard limit under load), messages exceeding MTU are simply dropped. While nodes maybe able to transmit and receive messages larger than 64KB, it is strongly advised this limit is not exceeded in reliable mode, as it will result in failed or broken channels.
<li>When utilizing relay peers, such limit must not be exceeded in either mode (reliable or otherwise) as the relay nodes are likely to be loaded and/or the fairness message queue size quotas are enforced, thus leading to message loss and consequently failed or broken channels.
</ol>

<b>Common pitfalls</b>
<ul>
<li>Pipe advertisement mismatch.  Typically occurs when dynamically creating and discovering pipe advertisements using non unique identifiers, or deterministic method. Normally overcome through hardcoded pipe advertisements (or pipe ID's), encoded pipe ID's.
<li>Un-synchronized pipe binding.  Typically caused by network islands, which are joined at a later point in time.  Easily overcome through rendezvous event listener prior to any binding attempt.
<li>Failed Secure pipe connections.  Typically due to failure of establishing NetPeerGroup credentials (TLS resides in the NetPeerGroup, and inherited by all sub-groups), or missing a trusted certificate or certificate chain in PSE. This is overcome by establishing NetPeerGroup credentials, and ensuring the perspective trusted certificate or certificate chain is stored into PSE (See the shell command pse.importcert).
]]>

</content>
</entry>
<entry>
<title>Distributed Collections, and Maps</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2005/06/distributed_col_1.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-15T07:56:58Z</issued>
<id>tag:weblogs.java.net,2005:/blog/hamada/139.2589</id>
<created>2005-06-15T07:56:58Z</created>
<summary type="text/plain">Have you wondered whether it is possible to create a distributed Map, or a Collection over JXTA?</summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>Community: JXTA</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[<p>There's no reason to wonder any longer.  The JXTA platform is well suited for the task, and provides several mechanisms which allow a variety of features which can be offered by such applications.  i.e.</p>

<p>Imagine if members of a JXTA virtual multicast group could dynamically self organize, then they can easily self organize into replica and consumer nodes, whereby objects are transparently replicated within a given JXTA virtual mutlicast group.  In addition through the use of these virtual channels, nodes can detect node failures and dynamically self adapt their designation within the group. Also, mobile nodes can continue to participate within the group without the need to reconfigure.  It is this dynamic nature of the JXTA platform, with which, one can achieve scalable and fault tolerant applications with a bit of code.</p>

<p>I have been in discussion about this with my Sun colleagues and Some of the JXTA community members and so far we don't see any inhibitors to implementing simple distributed Maps, or Collections, which can serve as the foundation for more complex incarnations.</p>

<p>We invite you to join the discussion of such features on <a href="mailto:dev@platform.jxta.org">dev@platform.jxta.org</a>, or <a href="mailto:dev@jxta.org">dev@jxta.org</a></p>

<p>It's time for alternatives. </p>]]>

</content>
</entry>
<entry>
<title>Have you heard of Google&apos;s Summer of Code?</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2005/06/have_you_heard_1.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-06T18:28:32Z</issued>
<id>tag:weblogs.java.net,2005:/blog/hamada/139.2542</id>
<created>2005-06-06T18:28:32Z</created>
<summary type="text/plain">Have you heard of Google&apos;s Summer of Code?
Are you a student?</summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>Community: JXTA</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[If you have answered yes to the above, we are very happy for you!.
Google is sponsoring the Summer of Code, and Project JXTA is one of the participating organizations. We have created a list of projects in the areas where we seek contribution.  If you are a student and it is of interest to you, you can read about all the details and the list of projects at :<br>

<a href="http://wiki.java.net/bin/view/Jxta/HowToParticipate">http://wiki.java.net/bin/view/Jxta/HowToParticipate</a>
<br>
We look forward to a fruitful summer.
<br>]]>

</content>
</entry>
<entry>
<title>JXME on CDC? maybe closer than you think</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/hamada/archive/2005/05/jxme_on_cdc_may.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-05-16T07:53:06Z</issued>
<id>tag:weblogs.java.net,2005:/blog/hamada/139.2449</id>
<created>2005-05-16T07:53:06Z</created>
<summary type="text/plain">In anticipation of JSR 218 reference implementations becoming available soon, the JXME protocol is being updated to provide JXTA edge functionality over CDC 1.1 and the foundation profile.</summary>
<author>
<name>hamada</name>

<email>Mohamed.Abdelaziz@Sun.COM</email>
</author>
<dc:subject>Community: JXTA</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/hamada/">
<![CDATA[The <a href="http://jxme.jxta.org">JXME</a> project has provided proxy based support of a subset of the <a href="http://www.jxta.org">JXTA</a> protocols. The proxy provided much of the interaction between the device and other nodes on the network. Recently there has been quite a bit of interest of supporting a richer set of protocols for the "Connected Device Configuration", and as a result most of the <a href="http://www.jxta.org">JXTA</a> protocols have been ported to run on <a href="http://jcp.org/en/jsr/detail?id=218">JSR 218</a>, and the foundation profile this includes : <p>

- All JXTA advertisement bindings, including support for application defined advertisements.<p>
- All protocol messages in support of edge functionality<p>
- LiteXML support<p>
- All JXTA Core service (minus PeerInfo, and (of course) Proxy)<p>
- TCP/IP transport<p>
- Client Relay transport<p> 
- JXTA ID's<p>

There remains a handful of classes to be implemented to provide an in memory cache manager, and PlatformConfigurationFactory. So far the stack sitting at about <strong>581K</strong>, and it is expected not to deviated that much. There still remains plenty of work to be done, and I can all the help I can get. Please pay the project a visit and feel free volunteer for any of the unassigned tasks. It will definitely be appreciated.<p>

I keep a diary of my progress on my sun <a href="http://blogs.sun.com/hamada">blog</a>, and under <a href="http://jxme.jxta.org">JXME</a>.]]>

</content>
</entry>

</feed>