通过编程安装应用程序

您可以通过管理控制台、wsadmin 工具或编程来安装应用程序。使用此示例,通过编程来安装应用程序。

开始之前

此任务假设您对 MBean 编程有基本的了解。有关 MBean 编程的信息,请参阅 MBean Java™ 应用程序编程接口 (API) 文档。 在此信息中心中,单击引用 > MBean 接口

可以在 WebSphere® Application Server 上安装应用程序前,您必须安装该应用程序。

关于此任务

AppDeploymentController 实例包含基于 XML 的部署描述符中定义的元数据,以及输入企业归档 (EAR) 文件的 Java 类中定义的注释。

执行以下各项任务,从而通过编程来安装应用程序。

过程

  1. 使用特定于 WebSphere Application Server 的绑定信息填充 EAR 文件。
    1. 创建控制器并用相应的选项来填充 EAR 文件。
    2. 运行缺省绑定生成器,这是可选的。
    3. 保存并关闭 EAR 文件。
    4. 检索将传递至 installApplication MBean API 的保存的选项表。
  2. 连接到 WebSphere Application Server
  3. 创建应用程序管理代理。
  4. 如果尚未执行准备阶段(填充 EAR 文件),那么完成以下各项操作:
    1. 创建要传递至 installApplication MBean API 的选项表。
    2. 创建一个表来存储模块与服务器的关系,并将该表添加到选项表。

      请参阅应用程序编程接口文档中的 com.ibm.websphere.management.application.AppManagement 类,以获取可传递给 installApplication MBean API 的各种选项。

  5. 创建用于侦听安装事件的通知过滤器。
  6. 添加侦听器。
  7. 安装应用程序。
  8. 如果超时请等待,以使程序不会结束。
  9. 侦听 Java 管理扩展 (JMX) 通知,以了解操作的完成情况。
  10. 当安装完成时,移除侦听器,然后退出。

结果

成功运行代码之后,就安装了应用程序。

示例

以下示例显示如何根据上述步骤安装应用程序。为了便于打印,某些语句被拆分为几行。

import java.lang.*;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
import com.ibm.websphere.management.application.*;
import com.ibm.websphere.management.application.client.*;
import com.ibm.websphere.management.*;

import javax.management.*;

public class Install {

    public static void main (String [] args) {

        try {
  String earFile = "C:/test/test.ear";
  String appName = "MyApp";
             
// Preparation phase: Begin
// Through the preparation phase you populate the enterprise archive (EAR) file with 
// product-specific binding information. For example, you can specify Java Naming
// and Directory Interface (JNDI) names for enterprise beans, or virtual hosts for
// web modules, and so on.

// First, create the controller and populate the EAR file with the appropriate options.
  Hashtable prefs = new Hashtable();
  prefs.put(AppConstants.APPDEPL_LOCALE, Locale.getDefault());

// You can optionally run the default binding generator by using the following options.
// Refer to Java documentation for the AppDeploymentController class to see all the 
// options that you can set.
  Properties defaultBnd = new Properties();
  prefs.put (AppConstants.APPDEPL_DFLTBNDG, defaultBnd);
  defaultBnd.put (AppConstants.APPDEPL_DFLTBNDG_VHOST, "default_host");
  
// Create the controller.
  AppDeploymentController controller = AppDeploymentController
    .readArchive(earFile, prefs);
  AppDeploymentTask task = controller.getFirstTask();
  while (task != null)
  {
// Populate the task data.
   String[][] data = task.getTaskData();
// Manipulate task data which is a table of stringtask.
   task.setTaskData(data);
   task = controller.getNextTask();
  }
  controller.saveAndClose();
  
  Hashtable options = controller.getAppDeploymentSavedResults();
// The previous options table contains the module-to-server relationship if it was set by
// using tasks.
//Preparation phase: End

// Get a connection to the product.
  String host = "localhost";
  String port = "8880";
  String target = "WebSphere:cell=cellName,node=nodeName,server=server1";

  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 the application management proxy, AppManagement.
  AppManagement proxy = AppManagementProxy. getJMXProxyForClient (_soapClient);

// If code for the preparation phase has been run, then you already have the options table.
// If not, create a new table and add the module-to-server relationship to it by uncommenting
// the next statement.
//Hashtable options = new Hashtable();
  options.put (AppConstants.APPDEPL_LOCALE, Locale.getDefault());

// Uncomment the following statements to add the module to the server relationship table if 
//  the preparation phase does not collect it.
//Hashtable module2server = new Hashtable();
//module2server.put ("*", target);
//options.put (AppConstants.APPDEPL_MODULE_TO_SERVER, module2server);

//Create the notification filter for listening to installation events.
  NotificationFilterSupport myFilter = new NotificationFilterSupport();
  myFilter.enableType (AppConstants.NotificationType);


//Add the listener.
  NotificationListener listener = new AListener(_soapClient, 
myFilter, "Install: " + appName, AppNotification.INSTALL);

// Install the application.
  proxy.installApplication (earFile, appName, options, null);
  System.out.println ("After install App is called..");

// Wait for some timeout. The installation application programming interface (API) is 
//  asynchronous and so returns immediately.
// If the program does not wait here, the program ends.
  Thread.sleep(300000); // Wait so that the program does not end.

        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// Specify the Java Management Extensions (JMX) notification listener for JMX events.
class AListener implements NotificationListener
{
    AdminClient _soapClient;
    NotificationFilterSupport  myFilter;
    Object handback;
    ObjectName on;
    String eventTypeToCheck;

    public AListener(AdminClient cl, NotificationFilterSupport fl, 
Object h, String eType) throws Exception
    {
        _soapClient = cl;
        myFilter = fl;
        handback = h;
        eventTypeToCheck = eType;

        Iterator iter = _soapClient.queryNames (new ObjectName(
"WebSphere:type=AppManagement,*"), null).iterator();
        on = (ObjectName)iter.next();
        System.out.println ("ObjectName: " + on);
        _soapClient.addNotificationListener (on, this, myFilter, handback);
    }

    public void handleNotification (Notification notf, Object handback)
    {
            AppNotification ev = (AppNotification) notf.getUserData();
            System.out.println ("!! JMX event Recd: (handback obj= " + handback+ "): " + ev);


            //When the installation is done, remove the listener and quit.

            if (ev.taskName.equals (eventTypeToCheck) &&
                (ev.taskStatus.equals (AppNotification.STATUS_COMPLETED) ||
                 ev.taskStatus.equals (AppNotification.STATUS_FAILED)))
            {
                    try
                    {
                            _soapClient.removeNotificationListener (on, this);
                    }
            catch (Throwable th)
                    {
                        System.out.println ("Error removing listener: " + th);
                    }
                    System.exit (0);
        }
    }
}

下一步做什么

一旦您安装了应用程序,就必须显式启动应用程序,否则必须停止并重新启动服务器。


指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjmx_install_app
文件名:tjmx_install_app.html