/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.transport.jms; import java.util.Enumeration; import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.QueueBrowser; import javax.jms.Session; import javax.naming.Context; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.description.AxisService; import org.apache.axis2.transport.testkit.axis2.AxisServiceConfigurator; import org.apache.axis2.transport.testkit.name.Key; import org.apache.axis2.transport.testkit.tests.Setup; import org.apache.axis2.transport.testkit.tests.TearDown; import org.apache.axis2.transport.testkit.tests.Transient; public abstract class JMSChannel implements AxisServiceConfigurator { private final String name; private final String destinationType; private final ContentTypeMode contentTypeMode; protected @Transient JMSTestEnvironment env; protected @Transient Context context; private @Transient String destinationName; private @Transient String jndiName; private @Transient Destination destination; private @Transient String connectionFactoryName; private @Transient String connectionFactoryJNDIName; public JMSChannel(String name, String destinationType, ContentTypeMode contentTypeMode) { this.name = name; this.destinationType = destinationType; this.contentTypeMode = contentTypeMode; } public JMSChannel(String destinationType, ContentTypeMode contentTypeMode) { this(null, destinationType, contentTypeMode); } protected String buildDestinationName(String direction, String destinationType) { StringBuilder destinationName = new StringBuilder(); if (name != null) { destinationName.append(name); destinationName.append(Character.toUpperCase(direction.charAt(0))); destinationName.append(direction.substring(1)); } else { destinationName.append(direction); } destinationName.append(destinationType == JMSConstants.DESTINATION_TYPE_QUEUE ? 'Q' : 'T'); return destinationName.toString(); } protected String buildJndiName(String direction, String destinationType) { return "jms/" + buildDestinationName(direction, destinationType); } @Setup @SuppressWarnings("unused") private void setUp(JMSTestEnvironment env, JNDIEnvironment jndiEnvironment, JMSTransportDescriptionFactory tdf) throws Exception { this.env = env; context = jndiEnvironment.getContext(); destinationName = buildDestinationName("request", destinationType); jndiName = buildJndiName("request", destinationType); destination = env.createDestination(destinationType, destinationName); context.bind(jndiName, destination); connectionFactoryName = tdf.getConnectionFactoryName(destinationType); connectionFactoryJNDIName = tdf.getConnectionFactoryJNDIName(destinationType); } @TearDown @SuppressWarnings("unused") private void tearDown() throws Exception { context.unbind(jndiName); env.deleteDestination(destination); } @Key("destType") public String getDestinationType() { return destinationType; } public String getDestinationName() { return destinationName; } public Destination getDestination() { return destination; } @Key("contentTypeMode") public ContentTypeMode getContentTypeMode() { return contentTypeMode; } public int getMessageCount() throws JMSException { Connection connection = env.getConnectionFactory().createConnection(); try { connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); QueueBrowser browser = session.createBrowser((Queue)destination); int count = 0; for (Enumeration<?> e = browser.getEnumeration(); e.hasMoreElements(); e.nextElement()) { count++; } return count; } finally { connection.close(); } } public EndpointReference getEndpointReference() throws Exception { return new EndpointReference( "jms:/" + jndiName + "?transport.jms.DestinationType=" + destinationType + "&java.naming.factory.initial=org.mockejb.jndi.MockContextFactory" + "&transport.jms.ConnectionFactoryJNDIName=" + connectionFactoryJNDIName + "&" + JMSConstants.CONTENT_TYPE_PROPERTY_PARAM + "=Content-Type"); } public void setupService(AxisService service, boolean isClientSide) throws Exception { service.addParameter(JMSConstants.PARAM_JMS_CONFAC, connectionFactoryName); service.addParameter(JMSConstants.PARAM_DEST_TYPE, destinationType); service.addParameter(JMSConstants.PARAM_DESTINATION, jndiName); } }