11.6.1 UDDIRegistryClientManagerMBean Implementation 11.6.1.1 UDDIRegistryClient Class package jnjmx.ch11; /** This example requires installation of UDDI4J available from * http://www.uddi4j.org or http://www.ibm.com */ import org.uddi4j.*; import org.uddi4j.client.*; import org.uddi4j.datatype.*; import org.uddi4j.datatype.business.*; import org.uddi4j.datatype.binding.*; import org.uddi4j.request.*; import org.uddi4j.response.*; import org.uddi4j.transport.TransportFactory; import org.uddi4j.util.*; import org.w3c.dom.Element; import java.util.Vector; import java.util.Properties; import java.io.*; import java.net.*; public class UDDIRegistryClient { String logonID = ""; String logonPW = ""; String regName = ""; String regURL = ""; /** * Constructor for UDDIRegistryClient. */ public UDDIRegistryClient() { } public UDDIRegistryClient(String name, String url, String inLogonID, String inLogonPW) { System.out.println("instantiating UDDIRegistryClient"); logonID = inLogonID; logonPW = inLogonPW; regName = name; regURL = url; } public long ping(String url) { // >0 is good, 0 is bad, -1 is unknown host or other exception // this ping uses the ping already on the system through the // runtime. // This will work on a Windows 2000 system with default ping. // On a UNIX system or using another ping tool, the parsing to // extract the correct average response time may need to be // customized. long roundTripTime = 0; long sendTime, endTime = 0; long timeMeasured = -1; long pingMS = 0; InetAddress uddiIPAddr; URL pingURL; String printstring; if (url.equals("")) {url = regURL; } if (url.equals("")) { url = regURL; // search for all businesses starting with I ("IBM" should // be there) url = "http://www-3.ibm.com/services/uddi/" + "testregistry/inquiryapi"; } System.out.println( "UDDIRegistryClient:ping ping for url " + url); try { pingURL = new URL(url); String hostname = pingURL.getHost(); String th = (InetAddress.getLocalHost()).getHostName(); uddiIPAddr = InetAddress.getByName(hostname); String hostipaddr = uddiIPAddr.getHostAddress(); System.out.println("Pinging " + hostname + " at " + hostipaddr + " from " + th); String[] cmdString = new String[] {"ping", hostipaddr}; endTime = -1; int avgindex, msindex; String avgms = null; sendTime = System.currentTimeMillis(); Process pingproc = (Runtime.getRuntime()).exec(cmdString); InputStream pingos = pingproc.getInputStream(); endTime = System.currentTimeMillis(); BufferedReader rdr = new BufferedReader( new InputStreamReader(pingos)); printstring = rdr.readLine(); while ((printstring != null ) && (avgms == null )) { // System.out.println("ping returned: " + // printstring); avgindex = printstring.indexOf("Average"); // *Average if (avgindex > 0) { msindex = printstring.indexOf( "ms", avgindex); // *Average = xxxms* avgms = printstring.substring( avgindex+7, msindex); // * = xxx* } printstring = rdr.readLine(); } if (avgms != null ) { avgms = avgms.replace('=', ' '); avgms = avgms.trim(); // should leave just // the digits pingMS = ( new Long(avgms)).longValue(); } if (pingMS <= 0) { // setup url connnection, the url has been // redirected to HttpURLConnection toUDDI = (HttpURLConnection) pingURL.openConnection(); toUDDI.setUseCaches( false ); toUDDI.setRequestMethod("POST"); toUDDI.connect(); InputStream is = toUDDI.getInputStream(); BufferedReader urlrdr = new BufferedReader( new InputStreamReader(is)); printstring = urlrdr.readLine(); while (printstring != null ) { // System.out.println( // "url returned: " + printstring); printstring = urlrdr.readLine(); } } } catch (UnknownHostException eu) { System.out.println("URL " + url + " is unknown"); return -1; } catch (MalformedURLException em) { System.out.println("URL " + url + " is malformed"); return -1; } catch (Exception e) {// failed System.out.println("Ping failed"); return -1; return pingMS; } public long test(String url, String businessName) { System.setProperty(TransportFactory.PROPERTY_NAME, "org.uddi4j.transport.ApacheAxisTransport"); UDDIProxy proxy; if (url.equals("")) {url = regURL; } if (url.equals("")) { // search for all businesses starting with I // ("IBM" should be there) url = "http://www-3.ibm.com/services/uddi/" + "testregistry/inquiryapi"; } if (businessName.equals("")) { // search for all businesses starting with I // ("IBM" should be there) businessName = "I"; } // System.out.println("UDDIRegistryClient:test for url " + url); try { proxy = new UDDIProxy(); proxy.setInquiryURL(url); } catch (Exception e) { e.printStackTrace(); return -1; } try { // creating vector of Name Object Vector bizNames = new Vector(); bizNames.add( new Name(businessName)); // setting FindQualifiers to "caseSensitiveMatch" FindQualifiers findQualifiers = new FindQualifiers(); Vector qualifier = new Vector(); qualifier.add( new FindQualifier("caseSensitiveMatch")); findQualifiers.setFindQualifierVector(qualifier); long findStartTime = System.currentTimeMillis(); System.out.println("Looking for businesses " + businessName); // finding businesses by name // and setting the maximum rows to be returned as 5. BusinessList businessList = proxy.find_business(bizNames, null, null, null, null, findQualifiers,5); // System.out.println("uddi getBusiness return " + // businessList.getBusinessInfos().size()); long findReturnTime = System.currentTimeMillis(); Vector businessInfoVector = businessList.getBusinessInfos().getBusinessInfoVector(); // for (int i = 0; i < businessInfoVector.size(); i++) { // BusinessInfo businessInfo = (BusinessInfo) businessInfoVector.elementAt(i); // Print name for each business // System.out.println(businessInfo.getNameString()); // } if (businessInfoVector.size() > 0) { long elapsedFindTime = findReturnTime - findStartTime; return elapsedFindTime; } else { return -1; } } catch (UDDIException e) { System.out.println("UDDIRegistryClient:test UDDIException " + e.getMessage()); DispositionReport dr = e.getDispositionReport(); if (dr!= null ) { System.out.println("UDDIException faultCode:" + e.getFaultCode() + "\n operator:" + dr.getOperator() + "\n generic:" + dr.getGeneric() + "\n errno:" + dr.getErrno() + "\n errCode:" + dr.getErrCode() + "\n errInfoText:" + dr.getErrInfoText()); } return -1; } catch (Exception e) { System.out.println("UDDIRegistryClient:test exception " + e.getMessage()); return -1; } } } 11.6.1.2 UDDIRegistryClientManagerMBean Interface package jnjmx.ch11; public interface UDDIRegistryClientManagerMBean { String getName(); void setName(String name); String getURL(); void setURL(String url); String getStatus(); void setStatus(String avail); Long checkAvailability(String businessName); Long checkNetworkAvailability(); } 11.6.1.3 UDDIRegistryClientManager Class package jnjmx.ch11; /** * @author Heather Kreger: Java And JMX: Building Manageable Systems * * This class interacts with the UDDI Registry using UDDI4J * */ public class UDDIRegistryClientManager implements UDDIRegistryClientManagerMBean { String regName = ""; String regURL = ""; String logonID = ""; String logonPW = ""; String currentStatus = "available"; UDDIRegistryClient uddiClient; public UDDIRegistryClientManager(String name, String url, String logonName, String pw) { regName = name; regURL = url; logonID = logonName; logonPW = pw; uddiClient = new UDDIRegistryClient(regName, regURL, logonID, logonPW); } /** * Constructor for UDDIRegistryClientManager. */ public UDDIRegistryClientManager() { super (); uddiClient = new UDDIRegistryClient(); } /** * @see jnjmx.ch11.UDDIRegistryClientManagerMBean#getName() */ public String getName() { return regName; } /** * @see jnjmx.ch11.UDDIRegistryClientManagerMBean#setName(String) */ public void setName(String name) { regName = name; } /** * @see jnjmx.ch11.UDDIRegistryClientManagerMBean#getURL() */ public String getURL() { return regURL; } /** * @see jnjmx.ch11.UDDIRegistryClientManagerMBean#setURL(String) */ public void setURL(String url) { regURL = url; } /** * @see jnjmx.ch11.UDDIRegistryClientManagerMBean#getStatus() */ public String getStatus() { return currentStatus; } /** * @see jnjmx.ch11.UDDIRegistryClientManagerMBean#setStatus(String) */ public void setStatus(String avail) { currentStatus = avail; } /** * @see jnjmx.ch11.UDDIRegistryClientManagerMBean#checkAvailability(int) */ public Long checkAvailability(String businessName) { // System.out.println( "UDDIRegistryClientManager:checkAvailability:testing uddi server " + regURL); long rc = uddiClient.test(regURL, businessName); if (rc > 0) currentStatus = "available"; else currentStatus = "not available"; return new Long(rc); } /** * @see * jnjmx.ch11.UDDIRegistryClientManagerMBean#checkNetworkAvailability() */ public Long checkNetworkAvailability() { // 0 = not available, else returns response time for ping // Note, this method will not work if the UDDI registry's URL // has been redirected. // System.out.println( "UDDIRegistryClientManager:checkNetworkAvailability:pinging uddi server for " + regURL); long rc = 0; Long zero = new Long(0); try { rc = uddiClient.ping(regURL); } catch (Exception e) { return zero; } if (rc > 0 ) { currentStatus = "available"; return new Long(rc); } else { currentStatus = "not available"; return zero; } } } 11.6.2 WebServiceRuntimeManagerMBean Implementation package jnjmx.ch11; import java.lang.Class; import java.util.Date; public interface WebServiceRuntimeManagerMBean { String getName(); String getType(); String getVersion(); // getServerVersion Date getStartTime(); // getStartDate Integer getNumberOfServicesDeployed(); // getServicesCount Integer getNumberofRequests(); // getTotalCalls String checkAvailability(); String getServerHostname(); // getServerHostName String getServerPort(); // getServerPort Boolean getDebug(); void setDebug(Boolean flip); } package jnjmx.ch11; import java.util.Date; import java.util.ArrayList; import java.util.Hashtable; import javax.management.*; /** * Implementing MBean * Date getStartTime(); // getStartDate * Integer getNumberOfServicesDeployed(); // getServicesCount * Integer getNumberofRequests(); // getTotalCalls * String getAvailability(); * String getServerHostname(); // getServerHostName * String getServerPort(); // getServerPort * Boolean getDebug(); * void setDebug(Boolean flip); */ public class WebServiceRuntimeManager implements WebServiceRuntimeManagerMBean { String rtName = ""; String rtVersion = "V1R0"; Date start; Integer numDeployed, numRequests; String status; String hostname="localhost", port="80"; String rtType = "unknown"; Boolean debugFlag = new Boolean("false"); String mbDomain; Date mbInit; MBeanServer mbs; ObjectName runtimeMBName; /** * Constructor for WebServiceRuntimeManager. */ public WebServiceRuntimeManager() { super (); start = new Date(); mbInit = new Date(); ArrayList mbServers = MBeanServerFactory.findMBeanServer( null ); if (!mbServers.isEmpty()) mbs = (MBeanServer) mbServers.get(0); else System.out.println( "WebServiceRuntimeManager MBean constructor failed"); } public WebServiceRuntimeManager (String name, String type, String version) { rtName = name; rtType = type; rtVersion = version; start = new Date(); try { ArrayList mbServers = MBeanServerFactory.findMBeanServer( null ); if (!mbServers.isEmpty()) mbs = (MBeanServer) mbServers.get(0); else System.out.println( "WebServiceRuntimeManager MBean constructor " + failed"); String mbDomain = "SoapManagement"; runtimeMBName = new ObjectName(mbDomain, "type", "soap"); // runtime MBeanName // need to construct WS MBeanName... // namekeys = new Hashtable(4); // namekeys.put("type", "soap"); // namekeys.put("name", wsName); // wsMBName = new ObjectName(mbDomain, namekeys); } catch (Exception e) { System.out.println( "WebServiceRuntimeManager MBean constructor failed"); } } /** * @see jnjmx.ch11.WebServiceRuntimeManagerMBean#getName() */ public String getName() { return rtName; } /** * @see jnjmx.ch11.WebServiceRuntimeManagerMBean#getType() */ public String getType() { try { rtType = (String) mbs.getAttribute(runtimeMBName, "ServerType"); } catch (Exception e) { // unable to get attribute, return old value } return rtType; } /** * @see jnjmx.ch11.WebServiceRuntimeManagerMBean#getVersion() */ public String getVersion() { try { rtVersion = (String) mbs.getAttribute(runtimeMBName, "ServerVersion"); } catch (Exception e) { // unable to get attribute, return old value } return rtVersion; } public Date getStartTime() { try { start = (Date) mbs.getAttribute(runtimeMBName, "StartDate"); } catch (Exception e) { // unable to get attribute, return old value } return start; } public Integer getNumberOfServicesDeployed() { try { numDeployed = (Integer) mbs.getAttribute(runtimeMBName, "ServiceCount"); } catch (Exception e) { // unable to get attribute, return old value } return numDeployed; } /** * @see jnjmx.ch11.WebServiceRuntimeManagerMBean#getNumberofRequests() */ public Integer getNumberofRequests() { try { numRequests = (Integer) mbs.getAttribute(runtimeMBName, "TotalCount"); } catch (Exception e) { // unable to get attribute, return old value } return numRequests; } public String getServerHostname() { try { hostname = (String) mbs.getAttribute(runtimeMBName, "ServerHostname"); } catch (Exception e) { // unable to get attribute, return old value } return hostname; } public String getServerPort() { try { port = (String) mbs.getAttribute(runtimeMBName, "ServerPort"); } catch (Exception e) { port = "unknown"; } return port; } /** * @see jnjmx.ch11.WebServiceRuntimeManagerMBean#getAvailability() */ public String checkAvailability() { // this should exercize the Web Service Runtime in some way String status = "unknown"; return status; } public void setDebug(Boolean dbg) { try { Attribute newDbg = new Attribute("WstkDebug", dbg); mbs.setAttribute(runtimeMBName, newDbg); } catch (Exception e) { // unable to get attribute, return old value } } public Boolean getDebug() { try { debugFlag = (Boolean) mbs.getAttribute(runtimeMBName, "WstkDebug"); } catch (Exception e) { // unable to get attribute, return old value } return debugFlag; } } 11.6.3 WebServiceManagerMBean Implementation package jnjmx.ch11; import java.util.Date; public interface WebServiceManagerMBean { String getName(); String getVersion(); void setVersion(String version); Integer getNumberofRequests(); //getInvocations Integer getNumberofResponses(); // getSucesses Integer getNumberofFailureResponses(); // getFailures Date getStartTime(); // getStartDate Integer getAverageResponseTimeofResponses(); // getAverageResonseTimeMs String checkAvailability(); // getStatus Integer getTotalElapsedExecutionTime(); // getTotalProcessTimeMs } package jnjmx.ch11; import java.util.ArrayList; import java.util.Date; import javax.management.*; import java.util.Hashtable; public class WebServiceManager implements WebServiceManagerMBean { String wsName = ""; String wsVersion = "v1r0"; String mbDomain; Date mbInit; MBeanServer mbs; ObjectName runtimeMBName, wsMBName; Hashtable namekeys; /** * constructor for WebServiceManager */ public WebServiceManager() { mbInit = new Date(); ArrayList mbServers = MBeanServerFactory.findMBeanServer( null ); if (!mbServers.isEmpty()) mbs = (MBeanServer) mbServers.get(0); else System.out.println( "WebServiceManager MBean constructor failed"); } public WebServiceManager(String name, String version) { wsName = name; wsVersion = version; mbInit = new Date(); try { ArrayList mbServers = MBeanServerFactory.findMBeanServer( null ); if (!mbServers.isEmpty()) mbs = (MBeanServer) mbServers.get(0); else System.out.println( "WebServiceManager MBean constructor failed"); String mbDomain = "SoapManagement"; runtimeMBName = new ObjectName(mbDomain, "type", "soap"); // runtime MBeanName // need to construct WS MBeanName... namekeys = new Hashtable(4); namekeys.put("type", "soap"); namekeys.put("name", wsName); wsMBName = new ObjectName(mbDomain, namekeys); } catch (Exception e) { System.out.println( "WebServiceManager MBean constructor failed"); } } /** * @see jnjmx.ch11.WebServiceManagerMBean#getName() */ public String getName() { return wsName; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getName() */ public void setName(String name) { // this will change what MBean is used, but it // will not change the name of the MBean. wsName = name; try { wsMBName = new ObjectName(mbDomain, namekeys); } catch (Exception e) { // bad name } } /** * @see jnjmx.ch11.WebServiceManagerMBean#getVersion() */ public String getVersion() { // version is a local concept, not used by JMX or Web services return wsVersion; } /** * @see jnjmx.ch11.WebServiceManagerMBean#setVersion() */ public void setVersion(String version) { wsVersion = version; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getStartDate() */ public Date getStartTime() { Date initDate; try { initDate = (Date) mbs.getAttribute(wsMBName, "StartDate"); } catch (Exception e) { initDate = mbInit; } return initDate; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getNumberofRequests() */ public Integer getNumberofRequests() { Integer numReq; try { numReq = (Integer) mbs.getAttribute(wsMBName, "Invocations"); } catch (Exception e) { numReq = new Integer(0); } return numReq; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getNumberofResponses() */ public Integer getNumberofResponses() { Integer numSucc; try { numSucc = (Integer) mbs.getAttribute(wsMBName, "Successes"); } catch (Exception e) { numSucc = new Integer(0); } return numSucc; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getNumberofFailureResponses() */ public Integer getNumberofFailureResponses() { Integer numFailures; try { numFailures = (Integer) mbs.getAttribute(wsMBName, "Failures"); } catch (Exception e) { numFailures = new Integer(0); } return numFailures; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getAverageResponseTimeofResponses() */ public Integer getAverageResponseTimeofResponses() { Integer avgRT; try { avgRT = (Integer) mbs.getAttribute(wsMBName, "AverageResponseTimeMs"); } catch (Exception e) { avgRT = new Integer(0); } return avgRT; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getAvailability() */ public String checkAvailability() { String status; try { status = (String) mbs.getAttribute(wsMBName, "Status"); } catch (Exception e) { status = "unknown"; } return status; } /** * @see jnjmx.ch11.WebServiceManagerMBean#getTotalElapsedExecutionTime() */ public Integer getTotalElapsedExecutionTime() { Integer procTime; try { procTime = (Integer) mbs.getAttribute(wsMBName, "TotalProcessTimeMs"); } catch (Exception e) { procTime = new Integer(0); } return procTime; } } 11.6.4 StockQuote Service WSDL Document <?xml version="1.0"?> <definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:xsd1="http://example.com/stockquote.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="GetTradePriceInput"> <part name="tickerSymbol" element="xsd:string"/> <part name="time" element="xsd:timeInstant"/> </message> <message name="GetTradePriceOutput"> <part name="result" type="xsd:float"/> </message> <portType name="StockQuotePortType"> <operation name="GetTradePrice"> <input message="tns:GetTradePriceInput"/> <output message="tns:GetTradePriceOutput"/> </operation> </portType> <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetTradePrice"> <soap:operation soapAction="http://example.com/GetTradePrice"/> <input> <soap:body use="encoded" namespace="http://example.com/stockquote" encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace= "http://example.com/stockquote" encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation>> </binding> <service name="StockQuoteService"> <documentation>My first service</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location="http://example.com/stockquote"/> </port> </service> </definitions> |