You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by tc...@apache.org on 2011/03/31 17:19:33 UTC
svn commit: r1087337 - in
/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl:
ServiceCounterLifecycleResource.java UDDIServiceCounter.java
UDDIServiceCounterMBean.java
Author: tcunning
Date: Thu Mar 31 15:19:32 2011
New Revision: 1087337
URL: http://svn.apache.org/viewvc?rev=1087337&view=rev
Log:
JUDDI-455
Add missing classes.
Added:
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounterMBean.java
Added: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java?rev=1087337&view=auto
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java (added)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java Thu Mar 31 15:19:32 2011
@@ -0,0 +1,64 @@
+package org.apache.juddi.api.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.juddi.api.util.CustodyTransferQuery;
+import org.apache.juddi.api.util.InquiryQuery;
+import org.apache.juddi.api.util.PublicationQuery;
+import org.apache.juddi.api.util.ReplicationQuery;
+import org.apache.juddi.api.util.SecurityQuery;
+import org.apache.juddi.api.util.SubscriptionListenerQuery;
+import org.apache.juddi.api.util.SubscriptionQuery;
+import org.apache.juddi.api.util.ValueSetCachingQuery;
+import org.apache.juddi.api.util.ValueSetValidationQuery;
+
+public class ServiceCounterLifecycleResource {
+ static Map<String, UDDIServiceCounter> serviceCounters =
+ new HashMap<String, UDDIServiceCounter>();
+
+ static Map implForQuery = new HashMap<String, List<String>>();
+
+ public static String getObjectName(Class klass) {
+ StringBuffer objectName = new StringBuffer("portType=" + klass.toString());
+ return objectName.toString();
+ }
+
+ public static synchronized void initQuery() {
+ synchronized (implForQuery) {
+ if (implForQuery.isEmpty()) {
+ implForQuery = new HashMap<String, List<String>>();
+ implForQuery.put(UDDICustodyTransferImpl.class, CustodyTransferQuery.getQueries());
+ implForQuery.put(UDDIInquiryImpl.class, InquiryQuery.getQueries());
+ implForQuery.put(UDDIPublicationImpl.class, PublicationQuery.getQueries());
+ implForQuery.put(UDDIReplicationImpl.class, ReplicationQuery.getQueries());
+ implForQuery.put(UDDISecurityImpl.class, SecurityQuery.getQueries());
+ implForQuery.put(UDDISubscriptionImpl.class, SubscriptionQuery.getQueries());
+ implForQuery.put(UDDISubscriptionListenerImpl.class, SubscriptionListenerQuery.getQueries());
+ implForQuery.put(UDDIValueSetCachingImpl.class, ValueSetCachingQuery.getQueries());
+ implForQuery.put(UDDIValueSetValidationImpl.class, ValueSetValidationQuery.getQueries());
+ }
+ }
+ }
+
+ public static UDDIServiceCounter getServiceCounter(Class klass) {
+ if (implForQuery.isEmpty()) {
+ initQuery();
+ }
+
+ String objectName = getObjectName(klass);
+ synchronized (serviceCounters) {
+ UDDIServiceCounter serviceCounter = serviceCounters.get(objectName);
+ if (serviceCounter == null) {
+ UDDIServiceCounter uddiServiceCounter = new UDDIServiceCounter();
+ uddiServiceCounter.initList(klass, (List<String>)implForQuery.get(klass));
+ uddiServiceCounter.registerMBean();
+ serviceCounters.put(objectName, uddiServiceCounter);
+ return uddiServiceCounter;
+ } else {
+ return serviceCounter;
+ }
+ }
+ }
+}
Added: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java?rev=1087337&view=auto
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java (added)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java Thu Mar 31 15:19:32 2011
@@ -0,0 +1,302 @@
+package org.apache.juddi.api.impl;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.management.Attribute;
+import javax.management.AttributeList;
+import javax.management.AttributeNotFoundException;
+import javax.management.DynamicMBean;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InvalidAttributeValueException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api.util.QueryStatus;
+import org.apache.juddi.api.util.UDDIQuery;
+
+public class UDDIServiceCounter implements DynamicMBean, Serializable {
+
+ private static Log log = LogFactory.getLog(UDDIServiceCounter.class);
+
+ private Hashtable <String, LongHolder> queryProcessingTime;
+ private Hashtable <String, IntHolder> totalQueryCounter;
+ private Hashtable <String, IntHolder> successQueryCounter;
+ private Hashtable <String, IntHolder> faultQueryCounter;
+
+ private ObjectName listObjectName = null;
+
+ private static final String PROCESSING_TIME = "processing time";
+ private static final String TOTAL_QUERIES = "total queries";
+ private static final String SUCCESSFUL_QUERIES = "successful queries";
+ private static final String FAILED_QUERIES = "failed queries";
+
+ public static final String RESET_COUNTER = "resetCounter";
+
+ public void initList(Class klass, List<String> queries) {
+ try {
+ listObjectName = new ObjectName("apache.juddi:" + "counter=" + klass.getName());
+ } catch (MalformedObjectNameException mone) {
+ log.error(mone);
+ }
+
+ queryProcessingTime = new Hashtable<String,LongHolder>();
+ totalQueryCounter = new Hashtable<String, IntHolder>();
+ successQueryCounter = new Hashtable<String, IntHolder>();
+ faultQueryCounter = new Hashtable<String, IntHolder>();
+
+ for (String query : queries) {
+ queryProcessingTime.put(query + " " + PROCESSING_TIME, new LongHolder());
+ totalQueryCounter.put(query + " " + TOTAL_QUERIES, new IntHolder());
+ successQueryCounter.put(query + " " + SUCCESSFUL_QUERIES, new IntHolder());
+ faultQueryCounter.put(query + " " + FAILED_QUERIES, new IntHolder());
+ }
+ }
+
+ protected void registerMBean() {
+ MBeanServer mbeanServer = null;
+
+ mbeanServer = getServer();
+ if (mbeanServer == null) {
+ try {
+// mbeanServer = MBeanServerLocator.locateJBoss();
+ } catch (IllegalStateException ise) {
+ // If we can't find a JBoss MBeanServer, just return
+ // Needed for unit tests
+ return;
+ }
+ }
+
+ try {
+ mbeanServer.registerMBean(this, listObjectName);
+ } catch (InstanceAlreadyExistsException e) {
+ log.warn("", e);
+ } catch (MBeanRegistrationException e) {
+ log.warn("", e);
+ } catch (NotCompliantMBeanException e) {
+ log.warn("", e);
+ }
+ }
+
+ private MBeanServer getServer() {
+ MBeanServer mbserver = null;
+
+ ArrayList mbservers = MBeanServerFactory.findMBeanServer(null);
+
+ if (mbservers.size() > 0) {
+ mbserver = (MBeanServer) mbservers.get(0);
+ }
+
+ if (mbserver != null) {
+ System.out.println("Found our MBean server");
+ } else {
+ mbserver = MBeanServerFactory.createMBeanServer();
+ }
+
+ return mbserver;
+ }
+
+ public void resetCounts() {
+ for (String key : queryProcessingTime.keySet()) {
+ queryProcessingTime.put(key, new LongHolder());
+ }
+
+ for (String key : totalQueryCounter.keySet()) {
+ totalQueryCounter.put(key, new IntHolder());
+ }
+
+ for (String key : successQueryCounter.keySet()) {
+ successQueryCounter.put(key, new IntHolder());
+ }
+
+ for (String key : faultQueryCounter.keySet()) {
+ faultQueryCounter.put(key, new IntHolder());
+ }
+ }
+
+ public synchronized void update(UDDIQuery queryObject, QueryStatus queryStatus,
+ long procTime) {
+ //log.info("Updating " + queryObject.getQuery() + " time " + procTime);
+ String query = queryObject.getQuery();
+
+ LongHolder totalProcTime = queryProcessingTime.get(query + " " + PROCESSING_TIME);
+ if (totalProcTime != null) {
+ totalProcTime.value += procTime;
+ } else {
+ throw new RuntimeException("Exception in Update : " + queryObject.getQuery()
+ + " time " + procTime + " queryprocessingtime.size() + "
+ + queryProcessingTime.size());
+ }
+ IntHolder queryCounter = totalQueryCounter.get(query + " " + TOTAL_QUERIES);
+ if (queryCounter != null) {
+ queryCounter.value++;
+ } else {
+ throw new RuntimeException("Exception in Update : " + queryObject.getQuery()
+ + " time " + procTime + " totalQueryCounter.size() + "
+ + totalQueryCounter.size());
+ }
+
+ if (queryStatus == QueryStatus.SUCCESS) {
+ IntHolder successQuery = successQueryCounter.get(query + " " + SUCCESSFUL_QUERIES);
+ if (successQuery != null) {
+ successQuery.value++;
+ } else {
+ throw new RuntimeException("Exception in Update : " + queryObject.getQuery()
+ + " time " + procTime + " successQueryCounter.size() "
+ + successQueryCounter.size());
+ }
+ } else if (queryStatus == queryStatus.FAILED) {
+ IntHolder faultQuery = faultQueryCounter.get(query + " " + SUCCESSFUL_QUERIES);
+ if (faultQuery != null) {
+ faultQuery.value++;
+ } else {
+ throw new RuntimeException("Exception in Update : " + queryObject.getQuery()
+ + " time " + procTime + " faultQueryCounter.size() "
+ + faultQueryCounter.size());
+ }
+ }
+ }
+
+ @Override
+ public Object getAttribute(String attribute)
+ throws AttributeNotFoundException, MBeanException,
+ ReflectionException {
+ if (queryProcessingTime.containsKey(attribute)) {
+ return queryProcessingTime.get(attribute);
+ } else if (totalQueryCounter.containsKey(attribute)) {
+ return totalQueryCounter.get(attribute);
+ } else if (successQueryCounter.containsKey(attribute)) {
+ return successQueryCounter.get(attribute);
+ } else if (faultQueryCounter.containsKey(attribute)) {
+ return faultQueryCounter.get(attribute);
+ }
+ return null;
+ }
+
+ @Override
+ public void setAttribute(Attribute attribute)
+ throws AttributeNotFoundException, InvalidAttributeValueException,
+ MBeanException, ReflectionException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public AttributeList getAttributes(String[] attributes) {
+ AttributeList attributeList = new AttributeList();
+
+ for (String key : queryProcessingTime.keySet()) {
+ Attribute at = new Attribute(key, queryProcessingTime.get(key).toString());
+ attributeList.add(at);
+ }
+
+ for (String key : totalQueryCounter.keySet()) {
+ Attribute at = new Attribute(key, totalQueryCounter.get(key).toString());
+ attributeList.add(at);
+ }
+
+ for (String key : successQueryCounter.keySet()) {
+ Attribute at = new Attribute(key, successQueryCounter.get(key).toString());
+ attributeList.add(at);
+ }
+
+ for (String key : faultQueryCounter.keySet()) {
+ Attribute at = new Attribute(key, faultQueryCounter.get(key).toString());
+ attributeList.add(at);
+ }
+
+ return attributeList;
+ }
+
+ @Override
+ public AttributeList setAttributes(AttributeList attributes) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws MBeanException, ReflectionException {
+ if (actionName.equalsIgnoreCase(RESET_COUNTER)) {
+ resetCounts();
+ return "Invoking the " + actionName + " on the lifecycle.";
+ } else {
+ throw new ReflectionException(new NoSuchMethodException(actionName));
+ }
+ }
+
+ @Override
+ public MBeanInfo getMBeanInfo() {
+ int count = queryProcessingTime.size() + totalQueryCounter.size() +
+ successQueryCounter.size() + faultQueryCounter.size();
+
+ MBeanAttributeInfo[] attrs = new MBeanAttributeInfo[count];
+ int counter = 0;
+
+ for (String key : queryProcessingTime.keySet()) {
+ attrs[counter] = new MBeanAttributeInfo(
+ key, "java.lang.Double", "Property " + key, true, false, false);
+ counter++;
+ }
+
+ for (String key : totalQueryCounter.keySet()) {
+ attrs[counter] = new MBeanAttributeInfo(
+ key, "java.lang.Integer", "Property " + key, true, false, false);
+ counter++;
+ }
+
+ for (String key : successQueryCounter.keySet()) {
+ attrs[counter] = new MBeanAttributeInfo(
+ key, "java.lang.Integer", "Property " + key, true, false, false);
+ counter++;
+ }
+
+ for (String key : faultQueryCounter.keySet()) {
+ attrs[counter] = new MBeanAttributeInfo(
+ key, "java.lang.Integer", "Property " + key, true, false, false);
+ counter++;
+ }
+
+ MBeanOperationInfo[] opers = {
+ new MBeanOperationInfo(
+ "resetCounts", "Reset the counter",
+ null, "void", MBeanOperationInfo.ACTION)
+ };
+
+ return new MBeanInfo(this.getClass().getName(), "Service Counter MBean",
+ attrs, null, opers, null);
+ }
+
+ private static final class IntHolder implements Serializable
+ {
+ int value ;
+ @Override
+ public String toString() {
+ return Integer.toString(value);
+ }
+ }
+
+ private static final class LongHolder implements Serializable
+ {
+ long value ;
+ @Override
+ public String toString() {
+ return Long.toString(value);
+ }
+ }
+
+
+}
Added: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounterMBean.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounterMBean.java?rev=1087337&view=auto
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounterMBean.java (added)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounterMBean.java Thu Mar 31 15:19:32 2011
@@ -0,0 +1,10 @@
+package org.apache.juddi.api.impl;
+
+public interface UDDIServiceCounterMBean {
+ public int getTotalQueryCount();
+ public int getSuccessfulQueryCount();
+ public int getFaultQueryCount();
+ public Double getProcessingTime();
+
+ public void resetCounts();
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org