use of nl.nn.adapterframework.core.IPortConnectedListener in project iaf by ibissource.
the class ListenerPortPoller method poll.
/**
* Poll all registered EjbListenerPortConnector instances to see if they
* are in the same state as their associated listener-ports, and
* toggle their state if not.
*/
public void poll() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
// }
for (Iterator iter = portConnectorList.iterator(); iter.hasNext(); ) {
WeakReference wr = (WeakReference) iter.next();
IListenerConnector elpc = (IListenerConnector) wr.get();
if (elpc == null) {
iter.remove();
continue;
}
// Check for each ListenerPort if it's state matches with the
// state that IBIS thinks it should be in.
IPortConnectedListener listener = getListener(elpc);
try {
if (isClosed(elpc) != isListenerPortClosed(elpc)) {
log.info("State of listener [" + listener.getName() + "] does not match state of WebSphere ListenerPort [" + // + elpc.getListenerPortName(listener)
"] to which it is attached; will try to change state of Receiver [" + listener.getReceiver().getName() + "]");
toggleConfiguratorState(elpc);
}
} catch (Exception ex) {
log.error("Cannot change, or enquire on, state of Listener [" + listener.getName() + "]", ex);
}
}
// if (log.isDebugEnabled()) {
// log.debug("Exit polling " + this.toString() + ", thread: " + Thread.currentThread().getName());
// }
}
use of nl.nn.adapterframework.core.IPortConnectedListener in project iaf by ibissource.
the class SpringJmsConnector method onMessage.
public void onMessage(Message message, Session session) throws JMSException {
TransactionStatus txStatus = null;
long onMessageStart = System.currentTimeMillis();
long jmsTimestamp = message.getJMSTimestamp();
threadsProcessing.increase();
Thread.currentThread().setName(getReceiver().getName() + "[" + threadsProcessing.getValue() + "]");
try {
if (TX != null) {
txStatus = txManager.getTransaction(TX);
}
Map threadContext = new HashMap();
try {
IPortConnectedListener listener = getListener();
threadContext.put(THREAD_CONTEXT_SESSION_KEY, session);
// if (log.isDebugEnabled()) log.debug("transaction status before: "+JtaUtil.displayTransactionStatus());
getReceiver().processRawMessage(listener, message, threadContext);
// if (log.isDebugEnabled()) log.debug("transaction status after: "+JtaUtil.displayTransactionStatus());
} catch (ListenerException e) {
getReceiver().increaseRetryIntervalAndWait(e, getLogPrefix());
if (txStatus != null) {
txStatus.setRollbackOnly();
}
} finally {
if (txStatus == null && jmsContainer.isSessionTransacted()) {
log.debug(getLogPrefix() + "committing JMS session");
session.commit();
}
}
} finally {
if (txStatus != null) {
txManager.commit(txStatus);
}
threadsProcessing.decrease();
if (log.isInfoEnabled()) {
long onMessageEnd = System.currentTimeMillis();
log.info(getLogPrefix() + "A) JMSMessageTime [" + DateUtils.format(jmsTimestamp) + "]");
log.info(getLogPrefix() + "B) onMessageStart [" + DateUtils.format(onMessageStart) + "] diff (~'queing' time) [" + (onMessageStart - jmsTimestamp) + "]");
log.info(getLogPrefix() + "C) onMessageEnd [" + DateUtils.format(onMessageEnd) + "] diff (process time) [" + (onMessageEnd - onMessageStart) + "]");
}
// boolean simulateCrashAfterCommit=true;
// if (simulateCrashAfterCommit) {
// toggle=!toggle;
// if (toggle) {
// JtaUtil.setRollbackOnly();
// throw new JMSException("simulate crash just before final commit");
// }
// }
}
}
use of nl.nn.adapterframework.core.IPortConnectedListener in project iaf by ibissource.
the class ReceiverBase method configure.
public void configure() throws ConfigurationException {
configurationSucceeded = false;
try {
if (StringUtils.isEmpty(getName())) {
if (getListener() != null) {
setName(ClassUtils.nameOf(getListener()));
} else {
setName(ClassUtils.nameOf(this));
}
}
eventHandler = MonitorManager.getEventHandler();
registerEvent(RCV_CONFIGURED_MONITOR_EVENT);
registerEvent(RCV_CONFIGURATIONEXCEPTION_MONITOR_EVENT);
registerEvent(RCV_STARTED_RUNNING_MONITOR_EVENT);
registerEvent(RCV_SHUTDOWN_MONITOR_EVENT);
registerEvent(RCV_SUSPENDED_MONITOR_EVENT);
registerEvent(RCV_RESUMED_MONITOR_EVENT);
registerEvent(RCV_THREAD_EXIT_MONITOR_EVENT);
TXNEW_PROC = SpringTxManagerProxy.getTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW, getTransactionTimeout());
// to use direct member variables).
if (this.tmpInProcessStorage != null) {
if (this.errorSender == null && this.errorStorage == null) {
this.errorStorage = this.tmpInProcessStorage;
info(getLogPrefix() + "has errorStorage in inProcessStorage, setting inProcessStorage's type to 'errorStorage'. Please update the configuration to change the inProcessStorage element to an errorStorage element, since the inProcessStorage is no longer used.");
errorStorage.setType(JdbcTransactionalStorage.TYPE_ERRORSTORAGE);
} else {
info(getLogPrefix() + "has inProcessStorage defined but also has an errorStorage or errorSender. InProcessStorage is not used and can be removed from the configuration.");
}
// Set temporary in-process storage pointer to null
this.tmpInProcessStorage = null;
}
// Do propagate-name AFTER changing the errorStorage!
propagateName();
if (getListener() == null) {
throw new ConfigurationException(getLogPrefix() + "has no listener");
}
if (!StringUtils.isEmpty(getElementToMove()) && !StringUtils.isEmpty(getElementToMoveChain())) {
throw new ConfigurationException("cannot have both an elementToMove and an elementToMoveChain specified");
}
if (!(getHideMethod().equalsIgnoreCase("all")) && (!(getHideMethod().equalsIgnoreCase("firstHalf")))) {
throw new ConfigurationException(getLogPrefix() + "invalid value for hideMethod [" + getHideMethod() + "], must be 'all' or 'firstHalf'");
}
if (getListener() instanceof ReceiverAware) {
((ReceiverAware) getListener()).setReceiver(this);
}
if (getListener() instanceof IPushingListener) {
IPushingListener pl = (IPushingListener) getListener();
pl.setHandler(this);
pl.setExceptionListener(this);
}
if (getListener() instanceof IPortConnectedListener) {
IPortConnectedListener pcl = (IPortConnectedListener) getListener();
pcl.setReceiver(this);
}
if (getListener() instanceof IPullingListener) {
setListenerContainer(createListenerContainer());
}
if (getListener() instanceof JdbcFacade) {
((JdbcFacade) getListener()).setTransacted(isTransacted());
}
if (getListener() instanceof JMSFacade) {
((JMSFacade) getListener()).setTransacted(isTransacted());
}
getListener().configure();
if (getListener() instanceof HasPhysicalDestination) {
info(getLogPrefix() + "has listener on " + ((HasPhysicalDestination) getListener()).getPhysicalDestinationName());
}
if (getListener() instanceof HasSender) {
// only informational
ISender sender = ((HasSender) getListener()).getSender();
if (sender instanceof HasPhysicalDestination) {
info("Listener of receiver [" + getName() + "] has answer-sender on " + ((HasPhysicalDestination) sender).getPhysicalDestinationName());
}
}
if (getListener() instanceof ITransactionRequirements) {
ITransactionRequirements tr = (ITransactionRequirements) getListener();
if (tr.transactionalRequired() && !isTransacted()) {
String msg = getLogPrefix() + "listener type [" + ClassUtils.nameOf(getListener()) + "] requires transactional processing";
ConfigurationWarnings.getInstance().add(msg);
// throw new ConfigurationException(msg);
}
}
ISender sender = getSender();
if (sender != null) {
sender.configure();
if (sender instanceof HasPhysicalDestination) {
info(getLogPrefix() + "has answer-sender on " + ((HasPhysicalDestination) sender).getPhysicalDestinationName());
}
}
ISender errorSender = getErrorSender();
if (errorSender != null) {
errorSender.configure();
if (errorSender instanceof HasPhysicalDestination) {
info(getLogPrefix() + "has errorSender to " + ((HasPhysicalDestination) errorSender).getPhysicalDestinationName());
}
}
ITransactionalStorage errorStorage = getErrorStorage();
if (errorStorage != null) {
errorStorage.configure();
if (errorStorage instanceof HasPhysicalDestination) {
info(getLogPrefix() + "has errorStorage to " + ((HasPhysicalDestination) errorStorage).getPhysicalDestinationName());
}
registerEvent(RCV_MESSAGE_TO_ERRORSTORE_EVENT);
}
ITransactionalStorage messageLog = getMessageLog();
if (messageLog != null) {
messageLog.configure();
if (messageLog instanceof HasPhysicalDestination) {
info(getLogPrefix() + "has messageLog in " + ((HasPhysicalDestination) messageLog).getPhysicalDestinationName());
}
if (StringUtils.isNotEmpty(getLabelXPath()) || StringUtils.isNotEmpty(getLabelStyleSheet())) {
labelTp = TransformerPool.configureTransformer0(getLogPrefix(), classLoader, getLabelNamespaceDefs(), getLabelXPath(), getLabelStyleSheet(), "text", false, null, isXslt2());
}
}
if (isTransacted()) {
if (errorSender == null && errorStorage == null) {
ConfigurationWarnings configWarnings = ConfigurationWarnings.getInstance();
String msg = getLogPrefix() + "sets transactionAttribute=" + getTransactionAttribute() + ", but has no errorSender or errorStorage. Messages processed with errors will be lost";
configWarnings.add(log, msg);
} else {
// if (errorSender!=null && !(errorSender instanceof IXAEnabled && ((IXAEnabled)errorSender).isTransacted())) {
// warn(getLogPrefix()+"sets transacted=true, but errorSender is not. Transactional integrity is not guaranteed");
// }
// if (errorStorage!=null && !(errorStorage instanceof IXAEnabled && ((IXAEnabled)errorStorage).isTransacted())) {
// warn(getLogPrefix()+"sets transacted=true, but errorStorage is not. Transactional integrity is not guaranteed");
// }
}
if (getTransactionTimeout() > 0) {
String systemTransactionTimeout = Misc.getSystemTransactionTimeout();
if (systemTransactionTimeout != null && StringUtils.isNumeric(systemTransactionTimeout)) {
int stt = Integer.parseInt(systemTransactionTimeout);
if (getTransactionTimeout() > stt) {
ConfigurationWarnings configWarnings = ConfigurationWarnings.getInstance();
String msg = getLogPrefix() + "has a transaction timeout [" + getTransactionTimeout() + "] which exceeds the system transaction timeout [" + stt + "]";
configWarnings.add(log, msg);
}
}
}
}
if (StringUtils.isNotEmpty(getCorrelationIDXPath()) || StringUtils.isNotEmpty(getCorrelationIDStyleSheet())) {
correlationIDTp = TransformerPool.configureTransformer0(getLogPrefix(), classLoader, getCorrelationIDNamespaceDefs(), getCorrelationIDXPath(), getCorrelationIDStyleSheet(), "text", false, null, isXslt2());
}
if (adapter != null) {
adapter.getMessageKeeper().add(getLogPrefix() + "initialization complete");
}
throwEvent(RCV_CONFIGURED_MONITOR_EVENT);
configurationSucceeded = true;
} catch (Throwable t) {
ConfigurationException e = null;
if (t instanceof ConfigurationException) {
e = (ConfigurationException) t;
} else {
e = new ConfigurationException("Exception configuring receiver [" + getName() + "]", t);
}
throwEvent(RCV_CONFIGURATIONEXCEPTION_MONITOR_EVENT);
log.debug(getLogPrefix() + "Errors occured during configuration, setting runstate to ERROR");
runState.setRunState(RunStateEnum.ERROR);
throw e;
}
}
Aggregations