Patches item #629903, was opened at 2002-10-28 15:21
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=376687&aid=629903&group_id=22866

Category: JBossServer
Group: v3.2
Status: Open
Resolution: None
Priority: 5
Submitted By: Rich Tong (rtong)
Assigned to: Nobody/Anonymous (nobody)
Summary: fix for can't disable pass-by-reference

Initial Comment:
I would like to submit a fix for bug that pass-by-reference 
optimization for intraVM invocation can't be disabled. This is 
for v3.2beta. The fix is described as following. Thanks.

1.for org.jboss.invocation.InvokerInterceptor
use the following for method invoke():

  public Object invoke(Invocation invocation)
      throws Exception
   {
      // optimize if calling another bean in same EJB-
application
      //RT: fix 
      InvocationContext context = 
invocation.getInvocationContext();
      Boolean intraVMOptimization = (Boolean)
context.getValue("Optimized");
      //by default, use optimization
      boolean optimized = (intraVMOptimization == null? true: 
intraVMOptimization.booleanValue());
      
      //allow user to turn off local optimization
      if (isLocal() && optimized) {
         // The payload as is is good
         return localInvoker.invoke(invocation);
      }
      else {
         // this payload will go through marshalling
         return invocation.getInvocationContext().getInvoker
().invoke(invocation);
      }   
   }

2.for org.jboss.proxy.ejb.ProxyFactory
(1)add a method

protected void setIntraVMOptimization(InvocationContext 
context) throws Exception{

  boolean optimized = 
MetaData.getOptionalChildBooleanContent
(invokerMetaData.getProxyFactoryConfig(), "Optimized");

  context.setValue("Optimized", new Boolean(optimized));
}

(2)add codes to method 
 public Object getStatefulSessionEJBObject(Object id)
   {
      ...
      context.setInvokerProxyBinding
(invokerMetaData.getName());
      
         //RT: fix intraVM optimization problem
         try{
                 setIntraVMOptimization(context);
         }catch(Exception e){
                //do nothing
                ;
         }
      ...
}

(3)add codes to method
  public Object getEntityEJBObject(Object id)
   {
      ...
      context.setInvokerProxyBinding
(invokerMetaData.getName());

         //RT: fix intraVM optimization problem
         try{
                 setIntraVMOptimization(context);
         }catch(Exception e){
                //do nothing
                ;
         }
      ...
}

(4)add codes to method
  public Collection getEntityCollection(Collection ids)
   {
      ...
         context.setInvokerProxyBinding
(invokerMetaData.getName());
      
         //RT: fix intraVM optimization problem
         try{
                 setIntraVMOptimization(context);
         }catch(Exception e){
                //do nothing
                ;
         }
        ...
}

(5)add codes to method
 protected void bindProxy() throws Exception
   {
       ...
         context.setInvokerProxyBinding
(invokerMetaData.getName());
         
         //RT: to provide intra-VM optimization flag
         setIntraVMOptimization(context);
     ...
}

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=376687&aid=629903&group_id=22866


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to