content/artifacts/daytrader_singleServer.py (847 lines of code) (raw):

import sys import os import getopt global AdminConfig #----------------------------------------------------------------- # WARNING: Jython/Python is extremely sensitive to indentation # errors. Please ensure that tabs are configured appropriately # for your editor of choice. #----------------------------------------------------------------- #----------------------------------------------------------------- # daytrader_singleServer.py - DayTrader Single Server Install Script #----------------------------------------------------------------- # # This script is designed to configure the JDBC and JMS resource required by # the DayTrader application and to install the application. #--------------------------------------------------------------------- # Usage info #--------------------------------------------------------------------- def printUsageAndExit (): # start of print block print """ Usage: wsadmin -f <location of>daytrader_singleServer.py <options> where <options> is zero or more of the following --help Display this usage information. --prompt Whether or not to prompt for input. Valid values are: true (default) false -a, --action action Action to perform. Valid values are: all (default) - configures JDBC and JMS resources and installs the app configure - only configure the JDBC and JMS resource cleanup - remove the JDBC and JMS resources install - install the DayTrader ear uninstall - uninstall the DayTrader ear -e, --earfile ear The location of the earfile to install when the action is 'all' or 'install'. The default is 'daytrader-ear-2.1.3.ear' located in the same directory from which wsadmin is being run. (Note: This is only used for the 'all' or 'install' action.) -s, --security sec The current status of security. Valid values are: disabled (default) enabled The --userid and --password options are required if security is enabled. (Note: This is only used for the 'all' or 'configure' action.) -u, --userid userid The administrative userid to use for JMS. This is required if --security is enabled. --password pw The administrative password to use for JMS. This is required if --security is enabled. """ # end of print block sys.exit() #endDef #----------------------------------------------------------------- # getInput - Obtain generic input from the user. If default value # provided, return default value if nothing is entered. #----------------------------------------------------------------- def getInput (prompt, defaultValue): print "" print prompt retValue = sys.stdin.readline().strip() if (retValue == ""): retValue = defaultValue #endIf return retValue #endDef #----------------------------------------------------------------- # getValidInput - Obtain valid input from the user based on list of # valid options. Continue to query user if the invalid # options are entered. Return default value if nothing # is entered. #----------------------------------------------------------------- def getValidInput (prompt, defaultValue, validOptions): validate = 1 while (validate): print "" print prompt retValue = sys.stdin.readline().strip() if (retValue == ""): retValue = defaultValue validate = 0 #endIf if (validate and validOptions.count(retValue) > 0): # Is retValue one of the valid options validate = 0 else: print "Response not valid" #endIf #endWhile return retValue #endDef #----------------------------------------------------------------- # getName - Return the base name of the config object. #----------------------------------------------------------------- def getName (objectId): endIndex = (objectId.find("(c") - 1) stIndex = 0 if (objectId.find("\"") == 0): stIndex = 1 #endIf return objectId[stIndex:endIndex+1] #endDef #----------------------------------------------------------------- # getNodeId - Return the node id of the existing node if in a single # server environment. If in an ND environment query the # user to determine desired node. #----------------------------------------------------------------- def getNodeId (prompt): nodeList = AdminConfig.list("Node").split("\n") if (len(nodeList) == 1): node = nodeList[0] else: print "" print "Available Nodes:" nodeNameList = [] for item in nodeList: item = item.rstrip() name = getName(item) nodeNameList.append(name) print " " + name #endFor DefaultNode = nodeNameList[0] if (prompt == ""): prompt = "Select the desired node" #endIf nodeName = getValidInput(prompt+" ["+DefaultNode+"]:", DefaultNode, nodeNameList ) index = nodeNameList.index(nodeName) node = nodeList[index] #endElse return node #endDef #----------------------------------------------------------------- # getServerId - Return the server id of the existing server if # in a single server environment. If in an ND environment # query the user to determine desired server. #----------------------------------------------------------------- def getServerId (prompt): serverList = AdminConfig.list("Server").split("\n") if (len(serverList) == 1): server = serverList[0] else: print "" print "Available Servers:" serverNameList = [] for item in serverList: item = item.rstrip() name = getName(item) serverNameList.append(name) print " " + name #endFor DefaultServer = serverNameList[0] if (prompt == ""): prompt = "Select the desired server" #endIf serverName = getValidInput(prompt+" ["+DefaultServer+"]:", DefaultServer, serverNameList ) index = serverNameList.index(serverName) server = serverList[index] #endElse return server #endDef #----------------------------------------------------------------- # createJAASAuthData - Create a new JAAS Authentication Alias if # one with the same name does not exist. Otherwise, # return the existing Authentication Alias. #----------------------------------------------------------------- def createJAASAuthData ( aliasName, user, passwd ): print " " print "Creating JAAS AuthData " + aliasName + "..." # Check if aliasName already exists authDataAlias = "" authList = AdminConfig.list("JAASAuthData" ) if (len(authList) > 0): for item in authList.split("\n"): item = item.rstrip() alias = AdminConfig.showAttribute(item, "alias" ) if (alias == aliasName): authDataAlias = item break #endIf #endFor #endIf # If authAlias does not exist, create a new one if (authDataAlias == ""): print " Alias Name: " + aliasName print " User: " + user print " Password: " + passwd attrs = AdminConfig.list("Security") attrs0 = [["alias", aliasName], ["userId", user], ["password", passwd]] authDataAlias = AdminConfig.create("JAASAuthData", attrs, attrs0) print aliasName + " created successfully!" else: print aliasName + " already exists!" #endElse return authDataAlias #endDef #--------------------------------------------------------------------- # removeJAASAuthData #--------------------------------------------------------------------- def removeJAASAuthData (name): print " " print "Removing JAAS AuthData " + name + "..." authList = AdminConfig.list("JAASAuthData") auth = "" if (len(authList) > 0): for item in authList.split("\n"): item = item.rstrip() ident = AdminConfig.showAttribute(item.rstrip(), "alias" ) if (ident == name): auth = item break #endIf #endFor #endIf if (auth != ""): AdminConfig.remove(auth) print name + " removed successfully!" else: print name + " not found!" #endElse #endDef #----------------------------------------------------------------- # createJDBCProvider - Create a new JDBC Provider if one with the # same name does not exist in the specified scope. Otherwise, # return the existing JDBCProvider. The 3 types or providers # currently supported include DB2 JCC, DB2 CLI, and Oracle. #----------------------------------------------------------------- def createJDBCProvider (provider, XA, scopeId, path, nativePath): XA = XA.lower() name = "Derby JDBC Provider" if (XA == "true"): name = "Derby JDBC Provider Only (XA)" #endIf print " " print "Creating JDBC Provider " + name + "..." # Check if the JDBC provider already exists scopeName = getName(scopeId) stIndex = (scopeId.find("|") + 1) endIndex = (scopeId.find(".") - 1) scope = scopeId[stIndex:endIndex+1] providerId = "" if (scope == "cell"): providerId = AdminConfig.getid("/Cell:"+scopeName+"/JDBCProvider:\""+name+"\"/" ) elif (scope == "node"): providerId = AdminConfig.getid("/Node:"+scopeName+"/JDBCProvider:\""+name+"\"/" ) elif (scope == "server"): providerId = AdminConfig.getid("/Server:"+scopeName+"/JDBCProvider:\""+name+"\"/" ) #endIf if (providerId == ""): print " Provider Name: " + name print " Classpath: " + path print " Native path: " + nativePath print " XA enabled: " + XA template = AdminConfig.listTemplates("JDBCProvider", name+"(") providerId = AdminConfig.createUsingTemplate("JDBCProvider", scopeId, [["name", name], ["classpath", path], ["nativepath", nativePath]], template) # Template creates a datasource with the same name as the provider # Delete this datasource dsId = "" dsList = AdminConfig.list("DataSource") if (len(dsList) > 0): for item in dsList.split("\n"): item = item.rstrip() provider = AdminConfig.showAttribute(item, "provider" ) if (providerId == provider): dsId = item print "Found DS" #endIf #endFor #endIf if (dsId != ""): AdminConfig.remove(dsId) #endIf print name + " provider created successfully!" else: print name + " provider already exists!" #endElse return providerId #endDef #----------------------------------------------------------------- # removeJDBCProvider #----------------------------------------------------------------- def removeJDBCProvider(name): print " " print "Removing JDBCProvider " + name + "..." temp = AdminConfig.getid("/JDBCProvider:" + name + "/") if (temp): AdminConfig.remove(temp) print name + " removed successfully!" else: print name + " not found!" #endElse #endDef #----------------------------------------------------------------- # createDatasource #----------------------------------------------------------------- def createDatasource (datasourceName, jndiName, stmtCacheSz, authAliasName, providerId): # Connection pool properties maxConnections = 50 minConnections = 10 print " " print "Creating DataSource " + datasourceName + "..." # Check if the DataSource already exists dsId = "" dsList = AdminConfig.getid("/DataSource:" + datasourceName + "/") if (len(dsList) > 0): for item in dsList.split("\n"): item = item.rstrip() provider = AdminConfig.showAttribute(item, "provider" ) if (providerId == provider): dsId = item #endIf #endFor #endIf if (dsId == ""): print " Datasource Name: " + datasourceName print " JNDI Name: " + jndiName print " Statement Cache Size: " + str(stmtCacheSz) print " AuthAliasName: " + authAliasName # Map provider to datasource template providerName = getName(providerId) providerToDsDict = {"Derby JDBC Provider Only":"Derby JDBC Driver DataSource", "Derby JDBC Provider Only (XA)":"Derby JDBC Driver XA DataSource"} dsName = providerToDsDict[providerName] #template = AdminConfig.listTemplates("DataSource", dsName) template="Derby JDBC Driver XA DataSource(templates/system|jdbc-resource-provider-templates.xml#DataSource_Derby_2)" attr = [["name", datasourceName], ["jndiName", jndiName], ["statementCacheSize", stmtCacheSz]] if (authAliasName != ""): attr.append(["authDataAlias", authAliasName]) #endIf dsId = AdminConfig.createUsingTemplate("DataSource", providerId, attr, template) #Update connection pool sizings pool = AdminConfig.showAttribute(dsId, "connectionPool") AdminConfig.modify(pool, [["maxConnections", maxConnections], ["minConnections", minConnections]]) #Determine RRA tempName = providerId[providerId.rfind("/")+1 : providerId.rfind("|")] if (providerId.find("/servers/") > 0): radapter = AdminConfig.getid("/Server:" + tempName + "/J2CResourceAdapter:WebSphere Relational Resource Adapter/") elif (providerId.find("/nodes/") > 0): radapter = AdminConfig.getid("/Node:" + tempName + "/J2CResourceAdapter:WebSphere Relational Resource Adapter/") elif (providerId.find("(cells/") > 0): radapter = AdminConfig.getid("/Cell:" + tempName + "/J2CResourceAdapter:WebSphere Relational Resource Adapter/") #endIf #Create CMPConnectionFactory tempList = AdminConfig.listTemplates('CMPConnectorFactory','default') template = "" if (len(tempList) > 0): for item in tempList.split("\n"): item = item.rstrip() if (item[0:20] == "CMPConnectorFactory("): template = item break #endIf #endFor #endIf attr = [["name", datasourceName + "_CF"], ["cmpDatasource", dsId]] cmpFact_id = AdminConfig.createUsingTemplate("CMPConnectorFactory", radapter, attr, template) print datasourceName + " created successfully!" else: print datasourceName + " already exists in this JDBC Provider!" #endIf return dsId #endDef #----------------------------------------------------------------- # addDatasourceProperty #----------------------------------------------------------------- def addDatasourceProperty (datasourceId, name, value): parms = ["-propertyName", name, "-propertyValue", value] AdminTask.setResourceProperty(datasourceId, parms) #endDef #----------------------------------------------------------------- # updateDB2orDerbyDatasource #----------------------------------------------------------------- def updateDB2orDerbyDatasource (datasourceId, dbname, hostname, port, driverType): resourceProps = AdminConfig.list("J2EEResourceProperty", datasourceId).split("\n") for item in resourceProps: item = item.rstrip() propName = getName(item) if (propName == "serverName"): AdminConfig.modify(item, [["value", hostname]]) #endIf if (propName == "portNumber"): AdminConfig.modify(item, [["value", port]]) #endIf if (propName == "databaseName"): AdminConfig.modify(item, [["value", dbname]]) #endIf if (propName == "driverType"): AdminConfig.modify(item, [["value", driverType]]) #endIf #endFor #endDef #----------------------------------------------------------------- # removeDatasource #----------------------------------------------------------------- def removeDatasource(name): print " " print "Removing DataSource " + name + "..." temp = AdminConfig.getid("/DataSource:" + name + "/") if (temp): AdminConfig.remove(temp) print name + " removed successfully!" else: print name + " not found!" #endElse #endDef #----------------------------------------------------------------- # createSIBus - Create a new SIBus if one does not exist. Otherwise, # return the existing SIBus. #----------------------------------------------------------------- def createSIBus ( busName, authAlias ): print " " print "Creating SIBus " + busName + "..." # Check if the SIBus already exists SIBus = AdminConfig.getid("/SIBus:"+busName+"/" ) if (SIBus == ""): parms = ["-bus", busName, "-interEngineAuthAlias", authAlias] SIBus = AdminTask.createSIBus(parms ) print busName + " created successfully!" else: print busName + " already exists!" #endElse return SIBus #endDef #----------------------------------------------------------------- # deleteSIBus #----------------------------------------------------------------- def deleteSIBus(name): print " " print "Deleting SIBus " + name + "..." temp = AdminConfig.getid("/SIBus:" + name + "/") if (temp): parms = ["-bus", name] AdminTask.deleteSIBus(parms) print name + " removed successfully!" else: print name + " not found!" #endElse #endDef #----------------------------------------------------------------- # createSIBusSecurityRole - Add user role #----------------------------------------------------------------- def createSIBusSecurityRole ( busId, userName ): print " " busName = getName(busId) # Check if the SIBAuthUser already exists SIBAuthUser = "" tmpSIBAuthUserList = AdminConfig.list("SIBAuthUser", busId) if (len(tmpSIBAuthUserList) > 0): for item in tmpSIBAuthUserList.split("\n"): item = item.rstrip() tmp = AdminConfig.showAttribute(item, "identifier" ) if (tmp == userName): SIBAuthUser = item #endIf #endFor #endIf if (SIBAuthUser == ""): print "Creating SIBus security role for " + userName + "..." parms = ["-bus", busName, "-user", userName] SIBAuthUser = AdminTask.addUserToBusConnectorRole(parms ) print userName + " security role created successfully!" else: print "Role " + userName + " already exists for " + busName + "!" #endElse return SIBAuthUser #endDef #----------------------------------------------------------------- # addSIBusMember - Add the specified server or cluster to the # SIBus if it does not already exist. Assumes that the # specified SIBus already exists. #----------------------------------------------------------------- def addSIBusMember ( busId, fileStore, targetArgs, dataStoreArgs ): # busName - SIBus name # fileStore [0] - create file store, otherwise create data store # fileStore [1] - logDirectory - directory where fileStore is located (only used if fileStore[0] = true) # targetArgs[0] - cluster name or node name # targetArgs[1] - server name # dataStoreArgs[0] - defaultDS - create default DS (true|false) # dataStoreArgs[1] - dsJndi - jndi name of the datastore (only used if defaultDS = false) busName = getName(busId) if (len(targetArgs) == 1): clusterName = targetArgs[0] nodeName = "dummy" serverName = "dummy" else: nodeName = targetArgs[0] serverName = targetArgs[1] clusterName = "dummy" #endElse if (len(dataStoreArgs) == 2): defaultDS = dataStoreArgs[0] dsJndi = dataStoreArgs[1] defaultDS = defaultDS.lower() #endIf # Check if the bus member already exists parms = ["-bus", busName] busMembers = AdminTask.listSIBusMembers(parms).split("\n") member = "" if (busMembers[0] != ""): for item in busMembers: item = item.rstrip() cluster = AdminConfig.showAttribute(item, "cluster" ) node = AdminConfig.showAttribute(item, "node" ) server = AdminConfig.showAttribute(item, "server" ) if (cluster == clusterName or ( server == serverName and node == nodeName ) ): member = item break #endIf #endFor #endIf if (member == ""): print "" if (len(targetArgs) == 1): print "Adding SIBus member " + clusterName + "..." parms = ["-bus", busName, "-cluster", clusterName] else: print "Adding SIBus member " + nodeName + " - " + serverName + "..." parms = ["-bus", busName, "-node", nodeName, "-server", serverName] #endElse print " File Store: " + fileStore[0] if (fileStore[0] == "true"): parms.append("-fileStore") if (fileStore[1] != "default" and fileStore[1] != ""): print " File Store Location: " + fileStore[1] parms.append("-logDirectory") parms.append(fileStore[1]) #endIf else: parms.append("-dataStore") print " Default DataSource: " + defaultDS parms.append("-createDefaultDatasource") parms.append(defaultDS) if (defaultDS == "false"): print " Datasource JNDI Name: " + dsJndi parms.append("-datasourceJndiName") parms.append(dsJndi) #endIf #endElse member = AdminTask.addSIBusMember(parms ) print "SIBus member added successfully!" else: print "SIBus member already exists!" #endElse return member #endDef #----------------------------------------------------------------- # createSIBDestination - Create a new SIB Destination if one with the same # name does not exist on the specified SIBus. Otherwise, # return the existing Destination. #----------------------------------------------------------------- def createSIBDestination ( busId, destName, destType, reliability, optArgs ): # SIBus - SIBus name # destName - destination name # destType - destination type # reliability - reliability # optArgs[0] - cluster name or node name # optArgs[1] - server name if (len(optArgs) == 1): clusterName = optArgs[0] elif (len(optArgs) == 2) : nodeName = optArgs[0] serverName = optArgs[1] #endElse print " " print "Creating SIB Destination " + destName + "..." # Check if the SIB Destination already exists SIBus = getName(busId) parms = ["-bus", SIBus] destList = AdminTask.listSIBDestinations(parms ) dest = "" if (len(destList) > 0): for item in destList.split("\n"): item = item.rstrip() ident = AdminConfig.showAttribute(item.rstrip(), "identifier" ) if (ident == destName): dest = item.rstrip() break #endIf #endFor #endIf if (dest == ""): print " Destination Name: " + destName print " Destination Type: " + destType print " Reliability: " + reliability parms = ["-bus", SIBus, "-name", destName, "-type", destType, "-reliability", reliability] if (destType == "Queue"): if (len(optArgs) == 1): print " Cluster Name: " + clusterName parms.append("-cluster") parms.append(clusterName) elif (len(optArgs) == 2): print " Node Name: " + nodeName print " Server Name: " + serverName parms.append("-node") parms.append(nodeName) parms.append("-server") parms.append(serverName) #endElse #endIf dest = AdminTask.createSIBDestination(parms ) print destName + " created successfully!" else: print destName + " already exists!" #endElse return dest #endDef #----------------------------------------------------------------- # deleteSIBDestination #----------------------------------------------------------------- def deleteSIBDestination(name): print " " print "Deleting SIB Destination " + name + "..." destList = AdminConfig.list("SIBDestination") dest = "" if (len(destList) > 0): for item in destList.split("\n"): item = item.rstrip() ident = AdminConfig.showAttribute(item.rstrip(), "identifier" ) if (ident == name): dest = item break #endIf #endFor #endIf if (dest != ""): bus = dest[dest.rfind("/")+1 : dest.rfind("|")] parms = ["-bus", bus, "-name", name] AdminTask.deleteSIBDestination(parms) print name + " removed successfully!" else: print name + " not found!" #endElse #endDef #----------------------------------------------------------------- # createJMSConnectionFactory - Create a new JMS Connection Factory # if one with the same name does not exist on the SIBus. # Otherwise, return the existing Connection Factory. #----------------------------------------------------------------- def createJMSConnectionFactory ( busId, cfName, cfType, jndiName, authAlias, scope ): # Create JMS Connection Factory # SIBus - SIBus name # cfName - connection factory name # cfType - connection factory type # jndiName - connection factory jndi name # authAlias - authentication alias name # scope - scope print " " print "Creating JMS " + cfType + " Connection Factory " + cfName + "..." # Check if the connection factory already exists parms = ["-type", cfType] cfList = AdminTask.listSIBJMSConnectionFactories(scope, parms ) connectionFactory = "" if (len(cfList) > 0): for item in cfList.split("\n"): item = item.rstrip() if (item.find(cfName) >= 0): connectionFactory = item break #endIf #endFor #enfIf if (connectionFactory == "" ): print " Connection Factory Name: " + cfName print " Connection Factory Type: " + cfType print " JNDI Name: " + jndiName params = ["-name", cfName, "-jndiName", jndiName, "-busName", getName(busId), "-type", cfType, "-authDataAlias", authAlias] connectionFactory = AdminTask.createSIBJMSConnectionFactory(scope, params ) print cfName + " created successfully!" else: print cfName + " already exists!" #endElse return connectionFactory #endDef #----------------------------------------------------------------- # deleteJMSConnectionFactory #----------------------------------------------------------------- def deleteJMSConnectionFactory(name): print " " print "Deleting JMS Connection Factory " + name + "..." temp = AdminConfig.getid("/J2CConnectionFactory:" + name + "/") if (temp): AdminTask.deleteSIBJMSConnectionFactory(temp) print name + " removed successfully!" else: print name + " not found!" #endElse #endDef #----------------------------------------------------------------- # createJMSQueue - Create a new JMS Queue if one with the same # name does not exist at the specified scope. Otherwise, # return the existing JMS Queue. #----------------------------------------------------------------- def createJMSQueue ( qName, jndiName, SIBDest, delMode, scope ): # qName - queue name # jndiName - queue jndi name # SIBDest - SIB destination # delMode - delivery mode # scope - scope print " " print "Creating JMS Queue " + qName + "..." # Check if the queue already exists qList = AdminTask.listSIBJMSQueues(scope ) queue = "" if (len(qList) > 0): for item in qList.split("\n"): item = item.rstrip() if (item.find(qName) >= 0): queue = item break #endIf #endFor #endIf if (queue == ""): print " Queue Name: " + qName print " JNDI Name: " + jndiName print " SIB Destination: " + SIBDest print " Delivery Mode: " + delMode params = ["-name", qName, "-jndiName", jndiName, "-queueName", SIBDest, "-deliveryMode", delMode] queue = AdminTask.createSIBJMSQueue(scope, params ) print qName + " created successfully!" else: print qName + " already exists!" #endElse return queue #endDef #----------------------------------------------------------------- # deleteJMSQueue #----------------------------------------------------------------- def deleteJMSQueue(queueName): print " " print "Deleting JMS Queue " + queueName + "..." temp = AdminConfig.getid("/J2CAdminObject:" + queueName + "/") if (temp): AdminTask.deleteSIBJMSQueue(temp) print queueName + " removed successfully!" else: print queueName + " not found!" #endElse #endDef #----------------------------------------------------------------- # createJMSTopic - Create a new JMS Topic if one with the same # name does not exist at the specified scope. Otherwise, # return the existing JMS Topic. #----------------------------------------------------------------- def createJMSTopic ( tName, jndiName, tSpace, delMode, scope ): # tName - topic name # jndiName - topic jndi name # tSpace - topic space # delMode - delivery mode # scope - scope print " " print "Creating JMS Topic " + tName + "..." # Check if the topic already exists tList = AdminTask.listSIBJMSTopics(scope ) topic = "" if (len(tList) > 0): for item in tList.split("\n"): item = item.rstrip() if (item.find(tName) >= 0): topic = item break #endIf #endFor #endIf if (topic == ""): print " Topic Name: " + tName print " JNDI Name: " + jndiName print " Topic Space: " + tSpace print " Delivery Mode: " + delMode params = ["-name", tName, "-jndiName", jndiName, "-topicName", tName, "-topicSpace", tSpace, "-deliveryMode", delMode] topic = AdminTask.createSIBJMSTopic(scope, params ) print tName + " created successfully!" else: print tName + " already exists!" #endElse return topic #endDef #----------------------------------------------------------------- # deleteJMSTopic #----------------------------------------------------------------- def deleteJMSTopic(topicName): print " " print "Deleting JMS Topic " + topicName + "..." temp = AdminConfig.getid("/J2CAdminObject:" + topicName + "/") if (temp): AdminTask.deleteSIBJMSTopic(temp) print topicName + " removed successfully!" else: print topicName + " not found!" #endElse #endDef #----------------------------------------------------------------- # createMDBActivationSpec - Create a new MDB Activation Spec if one # with the same name does not exist at the specified # scope. Otherwise, return the existing Activation Spec. #----------------------------------------------------------------- def createMDBActivationSpec ( mdbName, jndiName, busId, JMSDestJndi, destType, authAlias, scope, durability ): # mdbName - MDB name # jndiName - activation spec jndi name # SIBus - SIBus name # JMSDestJndi - JMS destination JNDI name # destType - destination type # authAlias - authentication alias name # scope - scope # durability - subscriptionDurability print " " print "Creating MDB Activation Spec " + mdbName + "..." # Check if the activation spec already exists asList = AdminTask.listSIBJMSActivationSpecs(scope ) mdb = "" if (len(asList) > 0): for item in asList.split("\n"): item = item.rstrip() if (item.find(mdbName) >= 0): mdb = item break #endIf #endFor #endIf if (mdb == ""): print " MDB Activation Spec Name: " + mdbName print " JNDI Name: " + jndiName print " JMS Destination JNDI Name: " + JMSDestJndi print " Destination Type: " + destType SIBus = getName(busId) params = ["-name", mdbName, "-jndiName", jndiName, "-busName", SIBus, "-destinationJndiName", JMSDestJndi, "-destinationType", destType, "-authenticationAlias", authAlias, "-subscriptionDurability", durability, "-clientId", mdbName, "-subscriptionName", mdbName] mdb = AdminTask.createSIBJMSActivationSpec(scope, params ) print mdbName + " created successfully!" else: print mdbName + " already exists!" #endElse return mdb #endDef #----------------------------------------------------------------- # deleteMDBActivationSpec #----------------------------------------------------------------- def deleteMDBActicationSpec (mdbName): print " " print "Deleting MDB Activation Spec " + mdbName + "..." temp = AdminConfig.getid("/J2CActivationSpec:" + mdbName + "/") if (temp): AdminTask.deleteSIBJMSActivationSpec(temp) print mdbName + " removed successfully!" else: print mdbName + " not found!" #endElse #endDef #----------------------------------------------------------------- # installApp - Install the specified application ear file if an # application with the same name does not exist. #----------------------------------------------------------------- def installApp ( appName, ear, deployejb, deployws, defaultBindings, earMetaData, dbType, target ): # appName - application name # ear - ear file # deployejb - deploy ejb (true|false) # deployws - deploy webservices (true|false) # defaultBindings - use default binding (true|false) # earMetaData - use MetaData from ear (true|false) # dbType - ejb deploy db type # target[0] - node name or cluster name # target[1] - server name print "" print "Installing application " + appName + "..." deployejb = deployejb.lower() deployws = deployws.lower() defaultBindings = defaultBindings.lower() earMetaData = earMetaData.lower() # Check if the application already exists app = "" appList = AdminApp.list( ) if (len(appList) > 0): for item in appList.split("\n"): item = item.rstrip() if (item.find(appName) == 0): app = item break #endIf #endFor #endIf if (app == ""): print " Application Name: " + appName print " Ear file: " + ear if (len(target) == 1): cluster = target[0] print " Target Cluster: " + cluster else: node = target[0] server = target[1] print " Target Node: " + node print " Target Server: " + server #endElse print " Deploy EJB: " + deployejb print " Deploy WebServices: " + deployws print " Use default bindings: " + defaultBindings print " Use Ear MetaData: " + earMetaData print " Deployed DB Type: " + dbType parms = "-appname " + appName if (deployejb == "true"): parms += " -deployejb" parms += " -deployejb.dbtype " + dbType else: parms += " -nodeployejb" #endElse if (deployws == "true"): parms += " -deployws" else: parms += " -nodeployws" #endElse if (defaultBindings == "true"): parms += " -usedefaultbindings" #endIf if (earMetaData == "true"): parms += " -useMetaDataFromBinary" else: parms += " -nouseMetaDataFromBinary" #endElse if (len(target) == 1): parms += " -cluster " + cluster else: parms += " -node " + node + " -server " + server #endElse parms1 = [parms] print "Starting application install..." app = AdminApp.install(ear, parms1 ) print "Install completed successfully!" else: print appName + " already exists!" #endElse return app #endDef #----------------------------------------------------------------- # uninstallApp - Uninstall the specified application if it exists. #----------------------------------------------------------------- def uninstallApp ( appName ): # appName - application name print "" print "Uninstalling application..." # Check if the application does not exist app = "" appList = AdminApp.list( ) if (len(appList) > 0): for item in appList.split("\n"): item = item.rstrip() if (item.find(appName) >= 0): app = item break #endIf #endFor #endIf if (app != ""): AdminApp.uninstall(appName ) print "Application uninstalled successfully!" else: print "Application does not exist!" #endElse #endDef #----------------------------------------------------------------- # start processing #----------------------------------------------------------------- print "" print "daytrader_singleServer.py" # Edit this parameter to switch between Interactive and Silent installs SilentInstall = "false" #--------------------------------------------------------------------- # Default Properties for Silent Install # # Edit the variables in this section to perform a silent install. #--------------------------------------------------------------------- # Silent install properties for Managed Node # - Modify these properties to specify the target node and server TargetNodeName = "nodeName" TargetServerName = "serverName" # - Or uncomment the following lines to detect the server and node names #TargetNodeName = getName(getNodeId("")) #TargetServerName = getName(getServerId("")) # Security options # Note: If global security is enabled or will be enabled at some point and # time, the AdminAuthAlias should be updated with a valid administrative # userid and password. In single-server configurations, this can be provided # by role-based auth (default), local OS auth, LDAP, etc. For cluster # configurations, LDAP, Windows Active Directory or some other form of # centralized authentication mechanism must be used to validate the userid. SecurityEnabled = "false" DefaultAdminUser = "AdminUserID" DefaultAdminPasswd = "password" # JDBC provider options DefaultProviderType = "Derby" DefaultPathName = "${DERBY_JDBC_DRIVER_PATH}/derby.jar" DefaultNativePathName = "" # Datasource options DefaultDatabaseName = "tradedb" DefaultHostname = "localhost" DefaultPort = "50000" DefaultUser = "userid" DefaultPasswd = "password" # Additional defaults for vendor specific Datasources #DefaultIfxLockMode = "60" #DefaultIfxServerName = "ifxServerName" #DefaultOraclePort = "1521" DefaultDB2DriverType = "4" # Deploy options # Deploy types include: # "DB2UDB_V82","DB2UDBOS390_V8","DB2UDBISERIES_V54","DERBY_V10","MSSQLSERVER_2005","ORACLE_V10G","INFORMIX_V100" DefaultEJBDeployType = "DERBY_V10" # JMS Messaging Engine Datastore options # Note: true - file store will be used # false - database data store will be used DefaultMEFileStore = "true" DefaultMEFileStoreLocation = "default" #--------------------------------------------------------------------- # Misc options #--------------------------------------------------------------------- CmdOptions = ["all", "configure", "cleanup", "install", "uninstall"] DefaultOptions = ["yes", "no"] BooleanOptions = ["true", "false"] ProviderOptions = ["DB2 Universal","DB2 iSeries (Toolbox)","DB2 iSeries (Native)","Derby","Oracle","Embedded MS SQL Server","Informix"] DeployOptions = ["DB2UDB_V82","DB2UDBOS390_V8","DB2UDBISERIES_V54","DERBY_V10","MSSQLSERVER_2005","ORACLE_V10G","INFORMIX_V100"] #--------------------------------------------------------------------- # Application specific config information # # NOTE: This should NOT be modified!!! #--------------------------------------------------------------------- DefaultTradeAppName = "DayTrader" DefaultEarFile = "daytrader-ear-2.1.3.ear" # Deployment options DefaultRunEJBDeploy = "false" DefaultRunWSDeploy = "false" DefaultBindings = "true" DefaultUseMetadata = "true" # JDBC Driver and DataSource Config Parameters # Datasource properties DefaultDatasourceName = "TradeDataSource" DefaultDatasourceAuthAliasName = "TradeDataSourceAuthData" DefaultNoTxDatasourceName = "NoTxTradeDataSource" DefaultStmtCacheSize = 60 DefaultXA = "true" # JMS (Messaging) Config Parameters # Global Security properties for JMS DefaultAdminAuthAliasName = "TradeAdminAuthData" #reliability = "ASSURED_PERSISTENT" reliability = "EXPRESS_NONPERSISTENT" #deliveryMode = "Persistent" deliveryMode = "NonPersistent" #durability = "Durable" durability = "NonDurable" # Queue/Topic Names brokerSIBDest = "TradeBrokerJSD" topicSpace = "Trade.Topic.Space" brokerJMSQCF = "TradeBrokerQCF" streamerJMSTCF = "TradeStreamerTCF" brokerQueue = "TradeBrokerQueue" streamerTopic = "TradeStreamerTopic" brokerMDB = "TradeBrokerMDB" streamerMDB = "TradeStreamerMDB" #--------------------------------------------------------------------- # Common JDBC Driver Paths #--------------------------------------------------------------------- # Note: wsadmin parses the command line based on ";" regardless of platform type #DB2WinJccPath = "c:/sqllib/java/db2jcc.jar;c:/sqllib/java/db2jcc_license_cu.jar;" #DB2zSeriesNativePath = "/usr/lpp/db2/db2810/jcc/lib" #DB2CliPath = "c:/sqllib/java/db2java.zip" #OraclePath = "c:/oracle/product/10.1.0/db_1/jdbc/lib/ojdbc14.jar" #DerbyPath = "$\{WAS_INSTALL_ROOT\}/derby/lib/derby.jar" #DB2iSeriesNativePath = "/QIBM/ProdData/Java400/ext/db2_classes.jar" #DB2iSeriesToolboxPath = "/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar" validActions = ["all", "configure", "cleanup", "install", "uninstall"] validSecurity = ["enabled", "disabled"] validPrompt = ["true", "false"] #--------------------------------------------------------------------- # Parse command line options #--------------------------------------------------------------------- try: opts, args = getopt.getopt(sys.argv[0:], "a:s:u:e:", ["action=", "security=", "userid=", "password=", "earfile", "prompt=", "help"]) #opts, args = getopt.getopt(sys.argv[1:], "a:", ["action="]) except getopt.GetoptError, err: print str(err) # usage() sys.exit() #endTry action = "all" #SecurityEnabled = "false" #DefaultAdminUser = "AdminUserID" #DefaultAdminPasswd = "password" #DefaultPort = "5000" #SilentInstall = "false" prompt = "true" operation = "all" useridProvided = "false" passwordProvided = "false" for opt, arg in opts: if opt == "--help": printUsageAndExit() elif opt in ("-a", "--action"): print "action - " + arg if arg in validActions: operation = arg else: print "invalid action: '" + arg + "'" printUsageAndExit() elif opt in ("-e", "--earfile"): DefaultEarFile = arg elif opt in ("-s", "--security"): print "security - " + arg if arg in validSecurity: if arg == "enabled": SecurityEnabled = "true" else: SecurityEnabled = "false" else: print "invalid security value: '" + arg + "'" printUsageAndExit() elif opt in ("-u", "--userid"): print "userid - " + arg useridProvided = "true" DefaultAdminUser = arg elif opt in ("-p", "--password"): print "password - " + arg passwordProvided = "true" DefaultAdminPasswd = arg elif opt == "--prompt": print "prompt - " + arg if arg in validPrompt: prompt = arg else: print "invalid prompt value: '" + arg + "'" printUsageAndExit() else: print "invalid option: '" + opt + "'" sys.exit() #endIfElse #endFor if SecurityEnabled == "true": if useridProvided == "false": print "" print "Error: --userid must be specified when security is enabled" printUsageAndExit() #endIf if passwordProvided == "false": print "" print "Error: --password must be specified when security is enabled" printUsageAndExit() #endIf #endIf if prompt == "true": operation = getValidInput("Action: (all | configure | cleanup | install | uninstall) ["+operation+"]:", operation, validActions) #endIf if (prompt == "true" and (operation == "all" or operation == "install")): DefaultEarFile = getInput("Please enter the ear file location [" + DefaultEarFile + "]:", DefaultEarFile) #endIf print "" print "------------------------------------------------" print " Daytrader Install/Configuration Script" print "" print " Action: " + operation print "------------------------------------------------" #--------------------------------------------------------------------- # Daytrader configuration procedures #--------------------------------------------------------------------- scope = "" if (SilentInstall == "false" and ( operation == "configure" or operation == "all") ): if prompt == "true": SecurityEnabled = getValidInput("Global security is (or will be) enabled (true|false) ["+SecurityEnabled+"]:", SecurityEnabled, BooleanOptions ) # Obtain node name and id for scope print "------------------------------------------------" print " Collecting Single Server or Managed Server Info" print "" node = getNodeId("") TargetNodeName = getName(node ) scope = node server = getServerId("") TargetServerName = getName(server ) print " Node: " + TargetNodeName print " Server: " + TargetServerName print "------------------------------------------------" if (SecurityEnabled == "true" and prompt == "true"): print "-------------------------------------------------" print " Collecting Security Information for JMS" print " " print " Note: The supplied authentication data must" print " correspond to a valid administrative username" print " and password." print "-------------------------------------------------" DefaultAdminUser = getInput("Please enter a valid administrative username ["+DefaultAdminUser+"]:", DefaultAdminUser ) DefaultAdminPasswd = getInput("Please enter a valid administrative password ["+DefaultAdminPasswd+"]:", DefaultAdminPasswd ) #endIf #endIf if (operation == "all" or operation == "configure"): # Create the JDBC/Datasource config objects if (scope == ""): #scope = AdminConfig.getid("/Node:"+TargetNodeName+"/Server:"+TargetServerName+"/") # By default, we normally use Node scope scope = AdminConfig.getid("/Node:"+TargetNodeName+"/") #endIf print "" print "------------------------------------------------" print " Configuring JDBC/Datasource Resources" print " Scope: "+scope print "------------------------------------------------" createJAASAuthData(DefaultDatasourceAuthAliasName, DefaultUser, DefaultPasswd ) provider = createJDBCProvider(DefaultProviderType, DefaultXA, scope, DefaultPathName, DefaultNativePathName ) datasource = createDatasource(DefaultDatasourceName, "jdbc/"+DefaultDatasourceName, DefaultStmtCacheSize, DefaultDatasourceAuthAliasName, provider) noTxDatasource = createDatasource(DefaultNoTxDatasourceName, "jdbc/"+DefaultNoTxDatasourceName, 10, DefaultDatasourceAuthAliasName, provider) addDatasourceProperty(noTxDatasource, "nonTransactionalDataSource", "true") #if (DefaultProviderType.find("DB2") >= 0 or DefaultProviderType == "Derby"): updateDB2orDerbyDatasource(datasource, DefaultDatabaseName, DefaultHostname, DefaultPort, DefaultDB2DriverType) updateDB2orDerbyDatasource(noTxDatasource, DefaultDatabaseName, DefaultHostname, DefaultPort, DefaultDB2DriverType) print "" print "------------------------------------------------" print " JDBC Resource Configuration Completed!!!" print "------------------------------------------------" # Create the JMS config objects print "" print "------------------------------------------------" print " Configuring JMS Resources" print " Scope: "+scope print "------------------------------------------------" createJAASAuthData(DefaultAdminAuthAliasName, DefaultAdminUser, DefaultAdminPasswd ) sibus = createSIBus(getName(scope ), DefaultAdminAuthAliasName ) fileStore = [DefaultMEFileStore, DefaultMEFileStoreLocation] target = [TargetNodeName, TargetServerName] dsParms = ["true", "dummy"] addSIBusMember(sibus, fileStore, target, dsParms) if (SecurityEnabled == "true"): createSIBusSecurityRole(sibus, DefaultAdminUser ) #endIf # Create the Trade Broker Queue and Trade TopicSpace Destinations createSIBDestination(sibus, brokerSIBDest, "Queue", reliability, target ) createSIBDestination(sibus, topicSpace, "TopicSpace", reliability, [] ) createJMSConnectionFactory(sibus, brokerJMSQCF, "Queue", "jms/"+brokerJMSQCF, DefaultAdminAuthAliasName, scope ) createJMSConnectionFactory(sibus, streamerJMSTCF, "Topic", "jms/"+streamerJMSTCF, DefaultAdminAuthAliasName, scope ) createJMSQueue(brokerQueue, "jms/"+brokerQueue, brokerSIBDest, deliveryMode, scope ) createJMSTopic(streamerTopic, "jms/"+streamerTopic, topicSpace, deliveryMode, scope ) createMDBActivationSpec(brokerMDB, "eis/"+brokerMDB, sibus, "jms/"+brokerQueue, "javax.jms.Queue", DefaultAdminAuthAliasName, scope, durability ) createMDBActivationSpec(streamerMDB, "eis/"+streamerMDB, sibus, "jms/"+streamerTopic, "javax.jms.Topic", DefaultAdminAuthAliasName, scope, durability ) print "" print "------------------------------------------------" print " JMS Resource Configuration Completed!!!" print "------------------------------------------------" print "" print "Saving..." AdminConfig.save( ) #endIf #--------------------------------------------------------------------- # Daytrader install procedures #--------------------------------------------------------------------- if (operation == "all" or operation == "install"): print " " print "------------------------------------------------" print " Installing DayTrader" print "------------------------------------------------" if (SilentInstall == "false" and operation == "install"): TargetNodeName = getName(getNodeId("")) TargetServerName = getName(getServerId("")) #print "Deploy options include the following:" #for deploy in DeployOptions: # print " " + deploy ##endFor #DefaultEJBDeployType = getValidInput("Select the EJB deployment target ["+DefaultEJBDeployType+"]:", DefaultEJBDeployType, DeployOptions) #endIf target = [TargetNodeName, TargetServerName] installApp(DefaultTradeAppName, DefaultEarFile, DefaultRunEJBDeploy, DefaultRunWSDeploy, DefaultBindings, DefaultUseMetadata, DefaultEJBDeployType, target ) print "" print "------------------------------------------------" print " DayTrader Installation Completed!!!" print "------------------------------------------------" print "" print "Saving..." AdminConfig.save( ) #endIf if (operation == "uninstall"): print " " print "------------------------------------------------" print " Uninstalling DayTrader" print "------------------------------------------------" uninstallApp(DefaultTradeAppName) print "" print "------------------------------------------------" print " DayTrader Uninstall Completed!!!" print "------------------------------------------------" print "" print "Saving..." AdminConfig.save( ) #endIf if (operation == "cleanup"): print " " print "------------------------------------------------" print " Uninstalling JMS Resources" print "------------------------------------------------" deleteMDBActicationSpec(brokerMDB) deleteMDBActicationSpec(streamerMDB) deleteJMSQueue(brokerQueue) deleteJMSTopic(streamerTopic) deleteJMSConnectionFactory(brokerJMSQCF) deleteJMSConnectionFactory(streamerJMSTCF) deleteSIBDestination(brokerSIBDest) deleteSIBDestination(topicSpace) deleteSIBus(getName(getNodeId(""))) removeJAASAuthData(DefaultAdminAuthAliasName) print " " print "------------------------------------------------" print " Uninstalling JDBC Resources" print "------------------------------------------------" removeDatasource(DefaultDatasourceName) removeDatasource(DefaultNoTxDatasourceName) removeJAASAuthData(DefaultDatasourceAuthAliasName) print "" print "------------------------------------------------" print " DayTrader Resource Cleanup Completed!!!" print "------------------------------------------------" print "" print "Saving..." AdminConfig.save( ) #endIf print "" print "Saving config..." AdminConfig.save( )