모듈 준비 및 프로그래밍을 통해 기존 애플리케이션에 추가
관리 콘솔, wsadmin 도구 또는 프로그래밍을 통해 기존 애플리케이션에 모듈을 추가할 수 있습니다. 이 예제를 사용하여 프로그래밍을 통해 모듈을 추가하십시오.
시작하기 전에
이 태스크에서는 사용자가 MBean 프로그래밍의 기본 사항은 알고 있다고 가정합니다. MBean 프로그래밍에 대한 정보는 MBean Java™ API(Application Programming Interface) 문서를 참조하십시오.이 Information Center에서 를 클릭하십시오.
WebSphere® Application Server에서 애플리케이션에 모듈을 추가하려면 먼저 애플리케이션을 설치해야 합니다.
이 태스크 정보
다음 태스크를 수행하여 프로그래밍을 통해 애플리케이션에 모듈을 추가하십시오.
프로시저
결과
코드를 실행하면 모듈이 애플리케이션에 추가됩니다.
예
다음 예제는 이전 단계를 기반으로 애플리케이션에 모듈을 추가하는 방법을 보여 줍니다. 일부 구문은 인쇄를 위해 여러 줄로 표시됩니다.
//Inputs:
//moduleName specifies the name of the module that you add to the application.
//moduleURI specifies a URI that gives the target location of the module
// archive contents on a file system. The URI provides the location of the new
// module after installation. The URI is relative to the application URL.
//uniquemoduleURI specfies the URI that gives the target location of the
// deployment descriptor file. The URI is relative to the application URL.
//target specifies the cell, node, and server on which the module is installed.
![[Windows]](../images/windows.gif)
String moduleName = "C:\apps\foo.jar";
![[Linux]](../images/linux.gif)
![[HP-UX]](../images/hpux.gif)
![[Solaris]](../images/solaris.gif)
![[AIX]](../images/aixlogo.gif)
![[z/OS]](../images/ngzos.gif)
![[IBM i]](../images/iseries.gif)
String moduleName = "/apps/foo.jar";
String moduleURI = "Increment.jar";
String uniquemoduleURI = "Increment.jar+META-INF/ejb-jar.xml";
String target = "WebSphere:cell=cellname,node=nodename,server=servername";
//Create an application deployment controller instance, AppDeploymentController,
//to populate the Java Archive (JAR) file with binding information.
//The binding information is WebSphere Application Server-specific deployment information.
Hashtable preferences = new Hashtable();
preferences.put (AppConstants.APPDEPL_LOCALE, Locale.getDefault());
preferences.put (AppConstants.APPUPDATE_CONTENTTYPE, AppConstants.APPUPDATE_CONTENT_MODULEFILE);
AppDeploymentController controller = AppManagementFactory.readArchiveForUpdate(
moduleName,
moduleURI,
AppConstants.APPUPDATE_ADD,
preferences,
null);
애플리케이션에 추가하는 모듈에 바인딩이 부족하면 모듈 추가가 가능하도록 바인딩을 추가하십시오. 제품에서 제공하는 공용 API를 사용하여 바인딩을 수집하고 추가하십시오. WebSphere Application Server 특정 바인딩 정보를 수집하고 채우는 방법을 자세히 살펴보려면 com.ibm.websphere.management.application.client.AppDeploymentController 인스턴스에 대한 Java 문서를 참조하십시오. AppDeploymentController 인스턴스는 XML 기반 배치 디스크립터에 정의된 메타데이터 및 입력 입력 모듈 내의 Java 클래스에 정의된 어노테이션을 포함합니다.
//After you collect all the binding information, save it in the module.
controller.saveAndClose();
//Get the installation options.
Hashtable options = controller.getAppDeploymentSavedResults();
//Connect the administrative client, AdminClient, to WebSphere Application Server.
AdminClient client = ...;
//Create the application management proxy.
AppManagement proxy = AppManagementProxy.getJMXProxyForClient(client);
//Update the existing application, MyApp, by adding the module.
String appName = "MyApp";
options.put (AppConstants.APPUPDATE_CONTENTTYPE,
AppConstants. APPUPDATE_CONTENT_MODULEFILE);
//Create the notification filter.
NotificationFilterSupport myFilter = new NotificationFilterSupport();
myFilter.enableType (NotificationConstants.TYPE_APPMANAGEMENT);
//Add the listener. NotificationListener listener = new AListener(_soapClient, myFilter,
"Install: " + appName, AppNotification.UPDATE);
//Specify the target for the new module.
Hashtable mod2svr = new Hashtable();
options.put (AppConstants.APPDEPL_MODULE_TO_SERVER, mod2svr);
mod2svr.put (uniquemoduleURI, target);
proxy.updateApplication ( appName,
moduleURI,
moduleName,
AppConstants.APPUPDATE_ADD,
options,
null);
// 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);
}
}
}
다음에 수행할 작업
모듈이 추가되면 리스너를 제거하고 종료하십시오.