Index Changes

Monitoring and Management Systemic Quality Requirement


Note

'Component Container' in the document refers to JBI Service Engines and Binding Components. The document refers to them as component containers to disambiguate the term 'Component' which has been overused and may mean a lot of different things especially when we talk in terms of traditional Java EE and JBI in the same document. The JBI container present in the JBI Runtime that hosts these component containers is the JBI Meta-Container (a container of containers).

JBI Framework

For information on changes required in the JBI Framework to support monitoring, please see the following pages:

All JBI Component Containers

Custom MBeans

There are currently 4 types of custom MBeans that are registered by components. They are:
  • Configuration - Used by components to control their runtime configuration
  • Administration - Used by components to provide administration functionality, like listing active/inactive endpoints, suspend/resume endpoints (like Http BC)
  • Statistics - Used by components to provide extended statistics
  • ManagementActions - Used by components to provide custom management functionality - like BPEL SE provides the ability to purge database data

You can register custom MBeans using

componentContext.getMBeanNames().createCustomComponentMBeanName("Configuration")

Component Container Configuration:

Each component container should provide both an Installer Extension MBean and a Runtime Configuration MBean. The Installer Extension MBean will provide factory-default configuration that can be customized at component installation time. A Runtime Configuration Service MBean will allow runtime Configuration of a JBI component container at runtime.
  • By default attribute changes should take place dynamically without having to restart anything.
  • Provide the ability to configure the component container (most BCs and the BPEL SE do this today)
  • Provide the associated meta-data related to component configuration so it has the necessary information to provide the appropriate validation and uses the appropriate UI component through an associated user interface (most BCs and the BPEL SE do this today)
  • Each configurable parameter should specify if changing it requires a restart of:
    • the application
    • the component
    • the server

Configuration Schema

With the requirement to change component configuration from a Web Browser, or from a thick-client GUI, it would be nice to provide validation of the values being changed, values that are secret like passwords not shown, detailed descriptions of configuration fields, and descriptive displays of configuration parameter labels. Since this information cannot be obtained in a detailed fashion from Standard MBeans that may be used to create the Configuration MBeans, it is possible to provide these details in other ways that can be used by the UI to create appropriate renderers and Validators. If component developers want to leverage these features, here is what needs to be done.

The component developer has to provide a schema corresponding to the attributes that are available in their Configuration MBean, and xml data that correspond to detailed descriptions of the attributes. Based on this, the UI can create appropriate renderers and Validators.

Please see SystemicQualities.ConsolidatedConfiguration on the component container developer's responsibilities.

All JBI Binding Components

  • Alert Notifications: Ability to send Alert notifications just as classic CAPS components
  • (Logging req to flow into looging proposal): All logs for a component has to be pre-pended with the Component Name so the UI can filter on messages that pertain to specific component just as classic CAPS components.
  • Endpoints: All Endpoints must be configurable through MBean invocations. This allows the customizability of Endpoint policies. Through which MBeans the Endpoints are exposed is currently a developer task
  • All Environment variables will be exposed through Configuration MBeans so they are gettable and settable.
  • All Named Application Configuration Objects will be exposed through MBeans so they are gettable and settable.

Endpoint: For each Endpoint,

  • Retrieve and update connection configuration. Configurations are only applied after some well-defined user event (like a restart of the component or a physical external event indicating that the new configuration should be applied)
  • Retrieve connection status (start or stopped). Components should use the Status MBean to expose this.
  • Retrieve WSDLs and XSDs for that the Endpoint. WSDLs and XSDs that the Service Unit provisions per endpoint have to be exposed per endpoint. Components should use the Status MBean to expose their WSDLs and XSDs both per Service Unit and at an endpoint level.
   /** Returns an array containing all the WSDLs and XSDs per endpoint */
   String[] getAllWSDLsAndXSDs(QName serviceName, String endpointName); 
   /** Returns an array containing all the WSDLs and XSDs per service unit */
   String[] getAllWSDLsAndXSDs(String serviceUnitName);
  • Alert Notifications:Ability to send Alert notifications just as classic CAPS projects and components
  • (Logging req to flow into logging proposal): All logs for a service unit has to be prepended with the ServiceAssemblyName-ServiceUnitName so the UI can filter on messages that pertain to specific projects just as classic CAPS projects.

