001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.jmeter.protocol.jms.client;
020:
021: import javax.naming.Context;
022: import javax.naming.NamingException;
023:
024: import javax.jms.JMSException;
025: import javax.jms.QueueConnection;
026: import javax.jms.QueueConnectionFactory;
027: import javax.jms.TopicConnectionFactory;
028: import javax.jms.TopicConnection;
029:
030: import org.apache.jmeter.testelement.TestListener;
031: import org.apache.jmeter.engine.event.LoopIterationEvent;
032:
033: import org.apache.jorphan.logging.LoggingManager;
034: import org.apache.log.Logger;
035:
036: /**
037: *
038: * ConnectionFactory is responsible for creating new connections. Eventually,
039: * the connection factory should read an external configuration file and create
040: * a pool of connections. The current implementation just does the basics. Once
041: * the tires get kicked a bit, we can add connection pooling support.
042: */
043: public class ConnectionFactory implements TestListener {
044:
045: private static final Logger log = LoggingManager
046: .getLoggerForClass();
047:
048: private static TopicConnectionFactory factory = null;
049:
050: private static QueueConnectionFactory qfactory = null;
051:
052: /**
053: *
054: */
055: protected ConnectionFactory() {
056: super ();
057: }
058:
059: public void testStarted(String test) {
060: }
061:
062: public void testEnded(String test) {
063: testEnded();
064: }
065:
066: /**
067: * endTest cleans up the client
068: *
069: * @see junit.framework.TestListener#endTest(junit.framework.Test)
070: */
071: public void testEnded() {
072: ConnectionFactory.factory = null;//N.B. static reference
073: }
074:
075: /**
076: * startTest sets up the client and gets it ready for the test. Since async
077: * messaging is different than request/ response applications, the
078: * connection is created at the beginning of the test and closed at the end
079: * of the test.
080: */
081: public void testStarted() {
082: }
083:
084: public void testIterationStart(LoopIterationEvent event) {
085: }
086:
087: public static synchronized TopicConnectionFactory getTopicConnectionFactory(
088: Context ctx, String fac) {
089: while (factory == null) {
090: try {
091: Object objfac = ctx.lookup(fac);
092: if (objfac instanceof TopicConnectionFactory) {
093: factory = (TopicConnectionFactory) objfac;
094: }
095: } catch (NamingException e) {
096: log.error(e.toString());
097: }
098: }
099: return factory;
100: }
101:
102: public static synchronized QueueConnectionFactory getQueueConnectionFactory(
103: Context ctx, String fac) {
104: while (qfactory == null) {
105: try {
106: Object objfac = ctx.lookup(fac);
107: if (objfac instanceof QueueConnectionFactory) {
108: qfactory = (QueueConnectionFactory) objfac;
109: }
110: } catch (NamingException e) {
111: log.error(e.getMessage());
112: }
113: }
114: return qfactory;
115: }
116:
117: public static synchronized TopicConnection getTopicConnection() {
118: if (factory != null) {
119: try {
120: return factory.createTopicConnection();
121: } catch (JMSException e) {
122: log.error(e.getMessage());
123: }
124: }
125: return null;
126: }
127:
128: public static QueueConnection getQueueConnection(Context ctx,
129: String queueConn) {
130: if (factory != null) {
131: try {
132: return qfactory.createQueueConnection();
133: } catch (JMSException e) {
134: log.error(e.getMessage());
135: }
136: }
137: return null;
138: }
139: }
|