Esempio n. 1
0
void
POA_Holder::activate (RTCORBA::RTORB_ptr rt_orb, PortableServer::POA_ptr parent_poa)
{
  CORBA::Policy_var priority_model_policy;
  CORBA::Policy_var lanes_policy;
  CORBA::Policy_var bands_policy;
  CORBA::Policy_var thread_pool_policy;

  // Create a priority model policy.
  priority_model_policy =
    rt_orb->create_priority_model_policy (priority_model_,
                                          server_priority_);

  if (lanes_.length () != 0)
    {
      // Create a thread-pool.
      CORBA::ULong stacksize = 0;
      CORBA::Boolean allow_request_buffering = 0;
      CORBA::ULong max_buffered_requests = 0;
      CORBA::ULong max_request_buffer_size = 0;
      CORBA::Boolean allow_borrowing = 0;

      // Create the thread-pool.
      RTCORBA::ThreadpoolId threadpool_id =
        rt_orb->create_threadpool_with_lanes (stacksize,
                                              lanes_,
                                              allow_borrowing,
                                              allow_request_buffering,
                                              max_buffered_requests,
                                              max_request_buffer_size);

      // Create a thread-pool policy.
      lanes_policy =
        rt_orb->create_threadpool_policy (threadpool_id);

      ACE_DEBUG ((LM_DEBUG,
      "Activated Lanes\n"));

    }

  if (thread_pool_)
    {
      CORBA::ULong stacksize = 0;
      CORBA::Boolean allow_request_buffering = 0;
      CORBA::ULong max_buffered_requests = 0;
      CORBA::ULong max_request_buffer_size = 0;

      RTCORBA::ThreadpoolId threadpool_id_1 =
        rt_orb->create_threadpool (stacksize,
                                   tp_static_threads_,
                                   tp_dynamic_threads_,
                                   tp_priority_,
                                   allow_request_buffering,
                                   max_buffered_requests,
                                   max_request_buffer_size);


      thread_pool_policy = rt_orb->create_threadpool_policy (threadpool_id_1);

      ACE_DEBUG ((LM_DEBUG,
      "Activated thread pool\n"));


    }

  if (bands_.length () != 0)
    {
      // Create a bands policy.
      bands_policy =
        rt_orb->create_priority_banded_connection_policy (this->bands_);
      ACE_DEBUG ((LM_DEBUG,
      "Activated Bands\n"));

    }

  CORBA::PolicyList poa_policy_list;

  if (lanes_.length () == 0 && bands_.length () == 0)
    {
      if (thread_pool_)
  {
    poa_policy_list.length (2);
    poa_policy_list[0] = priority_model_policy;
    poa_policy_list[1] = thread_pool_policy;
  }
      else
  {
    poa_policy_list.length (1);
    poa_policy_list[0] = priority_model_policy;
  }
    }
  else if (lanes_.length () != 0 && bands_.length () == 0)
    {
      if (thread_pool_)
  {
    poa_policy_list.length (3);
    poa_policy_list[0] = priority_model_policy;
    poa_policy_list[1] = lanes_policy;
    poa_policy_list[2] = thread_pool_policy;
  }
      else
  {
    poa_policy_list.length (2);
    poa_policy_list[0] = priority_model_policy;
    poa_policy_list[1] = lanes_policy;
  }
    }
  else if (lanes_.length () == 0 && bands_.length () != 0)
    {
      if (thread_pool_)
  {
    poa_policy_list.length (3);
    poa_policy_list[0] = priority_model_policy;
    poa_policy_list[1] = bands_policy;
    poa_policy_list[2] = thread_pool_policy;
  }
      else
  {
    poa_policy_list.length (2);
    poa_policy_list[0] = priority_model_policy;
    poa_policy_list[1] = bands_policy;
  }
    }
  else
    {
      if (thread_pool_)
  {
    poa_policy_list.length (4);
    poa_policy_list[0] = priority_model_policy;
    poa_policy_list[1] = lanes_policy;
    poa_policy_list[2] = bands_policy;
    poa_policy_list[3] = thread_pool_policy;
  }
      else
  {
    poa_policy_list.length (3);
    poa_policy_list[0] = priority_model_policy;
    poa_policy_list[1] = lanes_policy;
    poa_policy_list[2] = bands_policy;
  }
    }

  ACE_DEBUG ((LM_DEBUG,
        "Initialized POA Policy\n"));

  if (TAO_debug_level > 0)
    ACE_DEBUG ((LM_DEBUG, "creating POA %C\n", POA_name_.c_str ()));

  // Get the POA Manager.
  PortableServer::POAManager_var poa_manager =
    parent_poa->the_POAManager ();

  PortableServer::POA_var poa =
    parent_poa->create_POA (POA_name_.c_str (),
                            poa_manager.in (),
                            poa_policy_list);
}