All JBI Service Engines

  • Alert Notifications: Ability to send Alert notifications just as classic CAPS components
  • (Logging req to flow into looging proposal): All logs for a component has to be pre-pended with the Component Name so the UI can filter on messages that pertain to specific component just as classic CAPS components.
  • WSDLs and XSDs that the Service Unit provisions per endpoint have to be exposed per endpoint. Components should use the Status MBean to expose their WSDLs and XSDs both per Service Unit and at an endpoint level.
   /** Returns an array containing all the WSDLs and XSDs per endpoint */
   String[] getAllWSDLsAndXSDs(QName serviceName, String endpointName); 
   /** Returns an array containing all the WSDLs and XSDs per service unit */
   String[] getAllWSDLsAndXSDs(String serviceUnitName);
  • All Environment variables will be exposed through Configuration MBeans so they are gettable and settable.
  • All Named Application Configuration Objects will be exposed through MBeans so they are gettable and settable.

Design-time: For Design-time components of each of the Domain-Specific Engines

  • Alert Notifications: provide facility for user to send custom Alert messages from NetBeans UI just like classic CAPS design-time components
  • (Logging req to flow into looging proposal): provide facility for user to logging custom messages from NetBeans UI just like classic CAPS design-time components

Endpoint: For each Endpoint ,

  • Alert Notifications: Ability to send Alert notifications just as classic CAPS projects and components
  • (Logging req to flow into looging proposal): All logs for a service unit has to be prepended with the ServiceAssemblyName-ServiceUnitName so the UI can filter on messages that pertain to specific projects just as classic CAPS projects.

BPEL Service Engine

  • Set the value for the property using XPath on a Part given a business process instance, container, part, the XPath expression, and value

void setBusinessProcessInstanceVariableValue(String bpId, String variableID, String partName, String query, String value); 

  • Resume a Business Process Instance for a given Business process instance
void resumeBusinessProcessInstance(String bpId)
  • Terminate a Business Process Instance for a given Business process instance
void terminateBusinessProcessInstance(String bpId)
  • Suspend a Business Process Instance for a given Business process instance
void suspendBusinessProcessInstance(String bpId)
  • Is monitoring Enabled or not
  • Is persistence Enabled or not
  • Enable/Disable Persistence
  • Enable/Disable Debugging
    public Boolean getDebugEnabled();
    public void setDebugEnabled(Boolean bflag);

    public Integer getDebugPort();
    public void setDebugPort(Integer port);

    public Boolean getPersistenceEnabled();
    public void setPersistenceEnabled(Boolean bflag)

    public String getEngineExpiryInterval();
    public void setEngineExpiryInterval(String interval)

    public Boolean getMonitoringEnabled();
    public void setMonitoringEnabled(Boolean bflag);

    public String getDatabaseNonXAJNDIName();
    public void setDatabaseNonXAJNDIName(String port)
    public String getDatabaseXAJNDIName();
    public void setDatabaseXAJNDIName(String port)

    public String getThreadCount();  
    public void setThreadCount(String count);

    public String retrieveConfigurationDisplaySchema();
    public String retrieveConfigurationDisplayData();
  • send Alert Notifications
    • BPEL-SE would use the API provided by Management framework to send alerts from BPEL-SE as well as provide facility for BPEL developer.
    • Some of the events identified for the BPEL-SE for sending alert notifications are listed in the table below:
EventLevelcontent of the alert
State change (Start/Stop/Shutdown)INFOengine identifier, actor-id, time-stamp, state change
Unable to create the instanceSEVEREengine identifier, bp name, bpid, actor-id, time-stamp, cause
When instance is paused, resumed and stopped as well as variable value change by management API INFOeengine identifier, bp name, bpid, actor-id, time-stamp, state/value change
When instance terminated due to unhanded faultSEVEREengine identifier, bp name, bpid, actor-id, time-stamp, cause
When not able to connect to DatabaseSEVEREengine identifier, actor-id, time-stamp, Error message from Db/JDBC including SQL code
State change of SU (Deploy, Start/Stop/Shutdown, un deploy)INFOengine identifier, actor-id, time-stamp, state change of SU

IEP Service Engine

  • Get IEP operator dependent Attributes (e.g., change time-based window to 20 second worth of events, or filter criteria, correlation criteria, all customized editor details for each operator) for a given IEP process
  • Get a collection of monitored IEP process attributes for a given IEP process

JMS Server Support

All JMS servers should have an administration MBean which support the following:
1.  java.lang.Boolean JournalEnabled;  /* journal server enable flag */
2.  java.lang.String Host;  /* host name on which the message server is running */
3.  java.lang.String Port;  /* port number on which the message server is listening */
4.  java.lang.String UserId;  /* user name on which is used to connect to the message server */
5.  java.lang.String Password;  /* password which is used to connect to the message server */
6.  java.util.Properties ConnectionProperties;  /* connection properties which is used to connect to the message server */


  /* Returns a list of topics on the message server. */
