/* * JBoss, Home of Professional Open Source * Copyright (c) 2010, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.integration.hornetq.management.jms; import org.hornetq.api.core.Pair; import org.hornetq.api.core.TransportConfiguration; import org.hornetq.api.jms.management.ConnectionFactoryControl; import org.jboss.metatype.api.types.CompositeMetaType; import org.jboss.metatype.api.types.ImmutableCompositeMetaType; import org.jboss.metatype.api.types.MetaType; import org.jboss.metatype.api.types.SimpleMetaType; import org.jboss.metatype.api.values.CompositeValueSupport; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.SimpleValueSupport; import org.jboss.metatype.spi.values.MetaMapper; import java.lang.reflect.Type; import java.util.List; import java.util.Map; /** * @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a> * Created Mar 19, 2010 */ public class ConnectionFactoryMapper extends MetaMapper<ConnectionFactoryControl> { public static final CompositeMetaType TYPE; static { String[] itemNames = { "name", "liveTransportClassNames", "liveTransportParams", "backupTransportClassNames", "backupTransportParams", "Bindings", "DiscoveryAddress", "DiscoveryPort", "DiscoveryRefreshTimeout", "DiscoveryInitialWaitTimeout", "ClientID", "DupsOKBatchSize", "TransactionBatchSize", "ClientFailureCheckPeriod", "ConnectionTTL", "CallTimeout", "ConsumerWindowSize", "ConsumerMaxRate", "ConfirmationWindowSize", "ProducerMaxRate", "ProducerWindowSize", "CacheLargeMessagesClient", "MinLargeMessageSize", "BlockOnNonDurableSend", "BlockOnAcknowledge", "BlockOnDurableSend", "AutoGroup", "PreAcknowledge", "MaxRetryInterval", "RetryIntervalMultiplier", "ReconnectAttempts", "FailoverOnServerShutdown", "ScheduledThreadPoolMaxSize", "ThreadPoolMaxSize", "GroupID", "InitialMessagePacketSize", "UseGlobalPools", "RetryInterval", "ConnectionLoadBalancingPolicyClassName" }; String[] itemDescriptions = { "name", "liveTransportClassNames", "liveTransportParams", "backupTransportClassNames", "backupTransportParams", "Bindings", "DiscoveryAddress", "DiscoveryPort", "DiscoveryRefreshTimeout", "DiscoveryInitialWaitTimeout", "ClientID", "DupsOKBatchSize", "TransactionBatchSize", "ClientFailureCheckPeriod", "ConnectionTTL", "CallTimeout", "ConsumerWindowSize", "ConsumerMaxRate", "ConfirmationWindowSize", "ProducerMaxRate", "ProducerWindowSize", "CacheLargeMessagesClient", "MinLargeMessageSize", "BlockOnNonDurableSend", "BlockOnAcknowledge", "BlockOnDurableSend", "AutoGroup", "PreAcknowledge", "MaxRetryInterval", "RetryIntervalMultiplier", "ReconnectAttempts", "FailoverOnServerShutdown", "ScheduledThreadPoolMaxSize", "ThreadPoolMaxSize", "GroupID", "InitialMessagePacketSize", "UseGlobalPools", "RetryInterval", "ConnectionLoadBalancingPolicyClassName" }; MetaType[] itemTypes = { SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING, SimpleMetaType.STRING }; TYPE = new ImmutableCompositeMetaType("javax.jms.ConnectionFactory", "Connection Factory Settings", itemNames, itemDescriptions, itemTypes); } @Override public MetaValue createMetaValue(MetaType metaType, ConnectionFactoryControl control) { CompositeValueSupport cvs = new CompositeValueSupport(TYPE); cvs.set("name", new SimpleValueSupport(SimpleMetaType.STRING, control.getName())); List<org.hornetq.api.core.Pair<TransportConfiguration, TransportConfiguration>> pairs = control.getStaticConnectors(); StringBuffer liveTransportClassNames = new StringBuffer(); StringBuffer liveTransportParams = new StringBuffer(); StringBuffer backupTransportClassNames = new StringBuffer(); StringBuffer backupTransportParams = new StringBuffer(); for (Pair<TransportConfiguration, TransportConfiguration> pair : pairs) { if (pair.a != null) { TransportConfiguration live = pair.a; if(liveTransportClassNames.length() > 0) { liveTransportClassNames.append(","); } liveTransportClassNames.append(live.getFactoryClassName()); Map<String, Object> params = live.getParams(); liveTransportParams.append("{"); for (Map.Entry<String, Object> stringObjectEntry : params.entrySet()) { if(liveTransportParams.length() > 1) { liveTransportParams.append(","); } liveTransportParams.append(stringObjectEntry.getKey()).append("=").append(stringObjectEntry.getValue()); } liveTransportParams.append("}"); } if (pair.b != null) { TransportConfiguration backUp = pair.b; if(backupTransportClassNames.length() > 0) { backupTransportClassNames.append(","); } backupTransportClassNames.append(backUp.getFactoryClassName()); Map<String, Object> params = backUp.getParams(); backupTransportParams.append("{"); for (Map.Entry<String, Object> stringObjectEntry : params.entrySet()) { if(backupTransportParams.length() > 1) { backupTransportParams.append(","); } backupTransportParams.append(stringObjectEntry.getKey()).append("=").append(stringObjectEntry.getValue()); } backupTransportParams.append("}"); } } cvs.set("liveTransportClassNames", new SimpleValueSupport(SimpleMetaType.STRING, liveTransportClassNames)); cvs.set("liveTransportParams", new SimpleValueSupport(SimpleMetaType.STRING, liveTransportParams)); cvs.set("backupTransportClassNames", new SimpleValueSupport(SimpleMetaType.STRING, backupTransportClassNames)); cvs.set("backupTransportParams", new SimpleValueSupport(SimpleMetaType.STRING, backupTransportParams)); cvs.set("Bindings", new SimpleValueSupport(SimpleMetaType.STRING, getJndiString(control.getJNDIBindings()))); cvs.set("DiscoveryAddress", new SimpleValueSupport(SimpleMetaType.STRING, control.getDiscoveryAddress())); cvs.set("DiscoveryPort", new SimpleValueSupport(SimpleMetaType.STRING, control.getDiscoveryPort())); cvs.set("DiscoveryRefreshTimeout", new SimpleValueSupport(SimpleMetaType.STRING, control.getDiscoveryRefreshTimeout())); cvs.set("DiscoveryInitialWaitTimeout", new SimpleValueSupport(SimpleMetaType.STRING, control.getDiscoveryInitialWaitTimeout())); cvs.set("ClientID", new SimpleValueSupport(SimpleMetaType.STRING, control.getClientID())); cvs.set("DupsOKBatchSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getDupsOKBatchSize())); cvs.set("TransactionBatchSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getTransactionBatchSize())); cvs.set("ClientFailureCheckPeriod", new SimpleValueSupport(SimpleMetaType.STRING, control.getClientFailureCheckPeriod())); cvs.set("ConnectionTTL", new SimpleValueSupport(SimpleMetaType.STRING, control.getConnectionTTL())); cvs.set("CallTimeout", new SimpleValueSupport(SimpleMetaType.STRING, control.getCallTimeout())); cvs.set("ConsumerWindowSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getConfirmationWindowSize())); cvs.set("ConsumerMaxRate", new SimpleValueSupport(SimpleMetaType.STRING, control.getConsumerMaxRate())); cvs.set("ConfirmationWindowSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getConfirmationWindowSize())); cvs.set("ProducerMaxRate", new SimpleValueSupport(SimpleMetaType.STRING, control.getProducerMaxRate())); cvs.set("ProducerWindowSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getProducerWindowSize())); cvs.set("CacheLargeMessagesClient", new SimpleValueSupport(SimpleMetaType.STRING, control.isCacheLargeMessagesClient())); cvs.set("MinLargeMessageSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getMinLargeMessageSize())); cvs.set("BlockOnNonDurableSend", new SimpleValueSupport(SimpleMetaType.STRING, control.isBlockOnNonDurableSend())); cvs.set("BlockOnAcknowledge", new SimpleValueSupport(SimpleMetaType.STRING, control.isBlockOnAcknowledge())); cvs.set("BlockOnDurableSend", new SimpleValueSupport(SimpleMetaType.STRING, control.isBlockOnDurableSend())); cvs.set("AutoGroup", new SimpleValueSupport(SimpleMetaType.STRING, control.isAutoGroup())); cvs.set("PreAcknowledge", new SimpleValueSupport(SimpleMetaType.STRING, control.isPreAcknowledge())); cvs.set("MaxRetryInterval", new SimpleValueSupport(SimpleMetaType.STRING, control.getMaxRetryInterval())); cvs.set("RetryIntervalMultiplier", new SimpleValueSupport(SimpleMetaType.STRING, control.getRetryIntervalMultiplier())); cvs.set("ReconnectAttempts", new SimpleValueSupport(SimpleMetaType.STRING, control.getReconnectAttempts())); cvs.set("FailoverOnServerShutdown", new SimpleValueSupport(SimpleMetaType.STRING, control.isFailoverOnServerShutdown())); cvs.set("ScheduledThreadPoolMaxSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getScheduledThreadPoolMaxSize())); cvs.set("ThreadPoolMaxSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getThreadPoolMaxSize())); cvs.set("GroupID", new SimpleValueSupport(SimpleMetaType.STRING, control.getGroupID())); cvs.set("InitialMessagePacketSize", new SimpleValueSupport(SimpleMetaType.STRING, control.getInitialMessagePacketSize())); cvs.set("UseGlobalPools", new SimpleValueSupport(SimpleMetaType.STRING, control.isUseGlobalPools())); cvs.set("RetryInterval", new SimpleValueSupport(SimpleMetaType.STRING, control.getRetryInterval())); cvs.set("ConnectionLoadBalancingPolicyClassName", new SimpleValueSupport(SimpleMetaType.STRING, control.getConnectionLoadBalancingPolicyClassName())); return cvs; } @Override public ConnectionFactoryControl unwrapMetaValue(MetaValue metaValue) { return null; } @Override public Type mapToType() { return ConnectionFactoryControl.class; } @Override public MetaType getMetaType() { return TYPE; } private String getJndiString(String[] array) { StringBuffer sb = new StringBuffer(); for (String o : array) { if (sb.length() > 0) { sb.append(","); } sb.append(o); } return sb.toString(); } }