14_JXME_final

Download Report

Transcript 14_JXME_final

JXTA for J2ME
14-1
Learning Objectives
●
This module will help you...
–
Learn about the architecture of JXTA for
J2ME
–
Learn the JXTA for J2ME APIs
–
Learn how the JXTA for J2ME APIs can be
used to build a simple peer-to-peer (p2p)
application
14-1
What is JXTA for J2ME?
●
●
●
●
●
●
●
Provides a peer-to-peer infrastructure for
small devices
Interoperates with Project JXTA
protocols
Provides a simple and easy-to-use API
Has a small footprint: only about 10k
MIDP-1.0 compliant
Supports iAppli
Network and carrier-independent
14-1
Project JXTA Virtual Network
Peer
Peer
Peer
Peer
Peer
Peer
Peer
Peer
HTTP
TCP/IP
TCP/IP
Relay
HTTP
HTTP
Relay
14-1
Architecture
JXTA
Relay
Peer JXTA
Proxy
JXTA
Network
Firewall
14-1
Architecture (continued)
●
●
HTTP Relay
–
Relays messages between HTTP clients
–
Provides a Message Store for disconnected
operation
JXTA Proxy
–
Stores JXTA Advertisements
–
Filters JXTA traffic
–
Processes JXTA's XML messages and
converts them to a compact, binary, easyto-parse format
14-1
JXTA Relay
●
●
●
●
●
●
Runs on publicly-addressable peers
Provides connectivity for peers that are
behind NAT and/or firewall
Provides a message store for
disconnected operation
Lease management
Uses the HTTP protocol
GET and POST messages in a single
round-trip to minimize latency
14-1
JXTA Proxy
●
●
●
Is a JXTA Service
Provides services for clients that
–
Have limited storage
–
Are on networks with limited bandwidth
Translates client requests to JXTA
protocols and the other way around
–
●
Currently supports Discovery and Pipe
protocols
Asynchronous
14-1
API Design Goals
●
●
●
●
●
Minimize the number of classes: no
interfaces, factories, listeners, inner
classes
Minimize the number of threads
Have a low conceptual weight, low
barrier-to-entry
Hide complexity for the casual
developer, while allowing low-level
access for the advanced developer
Use method overloading
14-1
API Overview
●
PeerNetwork
–
●
Message
–
●
Abstraction for a Network of Peers in a
particular Group
Abstraction for a JXTA Message
Element
–
Each JXTA Message can be composed
of multiple elements
14-1
API: PeerNetwork
static PeerNetwork createInstance(String peerName)
–
Factory method, used to create an instance of a PeerNetwork.
byte[] connect(String relayURL, byte[] state)
–
Connect to a relay.
create(PEER|GROUP|PIPE, String name, String arg)
–
Create a JXTA peer, group, or pipe.
search(PEER|GROUP|PIPE, String query)
–
Search for JXTA peers, groups, or pipes.
14-1
API: PeerNetwork (continued)
listen(String pipeName, String pipeId, String pipeType)
–
Open a pipe for input.
close(String pipeName, String pipeId)
–
Close an input pipe.
send(String pipeName, String pipeId, String pipeType, Message data)
–
Send data to the specified pipe.
Message poll(int timeout)
–
Poll the relay for messages addressed to this peer.
14-1
API: Message
Message(Element[] elements)
–
Construct a Message from an array of Elements.
int getElementCount()
–
Return the number of Elements contained in this Message.
Element getElement(int index)
–
Return t he Element contained in this Message at the specified
index.
int getSize()
–
Returns the size in bytes of this Message.
14-1
API: Element
Element(String name, byte[] data, String nameSpace,
String mimeType)
–
Create an Element from its parts.
String getName()
–
Return the name of the Element.
byte[] getData()
–
Return the data in the Element.
String getNameSpace()
–
Return the namespace used by the Element name.
String getMimeType()
–
Return the MIME type of the data in the Element.
14-1
JXME Example : Chat
●
●
●
IRC Style chat group
chat
Supports 1-1 IM style
chat as well
Interoperates with J2SE
Group Chat and JXTAC Group Chat
14-1
Example: part 1
class Sample implements Runnable {
String RELAY = “http://209.25.154.233:9700”;
PeerNetwork peer = null;
Sample() {
peer = PeerNetwork.createInstance(“sample-peer”);
peer.connect(RELAY, null);
peer.listen(“sample-pipe”, null,
PeerNetwork.PROPAGATE_PIPE);
}
14-1
Example: part 2
WaitForPipeId() {
do {
Message msg = peer.poll(1000);
if (msg != null) {
pipeId = processPipeIdResponse(msg);
}
} while (pipeId == null);
14-1
Example: part 3
String processPipeIdResponse(Message m) {
for (int i=0; i < m.getElementCount(); i++) {
Element e = m.getElement(i);
if (Message.REQUESTID_TAG.equals(e.getName())) {
requestId = new String(e.getData());
} else if (Message.ID_TAG.equals(e.getName()) {
pipeId = new String(e.getData());
}
}
return pipeId;
}
14-1
Example: part 4
send(String text) {
Element[] el = new Element[2];
el[0] = new Element(“JxtaTalkSenderName”,
“sample-peer”.getBytes(), null, null);
el[1] = new Element(“JxtaTalkSenderMessage”,
text.getBytes(), null, null);
Message m = new Message(el);
peer.send(“sample-pipe”, pipeId,
PeerNetwork.PROPAGATE_PIPE, m);
}
14-1
Example: part 5
Run() {
Message message = null;
while (true) {
m = peer.poll(1000);
if (m != null) {
for (int i = 0; i < m.getElementCount(); i++) {
Element e = m.getElement(i);
if ("JxtaTalkSenderName".equal(e.getName())
...
14-1
Resources
●
●
Go to http://jxme.jxta.org for the source
code, white papers, API documentation,
sample applications and programmer's
guide
Send mail to [email protected] for
help
14-1
End – JXTA for J2ME
14-1