source: trunk/src/main/java/omq/common/util/OmqConnectionFactory.java

Last change on this file was 83, checked in by stoda, 11 years ago

J

File size: 3.6 KB
Line 
1package omq.common.util;
2
3import java.io.IOException;
4import java.security.KeyManagementException;
5import java.security.NoSuchAlgorithmException;
6import java.util.Properties;
7
8import org.apache.log4j.Logger;
9
10import com.rabbitmq.client.Channel;
11import com.rabbitmq.client.Connection;
12import com.rabbitmq.client.ConnectionFactory;
13
14/**
15 * This class creates RabbitMQ connections
16 *
17 * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
18 *
19 */
20public class OmqConnectionFactory {
21        private static final Logger logger = Logger.getLogger(OmqConnectionFactory.class.getName());
22
23        private static Connection connection;
24        private static int connectionTimeout = 2 * 1000;
25
26        /**
27         * If this class is wanted to use as a singleton class this is the init
28         * function
29         *
30         * @param env
31         *            - environment that sets the properties needed by RabbitMQ
32         * @throws KeyManagementException
33         * @throws NoSuchAlgorithmException
34         * @throws IOException
35         */
36        public static void init(Properties env) throws KeyManagementException, NoSuchAlgorithmException, IOException {
37                if (connection == null) {
38                        connection = getNewConnection(env);
39                }
40        }
41
42        /**
43         * This function returns a working connection.
44         *
45         * @param env
46         *            - used if it's necessary to create a new connection
47         * @return workingConnection
48         * @throws Exception
49         */
50        public static Connection getNewWorkingConnection(Properties env) throws Exception {
51                Connection connection = null;
52                boolean working = false;
53
54                while (!working) {
55                        try {
56                                connection = getNewConnection(env);
57                                working = true;
58                        } catch (Exception e) {
59                                logger.error(e);
60                                long milis = 2000;
61                                if (env != null) {
62                                        milis = Long.parseLong(env.getProperty(ParameterQueue.RETRY_TIME_CONNECTION, "2000"));
63                                }
64                                Thread.sleep(milis);
65                        }
66                }
67
68                return connection;
69        }
70
71        /**
72         * This function creates a new rabbitmq connection using the properties set
73         * in env
74         *
75         * @param env
76         *            - Properties needed to create a new connection: username,
77         *            password, rabbit_host, rabbit_port, enable_ssl (optional)
78         * @return new Connection
79         * @throws IOException
80         * @throws KeyManagementException
81         * @throws NoSuchAlgorithmException
82         */
83        public static Connection getNewConnection(Properties env) throws IOException, KeyManagementException, NoSuchAlgorithmException {
84                // Get login info of rabbitmq
85                String username = env.getProperty(ParameterQueue.USER_NAME);
86                String password = env.getProperty(ParameterQueue.USER_PASS);
87
88                // Get host info of rabbimq (where it is)
89                String host = env.getProperty(ParameterQueue.RABBIT_HOST);
90                int port = Integer.parseInt(env.getProperty(ParameterQueue.RABBIT_PORT));
91
92                boolean ssl = Boolean.parseBoolean(env.getProperty(ParameterQueue.ENABLE_SSL, "false"));
93
94                // Start a new connection and channel
95                ConnectionFactory factory = new ConnectionFactory();
96                factory.setUsername(username);
97                factory.setPassword(password);
98                factory.setHost(host);
99                factory.setPort(port);
100                factory.setConnectionTimeout(connectionTimeout);
101                if (ssl) {
102                        factory.useSslProtocol();
103                }
104
105                Connection connection = factory.newConnection();
106                logger.info("New connection created using: username: " + username + ", host: " + host + ", port: " + port + ", connection timeout: "
107                                + connectionTimeout + " SSL enabled: " + ssl);
108                return connection;
109        }
110
111        /**
112         * This method creates a new channel if the singleton pattern is used
113         *
114         * @return new Channel
115         * @throws IOException
116         */
117        public static Channel getNewChannel() throws IOException {
118                Channel channel = connection.createChannel();
119                logger.info("New channel created using the default connection");
120                return channel;
121        }
122}
Note: See TracBrowser for help on using the repository browser.