blob: 9654d06ef3edee544dccabf94a3f1fe57cbd069c [file] [log] [blame]
/*
*
* 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.qpid.ra.inflow;
import java.io.Serializable;
import javax.jms.Session;
import javax.resource.ResourceException;
import javax.resource.spi.ActivationSpec;
import javax.resource.spi.InvalidPropertyException;
import javax.resource.spi.ResourceAdapter;
import org.apache.qpid.ra.ConnectionFactoryProperties;
import org.apache.qpid.ra.QpidResourceAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The activation spec
* These properties are set on the MDB ActivactionProperties
*
*/
public class QpidActivationSpec extends ConnectionFactoryProperties implements ActivationSpec, Serializable
{
private static final long serialVersionUID = 7379131936083146158L;
private static final int DEFAULT_MAX_SESSION = 15;
/** The logger */
private static final transient Logger _log = LoggerFactory.getLogger(QpidActivationSpec.class);
/** The resource adapter */
private QpidResourceAdapter _ra;
/** The destination */
private String _destination;
/** The destination type */
private String _destinationType;
/** The message selector */
private String _messageSelector;
/** The acknowledgement mode */
private int _acknowledgeMode;
/** The subscription durability */
private boolean _subscriptionDurability;
/** The subscription name */
private String _subscriptionName;
/** The maximum number of sessions */
private Integer _maxSession;
/** Transaction timeout */
private Integer _transactionTimeout;
/** prefetch low */
private Integer _prefetchLow;
/** prefetch high */
private Integer _prefetchHigh;
private boolean _useJNDI = true;
// undefined by default, default is specified at the RA level in QpidRAProperties
private Integer _setupAttempts;
// undefined by default, default is specified at the RA level in QpidRAProperties
private Long _setupInterval;
private Boolean _useConnectionPerHandler;
/**
* Constructor
*/
public QpidActivationSpec()
{
if (_log.isTraceEnabled())
{
_log.trace("constructor()");
}
_acknowledgeMode = Session.AUTO_ACKNOWLEDGE;
_maxSession = DEFAULT_MAX_SESSION;
_transactionTimeout = 0;
}
/**
* Get the resource adapter
* @return The resource adapter
*/
public ResourceAdapter getResourceAdapter()
{
if (_log.isTraceEnabled())
{
_log.trace("getResourceAdapter()");
}
return _ra;
}
/**
* @return the useJNDI
*/
public boolean isUseJNDI()
{
return _useJNDI;
}
/**
* @param value the useJNDI to set
*/
public void setUseJNDI(final boolean value)
{
_useJNDI = value;
}
/**
* Set the resource adapter
* @param ra The resource adapter
* @exception ResourceException Thrown if incorrect resource adapter
*/
public void setResourceAdapter(final ResourceAdapter ra) throws ResourceException
{
if (_log.isTraceEnabled())
{
_log.trace("setResourceAdapter(" + ra + ")");
}
if (ra == null || !(ra instanceof QpidResourceAdapter))
{
throw new ResourceException("Resource adapter is " + ra);
}
this._ra = (QpidResourceAdapter)ra;
}
/**
* Get the destination
* @return The value
*/
public String getDestination()
{
if (_log.isTraceEnabled())
{
_log.trace("getDestination()");
}
return _destination;
}
/**
* Set the destination
* @param value The value
*/
public void setDestination(final String value)
{
if (_log.isTraceEnabled())
{
_log.trace("setDestination(" + value + ")");
}
_destination = value;
}
/**
* Get the destination type
* @return The value
*/
public String getDestinationType()
{
if (_log.isTraceEnabled())
{
_log.trace("getDestinationType()");
}
return _destinationType;
}
/**
* Set the destination type
* @param value The value
*/
public void setDestinationType(final String value)
{
if (_log.isTraceEnabled())
{
_log.trace("setDestinationType(" + value + ")");
}
_destinationType = value;
}
/**
* Get the message selector
* @return The value
*/
public String getMessageSelector()
{
if (_log.isTraceEnabled())
{
_log.trace("getMessageSelector()");
}
return _messageSelector;
}
/**
* Set the message selector
* @param value The value
*/
public void setMessageSelector(final String value)
{
if (_log.isTraceEnabled())
{
_log.trace("setMessageSelector(" + value + ")");
}
_messageSelector = value;
}
/**
* Get the acknowledge mode
* @return The value
*/
public String getAcknowledgeMode()
{
if (_log.isTraceEnabled())
{
_log.trace("getAcknowledgeMode()");
}
if (Session.DUPS_OK_ACKNOWLEDGE == _acknowledgeMode)
{
return "Dups-ok-acknowledge";
}
else
{
return "Auto-acknowledge";
}
}
/**
* Set the acknowledge mode
* @param value The value
*/
public void setAcknowledgeMode(final String value)
{
if (_log.isTraceEnabled())
{
_log.trace("setAcknowledgeMode(" + value + ")");
}
if ("DUPS_OK_ACKNOWLEDGE".equalsIgnoreCase(value) || "Dups-ok-acknowledge".equalsIgnoreCase(value))
{
_acknowledgeMode = Session.DUPS_OK_ACKNOWLEDGE;
}
else if ("AUTO_ACKNOWLEDGE".equalsIgnoreCase(value) || "Auto-acknowledge".equalsIgnoreCase(value))
{
_acknowledgeMode = Session.AUTO_ACKNOWLEDGE;
}
else
{
throw new IllegalArgumentException("Unsupported acknowledgement mode " + value);
}
}
/**
* @return the acknowledgement mode
*/
public int getAcknowledgeModeInt()
{
if (_log.isTraceEnabled())
{
_log.trace("getAcknowledgeMode()");
}
return _acknowledgeMode;
}
/**
* Get the subscription durability
* @return The value
*/
public String getSubscriptionDurability()
{
if (_log.isTraceEnabled())
{
_log.trace("getSubscriptionDurability()");
}
if (_subscriptionDurability)
{
return "Durable";
}
else
{
return "NonDurable";
}
}
/**
* Set the subscription durability
* @param value The value
*/
public void setSubscriptionDurability(final String value)
{
if (_log.isTraceEnabled())
{
_log.trace("setSubscriptionDurability(" + value + ")");
}
_subscriptionDurability = "Durable".equals(value);
}
/**
* Get the status of subscription durability
* @return The value
*/
public boolean isSubscriptionDurable()
{
if (_log.isTraceEnabled())
{
_log.trace("isSubscriptionDurable()");
}
return _subscriptionDurability;
}
/**
* Get the subscription name
* @return The value
*/
public String getSubscriptionName()
{
if (_log.isTraceEnabled())
{
_log.trace("getSubscriptionName()");
}
return _subscriptionName;
}
/**
* Set the subscription name
* @param value The value
*/
public void setSubscriptionName(final String value)
{
if (_log.isTraceEnabled())
{
_log.trace("setSubscriptionName(" + value + ")");
}
_subscriptionName = value;
}
/**
* Get the number of max session
* @return The value
*/
public Integer getMaxSession()
{
if (_log.isTraceEnabled())
{
_log.trace("getMaxSession()");
}
if (_maxSession == null)
{
return DEFAULT_MAX_SESSION;
}
return _maxSession;
}
/**
* Set the number of max session
* @param value The value
*/
public void setMaxSession(final Integer value)
{
if (_log.isTraceEnabled())
{
_log.trace("setMaxSession(" + value + ")");
}
_maxSession = value;
}
/**
* Get the transaction timeout
* @return The value
*/
public Integer getTransactionTimeout()
{
if (_log.isTraceEnabled())
{
_log.trace("getTransactionTimeout()");
}
return _transactionTimeout;
}
/**
* Set the transaction timeout
* @param value The value
*/
public void setTransactionTimeout(final Integer value)
{
if (_log.isTraceEnabled())
{
_log.trace("setTransactionTimeout(" + value + ")");
}
_transactionTimeout = value;
}
/**
* Get the prefetch low
* @return The value
*/
public Integer getPrefetchLow()
{
if (_log.isTraceEnabled())
{
_log.trace("getPrefetchLow()");
}
return _prefetchLow;
}
/**
* Set the prefetch low
* @param prefetchLow The value
*/
public void setPrefetchLow(final Integer prefetchLow)
{
if (_log.isTraceEnabled())
{
_log.trace("setPrefetchLow(" + prefetchLow + ")");
}
this._prefetchLow = prefetchLow;
}
/**
* Get the prefetch high
* @return The value
*/
public Integer getPrefetchHigh()
{
if (_log.isTraceEnabled())
{
_log.trace("getPrefetchHigh()");
}
return _prefetchHigh;
}
/**
* Set the prefetch high
* @param prefetchHigh The value
*/
public void setPrefetchHigh(final Integer prefetchHigh)
{
if (_log.isTraceEnabled())
{
_log.trace("setPrefetchHigh(" + prefetchHigh + ")");
}
this._prefetchHigh = prefetchHigh;
}
public int getSetupAttempts()
{
if (_log.isTraceEnabled())
{
_log.trace("getSetupAttempts()");
}
if (_setupAttempts == null)
{
return _ra.getSetupAttempts();
}
else
{
return _setupAttempts;
}
}
public void setSetupAttempts(int setupAttempts)
{
if (_log.isTraceEnabled())
{
_log.trace("setSetupAttempts(" + setupAttempts + ")");
}
this._setupAttempts = setupAttempts;
}
public long getSetupInterval()
{
if (_log.isTraceEnabled())
{
_log.trace("getSetupInterval()");
}
if (_setupInterval == null)
{
return _ra.getSetupInterval();
}
else
{
return _setupInterval;
}
}
public void setSetupInterval(long setupInterval)
{
if (_log.isTraceEnabled())
{
_log.trace("setSetupInterval(" + setupInterval + ")");
}
this._setupInterval = setupInterval;
}
public Boolean isUseConnectionPerHandler()
{
return (_useConnectionPerHandler == null) ? _ra.isUseConnectionPerHandler() : _useConnectionPerHandler;
}
public void setUseConnectionPerHandler(Boolean connectionPerHandler)
{
this._useConnectionPerHandler = connectionPerHandler;
}
/**
* Validate
* @exception InvalidPropertyException Thrown if a validation exception occurs
*/
public void validate() throws InvalidPropertyException
{
if (_log.isTraceEnabled())
{
_log.trace("validate()");
}
if (_destination == null || _destination.trim().equals(""))
{
throw new InvalidPropertyException("Destination is mandatory");
}
}
/**
* Get a string representation
* @return The value
*/
@Override
public String toString()
{
StringBuffer buffer = new StringBuffer();
buffer.append(QpidActivationSpec.class.getName()).append('(');
buffer.append("ra=").append(_ra);
buffer.append(" destination=").append(_destination);
buffer.append(" destinationType=").append(_destinationType);
if (_messageSelector != null)
{
buffer.append(" selector=").append(_messageSelector);
}
buffer.append(" ack=").append(getAcknowledgeMode());
buffer.append(" durable=").append(_subscriptionDurability);
buffer.append(" clientID=").append(getClientId());
if (_subscriptionName != null)
{
buffer.append(" subscription=").append(_subscriptionName);
}
buffer.append(" user=").append(getUserName());
if (getPassword() != null)
{
buffer.append(" password=").append("********");
}
buffer.append(" maxSession=").append(_maxSession);
if (_prefetchLow != null)
{
buffer.append(" prefetchLow=").append(_prefetchLow);
}
if (_prefetchHigh != null)
{
buffer.append(" prefetchHigh=").append(_prefetchHigh);
}
buffer.append(" connectionPerHandler=").append(isUseConnectionPerHandler());
buffer.append(')');
return buffer.toString();
}
}