領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多經過數個月的開發,我很榮幸地宣布 Hyperic 4.5 版本發布。在此版本中,我們將 Hyperic 從在 JBoss 上執行的 EJB 應用程式遷移到在 Tomcat 上執行的 Spring Web 應用程式。詳細的遷移步驟涵蓋在我的 Hyperic 從 EJB 遷移到 Spring 的案例研究中,該研究最初在最近的 SpringOne 2GX 大會上發表。在這篇文章中,我想重點介紹一些關於此轉換我最喜歡的部分。
轉換之後,我們能夠利用 Spring 的整合測試支援來測試我們新的已轉換 EJB 的服務層以及它們底層的 DAO。透過簡單地新增一些註釋,我們就能夠在不到 30 秒的時間內引導啟動我們的整個應用程式上下文,並在專用的交易中執行每個測試方法,該交易在測試結束時會自動回滾。這種支援被證明非常有價值,讓我們能夠快速將我們的測試覆蓋率分別提高了 18% 和 12%(在我們的開源和企業程式碼庫中)。
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:META-INF/spring/*-context.xml")
public class AppdefManagerTest {
@Autowired
private AppdefManager appdefManager;
@Before
public void setUp() throws Exception {
createPlatformType("TestPlatform", "test");
}
@Test
public void testGetControllablePlatformTypes() throws Exception {
Map<String, AppdefEntityID> platformTypes = appdefManager
.getControllablePlatformTypes(subject);
assertEquals(1, platformTypes.size());
assertEquals("TestPlatform", platformTypes.keySet().iterator().next());
}
}
public void publishMessage(String name, Serializable sObj) {
TopicConnection conn = null;
TopicSession session = null;
if (_ic == null)
_ic = new InitialContext();
if (_factory == null)
_factory = _ic.lookup(CONN_FACTORY_JNDI);
TopicConnectionFactory tFactory = (TopicConnectionFactory) _factory;
Topic topic = getTopic(name);
if (topic != null) {
// Now create a connection to send a message
if (_tConn != null)
conn = _tConn;
else
conn = tFactory.createTopicConnection();
if (conn == null)
_log.error("TopicConnection cannot be created");
if (_tSession != null)
session = _tSession;
else
session = conn.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
// Create a publisher and publish the message
TopicPublisher publisher = session.createPublisher(topic);
ObjectMessage msg = session.createObjectMessage();
msg.setObject(sObj);
publisher.publish(msg);
...
}
public void publishMessage(String name, Serializable sObj) {
eventsJmsTemplate.convertAndSend(name, sObj);
}
public int getServicesCount(AuthzSubject subject) {
Statement stmt = null;
ResultSet rs = null;
Integer subjectId = subject.getId();
try {
Connection conn = getDBConn();
String sql = "SELECT COUNT(SVC.ID) FROM TBL_SERVICE";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
return rs.getInt(1);
}
} catch (SQLException e) {
log.error("Caught SQL Exception finding Services by type: " + e, e);
throw new SystemException(e);
} finally {
DBUtil.closeJDBCObjects(LOG_CTX, null, stmt, rs);
}
return 0;
}
public int getServicesCount(AuthzSubject subject) {
return jdbcTemplate.queryForInt("SELECT COUNT(SVC.ID) FROM TBL_SERVICE");
}
這真是一個相當棒的減重計畫!僅僅透過轉換到 Spring 而不更改任何功能,我們就將開源和企業程式碼庫都減少了約 7%。
這些只是在此版本中切換到 Spring 和 Tomcat 所提供的一些好處。實在太多了,無法在一篇部落格文章中全部列出!
此版本還包含對三個 VMware vFabric 平台服務的監控和管理,包括 vFabric GemFire 6.5 分散式快取系統、RabbitMQ 企業訊息系統,以及本週也發布的全新 vFabric tc Server 2.1 Java 執行階段伺服器。Hyperic 的先前版本中已存在對 vFabric tc Server 的支援;然而,在 4.5 中,外掛程式現在與 Hyperic 發行版捆綁在一起,不再是單獨下載。請在未來的部落格文章中查看有關監控 GemFire 和 RabbitMQ 的更多資訊。
在遷移的同時,我們也藉此機會將我們的程式碼儲存庫從 Subversion 遷移到 Git。要從 Git 程式碼儲存庫下載原始碼,請前往 http://git.springsource.org/hq。我們也將我們的建置系統從 Ant 切換到 Maven。自訂外掛程式或功能開發所需的所有 Hyperic 模組現在都可以從我們的 Maven 儲存庫下載,網址為 http://maven.hyperic.org/release。