Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2006, Red Hat Middleware LLC, and individual contributors
   * as indicated by the @author tags. See the copyright.txt file in the
   * distribution for a full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 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. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.ejb3.iiop;
 
 
 
 import  org.jboss.ejb3.Container;
 import  org.jboss.ejb3.session.SessionContainer;
 import  org.jboss.security.SecurityAssociation;
 import  org.jboss.security.SimplePrincipal;
 import  org.omg.CORBA.InterfaceDef;
Comment

Author(s):
Carlo de Wolf
Francisco Reverbel
Version:
$Revision: 72637 $
 
 public class BeanCorbaServant extends Servant
    implements InvokeHandler
 {
    private static final Logger log = Logger.getLogger(BeanCorbaServant.class);
 
    private final IORFactory factory;
    private final Current poaCurrent;
    private final Container container;
    private final InterfaceDef interfaceDef;
    private final String repositoryIds[];
    private SASCurrent sasCurrent;
 
    
    protected BeanCorbaServant(IORFactory factoryCurrent poaCurrent, Container container, InterfaceDef interfaceDefInterfaceAnalysis interfaceAnalysis)
    {
       assert factory != null : "factory is null";
       assert poaCurrent != null : "poaCurrent is null";
       assert container != null : "container is null";
       assert container instanceof SessionContainer : "only SessionContainer supported"// see invoke
       //assert interfaceDef != null : "interfaceDef is null";  // assertion breaks iiop unit test
       assert interfaceAnalysis != null : "interfaceAnalysis is null";
       
       this. = factory;
       this. = poaCurrent;
       this. = container;
       this. = interfaceDef;
       this. = interfaceAnalysis.getAllTypeIds();
       
       try
       {
          this. = (SASCurrent) CorbaORB.getInstance().resolve_initial_references("SASCurrent");
       }
       catch (InvalidName e)
      {
         .warn("Can't find SASCurrent");
         this. = null;
      }
      try
      {
         this. = (InboundTransactionCurrent)
      }
      catch (InvalidName e)
      {
         .warn("Can't find InboundTransactionCurrent");
         this. = null;
      }
      
      this. = new HashMap<StringSkeletonStrategy>();
      AttributeAnalysis[] attrs = interfaceAnalysis.getAttributes();
      for (int i = 0; i < attrs.lengthi++) {
         OperationAnalysis op = attrs[i].getAccessorAnalysis();
         .debug("    " + op.getJavaName() + ": " + op.getIDLName());
         .put(op.getIDLName(),
                           new SkeletonStrategy(op.getMethod()));
         op = attrs[i].getMutatorAnalysis();
         if (op != null) {
            .debug("    " + op.getJavaName() + ": " + op.getIDLName());
            .put(op.getIDLName(),
                              new SkeletonStrategy(op.getMethod()));
         }
      }
      OperationAnalysis[] ops = interfaceAnalysis.getOperations();
      for (int i = 0; i < ops.lengthi++) {
         .debug("    " + ops[i].getJavaName() + ": " + ops[i].getIDLName());
         .put(ops[i].getIDLName(),
                           new SkeletonStrategy(ops[i].getMethod()));
      }
   }
   
   public String[] _all_interfaces(POA poabyte[] objectId)
   {
      return (String[]) .clone();
   }

   
Returns an IR object describing the bean's remote interface.
   {
      if ( != null)
         return ;
      else
         return super._get_interface_def();
   }
   
   public OutputStream _invoke(String opNameInputStream inResponseHandler handlerthrows SystemException
   {
      .trace("invoke: " + opName);
      
      SkeletonStrategy op = (SkeletonStrategy.get(opName);
      if (op == null)
      {
         .debug("Unable to find opname '" + opName + "' valid operations:" + .keySet());
         throw new BAD_OPERATION(opName);
      }
      try
      {
         Object id = ReferenceData.extractObjectId(.get_object_id());
         .trace("id = " + id);
         
         Transaction tx = null;
         if ( != null)
            tx = .getCurrentTransaction();
         .trace("tx = " + tx);
         
         if( != null)
         {
            byte username[] = .get_incoming_username();
            byte credentials[] = .get_incoming_password();
            byte principalName[] = .get_incoming_principal_name();
            
            if(username != null && username.length > 0)
            {
               String name = new String(username"UTF-8");
               int domainIndex = name.lastIndexOf("@");
               if(domainIndex > 0)
                  name = name.substring(0, domainIndex);
               .debug("username = " + name);
               Principal principal = new SimplePrincipal(name);
               SecurityAssociation.setPrincipal(principal);
            }
            
            if(credentials != null && credentials.length > 0)
            {
               SecurityAssociation.setCredential(new String(credentials"UTF-8").toCharArray());
            }
            
            if(principalName != null && principalName.length > 0)
               .warn("principalName = " + new String(principalName"UTF-8")); // FIXME: implement principalName support
         }
         
         Object args[] = op.readParams((org.omg.CORBA_2_3.portable.InputStreamin);
         
         Object retVal = invoke(txidop.getMethod(), args);
         
         out = (org.omg.CORBA_2_3.portable.OutputStreamhandler.createReply();
         if(op.isNonVoid())
            op.writeRetval(outretVal);
      }
      catch(Throwable t)
      {
         // TODO: check log level before stacktrace?
         t.printStackTrace();
         if(t instanceof Exception)
         {
            Exception e = (Exceptiont;
            RmiIdlUtil.rethrowIfCorbaSystemException(e);
            out = (org.omg.CORBA_2_3.portable.OutputStreamhandler.createExceptionReply();
            op.writeException(oute);
         }
         else
            throw new RuntimeException("NYI");
      }
      return out;
   }
   {
      //return TxUtil.getTransactionManager();
      return TransactionManagerLocator.getInstance().locate();
   }
   
   private Object invoke(Object idMethod methodObject args[]) throws Throwable
   {
      // TODO: Support other containers beside Stateless and Stateful?
      return ((SessionContainer) ).invoke(idmethodargsnull);
   }
   
   private Object invoke(Transaction txObject idMethod methodObject args[]) throws Throwable
   {
      if(tx == null)
         return invoke(idmethodargs);
      
      // FIXME: refactor TxServerInterceptor so that it pushed the tpc into the invocation like ClientTxPropegationInterceptor
      // this would require the localInvoke to be also refactored, so that it uses invocation instead of localInvoke.
      
      // see TxPropagationInterceptor
      if(tm.getTransaction() != null)
         throw new RuntimeException("cannot import a transaction context when a transaction is already associated with the thread");
      tm.resume(tx);
      try
      {
         return invoke(idmethodargs);
      }
      finally
      {
         tm.suspend();
      }
   }
New to GrepCode? Check out our FAQ X