J2EE應用的部署對於部署人員而言是一件很有意義的事情.現有的應用伺服器一般都支持基於Web,或熱部署,或通過部署工具的方式來完成應用的部署.WebSphere Application Server 5.x提供了應用編程介面實現J2EE應用的部署和管理.
一、WebSphere部署概述
一般情況下,部署基於J2EE的應用需要做這樣幾件事情:首先,創建數據源,其中需要指定JNDI名; 其次,修改企業應用.ear文件的資源JNDI名和資源參考;第三,修改企業應用.ear文件的EJB JNDI名和引用參考; 第四,自動部署修改後的企業應用.ear文件.,重起WebSphere伺服器.
這樣幾個步驟如果手工完成,在EJB組件不是很多、資源參考和引用參考不是很多的情況下,基本上能夠很快完成.但是,大家試想,如果同樣的一套應用程序要運行在同一個WebSphere應用伺服器上,其中的EJB組件、涉及到的JNDI名修改和資源(引用)修改很多時,我們就需要藉助於程序自動完成整個過程了.藉助於WebSphere提供的Java介面(基於JMX技術)能夠很好的處理其中的過程.這裡就根據部署過程給出大體過程(由於整個過程比較複雜,這裡只是給出主要思路).
二、數據源的自動創建
這個過程將主要涉及到這樣幾方面的內容:
第一:找出WebSphere伺服器上所具有的數據源,看看其名稱是否和我們將配置的有衝突.
第二:如果沒有,則我們程序創建所需的數據源.
第三:如果待創建數據源的JDBC Provider都不存在,則在第一、二步之前應該先創建.
通過這樣幾步過程,我們能夠實現數據源的自動創建.
下面給出示例代碼:
創建AdminClient:Properties props = new Properties();
props.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP); props.setProperty(AdminClient.CONNECTOR_HOST, ipAddress); props.setProperty(AdminClient.CONNECTOR_PORT, port); AdminClient adminClient = AdminClientFactory.createAdminClient(props); |
定位現有的JDBC Provider:
ConfigService configService = new ConfigServiceProxy(adminClient); Session session = new Session(); ObjectName[] provider = configService.resolve(session, "Cell=" cell ":Node=" node ":JDBCProvider"); ObjectName db2Provider = null; for (int i = 0; i < provider.length; i ) { String jdbcProviderName = (String) configService.getAttribute(session, provider[i], "name"); if (jdbcProviderName.equals("xxx JDBC Provider")) { db2Provider = provider[i]; break; } } |
保存創建數據源操作:
configService.save(session, true);
configService.discard(session);
三、J2EE應用(.ear)的自動修改
這一部分一般可以通過如下步驟完成:
第一:修改JNDI相關內容.
第二:獲得AppDeploymentTask任務.
第三:保存AppDeploymentTask任務.
第四:修改web-context.利用JAXP、JDOM等都可以完成.
四、J2EE應用(.ear)的自動部署
這一部分一般可以通過如下步驟完成:
第一,實現NotificationListener.
第二,部署.ear應用.
實現NotificationListener:
public void handleNotification(Notification notf, Object handback) { try{ AppNotification ev = (AppNotification) notf.getUserData(); if (ev.taskName.equals(AppNotification.INSTALL)) { if (ev.taskStatus.equals(AppNotification.STATUS_COMPLETED)) { System.out.println("install succeeded .. remove listener"); adminClient.removeNotificationListener(appMgmtMbean,listener); isFinish=true; } else if (ev.taskStatus.equals(AppNotification.STATUS_FAILED)) { adminClient.removeNotificationListener(appMgmtMbean,listener); System.out.println("install failed .. remove listener"); isFinish=true; } else { System.out.println("other message..."); } } }catch(Exception ex){ ex.printStackTrace(); } } |
這樣我們就實現了J2EE應用的自動部署.
[火星人 ] 部署基於WebSphere的Java EE應用已經有491次圍觀