/* | |
* Copyright 2004 The Apache Software Foundation. | |
* | |
* Licensed 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.kandula.participant; | |
import javax.xml.namespace.QName; | |
import org.apache.axiom.om.OMElement; | |
import org.apache.axiom.soap.SOAPHeader; | |
import org.apache.axis2.AxisFault; | |
import org.apache.axis2.context.MessageContext; | |
import org.apache.axis2.description.Parameter; | |
import org.apache.axis2.handlers.AbstractHandler; | |
import org.apache.commons.logging.Log; | |
import org.apache.commons.logging.LogFactory; | |
import org.apache.kandula.Constants; | |
import org.apache.kandula.context.AbstractContext; | |
import org.apache.kandula.context.CoordinationContext; | |
import org.apache.kandula.context.impl.ParticipantContext; | |
import org.apache.kandula.context.impl.SimpleCoordinationContext; | |
import org.apache.kandula.participant.ba.ParticipantOutHandler; | |
import org.apache.kandula.storage.StorageUtils; | |
public class TransactionInHandler extends AbstractHandler { | |
/** | |
* Field log | |
*/ | |
private static final Log log = LogFactory.getLog(ParticipantOutHandler.class); | |
private static final long serialVersionUID = 2098581248112968550L; | |
public InvocationResponse invoke(MessageContext msgContext) throws AxisFault { | |
KandulaResource resource; | |
String wsaAction = msgContext.getWSAAction(); | |
if ((wsaAction != Constants.WS_COOR_CREATE_COORDINATIONCONTEXT) | |
&& (wsaAction != Constants.WS_COOR_REGISTER) | |
&& (wsaAction != Constants.WS_AT_COMMIT) | |
&& (wsaAction != Constants.WS_AT_ROLLBACK)) { | |
ParticipantContext context = new ParticipantContext(); | |
SOAPHeader header = msgContext.getEnvelope().getHeader(); | |
OMElement coordinationElement = header | |
.getFirstChildWithName(new QName(Constants.WS_COOR, | |
"CoordinationContext")); | |
if (coordinationElement == null) { | |
throw new AxisFault( | |
"Transaction Handler engaged.. No Coordination Context found"); | |
} | |
CoordinationContext coorContext = new SimpleCoordinationContext( | |
coordinationElement); | |
context.setCoordinationContext(coorContext); | |
StorageUtils.putContext(context,context.getID(),msgContext); | |
msgContext.setProperty(AbstractContext.REQUESTER_ID,context.getID()); | |
msgContext.getOperationContext().setProperty(AbstractContext.REQUESTER_ID,context.getID()); | |
Parameter resourceFile = msgContext.getParameter(Constants.KANDULA_RESOURCE); | |
//Resource not given. Registration delayed to the business logic | |
if (resourceFile != null) { | |
try { | |
resource = (KandulaResource) Class.forName((String) resourceFile.getValue()) | |
.newInstance(); | |
context.setResource(resource); | |
} catch (Exception e) { | |
log.fatal("TransactionInHandler: Activity ID :"+context.getCoordinationContext().getActivityID()+" : "+e); | |
throw new AxisFault(e); | |
} | |
ParticipantUtility.registerParticipant(context,msgContext); | |
} | |
} | |
return InvocationResponse.CONTINUE; | |
} | |
} |