1.  java.util.List getTopics( );
  /* Returns a list of queues on the message server. */
2.  java.util.List getQueues( );
  /* Returns a list of topics with headers on the message server. */
3.  java.util.List getTopicsWithHeaders( int serverType, /* the server type. */);
  /* Returns a list of queues with headers on the message server. */
4.  java.util.List getQueuesWithHeaders( int serverType, /* the server type. */);
  /* Returns the message's properties for the specified message identifier. */
5.  java.util.Properties getTopicMsgProperties( java.lang.String topicName, /* The name of the topic that contains the messages. */java.lang.String messageId, /* The message identifier of the message to get. */);
  /* Returns the message's properties for the specified message identifier. */
6.  java.util.Properties getQueueMsgProperties( java.lang.String queueName, /* The name of the queue that contains the messages. */java.lang.String messageId, /* The message identifier of the message to get. */);
  /* Returns a list of messages' properties for the given start message index and maximum number of messages retrieved. */
7.  java.util.List getTopicMsgPropertiesList( java.lang.String topicName, /* The name of the topic that contains the messages. */long startMessageIndex, /* The index of the first message in the topic to retrieve. */long maxNumMessagesRetrieved, /* The maximum number of the messages to retrieve. */int serverType, /* the server type. */);
  /* Returns a list of messages' properties for the given start message index and maximum number of messages retrieved. */
8.  java.util.List getQueueMsgPropertiesList( java.lang.String queueName, /* The name of the queue that contains the messages. */long startMessageIndex, /* The index of the first message in the topic to retrieve. */long maxNumMessagesRetrieved, /* The maximum number of the messages to retrieve. */int serverType, /* the server type. */);
  /* Returns a message body of a specified message in a specified topic */
9.  java.lang.String getTopicMessage( java.lang.String topicName, /* The name of the topic that contains the message. */java.lang.String messageId, /* The message identifier of the message to retrieve. */int serverType, /* the server type. */);
  /* Returns a message body of a specified message in a specified queue */
10.  java.lang.String getQueueMessage( java.lang.String queueName, /* The name of the queue that contains the message. */java.lang.String messageId, /* The message identifier of the message to retrieve. */int serverType, /* the server type. */);
  /* Returns a list of subscribers for a specified  topic. */
11.  java.util.List getSubscribers( java.lang.String topicName, /* The topic name of the subscribers. */);
  /* Returns a list of receivers for a specified queue. */
12.  java.util.List getReceivers( java.lang.String queueName, /* The queue name of the receivers. */);
  /* Changes the content of a specified text message from a specified topic. */
13.  boolean changeTopicTextMessage( java.lang.String topicName, /* The name of topic that contains the message to change. */java.lang.String messageId, /* The message identifier of the message to change. */java.lang.String body, /* The new content of the text message. */);
  /* Changes the content of a specified text message from a specified queue. */
14.  boolean changeQueueTextMessage( java.lang.String queueName, /* The name of queue that contains the message to change. */java.lang.String messageId, /* The message identifier of the message to change. */java.lang.String body, /* The new content of the text message. */);
  /* Changes the content of a specified bytes message from a specified topic. */
