package org.infosec.ismp.manager.snmp.processor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.beanutils.BeanUtils; import org.infosec.ismp.manager.model.snmp.SnmpDeviceHistoryBaseEntity; import org.infosec.ismp.manager.model.snmp.SnmpDeviceHistoryBaseStatus; import org.infosec.ismp.manager.model.snmp.WeblogicHistoryEntity; import org.infosec.ismp.manager.rmi.snmp.model.weblogic.WeblogicDeviceStatus; import org.infosec.ismp.manager.rmi.snmp.model.weblogic.WeblogicJdbcConnectionPoolStatus; import org.infosec.ismp.manager.rmi.snmp.model.weblogic.WeblogicJvmStatus; import org.infosec.ismp.manager.rmi.snmp.model.weblogic.WeblogicThreadPoolStatus; import org.infosec.ismp.manager.snmp.SnmpDeviceConstants; import org.infosec.ismp.manager.snmp.SnmpDeviceLocator; import org.infosec.ismp.model.snmp.Result; import org.infosec.ismp.model.snmp.Results; import org.infosec.ismp.util.ThreadCategory; /** * @author guoxianwei * @date 2010-12-23 上午10:27:57 * weblogic message process */ public final class WebLogicMessageProcessor { //持久化类,入库 private SnmpDeviceHistoryBaseEntity m_baseEntity = null; //持久化类,入库 private List<WeblogicHistoryEntity> m_weblogicHistory = new ArrayList<WeblogicHistoryEntity>(); public SnmpDeviceHistoryBaseStatus process(Results results) { SnmpDeviceHistoryBaseStatus baseStatus = null;//保存状态和持久化 WeblogicDeviceStatus weblogicDeviceStatus = new WeblogicDeviceStatus();//状态信息,供前台调用 if (results != null && results.getResultList() != null) { for (Result result : results.getResultList()) { if ("jvmRuntimeTable".equals(result.getTrackerName())) { // weblogic java Visual machine status weblogicDeviceStatus.setJvmStatus(convertJvmStatus(result)); } if ("jdbcConnectionPoolRuntimeTable".equals(result .getTrackerName())) { // weblogic JdbcConnectionPool status weblogicDeviceStatus .setJdbcConnectionPoolStatus(convertJdbcConnectionPoolStatus(result)); } if ("threadPoolRuntimeTable".equals(result.getTrackerName())) { // weblogic ThreadPool status weblogicDeviceStatus .setThreadPoolStatus(convertThreadPoolStatus(result)); } } } if (!m_weblogicHistory.isEmpty()) { baseStatus = new SnmpDeviceHistoryBaseStatus(); copyProperties(results.getNodeid(), results.getIpAddr(),results.getBrand()); baseStatus.setSnmpDeviceHistoryBaseEntity(m_baseEntity); weblogicDeviceStatus.setActive(true); weblogicDeviceStatus.setIpAddr(results.getIpAddr()); weblogicDeviceStatus.setDomain(SnmpDeviceLocator.getDomainId(results.getNodeid())); weblogicDeviceStatus.setNodeid(results.getNodeid()); baseStatus.setWeblogicDeviceStatus(weblogicDeviceStatus); } return baseStatus; } private List<WeblogicJvmStatus> convertJvmStatus(Result result) { List<WeblogicJvmStatus> jvmStatusList = new ArrayList<WeblogicJvmStatus>(); for (Map<String, Object> properties : result.getListResults()) { WeblogicJvmStatus bean = new WeblogicJvmStatus(); populate(bean, properties); log().info(bean.toString()); jvmStatusList.add(bean); // 加入到历史信息集合,便于后面存入DB m_weblogicHistory.add(converHostHistory(properties, SnmpDeviceConstants.JVM_WEBLOGIC)); } return jvmStatusList; } private List<WeblogicJdbcConnectionPoolStatus> convertJdbcConnectionPoolStatus( Result result) { List<WeblogicJdbcConnectionPoolStatus> poolList = new ArrayList<WeblogicJdbcConnectionPoolStatus>(); for (Map<String, Object> properties : result.getListResults()) { WeblogicJdbcConnectionPoolStatus bean = new WeblogicJdbcConnectionPoolStatus(); populate(bean, properties); log().info(bean.toString()); poolList.add(bean); // 加入到历史信息集合,便于后面存入DB m_weblogicHistory.add(converHostHistory(properties, SnmpDeviceConstants.JDBC_CONN_POOL_WEBLOGIC)); } return poolList; } private List<WeblogicThreadPoolStatus> convertThreadPoolStatus(Result result) { List<WeblogicThreadPoolStatus> threadPoolList = new ArrayList<WeblogicThreadPoolStatus>(); for (Map<String, Object> properties : result.getListResults()) { WeblogicThreadPoolStatus bean = new WeblogicThreadPoolStatus(); populate(bean, properties); log().info(bean.toString()); threadPoolList.add(bean); // 加入到历史信息集合,便于后面存入DB m_weblogicHistory.add(converHostHistory(properties, SnmpDeviceConstants.THREAD_POOL_WEBLOGIC)); } return threadPoolList; } private WeblogicHistoryEntity converHostHistory( Map<String, Object> map, String type) { WeblogicHistoryEntity bean = new WeblogicHistoryEntity(); int keyindex = 1; for (Entry<String, Object> entry : map.entrySet()) { bean.setKey(String.valueOf(entry.getKey())); bean.setValue(String.valueOf(entry.getValue())); bean.setKeyindex(keyindex++); bean.setDeviceType(type); } bean.setTime(new Date()); return bean; } private void populate(Object bean, Map<String, Object> properties) { try { BeanUtils.populate(bean, properties); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } //属性赋值 private void copyProperties(String nodeid, String ipAddr,String brand) { m_baseEntity = new SnmpDeviceHistoryBaseEntity(); m_baseEntity.setWeblogicHistory(m_weblogicHistory); m_baseEntity.setNodeid(nodeid); m_baseEntity.setIpAddr(ipAddr); m_baseEntity.setType(brand); m_baseEntity.setDomain(SnmpDeviceLocator.getDomainId(nodeid)); m_baseEntity.setTime(new Date()); } ThreadCategory log() { return ThreadCategory.getInstance(getClass()); } }