Package org.jacorb.transaction

Source Code of org.jacorb.transaction.TransactionService

package org.jacorb.transaction;

/*
*        JacORB transaction service - a free TS for JacORB
*
*   Copyright (C) 1999-2004 LogicLand group Alex Sinishin.
*
*   This library is free software; you can redistribute it and/or
*   modify it under the terms of the GNU Library General Public
*   License as published by the Free Software Foundation; either
*   version 2 of the License, or (at your option) any later version.
*
*   This library 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
*   Library General Public License for more details.
*
*   You should have received a copy of the GNU Library General Public
*   License along with this library; if not, write to the Free
*   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import org.slf4j.Logger;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.CosTransactions.Control;
import org.omg.CosTransactions.PropagationContext;
import org.omg.CosTransactions.TransactionFactory;
import org.omg.CosTransactions.TransactionFactoryHelper;
import org.omg.CosTransactions.TransactionFactoryPOA;

public class TransactionService
    extends TransactionFactoryPOA
{
    private static boolean                    initialized = false;
    private static TransactionService         factory;
    private static TransactionFactory         fact_ref;
    private static CoordinatorImpl[]          coordinators;
    private static Timer                      timer;
    private static int                        trans_id = 0;
    private static org.omg.PortableServer.POA poa;

    private static Logger logger;

    static Timer get_timer(){
        return timer;
    }


    public static boolean is_initialized(){
        return initialized;
    }

    public static TransactionFactory get_reference(){
        return fact_ref;
    }

    static void release_coordinator(int hash_code)
    {
        coordinators[hash_code] = null;
    }

    private int find_free(){
        for (int i = 0;i < coordinators.length;i++){
            if (coordinators[i] == null){
                return i;
            }
        }
        throw new org.omg.CORBA.INTERNAL();
    }

    public Control create(int time_out)
    {
        trans_id++;
        int ix;
        synchronized(coordinators){
            ix = find_free();
            coordinators[ix] = new CoordinatorImpl(poa, trans_id, ix, time_out);
        }
        return coordinators[ix]._get_control();
    }

    public Control recreate(PropagationContext ctx){
        throw new org.omg.CORBA.NO_IMPLEMENT();
    }

    public static void start(org.omg.PortableServer.POA _poa, int max_of_trans)
    {
        if (initialized)
  {
            throw new org.omg.CORBA.INTERNAL();
        }
        try
  {
            poa = _poa;
            factory = new TransactionService();
            fact_ref =
                TransactionFactoryHelper.narrow(poa.servant_to_reference(factory));

            coordinators = new CoordinatorImpl [max_of_trans];

            for (int i = 0;i < coordinators.length;i++)
            {
                coordinators[i] = null;
            }
            timer = new Timer(max_of_trans);

        }
  catch(Exception e)
  {
            e.printStackTrace();
            System.exit(1);
        }
        initialized = true;
    }


    public static void main( String[] args )
    {
        org.omg.CORBA.ORB orb =
            org.omg.CORBA.ORB.init(args, null);
        logger =
            ((org.jacorb.orb.ORB)orb).getConfiguration().getLogger("jacorb.tx_service");
        try
        {
            org.omg.PortableServer.POA poa =
                org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
      poa.the_POAManager().activate();
           
      TransactionService transactionService =
                new TransactionService();
      transactionService.start(poa,10);     

            if( args.length == 1 )
            {
                // write the object reference to args[0]

                PrintWriter ps =
                    new PrintWriter(new FileOutputStream(new File( args[0])));
                ps.println( orb.object_to_string( transactionService.get_reference() ) );
                ps.close();
            }
            else
            {
                NamingContextExt nc =
        NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
                NameComponent [] name = new NameComponent[1];
                name[0] = new NameComponent( "TransactionService", "service");
                nc.bind(name, transactionService.get_reference());
            }
            if (logger.isInfoEnabled())
                logger.info("TransactionService up");
        }
        catch ( Exception e )
        {
            e.printStackTrace();
        }
        orb.run();
    }

}

TOP

Related Classes of org.jacorb.transaction.TransactionService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.