/** Wraps the service statistics into JMX types */
 private void populateServiceStatistics(boolean clearCollectedStats) {
   // clear existing stats in the TabularDataSupport and re-populate it with current data extracted
   // from service framework classes
   serviceInvocationStatistics.clear();
   ServiceStatistics[] stats = getStats(clearCollectedStats);
   for (ServiceStatistics stat : stats) {
     Object[] statValues = new Object[attributeNames.length];
     statValues[0] = stat.getServiceName();
     statValues[1] = stat.getServiceVersion();
     statValues[2] = stat.getStartupTimeStamp().getTime();
     statValues[3] =
         stat.getLastCalledTimestamp() == null ? null : stat.getLastCalledTimestamp().getTime();
     statValues[4] = stat.getActiveRequestsCount();
     statValues[5] = stat.getTotalRequestsCount();
     statValues[6] = stat.getAverageResponseTime();
     statValues[7] = stat.getMinimumResponseTime();
     statValues[8] = stat.getMaximumResponseTime();
     statValues[9] = stat.getLastServiceRequestResponseTime();
     statValues[10] = stat.getErrorRequestsCount();
     statValues[11] = stat.getSuccessRequestsCount();
     CompositeData compositeData;
     try {
       compositeData = new CompositeDataSupport(compositeType, attributeNames, statValues);
       serviceInvocationStatistics.put(compositeData);
     } catch (OpenDataException e) {
       // ideally we should not get this exception
       LOGGER.error(
           "Error constructing JMX data type from service statistics. Error is : "
               + e.getMessage(),
           e);
     }
   }
 }
예제 #2
0
 /**
  * Overriden superclass method. Calls super.init() and also initializes the MuleContext
  *
  * @see SpringServicesContainer#init()
  */
 public void init() throws PlatformException {
   super.init();
   LinkedList<String> fileNamesList = new LinkedList<String>();
   // add the common Mule beans file
   fileNamesList.add(SedaFrameworkConstants.COMMON_MULE_CONFIG);
   // add the Mule configurations containing Mule service definitions
   File[] serviceBeansFiles = FileLocator.findFiles(SedaFrameworkConstants.MULE_CONFIG);
   for (File serviceBeansFile : serviceBeansFiles) {
     fileNamesList.add(serviceBeansFile.getAbsolutePath());
   }
   String[] muleConfigPaths = (String[]) fileNamesList.toArray(new String[0]);
   try {
     SpringXmlConfigurationBuilder springConfigBuilder =
         new SpringXmlConfigurationBuilder(muleConfigPaths);
     springConfigBuilder.setUseDefaultConfigResource(
         false); // turn off using the default config resource as we have a custom config defined
     // in SedaFrameworkConstants.COMMON_MULE_CONFIG
     springConfigBuilder.setParentContext(this.servicesContext);
     this.muleContext = new DefaultMuleContextFactory().createMuleContext(springConfigBuilder);
     this.muleContext.start();
   } catch (Exception e) {
     LOGGER.error("Fatal error loading Mule configurations : " + e.getMessage(), e);
     throw new PlatformException("Fatal error loading Mule configurations : " + e.getMessage(), e);
   }
 }
  /**
   * Interface method implementation. Creates and loads a Spring ApplicationContext for each
   * property specified in {@link #getAllProperties()}
   *
   * @see org.trpr.platform.runtime.spi.bootstrapext.BootstrapExtension#init()
   */
  public void init() {
    // Iterate through the properties to get ApplicationContext name and the corresponding file name
    for (String key : this.getAllProperties().keySet()) {
      String fileName = this.getAllProperties().get(key);
      try {
        File springBeansFile = FileLocator.findUniqueFile(fileName);
        // add the "file:" prefix to file names to get around strange behavior of
        // FileSystemXmlApplicationContext that converts
        // absolute path to relative path

        // Set the commons beans context as the parent of all application contexts created through
        // this ApplicationContextFactory
        AbstractApplicationContext appContext =
            new FileSystemXmlApplicationContext(
                new String[] {FILE_PREFIX + springBeansFile.getAbsolutePath()},
                getCommonBeansContext());
        ApplicationContextFactory.appContextMap.put(key.toLowerCase(), appContext);

      } catch (Exception e) { // blanket catch for all checked and unchecked exceptions
        LOGGER.error(
            "Error loading ApplicationContext. [Name][Path] : ["
                + key
                + "]["
                + fileName
                + "].Error is : "
                + e.getMessage(),
            e);
        this.bootstrapOutcome = BootstrapExtension.VETO_BOOTSTRAP;
        return;
      }
    }
  }
예제 #4
0
 /**
  * Overriden superclass method. Closes the MuleContext and then invokes {@link #resetContainer()}
  *
  * @see SpringServicesContainer#destroy()
  */
 public void destroy() throws PlatformException {
   try {
     this.muleContext.stop();
   } catch (MuleException e) {
     LOGGER.error("Fatal error stopping Mule : " + e.getMessage(), e);
     throw new PlatformException("Fatal error stopping Mule : " + e.getMessage(), e);
   }
   this.muleContext.dispose();
   this.muleContext = null;
   // now invoke superclass clean up code
   this.resetContainer();
 }
