+

Search Tips   |   Advanced Search

Use a script to get up and running quickly with WS-Notification

Use a jython script to configure the necessary resources to get up and running quickly with WS-Notification in WebSphere Application Server.

The example script provided in this topic is intended for development use on a single server only, and not for use in production or network deployment environments.

Use the example script to configure a default set of resources that allow us to connect WS-Notification applications for development purposes. When executed, the script takes the following actions:

  1. It searches in the configuration for an existing service integration bus, and creates one if necessary.
  2. It searches for an existing bus member, and if one is not found it adds the (stand-alone) server to the bus, and uses the default data source.
  3. It searches for an existing service integration bus topic space destination, and creates one if necessary.
  4. It creates a v6.1 or v7.0 WS-Notification service.
  5. It creates a v6.1 or v7.0 WS-Notification service point on the local server for a SOAP over HTTP binding.
  6. It creates a WS-Notification permanent topic namespace to reference the service integration bus topic space that was found or created in step 3.
  7. It saves the configuration, and describes where to find the WSDL for the new notification broker web service that has been exposed.

To use the example script:


Tasks

  1. Save the script to the file system and use a name of our choice (for example wsnQuickStart.py).

  2. Modify the hostRoot variable defined in the script to point to the HTTP port of the local server (usually 9080).
  3. (This step is required only for a v6.1 WS-Notification service) Install and configure the SDO repository.

  4. Start the server, then execute the following command. If we saved the script with a name other than wsnQuickStart.py, then use that name instead.
    wsadmin -f wsnQuickStart.py
    


Example

Here is the example script:
#######################################################################################
# WS-Notification QuickStart script                                                   #
#                                                                                     #
# This Jython script will quickly create the basic resources required in order to     #
# start using WS-Notification in WAS v6.1 or later    #
#                                                                                     #
# Before executing it we must modify the variables defined below to match your       #
# configuration settings.                                                             #
#                                                                                     #
# Note:                                                                               #
#    - This script is not intended for production use, and is intended for use on     #
#      a stand-alone server (not network deployment) only.                             #
#    - The script will search the configuration for an existing bus, and if one is    #
#      not found then a new bus will be created                                       #
#    - It will then look for an existing Bus Member on the chosen bus. If one is not  #
#      found then one will be created using the default File Store                    #
#    - It will then look for an existing service integration bus topic space. If one  #
#      is not found then it will create one.                                          #
#                                                                                     #
# Execute the script by typing;                                                       #
#   wsadmin -f wsnQuickStart.py                                                       #
#                                                                                     #
#######################################################################################

###########################################################
# Configuration variables                                 #
#                                                         #
# Set the following variables to match the configuration #
###########################################################
# The URL root of HTTP port on the local server
hostRoot = "http://xyz.ibm.com:9080"
# The type of WS-Notification service we want to create (v6.1 or v7.0)
wsnServiceType = "V7.0"

#######################################################################################
# Now create the configuration objects using the variables defined above              #
#######################################################################################

# These variables are arbitrary choices and need not be set unless required.
wsnServiceName = "myWSNService"+wsnServiceType
wsnServicePointName = "myWSNServicePoint"+wsnServiceType
eplName = "myNewEPL"
tnsNamespaceURI = "http://example.org/topicNamespace/example1"

# General environment variables
nodeName = AdminTask.listNodes().split("\n")[0].rstrip()
server = AdminTask.listServers().split("\n")[0].rstrip()

print "###########################################################"
print "# Check the pre-requisites before beginning               #"
print "###########################################################"
# Check for the existence of the bus
requiresRestart = "false"
myBuses = AdminTask.listSIBuses().split("\n")
myBus = myBuses[0].rstrip()

