Checking the status of a business-level application using programming
We can check the status of an entire business-level application. We can also limit the status to a particular composition unit of a business-level application, a specific deployment target, or check the status of the composition unit and the deployment target at the same time.
This task assumes a basic familiarity with command framework programming. Read about command framework programming in the API documentation.
Before we can check the status of a business-level application or a composition unit, you must have created the business-level application.
We can check the status of a business-level application using programming, the console, or wsadmin.sh.
Provide the blaID parameter to specify the business-level application that you are viewing.
Perform the following tasks to view a business-level application using programming.
- Connect to the application server.
The command framework allows the administrative command to be created and run with or without being connected to the application server. This step is optional if the application server is not running.
- Create the command manager.
The command manager provides the functionality to create a new administrative command or query existing administrative commands.
- Optionally create the asynchronous command handler for listening to command notifications.
- Business-level application commands are implemented as asynchronous commands. To monitor the progress of the running command, we have to create an asynchronous command handler to receive notifications that the command generates.
- Create the asynchronous command client.
An asynchronous command client provides a higher level interface to work with an asynchronous command. If we created an asynchronous command handler in the previous step, the handler is passed to the asynchronous command client. The asynchronous command client forwards the command notification to the handler and helps to control running of the command.
- Create and set up the getBLAStatus command to check the status of a business-level application.
- Set the blaID parameter for the business-level application whose status to check.
- Optionally set the cuID parameter to narrow the scope of the query to a single composition unit.
- Optionally set the targetID to narrow the scope of the query to a single target server process or cluster.
- Call the processCommandParameters method in the asynchronous command client to process the command parameters.
The command framework asynchronous command model requires this call.
- Call the asynchronous command client to run the command to check the status of the business-level application.
You could have created an asynchronous command handler to implement the AsyncCommandHandlerIF interface class in a previous step. If we did, the asynchronous command client listens to command notifications and forwards the notifications to the handler. The handler performs any necessary actions while waiting for the command to complete.
- Check the command result when the command completes.
When the command finishes running, control is returned to the caller. We can then check the result by calling the command.getCommandResult method.
Results
After you successfully run the code, we can check the status of an entire business-level application, if you chose not to limit the status. If we chose options to limit the status, you could check the status to a particular composition unit of a business-level application, a specific deployment target, or check the status of the composition unit and the deployment target at the same time.
The smallest unit of status data that the system maintains is for a single composition unit in a single server or cluster member process. Business-level application status can be based on one or more composition units, each having one or more targets, with targets potentially consisting of clusters with multiple member processes. Therefore, the single status value returned from the getBLAStatus command is a compilation of individual status data for all composition units on all target process within the scope of the status query. The following table describes how individual status data is compiled into a single status value. The term composition unit instance used in the table refers to a composition unit on a single server or single cluster member process.
descriptions. Read the descriptions to learn about application
Status Description ExecutionState.STARTED All composition unit instances within the scope of the query have been started. ExecutionState.STOPPED All composition unit instances within the scope of the query have not been started or have been stopped. ExecutionState.PARTIAL_START Some composition unit instances within the scope of the query have a status of ExecutionState.STARTED and some have a status of ExecutionState.STOPPED. ExecutionState.UNKNOWN Status data for at least one composition instance within the scope of the query cannot be obtained for some reason.
Example
The following example shows how to check the status of a business-level application based on the previous steps. Some statements are split on multiple lines for printing purposes.
package com.ibm.ws.management.application.task; import java.util.Properties; import com.ibm.websphere.management.AdminClient; import com.ibm.websphere.management.AdminClientFactory; import com.ibm.websphere.management.Session; import com.ibm.websphere.management.cmdframework.AdminCommand; import com.ibm.websphere.management.cmdframework.CommandMgr; import com.ibm.websphere.management.cmdframework.CommandResult; import com.ibm.websphere.management.cmdframework.CommandStep; import com.ibm.websphere.management.cmdframework.TaskCommand; import com.ibm.websphere.management.async.client.AsyncCommandClient; public class EditBLA { public static void main(String[] args) { try { // Connect to the application server. // This step is optional if you use the local command manager. // Comment out the following lines to get the soapClient soap client if // you are going to use the local command manager. You would // comment out the lines to and including // CommandMgr cmdMgr = // CommandMgr.getClientCommandMgr(soapClient); String host = "localhost"; // Change to the host if it is not localhost. String port = "8880"; // Change to the port number if it is not 8880. Properties config = new Properties(); config.put(AdminClient.CONNECTOR_HOST, host); config.put(AdminClient.CONNECTOR_PORT, port); config.put(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP); System.out.println("Config: " + config); AdminClient soapClient = AdminClientFactory.createAdminClient(config); // Create command manager. CommandMgr cmdMgr = CommandMgr.getClientCommandMgr(soapClient); // Comment out the previous lines to create a client command // manager if you are using a local command manager. // Uncomment the following line to create a local command // manager. // // CommandMgr cmdMgr = CommandMgr.getCommandMgr(); System.out.println("\nCreated command manager"); // Optionally create an asynchronous command handler. // Comment out the following line if no further handling // of command notification is required. AsyncCmdTaskHandler listener = new AsyncCmdTaskHandler(); // Create an asynchronous command client. // Set up the session. // This example creates a new session. We can replace the // following code to use an existing session that has been // created. String id = Long.toHexString(System.currentTimeMillis()); String user = "content" + id; Session session = new Session(user, true); // If no command handler is used, replace the listener with // null for the following AsyncCommandClient object. AsyncCommandClient asyncCmdClientHelper = new AsyncCommandClient(session, listener); System.out.println("\nCreated async command client"); // Create the command. String cmdName = "getBLAStatus"; AdminCommand cmd = cmdMgr.createCommand(cmdName); cmd.setConfigSession(session); // Check the status // using the session // created System.out.println("\nCreated " + cmdName); // Set the required blaID parameter // Examples of valid formats for the blaID parameter are: // - bName // - blaname=bName // - WebSphere:blaname=bName String blaID = "MyBLA"; // Replace the MyBLA value with the // blaID value. cmd.setParameter("blaID", blaID); System.out.println("\nSet blaID parameter to " + cmd.getParameter("blaID")); // Optionally set the cuID parameter. String cuID = "myCU.zip"; // Replace the myCU.zip value with the // cuID value. cmd.setParameter("cuID", cuID); System.out.println("\nSet cuID parameter to " + cmd.getParameter("cuID")); // Optionally set the targetID parameter. // The format of the targetID parameter for a cluster // is WebSphere:cluster=cluster1 String targetID = "WebSphere:node=node1,server=server1"; // Replace // this with the targetID value. cmd.setParameter("targetID", targetID); System.out.println("\nSet targetID parameter to " + cmd.getParameter("targetID")); // Call the asynchronous client helper to process parameters. try { asyncCmdClientHelper.processCommandParameters(cmd); System.out.println("\nCompleted processCommandParameters"); } catch (Throwable th) { System.out.println("Throwing an exception from " + "asyncCmdClientHelper.processCommandParameters(cmd)."); th.printStackTrace(); System.exit(-1); } // Run the command to check the status of the // business-level application. asyncCmdClientHelper.execute(cmd); System.out.println("\nCompleted command execution"); CommandResult result = cmd.getCommandResult(); if (result != null) { if (result.isSuccessful()) { System.out.println("\nCommand executed successfully " + "with result\n" + result.getResult()); } else { System.out.println("\nCommand executed with " + "Exception"); result.getException().printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } } } package com.ibm.ws.management.application.task; import com.ibm.websphere.management.cmdframework.provider.CommandNotification; import com.ibm.websphere.management.async.client.AsyncCommandHandlerIF; public class AsyncCmdTaskHandler implements AsyncCommandHandlerIF { public void handleNotification(CommandNotification notification) { // Add our own code here to handle the received notification. System.out.println("\nEXAMPLE: notification received: " + notification); } }
What to do next
We can use the results of the status check to perform other tasks. For instance, if the results indicate that none of the composition units is started, you could start the business-level application.
Related concepts
Additional APIs
Related tasks
Deploy and administering business-level applications Administer business-level applications using programming Start a business-level application using programming Stopping a business-level application using programming Delete a business-level application using programming Listing business-level applications using programming Edit a business-level application using programming View a business-level application using programming