예제 #5
0
 /** Implementation of doExecute method. This task just returns the person object back */
 protected void doExecute() {
   Earthling earthling =
       (Earthling) this.getTaskData().getEntityByName(Earthling.class.getName())[0];
   LOGGER.info(
       "Echo "
           + earthling.getFirstName()
           + " "
           + earthling.getLastName()
           + " "
           + earthling.getDateOfBirth().getTime());
   this.result.setResultCode(TaskResultCode.SUCCESS);
 }
 // static initializer block for composite and table type initialization
 static {
   try {
     compositeType =
         new CompositeType(
             "serviceStatistics",
             "Service statistics",
             attributeNames,
             attributeDescriptions,
             attributeTypes);
     tableType =
         new TabularType(
             "listOfServiceStatistics", "List of Service statistics", compositeType, indexNames);
   } catch (Exception e) {
     // ideally we should never get this error as it uses statically defined data elements
     LOGGER.error(
         "Error initializing JMX types used in service statistics monitoring : " + e.getMessage(),
         e);
   }
 }
예제 #7
0
 public Object orToMysqlType(Column column) throws Exception {
   if (column instanceof BitColumn) {
     // This is in byte order
     BitColumn byteColumn = (BitColumn) column;
     byte[] byteArray = byteColumn.getValue();
     return new String(byteArray);
   } else if (column instanceof BlobColumn) {
     BlobColumn blobColumn = (BlobColumn) column;
     byte[] byteArray = blobColumn.getValue();
     return new String(byteArray);
   } else if (column instanceof DateColumn) {
     DateColumn dateColumn = (DateColumn) column;
     Date date = dateColumn.getValue();
     return new java.sql.Date(date.getTime());
   } else if (column instanceof DatetimeColumn) {
     DatetimeColumn dateTimeColumn = (DatetimeColumn) column;
     Date date = dateTimeColumn.getValue();
     /**
      * Bug in OR for DateTIme and Time data-types. MilliSeconds is not available for these columns
      * but is set with currentMillis() wrongly.
      */
     return new java.sql.Timestamp((date.getTime() / 1000) * 1000);
   } else if (column instanceof DecimalColumn) {
     DecimalColumn decimalColumn = (DecimalColumn) column;
     return decimalColumn.getValue();
   } else if (column instanceof DoubleColumn) {
     DoubleColumn doubleColumn = (DoubleColumn) column;
     return doubleColumn.getValue();
   } else if (column instanceof EnumColumn) {
     EnumColumn enumColumn = (EnumColumn) column;
     return enumColumn.getValue();
   } else if (column instanceof FloatColumn) {
     FloatColumn floatColumn = (FloatColumn) column;
     return floatColumn.getValue();
   } else if (column instanceof Int24Column) {
     Int24Column intColumn = (Int24Column) column;
     return intColumn.getValue();
   } else if (column instanceof LongColumn) {
     LongColumn longColumn = (LongColumn) column;
     return longColumn.getValue();
   } else if (column instanceof LongLongColumn) {
     LongLongColumn longLongColumn = (LongLongColumn) column;
     return longLongColumn.getValue();
   } else if (column instanceof NullColumn) {
     return null;
   } else if (column instanceof SetColumn) {
     SetColumn setColumn = (SetColumn) column;
     return setColumn.getValue();
   } else if (column instanceof ShortColumn) {
     ShortColumn shortColumn = (ShortColumn) column;
     return shortColumn.getValue();
   } else if (column instanceof StringColumn) {
     StringColumn stringColumn = (StringColumn) column;
     return new String(stringColumn.getValue(), Charset.defaultCharset());
   } else if (column instanceof TimeColumn) {
     TimeColumn timeColumn = (TimeColumn) column;
     Time time = timeColumn.getValue();
     /**
      * There is a bug in OR where instead of using the default year as 1970, it is using 0070.
      * This is a temporary measure to resolve it by working around at this layer. The value
      * obtained from OR is subtracted from "0070-00-01 00:00:00"
      */
     Calendar c = Calendar.getInstance();
     c.set(70, 0, 1, 0, 0, 0);
     /**
      * round off the milli-seconds as TimeColumn type has only seconds granularity but Calendar
      * implementation includes milli-second (System.currentTimeMillis() at the time of
      * instantiation)
      */
     long rawVal = (c.getTimeInMillis() / 1000) * 1000;
     long val2 = (time.getTime() / 1000) * 1000;
     return new java.sql.Time(val2 - rawVal);
   } else if (column instanceof TimestampColumn) {
     TimestampColumn timeStampColumn = (TimestampColumn) column;
     return timeStampColumn.getValue();
   } else if (column instanceof TinyColumn) {
     TinyColumn tinyColumn = (TinyColumn) column;
     return tinyColumn.getValue();
   } else if (column instanceof YearColumn) {
     YearColumn yearColumn = (YearColumn) column;
     return yearColumn.getValue();
   } else {
     String message =
         "Unknown MySQL type in the event" + column.getClass() + " Object = " + column;
     LOGGER.error(message);
     throw new RuntimeException(message);
   }
 }