BlacktieAdminServiceXATMI.java
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:15k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2008, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. package org.jboss.blacktie.administration;
  19. import java.io.ByteArrayOutputStream;
  20. import java.io.DataOutputStream;
  21. import java.io.IOException;
  22. import java.nio.ByteBuffer;
  23. import java.nio.ByteOrder;
  24. import java.util.Iterator;
  25. import java.util.List;
  26. import java.util.StringTokenizer;
  27. import javax.ejb.ActivationConfigProperty;
  28. import javax.ejb.MessageDriven;
  29. import org.apache.log4j.LogManager;
  30. import org.apache.log4j.Logger;
  31. import org.jboss.blacktie.administration.core.AdministrationProxy;
  32. import org.jboss.blacktie.jatmibroker.core.conf.ConfigurationException;
  33. import org.jboss.blacktie.jatmibroker.xatmi.Buffer;
  34. import org.jboss.blacktie.jatmibroker.xatmi.Connection;
  35. import org.jboss.blacktie.jatmibroker.xatmi.ConnectionException;
  36. import org.jboss.blacktie.jatmibroker.xatmi.Response;
  37. import org.jboss.blacktie.jatmibroker.xatmi.TPSVCINFO;
  38. import org.jboss.blacktie.jatmibroker.xatmi.X_OCTET;
  39. import org.jboss.blacktie.jatmibroker.xatmi.mdb.MDBBlacktieService;
  40. import org.jboss.ejb3.annotation.Depends;
  41. import org.w3c.dom.Element;
  42. @MessageDriven(activationConfig = {
  43. @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
  44. @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/BTDomainAdmin") }, messageListenerInterface = javax.jms.MessageListener.class)
  45. @Depends("jboss.messaging.destination:service=Queue,name=BTDomainAdmin")
  46. @javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NOT_SUPPORTED)
  47. public class BlacktieAdminServiceXATMI extends MDBBlacktieService implements
  48. javax.jms.MessageListener, BlacktieAdministration {
  49. private static final Logger log = LogManager
  50. .getLogger(BlacktieAdminServiceXATMI.class);
  51. private AdministrationProxy administrationProxy;
  52. public BlacktieAdminServiceXATMI() throws IOException,
  53. ConfigurationException, ConnectionException {
  54. super("BTDomainAdmin");
  55. administrationProxy = new AdministrationProxy();
  56. }
  57. public Response tpservice(TPSVCINFO svcinfo) {
  58. log.trace("Message received");
  59. X_OCTET recv = (X_OCTET) svcinfo.getBuffer();
  60. String string = new String(recv.getByteArray());
  61. StringTokenizer parameters = new StringTokenizer(string, ",", false);
  62. String operation = parameters.nextToken();
  63. byte[] toReturn = null;
  64. try {
  65. if (operation.equals("getDomainName")) {
  66. String response = getDomainName();
  67. toReturn = response.getBytes();
  68. } else if (operation.equals("getServerName")) {
  69. String serviceName = getString(parameters);
  70. String response = getServerName(serviceName);
  71. toReturn = response.getBytes();
  72. } else if (operation.equals("getSoftwareVersion")) {
  73. String response = getSoftwareVersion();
  74. toReturn = response.getBytes();
  75. } else if (operation.equals("pauseDomain")) {
  76. boolean response = pauseDomain();
  77. toReturn = convertBoolean(response);
  78. } else if (operation.equals("resumeDomain")) {
  79. boolean response = resumeDomain();
  80. toReturn = convertBoolean(response);
  81. } else if (operation.equals("getServerList")) {
  82. List<String> response = getServerList();
  83. toReturn = convertListString(response);
  84. } else if (operation.equals("listRunningServers")) {
  85. List<String> response = listRunningServers();
  86. toReturn = convertListString(response);
  87. } else if (operation.equals("listRunningInstanceIds")) {
  88. String serverName = getString(parameters);
  89. List<Integer> response = listRunningInstanceIds(serverName);
  90. toReturn = convertListInt(response);
  91. } else if (operation.equals("getServersStatus")) {
  92. Element response = getServersStatus();
  93. toReturn = response.toString().getBytes();
  94. } else if (operation.equals("listServiceStatus")) {
  95. String serverName = getString(parameters);
  96. String serviceName = getString(parameters);
  97. Element response = listServiceStatus(serverName, serviceName);
  98. toReturn = response.toString().getBytes();
  99. } else if (operation.equals("advertise")) {
  100. String serverName = getString(parameters);
  101. String serviceName = getString(parameters);
  102. boolean response = advertise(serverName, serviceName);
  103. toReturn = convertBoolean(response);
  104. } else if (operation.equals("unadvertise")) {
  105. String serverName = getString(parameters);
  106. String serviceName = getString(parameters);
  107. boolean response = unadvertise(serverName, serviceName);
  108. toReturn = convertBoolean(response);
  109. } else if (operation.equals("shutdown")) {
  110. String serverName = getString(parameters);
  111. int id = getInt(parameters);
  112. shutdown(serverName, id);
  113. toReturn = new byte[1];
  114. toReturn[0] = 1;
  115. } else if (operation.equals("getServiceCounterById")) {
  116. String serverName = getString(parameters);
  117. int id = getInt(parameters);
  118. String serviceName = getString(parameters);
  119. long response = getServiceCounterById(serverName, id,
  120. serviceName);
  121. toReturn = convertLong(response);
  122. } else if (operation.equals("getServiceCounter")) {
  123. String serverName = getString(parameters);
  124. String serviceName = getString(parameters);
  125. long response = getServiceCounter(serverName, serviceName);
  126. toReturn = convertLong(response);
  127. } else if (operation.equals("getErrorCounter")) {
  128. String serverName = getString(parameters);
  129. String serviceName = getString(parameters);
  130. long response = getErrorCounter(serverName, serviceName);
  131. toReturn = convertLong(response);
  132. } else if (operation.equals("reloadDomain")) {
  133. boolean response = reloadDomain();
  134. toReturn = convertBoolean(response);
  135. } else if (operation.equals("reloadServer")) {
  136. String serverName = getString(parameters);
  137. boolean response = reloadServer(serverName);
  138. toReturn = convertBoolean(response);
  139. } else if (operation.equals("listServiceStatusById")) {
  140. String serverName = getString(parameters);
  141. int id = getInt(parameters);
  142. String serviceName = getString(parameters);
  143. Element response = listServiceStatusById(serverName, id,
  144. serviceName);
  145. toReturn = response.toString().getBytes();
  146. } else if (operation.equals("getDomainStatus")) {
  147. boolean response = getDomainStatus();
  148. toReturn = convertBoolean(response);
  149. } else if (operation.equals("getResponseTime")) {
  150. String serverName = getString(parameters);
  151. String serviceName = getString(parameters);
  152. String times = getResponseTime(serverName, serviceName);
  153. toReturn = times.getBytes();
  154. } else if (operation.equals("getQueueDepth")) {
  155. String serverName = getString(parameters);
  156. String serviceName = getString(parameters);
  157. int depth = getQueueDepth(serverName, serviceName);
  158. toReturn = (new StringBuffer().append(depth)).toString()
  159. .getBytes();
  160. } else if (operation.equals("getServerVersionById")) {
  161. String serverName = getString(parameters);
  162. int id = getInt(parameters);
  163. String response = getServerVersionById(serverName, id);
  164. toReturn = response.getBytes();
  165. }
  166. X_OCTET buffer = (X_OCTET) svcinfo.tpalloc("X_OCTET", null);
  167. buffer.setByteArray(toReturn);
  168. log.debug("Responding");
  169. return new Response(Connection.TPSUCCESS, 0, buffer,
  170. toReturn.length, 0);
  171. } catch (ConnectionException e) {
  172. return new Response(Connection.TPFAIL, 0, null, 0, 0);
  173. } catch (IOException e) {
  174. return new Response(Connection.TPFAIL, 0, null, 0, 0);
  175. }
  176. }
  177. private byte[] convertListInt(List<Integer> response) {
  178. StringBuffer toReturn = new StringBuffer();
  179. Iterator<Integer> iterator = response.iterator();
  180. while (iterator.hasNext()) {
  181. toReturn.append(iterator.next());
  182. toReturn.append(',');
  183. }
  184. return toReturn.toString().getBytes();
  185. }
  186. private byte[] convertLong(long response) throws IOException {
  187. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  188. DataOutputStream dos = new DataOutputStream(baos);
  189. ByteBuffer bbuf = ByteBuffer.allocate(Buffer.LONG_SIZE);
  190. bbuf.order(ByteOrder.BIG_ENDIAN);
  191. bbuf.putLong(response);
  192. bbuf.order(ByteOrder.LITTLE_ENDIAN);
  193. long toWrite = bbuf.getLong(0);
  194. dos.writeLong(toWrite);
  195. dos.flush();
  196. baos.flush();
  197. return baos.toByteArray();
  198. }
  199. private byte[] convertListString(List<String> response) {
  200. StringBuffer toReturn = new StringBuffer();
  201. Iterator<String> iterator = response.iterator();
  202. while (iterator.hasNext()) {
  203. toReturn.append(iterator.next());
  204. toReturn.append(',');
  205. }
  206. toReturn.append("|");
  207. return toReturn.toString().getBytes();
  208. }
  209. private byte[] convertBoolean(boolean response) {
  210. byte[] toReturn = new byte[1];
  211. if (response) {
  212. toReturn[0] = 1;
  213. }
  214. return toReturn;
  215. }
  216. private String getString(StringTokenizer parameters) {
  217. return parameters.nextToken();
  218. }
  219. private int getInt(StringTokenizer parameters) {
  220. return Integer.parseInt(parameters.nextToken());
  221. }
  222. /**
  223.  * Retrieve the domain name
  224.  */
  225. public String getDomainName() {
  226. return administrationProxy.getDomainName();
  227. }
  228. /**
  229.  * Get the version of the blacktie software
  230.  */
  231. public String getSoftwareVersion() {
  232. return administrationProxy.getSoftwareVersion();
  233. }
  234. /**
  235.  * Get domain status
  236.  */
  237. public Boolean getDomainStatus() {
  238. return administrationProxy.getDomainStatus();
  239. }
  240. /**
  241.  * Pause the domain
  242.  */
  243. public Boolean pauseDomain() {
  244. return administrationProxy.pauseDomain();
  245. }
  246. /**
  247.  * Resume the domain
  248.  */
  249. public Boolean resumeDomain() {
  250. return administrationProxy.resumeDomain();
  251. }
  252. /**
  253.  * List the servers
  254.  */
  255. public List<String> getServerList() {
  256. return administrationProxy.getServerList();
  257. }
  258. /**
  259.  * List the running servers
  260.  */
  261. public List<String> listRunningServers() {
  262. return administrationProxy.listRunningServers();
  263. }
  264. /**
  265.  * List the running ids of a specific server
  266.  * 
  267.  * @param serverName
  268.  *            The name of the server
  269.  */
  270. public List<Integer> listRunningInstanceIds(String serverName) {
  271. return administrationProxy.listRunningInstanceIds(serverName);
  272. }
  273. /**
  274.  * Get the servers status for the domain
  275.  */
  276. public Element getServersStatus() {
  277. return administrationProxy.getServersStatus();
  278. }
  279. /**
  280.  * List the service status for a service
  281.  * 
  282.  * @param serverName
  283.  *            The name of the server
  284.  * @param serviceName
  285.  *            The name of the service
  286.  */
  287. public Element listServiceStatus(String serverName, String serviceName) {
  288. return administrationProxy.listServiceStatus(serverName, serviceName);
  289. }
  290. /**
  291.  * Advertise a new service
  292.  * 
  293.  * @param serverName
  294.  *            The name of the server
  295.  * @param serviceName
  296.  *            The name of the service
  297.  */
  298. public Boolean advertise(String serverName, String serviceName) {
  299. return administrationProxy.advertise(serverName, serviceName);
  300. }
  301. /**
  302.  * Unadvertise a new service
  303.  * 
  304.  * @param serverName
  305.  *            The name of the server
  306.  * @param serviceName
  307.  *            The name of the service
  308.  */
  309. public Boolean unadvertise(String serverName, String serviceName) {
  310. return administrationProxy.unadvertise(serverName, serviceName);
  311. }
  312. /**
  313.  * Shutdown a server
  314.  * 
  315.  * @param serverName
  316.  *            The name of the server
  317.  * @param id
  318.  *            The id of the server
  319.  */
  320. public Boolean shutdown(String serverName, int id) {
  321. return administrationProxy.shutdown(serverName, id);
  322. }
  323. /**
  324.  * Get the service counter and restrict it to a certain server, 0 for all.
  325.  * 
  326.  * @param serverName
  327.  *            The name of the server
  328.  * @param id
  329.  *            The id of the server
  330.  * @param serviceName
  331.  *            The name of the service
  332.  */
  333. public long getServiceCounterById(String serverName, int id,
  334. String serviceName) {
  335. return administrationProxy.getServiceCounterById(serverName, id,
  336. serviceName);
  337. }
  338. /**
  339.  * Get the service counter for the domain.
  340.  * 
  341.  * @param serverName
  342.  *            The name of the server
  343.  * @param serviceName
  344.  *            The name of the service
  345.  */
  346. public long getServiceCounter(String serverName, String serviceName) {
  347. return administrationProxy.getServiceCounter(serverName, serviceName);
  348. }
  349. /**
  350.  * Reload the domain
  351.  */
  352. public Boolean reloadDomain() {
  353. return administrationProxy.reloadDomain();
  354. }
  355. /**
  356.  * Reload the server (causes the server to update its configuration and
  357.  * restart.
  358.  * 
  359.  * @param serverName
  360.  *            The name of the server
  361.  */
  362. public Boolean reloadServer(String serverName) {
  363. return administrationProxy.reloadServer(serverName);
  364. }
  365. /**
  366.  * List the status of a service giving an optional id, 0 is all servers.
  367.  * 
  368.  * @param serverName
  369.  *            The name of the server
  370.  * @param id
  371.  *            The id of the server
  372.  * @param serviceName
  373.  *            The name of the service
  374.  */
  375. public Element listServiceStatusById(String serverName, int id,
  376. String serviceName) {
  377. return administrationProxy.listServiceStatusById(serverName, id,
  378. serviceName);
  379. }
  380. public void start() throws Exception {
  381. throw new RuntimeException(
  382. "This operation is not applicable to the XATMI admin service");
  383. }
  384. public void stop() throws Exception {
  385. throw new RuntimeException(
  386. "This operation is not applicable to the XATMI admin service");
  387. }
  388. public String getResponseTime(String serverName, String serviceName) {
  389. return administrationProxy.getResponseTime(serverName, serviceName);
  390. }
  391. public String getResponseTimeById(String serverName, int id,
  392. String serviceName) {
  393. return administrationProxy.getResponseTimeById(serverName, id,
  394. serviceName);
  395. }
  396. public int getQueueDepth(String serverName, String serviceName) {
  397. return administrationProxy.getQueueDepth(serverName, serviceName);
  398. }
  399. public String getServerName(String serviceName) {
  400. return administrationProxy.getServerName(serviceName);
  401. }
  402. public long getErrorCounter(String serverName, String serviceName) {
  403. return administrationProxy.getErrorCounter(serverName, serviceName);
  404. }
  405. public long getErrorCounterById(String serverName, int id,
  406. String serviceName) {
  407. return administrationProxy.getErrorCounterById(serverName, id,
  408. serviceName);
  409. }
  410. public String getServerVersionById(String serverName, int id) {
  411. return administrationProxy.getServerVersionById(serverName, id);
  412. }
  413. }