|
Oracle® Application Server Syndication Services Developer’s and Administrator’s Guide
10g (9.0.4) Part No. B10667-01 |
|
This appendix provides a listing of the SampleSyndicationClient.java program. See Section C.1.
A listing of the SampleSyndicationClient.java program follows:
import java.util.*;
import oracle.syndicate.*;
import oracle.syndicate.client.*;
import oracle.syndicate.client.handler.file.*;
import oracle.syndicate.message.*;
import oracle.syndicate.message.pkg.*;
import oracle.syndicate.message.offer.*;
import oracle.syndicate.message.response.*;
import oracle.syndicate.message.response.event.*;
/**
* @version $Header: SampleSyndicationClient.java 07-mar-2003.19:12:51 mcarrer Exp $
* @author mcarrer
* @since release specific (what release of product did this appear in)
*/
public class SampleSyndicationClient
{
private SyndicateConnection _sc;
public SampleSyndicationClient()
{
}
public static void main(String args[])
throws Exception
{
if (args.length < 3) {
System.err.println("java SampleSyndicationClient ossurl username password");
System.exit(0);
}
SampleSyndicationClient ssc = new SampleSyndicationClient();
//
// Step 0: Initialize syndication connection
// and ping to the server to make sure it
// up and running, and we can authenticate.
//
ssc.initConnection(args);
ssc.ping();
//
// Step 1: Get the catalog of offers available
// and select the first offer appearing in the catalog.
//
Catalog cat = ssc.getCatalog();
Offer off = ssc.getFirstOffer(cat);
//
// Step 2: Subscribe to the selected offer.
//
Subscription sbt = ssc.subscribe(off);
// // Step 3: Get the content package associated
// with the new subscription. If necessary,
// confirm to the syndication server the
// receipt of the content package.
//
//SyndicatePackage pkg = ssc.getPackage(sbt);
//ssc.confirmPackage(pkg);
//
// Step 4: Verify the subscription status by
// checking subscription expiration criteria,
// such as the quantity remaining.
//
ssc.status(sbt);
//
// Step 5: Get session events.
//
ssc.events(sbt);
//
// Step 6: Cancel subscription.
//
ssc.cancel(sbt);
}
/**
* Creates a SyndicateConnection using
* an XML state handler storing client state
* in the synd-client.xml file in the current directory.
*/
private void initConnection(String argv[])
throws SyndicateException
{
// Acquire a SyndicateConnectionFactory,
// optionally set the connection parameters,
// such as proxy info, timeout, and credentials.
SyndicateConnectionFactory scf = SyndicateConnectionFactory.getInstance();
// scf.setTimeout(1000);
// scf.setProxy("myproxyhost", iMyProxtPort);
// Create a default XML state handler storing subscription state in a file.
SyndicateClientStateHandler scsh =
scf.getDefaultSyndicateClientStateHandler("synd-client.xml");
_sc = scf.createSyndicateConnection(argv[0], // url of the oss server
argv[1], // username
argv[2], // password
scsh);
}
private void ping()
throws SyndicateException
{
Response resp = _sc.ping();
System.out.println("ping: "+resp.getCode().getPhrase());
}
private Catalog getCatalog()
throws SyndicateException
{
return _sc.getCatalog();
}
private Offer getFirstOffer(Catalog cat)
throws SyndicateException
{
// Iterates through the catalog and returns the
// first offer encountered.
Offer off = null;
Iterator it = cat.getCatalogItems();
while (it.hasNext() && (off == null)) {
CatalogItem item = (CatalogItem)it.next();
if (item.getCatalogItemType() == CatalogItem.OFFER) {
off = (Offer) item;
}
else {
// You got an offer group.
off = getFirstOffer((OfferGroup) item);
}
}
// Print a few offer details.
System.out.println("offer: "+off.getID()+" - "+off.getDescription());
DeliveryPolicy dp = off.getDeliveryPolicy();
if (dp.getStartDate() != null) {
System.out.println("\t start date: "+dp.getStartDate());
}
if (dp.getStopDate() != null) {
System.out.println("\t stop date: "+dp.getStopDate());
}
Iterator dlrs = dp.getDeliveryRules();
while (dlrs.hasNext()) {
DeliveryRule dlr = (DeliveryRule) dlrs.next();
System.out.println("\t dlr mode: "+dlr.getMode());
}
return off;
}
private Offer getFirstOffer(OfferGroup offgrp)
throws SyndicateException
{
Offer off = null;
Iterator it = offgrp.getCatalogItems();
while (it.hasNext() && (off == null)) {
CatalogItem item = (CatalogItem)it.next();
if (item.getCatalogItemType() == CatalogItem.OFFER) {
off = (Offer) item;
}
else {
// You got an offer group.
off = getFirstOffer((OfferGroup) item);
}
}
return off;
}
private Subscription subscribe(Offer off)
throws SyndicateException
{
// If the offer contains a push delivery rule,
// you can use the offer APIs to set the destination URL.
DeliveryPolicy dp = off.getDeliveryPolicy();
Iterator itdlrs = dp.getDeliveryRules();
while (itdlrs.hasNext()) {
DeliveryRule dlr = (DeliveryRule) itdlrs.next();
if (DeliveryRule.DELIVERY_RULE_MODE_PUSH.equals(dlr.getMode())) {
dlr.setURL("http://mysyndicationclient.com/syndclient/listener");
// Optionaly set username/password.
// dlr.setPushAuthUsername("me");
// dlr.setPushAuthUsername("pwd");
// If raw content is requested (for example, a mailto or
// ftp url has been supplied), set the raw content flag.
// dlr.setRawFormatSupport(true);
}
}
Subscription sbt = _sc.subscribe(off);
System.out.println("subscription: "+sbt.getSubscriptionID());
return sbt;
}
private SyndicatePackage getPackage(Subscription sbt)
throws SyndicateException
{
// Use a FileSAXPackageHandler so that
// syndicate content will be stored in
// the local file system /tmp directory.
FileSAXPackageHandler fsph = FileSAXPackageHandler.getInstance("/tmp/");
// This will get content incremented since the last update.
// The current subscriber state will be fetched from
// the SyndicateClientStateHandler used by this connection.
// To request a full update of the content versus an incremental
// one, use the following syntax:
// _sc.getPackage(sbt.getSubscriptionID(),
// SyndicateSubscription.STATE_ICE_INITIAL,
// null,
// fsph);
SyndicatePackage sp = _sc.getPackage(sbt.getSubscriptionID(), null, fsph);
return sp;
}
private void confirmPackage(SyndicatePackage pkg)
throws SyndicateException
{
// Check if the package requires confirmation.
// If so, confirm it.
if (pkg.hasConfirmation()) {
Response resp = _sc.confirm(pkg.getID());
System.out.println("confirmed "+pkg.getID()+":
"+resp.getCode().getPhrase());
}
}
private void status(Subscription sbt)
throws SyndicateException
{
Status sts = _sc.getStatus(sbt.getSubscriptionID());
Subscription sbtNew = (Subscription) sts.getSubscriptions().next();
System.out.println(" sbt "+sbtNew.getSubscriptionID()+":");
System.out.println(" expiration priority: "+
Subscription.EXPIRATION_PRIORITIES[sbtNew.getExpirationPriority()]);
System.out.println(" expiration date: "+sbtNew.getExpirationDate());
System.out.println(" quantity remaining: "+sbtNew.getQuantityRemaining());
}
private void cancel(Subscription sbt)
throws SyndicateException
{
Cancellation canc = _sc.cancelSubscription(sbt.getSubscriptionID(),
"boring", "en_us");
System.out.println("cancelled: "+canc.getCancellationID());
}
private void events(Subscription sbt)
throws SyndicateException
{
Events evt = _sc.getEvents(null, null, sbt.getSubscriptionID());
EventLog evtlog = evt.getEventLog();
Iterator itEvts = evtlog.getEventItems();
while (itEvts.hasNext()) {
EventItem ei = (EventItem) itEvts.next();
if (ei.getType() == EventItem.EVENT_TYPE_MSG) {
EventMsg evtmsg = (EventMsg) ei;
System.out.println(evtmsg.getRequestStart()+" "
+evtmsg.getRequest()+" "+
evtmsg.getResponseType());
}
}
}
}