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

中间件编程

开发平台:

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.jatmibroker.jab.factory;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. import org.jboss.blacktie.jatmibroker.jab.JABException;
  22. import org.jboss.blacktie.jatmibroker.jab.JABSession;
  23. import org.jboss.blacktie.jatmibroker.jab.JABSessionAttributes;
  24. import org.jboss.blacktie.jatmibroker.xatmi.Connection;
  25. import org.jboss.blacktie.jatmibroker.xatmi.ConnectionException;
  26. import org.jboss.blacktie.jatmibroker.xatmi.ConnectionFactory;
  27. /**
  28.  * The connection factory is the entry point into the JAB API for client
  29.  * applications. It is a singleton class which is accessed via the
  30.  * JABConnectionFactory.getInstance() method. Connections obtained via the
  31.  * getConnection(String) method, should be closed via the
  32.  * closeConnection(String) method.
  33.  */
  34. public class JABConnectionFactory {
  35. /**
  36.  * The instance
  37.  */
  38. private static JABConnectionFactory instance;
  39. /**
  40.  * The list of open connections
  41.  */
  42. private Map<String, JABConnection> connections = new HashMap<String, JABConnection>();
  43. private ConnectionFactory connectionFactory;
  44. private JABSession session;
  45. /**
  46.  * Obtain a reference to the single instance of JABConnectionFactory per
  47.  * classloader.
  48.  * 
  49.  * @return The instance
  50.  * @throws JABException
  51.  *             In case the connection factory cannot be loaded
  52.  */
  53. public synchronized static JABConnectionFactory getInstance()
  54. throws JABException {
  55. if (instance == null) {
  56. instance = new JABConnectionFactory();
  57. }
  58. return instance;
  59. }
  60. /**
  61.  * The constructor is not intended to be invoked by clients of the factory
  62.  * 
  63.  * @throws JABException
  64.  *             In case the connection factory cannot be created
  65.  */
  66. private JABConnectionFactory() throws JABException {
  67. try {
  68. connectionFactory = ConnectionFactory.getConnectionFactory();
  69. } catch (ConnectionException e) {
  70. throw new JABException("Could not create the connection factory: "
  71. + e.getMessage(), e);
  72. }
  73. JABSessionAttributes attributes = new JABSessionAttributes();
  74. session = new JABSession(attributes);
  75. }
  76. /**
  77.  * Obtain a reference to the connection identified by the parameter
  78.  * 
  79.  * @param connectionName
  80.  *            The name of the connection to retrieve
  81.  * @return The single connection named connectionName
  82.  * @throws JABException
  83.  *             If the connection cannot be created
  84.  */
  85. public JABConnection getConnection(String connectionName)
  86. throws JABException {
  87. JABConnection toReturn = connections.get(connectionName);
  88. if (toReturn == null) {
  89. try {
  90. Connection connection = connectionFactory.getConnection();
  91. toReturn = new JABConnection(connection, session);
  92. connections.put(connectionName, toReturn);
  93. } catch (ConnectionException e) {
  94. throw new JABException("Could not create the connection: "
  95. + e.getMessage(), e);
  96. }
  97. }
  98. return toReturn;
  99. }
  100. /**
  101.  * Close the JAB connection to the server
  102.  * 
  103.  * @param connectionName
  104.  *            The name of the connection to close
  105.  * @throws JABException
  106.  *             In case the connection cannot be closed
  107.  */
  108. public void closeConnection(String connectionName) throws JABException {
  109. JABConnection connection = connections.remove(connectionName);
  110. if (connection != null) {
  111. connection.close();
  112. }
  113. }
  114. }