integrationcontrol.java

来自「ejb3 java session bean」· Java 代码 · 共 478 行 · 第 1/2 页

JAVA
478
字号
/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. * * This is free software; you can redistribute it and/or modify it * under the terms of the JBPM BPEL PUBLIC LICENSE AGREEMENT as * published by JBoss Inc.; either version 1.0 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. */package org.jbpm.bpel.integration.jms;import java.util.Collections;import java.util.HashMap;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Vector;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.JMSException;import javax.jms.Session;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.wsdl.Operation;import javax.wsdl.Port;import javax.xml.namespace.QName;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jbpm.JbpmContext;import org.jbpm.bpel.BpelException;import org.jbpm.bpel.deploy.DeploymentDescriptor;import org.jbpm.bpel.deploy.ScopeMatcher;import org.jbpm.bpel.deploy.PartnerRoleDescriptor.InitiateMode;import org.jbpm.bpel.endpointref.EndpointReference;import org.jbpm.bpel.endpointref.EndpointReferenceFactory;import org.jbpm.bpel.graph.basic.Receive;import org.jbpm.bpel.graph.def.BpelProcessDefinition;import org.jbpm.bpel.graph.exe.BpelFaultException;import org.jbpm.bpel.graph.scope.OnEvent;import org.jbpm.bpel.graph.scope.Scope;import org.jbpm.bpel.graph.struct.Pick;import org.jbpm.bpel.graph.struct.StructuredActivity.Begin;import org.jbpm.bpel.integration.catalog.DefinitionCatalog;import org.jbpm.bpel.integration.catalog.ServiceCatalog;import org.jbpm.bpel.integration.client.Caller;import org.jbpm.bpel.integration.client.SoapCaller;import org.jbpm.bpel.integration.def.InvokeAction;import org.jbpm.bpel.integration.def.PartnerLinkDefinition;import org.jbpm.bpel.integration.def.ReceiveAction;import org.jbpm.bpel.integration.def.ReplyAction;import org.jbpm.bpel.integration.exe.PartnerLinkInstance;import org.jbpm.bpel.persistence.db.IntegrationSession;import org.jbpm.bpel.xml.BpelConstants;import org.jbpm.graph.exe.Token;import org.jbpm.svc.Services;/** * @author Alejandro Guizar * @version $Revision: 1.25 $ $Date: 2008/01/30 07:18:22 $ */public class IntegrationControl {  private final JmsIntegrationServiceFactory integrationServiceFactory;  private Connection jmsConnection;  private DeploymentDescriptor deploymentDescriptor;  private List partnerLinkEntries = Collections.EMPTY_LIST;  private final List startListeners = new Vector();  private final Map requestListeners = new Hashtable();  private final Map outstandingRequests = new Hashtable();  private final DefinitionCatalog myCatalog = new DefinitionCatalog();  private final Map callers = new HashMap();  /**   * JNDI subcontext that contains JMS objects, relative to the initial context.   */  public static final String JMS_CONTEXT = "java:comp/env/jms";  /** JNDI name bound to the JMS connection factory, relative to {@link #JMS_CONTEXT}. */  public static final String CONNECTION_FACTORY_NAME = "JbpmConnectionFactory";  private static final Log log = LogFactory.getLog(IntegrationControl.class);  private static final long serialVersionUID = 1L;  IntegrationControl(JmsIntegrationServiceFactory integrationServiceFactory) {    this.integrationServiceFactory = integrationServiceFactory;  }  public JmsIntegrationServiceFactory getIntegrationServiceFactory() {    return integrationServiceFactory;  }  public Connection getJmsConnection() {    return jmsConnection;  }  public Session createJmsSession() throws JMSException {    return jmsConnection.createSession(false, Session.CLIENT_ACKNOWLEDGE);  }  public DeploymentDescriptor getDeploymentDescriptor() {    return deploymentDescriptor;  }  public void setDeploymentDescriptor(DeploymentDescriptor deploymentDescriptor) {    this.deploymentDescriptor = deploymentDescriptor;  }  public PartnerLinkEntry getPartnerLinkEntry(PartnerLinkDefinition partnerLink) {    final long partnerLinkId = partnerLink.getId();    for (int i = 0, n = partnerLinkEntries.size(); i < n; i++) {      PartnerLinkEntry entry = (PartnerLinkEntry) partnerLinkEntries.get(i);      if (entry.getId() == partnerLinkId)        return entry;    }    return null;  }  public PartnerLinkEntry getPartnerLinkEntry(QName portTypeName, QName serviceName, String portName) {    PartnerLinkEntry selectedEntry = null;    for (int i = 0, n = partnerLinkEntries.size(); i < n; i++) {      PartnerLinkEntry entry = (PartnerLinkEntry) partnerLinkEntries.get(i);      EndpointReference myReference = entry.getMyReference();      if (myReference == null)        continue; // this entry corresponds to a partner link without myRole      QName myPortTypeName = myReference.getPortTypeName();      if (!portTypeName.equals(myPortTypeName))        continue;      QName myServiceName = myReference.getServiceName();      if (myServiceName != null && !serviceName.equals(myServiceName))        continue;      String myPortName = myReference.getPortName();      if (myPortName != null && !portName.equals(myPortName))        continue;      if (selectedEntry != null) {        throw new BpelException("multiple partner link entries match the given arguments: service="            + serviceName            + ", port="            + portName);      }      selectedEntry = entry;    }    return selectedEntry;  }  public Map getRequestListeners() {    return requestListeners;  }  public void addRequestListener(RequestListener requestListener) {    Object key = createKey(requestListener.getReceiveActionId(), requestListener.getTokenId());    requestListeners.put(key, requestListener);  }  public RequestListener removeRequestListener(ReceiveAction receiveAction, Token token) {    Object key = createKey(receiveAction.getId(), token.getId());    return (RequestListener) requestListeners.remove(key);  }  public void removeRequestListener(RequestListener requestListener) {    Object key = createKey(requestListener.getReceiveActionId(), requestListener.getTokenId());    synchronized (requestListeners) {      Object currentListener = requestListeners.get(key);      if (requestListener == currentListener)        requestListeners.remove(key);    }  }  private static Object createKey(long receiveActionId, long tokenId) {    return new RequestListener.Key(receiveActionId, tokenId);  }  public Map getOutstandingRequests() {    return outstandingRequests;  }  public void addOutstandingRequest(ReceiveAction receiveAction, Token token,      OutstandingRequest request) {    Object key = createKey(receiveAction.getPartnerLink().getInstance(token),        receiveAction.getOperation(), receiveAction.getMessageExchange());    if (outstandingRequests.put(key, request) != null)      throw new BpelFaultException(BpelConstants.FAULT_CONFLICTING_REQUEST);    log.debug("added outstanding request: receiveAction="        + receiveAction        + ", token="        + token        + ", request="        + request);  }  public OutstandingRequest removeOutstandingRequest(ReplyAction replyAction, Token token) {    Object key = createKey(replyAction.getPartnerLink().getInstance(token),        replyAction.getOperation(), replyAction.getMessageExchange());    OutstandingRequest request = (OutstandingRequest) outstandingRequests.remove(key);    if (request == null)      throw new BpelFaultException(BpelConstants.FAULT_MISSING_REQUEST);    log.debug("removed outstanding request: replyAction="        + replyAction        + ", token="        + token        + ", request="        + request);    return request;  }  private static Object createKey(PartnerLinkInstance partnerLinkInstance, Operation operation,      String messageExchange) {    return new OutstandingRequest.Key(getOrAssignId(partnerLinkInstance), operation.getName(),        messageExchange);  }  private static long getOrAssignId(PartnerLinkInstance partnerLinkInstance) {    long id = partnerLinkInstance.getId();    // in case instance is transient, assign an identifier to it    if (id == 0L) {      Services.assignId(partnerLinkInstance);      id = partnerLinkInstance.getId();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?