프로그래밍을 통한 애플리케이션 설치
관리 콘솔, wsadmin 도구 또는 프로그래밍을 통한 애플리케이션을 설치할 수 있습니다. 이 예제를 사용하여 프로그래밍을 통한 애플리케이션을 설치하십시오.
시작하기 전에
WebSphere® Application Server에서 애플리케이션을 설치하려면 먼저 애플리케이션을 설치해야 합니다.
이 태스크 정보
AppDeploymentController 인스턴스는 XML 기반 배치 디스크립터에 정의된 메타데이터 및 입력 EAR(Enterprise Archive) 파일 내의 Java 클래스에 정의된 어노테이션을 포함합니다.
다음 태스크를 수행하여 프로그래밍을 통한 애플리케이션을 설치하십시오.
프로시저
결과
코드를 실행하면 애플리케이션이 설치됩니다.
예
다음 예제에서는 이전 단계를 기반으로 애플리케이션을 설치하는 방법을 보여줍니다. 일부 구문은 인쇄를 위해 여러 줄로 표시됩니다.
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);
}
}
}
다음에 수행할 작업
애플리케이션이 설치되면 명시적으로 애플리케이션을 시작하거나 서버를 중지 및 재시작해야 합니다.