>From the stack trace above,

at 
org.jbpm.bpel.def.ProcessInstanceStarter.visit(ProcessInstanceStarter.java:82)

the process instance is starting, no transaction has been committed and the 
partner link instances are still transient.

A different approach to fix the problem is assigning an ID to the transient 
instances:

  public PortConsumer getPortConsumer(PartnerLinkInstance instance) {
  |     Long instanceId = new Long(getOrAssignId(instance));
  |     PortConsumer portConsumer;
  |     synchronized (portConsumers) {
  |       // retrieve cached port consumer
  |       portConsumer = (PortConsumer) portConsumers.get(instanceId);
  |       if (portConsumer == null) {
  |         // no cached consumer, create one from partner endpoint reference
  |         EndpointReference partnerRef = instance.getPartnerReference();
  |         if (partnerRef == null) {
  |           // no partner reference, create one containing only the port type 
as selection criterion
  |           partnerRef = createPartnerReference(instance.getDefinition());
  |           instance.setPartnerReference(partnerRef);
  |           log.debug("initialized partner reference: instance=" + instance +
  |               ", reference=" + partnerRef);
  |         }
  |         // select a port from the service catalog with the criteria known 
at this point
  |         Port port = partnerRef.selectPort(getServiceCatalog());
  |         log.debug("selected partner port: instance=" + instance + ", port=" 
+ port.getName());
  |         // create a consumer for that port
  |         portConsumer = new PortConsumer(port);
  |         portConsumers.put(instanceId, portConsumer);
  |       }
  |     }
  |     return portConsumer;
  |   }

The code for assigning an identifier is simply:
  private static long getOrAssignId(PartnerLinkInstance instance) {
  |     long instanceId = instance.getId();
  |     // in case instance is transient, assign an identifier to it
  |     if (instanceId == 0L) {
  |       Services.assignId(instance);
  |       instanceId = instance.getId();
  |     }
  |     return instanceId;
  |   }
I introduced getOrAssignId() because RelationContext has another method that 
uses a potentially transient partner link instance:
  private static Object createKey(PartnerLinkInstance partnerLinkInstance,
  |     Operation operation, String messageExchange) {
  |     return new OutstandingRequest.Key(getOrAssignId(partnerLinkInstance),
  |     operation.getName(), messageExchange);
  |   }
It'd be great if you could try these other fixes too.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3954239#3954239

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3954239

Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to