옆에 앉아계신 차장님의 발기아래 JBoss Installer를 groovy로 만들어 LGPL 프로젝트로 구글에 등록했습니다. 일반 자바 문법으로 작성하였으면 상당했을 코드량을 Groovy의 치환자 등을 이용하여 JBoss 4.2와 EAP(Enterprise Application Platform:상용버전)을 한 번에 여러 대의 서버에 인스톨할 수 있는 프로그램입니다.
이것을 이용하여 30대의 운영 리눅스 서버(각 서버당 4개의 인스턴스)에 JBoss를 설치하는 데 30분이 걸렸다고 하네요. 초기 프로젝트 import는 만득이(http://www.mandki.com) 개발자인 전모씨 아드님이신 준식 차장님이 담당을 했습니다. 왜 JB29냐면 "JBoss를 설치하는 B29 폭격기"라는 곳에서 착안했습니다.
FTP로 서버를 순회하며 파일을 올리고 자동으로 압축을 풀고 해당 서버의 configuration으로 변경하는 작업들을 한 번에 수행합니다.
이제 groovy를 시작한터라 너무 자바틱할 수도 있겠지만 기능만큼은 막강할 수 있겠네요.
JBoss 5.0 용은 설정이 바뀐터라 코드를 조금 수정해야 합니다.
http://code.google.com/p/jb29/
BLOG ARTICLE JBoss EAP 4.3 | 2 ARTICLE FOUND
- 2009/05/27 JB29 Installer Project
- 2009/01/13 JBoss Queue Monitoring via MBean
JBoss 의 JMS서버의 queue를 모니터링하는 JMX Code입니다. jsp파일로 되어 있으며 복사해서 사용하면 됩니다.
아래의 파일이 실행되어 모니터링되려면 $SERVER_HOME/deploy/jboss-messaging.sar/messaging-service.xml 파일의 다음의 attribute를 true로 바꿔야 합니다.
<attribute name="EnableMessageCounters">true</attribute>
그리고 메시지를 샘플링하는 주기를 적절하게 주면 됩니다.
<attribute name="MessageCounterSamplePeriod">5000</attribute>
아래의 파일이 실행되어 모니터링되려면 $SERVER_HOME/deploy/jboss-messaging.sar/messaging-service.xml 파일의 다음의 attribute를 true로 바꿔야 합니다.
<attribute name="EnableMessageCounters">true</attribute>
그리고 메시지를 샘플링하는 주기를 적절하게 주면 됩니다.
<attribute name="MessageCounterSamplePeriod">5000</attribute>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="javax.naming.*, java.util.*,javax.management.*,org.jboss.jms.server.destination.*,org.jboss.jmx.adaptor.rmi.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--meta http-equiv="refresh" content="5"-->
<link href="style.css" rel=stylesheet type="text/css">
<title>Insert title here</title>
</head>
<body leftmargin=15 topmargin=10>
<center><p>
<br>
<table width="600" cellpadding="7" cellspacing="0" border="1" bordercolordark="WHITE" bordercolorlight="BLACK">
<tr bgcolor=#E8EEEC>
<%
String type = "Queue";
Hashtable<String,String> env = new Hashtable<String,String>();
String factory = "org.jboss.security.jndi.JndiLoginInitialContextFactory";
env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
String url = "jnp://127.0.0.1:1099";
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_CREDENTIALS, "admin");
env.put(Context.SECURITY_PRINCIPAL, "admin");
Context ctx = new InitialContext(env);
RMIAdaptor server = (RMIAdaptor) ctx.lookup("jmx/invoker/RMIAdaptor");
%>
<td align center>Queue Name</td>
<td align center>Total Count</td>
<td align center>Current Count</td>
<td align center>Consumer Count</td>
<td align center>Delivering Count</td>
</tr>
<tr>
<td align center>queue/A</td>
<%
String queueName = "A";
// Get the MBeanInfo for the JNDIView MBean
String targetName = "jboss.messaging.destination:service=" + type + ",name=" + queueName;
ObjectName objName = ObjectName.getInstance(targetName);
QueueMBean queueMBean = (QueueMBean) MBeanServerInvocationHandler.newProxyInstance(server, objName, QueueMBean.class, false);
int totalMessageCount = 0;
int currentMessageCount = 0;
totalMessageCount = queueMBean.getMessageCounter().getCount();
currentMessageCount = queueMBean.getMessageCount();
%>
<td align center><%= totalMessageCount %></td>
<td align center><%= currentMessageCount %></td>
<td align center><%= queueMBean.getConsumerCount() %></td>
<td align center><%= queueMBean.getDeliveringCount() %></td>
</tr>
<tr>
<td align center>queue/B</td>
<%
queueName = "B";
// Get the MBeanInfo for the JNDIView MBean
targetName = "jboss.messaging.destination:service=" + type + ",name=" + queueName;
objName = ObjectName.getInstance(targetName);
queueMBean = (QueueMBean) MBeanServerInvocationHandler.newProxyInstance(server, objName, QueueMBean.class, false);
totalMessageCount = 0;
currentMessageCount = 0;
totalMessageCount = queueMBean.getMessageCounter().getCount();
currentMessageCount = queueMBean.getMessageCount();
%>
<td align center><%= totalMessageCount %></td>
<td align center><%= currentMessageCount %></td>
<td align center><%= queueMBean.getConsumerCount() %></td>
<td align center><%= queueMBean.getDeliveringCount() %></td>
</tr>
</table>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--meta http-equiv="refresh" content="5"-->
<link href="style.css" rel=stylesheet type="text/css">
<title>Insert title here</title>
</head>
<body leftmargin=15 topmargin=10>
<center><p>
<br>
<table width="600" cellpadding="7" cellspacing="0" border="1" bordercolordark="WHITE" bordercolorlight="BLACK">
<tr bgcolor=#E8EEEC>
<%
String type = "Queue";
Hashtable<String,String> env = new Hashtable<String,String>();
String factory = "org.jboss.security.jndi.JndiLoginInitialContextFactory";
env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
String url = "jnp://127.0.0.1:1099";
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_CREDENTIALS, "admin");
env.put(Context.SECURITY_PRINCIPAL, "admin");
Context ctx = new InitialContext(env);
RMIAdaptor server = (RMIAdaptor) ctx.lookup("jmx/invoker/RMIAdaptor");
%>
<td align center>Queue Name</td>
<td align center>Total Count</td>
<td align center>Current Count</td>
<td align center>Consumer Count</td>
<td align center>Delivering Count</td>
</tr>
<tr>
<td align center>queue/A</td>
<%
String queueName = "A";
// Get the MBeanInfo for the JNDIView MBean
String targetName = "jboss.messaging.destination:service=" + type + ",name=" + queueName;
ObjectName objName = ObjectName.getInstance(targetName);
QueueMBean queueMBean = (QueueMBean) MBeanServerInvocationHandler.newProxyInstance(server, objName, QueueMBean.class, false);
int totalMessageCount = 0;
int currentMessageCount = 0;
totalMessageCount = queueMBean.getMessageCounter().getCount();
currentMessageCount = queueMBean.getMessageCount();
%>
<td align center><%= totalMessageCount %></td>
<td align center><%= currentMessageCount %></td>
<td align center><%= queueMBean.getConsumerCount() %></td>
<td align center><%= queueMBean.getDeliveringCount() %></td>
</tr>
<tr>
<td align center>queue/B</td>
<%
queueName = "B";
// Get the MBeanInfo for the JNDIView MBean
targetName = "jboss.messaging.destination:service=" + type + ",name=" + queueName;
objName = ObjectName.getInstance(targetName);
queueMBean = (QueueMBean) MBeanServerInvocationHandler.newProxyInstance(server, objName, QueueMBean.class, false);
totalMessageCount = 0;
currentMessageCount = 0;
totalMessageCount = queueMBean.getMessageCounter().getCount();
currentMessageCount = queueMBean.getMessageCount();
%>
<td align center><%= totalMessageCount %></td>
<td align center><%= currentMessageCount %></td>
<td align center><%= queueMBean.getConsumerCount() %></td>
<td align center><%= queueMBean.getDeliveringCount() %></td>
</tr>
</table>