15.  boolean changeTopicBytesMessage( java.lang.String topicName, /* The name of topic that contains the message to change. */java.lang.String messageId, /* The message identifier of the message to change. */[B body, /* The new content of the bytes message. */long msgSize, /* The size of the new bytes message. */);
  /* Changes the content of a specified bytes message from a specified queue. */
16.  boolean changeQueueBytesMessage( java.lang.String queueName, /* The name of queue that contains the message to change. */java.lang.String messageId, /* The message identifier of the message to change. */[B body, /* The new content of the bytes message. */long msgSize, /* The size of the new message. */);
  /* Deletes a specified message from a specified topic. */
17.  boolean deleteTopicMessage( java.lang.String topicName, /* The name of the topic to delete. */java.lang.String messageId, /* The message identifier of the message to delete. */);
  /* Deletes a specified message from a specified queue. */
18.  boolean deleteQueueMessage( java.lang.String queueName, /* The name of the queue to delete. */java.lang.String messageId, /* The message identifier of the message to delete. */);
  /* Returns the message type of a specified message from a specified topic */
19.  int getTopicMessageType( java.lang.String topicName, /* The name of the topic that contains the message. */java.lang.String messsageId, /* The message identifier of the message to retrieve. */int serverType, /* The server type. */);
  /* Returns the message type of a specified message from a specified queue */
20.  int getQueueMessageType( java.lang.String queueName, /* The name of the queue that contains the message. */java.lang.String messageId, /* The message identifier of the message to retrieve. */int serverType, /* The server type. */);
  /* Suspends a specified topic. */
21.  boolean suspendTopic( java.lang.String topicName, /* The topic name to suspend. */);
  /* Suspends a specified queue. */
22.  boolean suspendQueue( java.lang.String queueName, /* The queue name to suspend. */);
  /* Resumes the suspended topic. */
23.  boolean resumeTopic( java.lang.String topicName, /* The suspended topic name to resume. */);
  /* Resumes the suspended queue. */
24.  boolean resumeQueue( java.lang.String queueName, /* The suspended queue name to resume. */);
  /* Returns a list of transactions  on the message server. */
25.  java.util.List getXids( );
  /* Commits the xid on the message server. */
26.  boolean commitXid( int formatId, /* xa transaction id. */byte[] globalTransactionId, /* global transaction id. */byte[] branchQualifier, /* xa transaction branch qualifier. */);
  /* Rolls back a specified transaction  on the message server. */
27.  boolean rollbackXid( int formatId, /* xa transaction id. */byte[] globalTransactionId, /* global transaction id. */byte[] branchQualifier, /* xa transaction branch qualifier. */);
  /* Creates a new topic with the specified name on the message server. */
28.  void createTopic( java.lang.String topicName, /* the name of the topic to be created. */);
  /* Creates a new queue with the specified name on the message server. */
29.  void createQueue( java.lang.String queueName, /* the name of the queue to be created. */);
  /* Deletes a specified topic on the message server. */
30.  boolean deleteTopic( java.lang.String topicName, /* The name of the topic to delete. */);
  /* Deletes a specified queue on the message server. */
31.  boolean deleteQueue( java.lang.String queueName, /* The name of the queue to delete. */);
  /* Submits a new message to a specified topic or queue on the message server. */
32.  void submitNewMessage( java.lang.String msgType, /* javax.jms.TextMessage or javax.jms.BytesMessage */java.lang.String destinationType, /* javax.jms.Queue or javax.jms.Topic */java.lang.String destinationName, /* The name of a topic or queue */java.lang.Object messageData, /* The message payload, String for javax.jms.TextMessage or byte[] for javax.jms.BytesMessage */int messagePriority, /* The message prioriy (null if default is used) */int messageDeliveryMode, /* The message deliverymode (null if default is used) */long messageTimeToLive, /* The message expiration time (null if default is used) */int numberOfSubmit, /* Number of the same message submitted */);
  /* Creates a new topic durable subcriber for a specified topic on the message server. */
33.  void createTopicDurableSubscriber( java.lang.String topicName, /* the name of the topic. */java.lang.String subscriberName, /* the name used to identify this subscription. */);
  /* Unsubscribes a specified durable subscription on the message server */
34.  void unsubscribeDurableSubscriber( java.lang.String topicName, /* The name of topic that the subscriber subscribes to. */java.lang.String subscriberName, /* The name of the subscriber to delete. */);
  /* Returns the status of the message server in name and value pair properties. */
35.  java.util.Properties getServerStatus( );
  /* Returns the statistics of a specified topic on the message server. */
36.  java.util.Properties getTopicStatistics( java.lang.String topicName, /* The name of the topic. */int serverType, /* the server type. */);
  /* Returns the statistics of a specified queue on the message server. */
37.  java.util.Properties getQueueStatistics( java.lang.String queueName, /* The name of the queue. */int serverType, /* the server type. */);
  /* Check if the message server is ready. */
38.  boolean isServerReady( );
  /* Republishes a specified journalled messages to a sepecified topic on the message server. */
39.  boolean republishTopicMessage( java.lang.String topicName, /* Name of the topic to import to. */java.lang.String messageId, /* The message identifier of the journalled message to republish. */java.lang.String body, /* The payload of the specified message to republish. */);
  /* Resends a specified journalled messages to a sepecified queue on the message server. */
40.  boolean resendQueueMessage( java.lang.String queueName, /* Name of the queue to import to. */java.lang.String messageId, /* The message identifier of the journalled message to resend. */java.lang.String body, /* The payload of the specified message to resend. */);
}

JSPWiki v2.4.100
[RSS]
« Home Index Changes Prefs
This page (revision-11) was last changed on 28-Oct-09 03:08 AM, -0700 by Gopalan Suresh Raj