if (myBus == ""):
        print "  *** Creating new bus "
        myBus = AdminTask.createSIBus("-bus MySampleBus -busSecurity false 
                                       -scriptCompatibility 6.1")
        requiresRestart = "true"
#endIf 
siBusName = AdminConfig.showAttribute(myBus, "name" )
print "  service integration bus name: "+siBusName+" "

# Check for the existence of the bus member
busMembers = AdminTask.listSIBusMembers(" -bus "+siBusName).split("\n")
myBusMember = busMembers[0].rstrip()

if (myBusMember == ""):
        print ""
        print "  *** Creating new Bus Member "
        busMemberName = AdminConfig.showAttribute(server, "name")
        myBusMember = AdminTask.addSIBusMember(" -bus "+siBusName+" 
                        -node "+nodeName+" -server "+busMemberName)
        print ""
        requiresRestart = "true"
else:
        nodeName = AdminConfig.showAttribute(myBusMember, "node")
        busMemberName = AdminConfig.showAttribute(myBusMember, "server")
#endElse 
print "  service integration bus Member on node: "+nodeName+" "
print "                               on server: "+busMemberName+" "

# Find a topic space to use topicSpaces = AdminTask.listSIBDestinations(" -bus "+siBusName+" 
                                  -type TopicSpace ").split("\n")
tSpace = topicSpaces[0].rstrip()

if (tSpace == ""):
        print "  *** Creating a Topic Space "
        tSpace = AdminTask.createSIBDestination(" -bus "+siBusName+" 
                        -node "+nodeName+" -server "+myBusMember+" 
                        -name MyTopicSpace -type TopicSpace")
        print ""

#endIf 
siBusTopicSpaceName = AdminConfig.showAttribute(tSpace, "identifier" )
print "     service integration bus topic space: "+siBusTopicSpaceName+" "

print ""
print "###########################################################"
print "# Create the WS-Notification service                      #"
print "###########################################################"
newService = AdminTask.listWSNServices(" -name "+wsnServiceName+" 
                            -bus "+siBusName).split("\n")[0].rstrip()

if (newService == ""):
        newService = AdminTask.createWSNService(" -name "+wsnServiceName+" 
                            -bus "+siBusName+" "+" -type "+wsnServiceType)
        print "WS-Notification service created: "+wsnServiceName+" "
        print "                         on bus: "+siBusName+" "
else:
        print "WS-Notification service '"+wsnServiceName+"' "
        print "  already exists on bus '"+siBusName+"' "
#endElse 

print ""
print "###########################################################"
print "# Create the WS-Notification service point                #"
print "###########################################################"
eplURLRoot = hostRoot+"/wsn"
wsdlURLRoot = hostRoot+"/SIBWS/wsdl"

newServicePoint = AdminTask.listWSNServicePoints(newService, "
                -name "+wsnServicePointName+" " ).split("\n")[0].rstrip()

if (newServicePoint == ""):
        if (wsnServiceType == "V7.0"):
            newServicePoint = AdminTask.createWSNServicePoint(newService, "
            -name "+wsnServicePointName+" -node "+nodeName+" -server "+busMemberName)
        else:
            newServicePoint = AdminTask.createWSNServicePoint(newService, "
            -name "+wsnServicePointName+" 
            -node "+nodeName+" -server "+busMemberName+" -eplName "+eplName+" 
            -eplURLRoot "+eplURLRoot+" -eplWSDLServingURLRoot "+wsdlURLRoot+" " )
        print "WS-Notification service point created: "+wsnServicePointName+" "
        print "                        on bus member: "+busMemberName+" "
        print "                              on node: "+nodeName+" "
else:
        print "WS-Notification service point '"+wsnServicePointName+"' "
        print "already exists on WS-Notification service '"+wsnServiceName+"' "
#endElse 

print ""
print "###########################################################"
print "# Create the WS-Notification permanent topic namespace    #"
print "###########################################################"
newTopicNamespace = AdminTask.listWSNTopicNamespaces(newService, "
                    -namespace "+tnsNamespaceURI+" ").split("\n")[0].rstrip()

if (newTopicNamespace == ""):
    newTopicNamespace = AdminTask.createWSNTopicNamespace(newService, "
      -namespace "+tnsNamespaceURI+" -busTopicSpace "+siBusTopicSpaceName+" 
      -reliability RELIABLE_PERSISTENT")
  print "WS-Notification topic namespace created: "+tnsNamespaceURI+" "
  print "                        bus topic space: "+siBusTopicSpaceName+" "
else:
  print "WS-Notification permanent topic namespace already exists: "
        +tnsNamespaceURI+" "
#endElse 

#######################################################################################
# All the objects have been created - inform the user where to proceed next           #
#######################################################################################

print ""
print "###########################################################"
print "# Summary                                                 #"
print "###########################################################"

# Calculate where we would find the WSDL for the new service.
if (wsnServiceType == "V7.0"):
  print "IMPORTANT: Because you've created a v7.0 service" 
  print "we need to start the newly installed application;"
  print "           WSN_"+wsnServiceName+"_"+wsnServicePointName 
  print ""

  wsdlLocation = hostRoot+"/"+wsnServiceName+wsnServicePointName
                         +"NB/Service?wsdl"
else:
  print "IMPORTANT: Because you've created a v6.1 service" 
  print "we need to start 2 newly installed applications;"
  serverName = AdminConfig.showAttribute(server, "name")
  print "           "+eplName+"."+nodeName+"."+serverName
  print "           sibws."+nodeName+"."+serverName
  print ""
  wsdlLocation = hostRoot+"/wsn/soaphttpengine/"+siBusName+"/"
                 +wsnServiceName+"NotificationBroker/"
                 +wsnServicePointName+"NotificationBrokerPort?wsdl"
print " The WSDL for the new service can be viewed at the following location; "
print "   "+wsdlLocation+" "
print ""
print " Your web service applications can publish and subscribe to any topics in the namespace; "
print "   "+tnsNamespaceURI+" "
print ""
if (requiresRestart == "true"):
  print " We must now restart the server for the changes to take effect. "
  print ""
#endIf 

print ""
print "###########################################################"
print "# Save the configuration and exit                         #"
print "###########################################################"
AdminConfig.save()
sys.exit()


Related:

  • WS-Notification
  • Use WS-Notification for publish and subscribe messaging for web services
  • Secure WS-Notification
  • Configure WS-Notification resources
  • WS-Notification troubleshooting tips
  • WSNotificationCommands