// **********************************************************************
//
// Copyright (c) 1997
// Object-Oriented Concepts, Inc.
// Billerica, MA, USA
//
// All Rights Reserved
//
// **********************************************************************

#include <stdlib.h>
#include <OB/CORBA.h>
#include <OB/Util.h>

extern"C"{
#include <acelib.h>
}

#include <ace_impl.h>

#ifdef HAVE_FSTREAM
#include <fstream>
#else
#include <fstream.h>
#endif

int
main(int argc, char* argv[], char*[])
{
  //cout<<"Hello, world!\n";
    
    aceInit( "." );
    //cout<<"init!\n";
    try
    {
	//
	// Create ORB and BOA
	// 
	CORBA_ORB_var orb = CORBA_ORB_init(argc, argv);
	CORBA_BOA_var boa = orb -> BOA_init(argc, argv);
	//cout<<"corba started!\n";
	
	//
	// Create implementation object
	//
	AceView_AceDB_var p = new Ace_Impl;
	//cout<<"new aceview!\n";
	
	//
	// Save reference
	//
	CORBA_String_var s = orb -> object_to_string(p);
	
	const char* refFile = "/ace97/demos/corba/AceDB.ref";
	ofstream out(refFile);
	if(out.fail())
	{
	    extern int errno;
	    cerr << argv[0] << ": can't open `" << refFile << "': "
		 << strerror(errno) << endl;
	    return 1;
	}
	
	out << s << endl;
	out.close();

	cout<<"ACeDB CORBA Server open for business...\n";
	
	//
	// Run implementation
	//
	boa -> impl_is_ready(CORBA_ImplementationDef::_nil());
    }
#ifdef __GNUG__
    catch(CORBA_COMM_FAILURE& ex)
#else
    catch(CORBA_SystemException& ex)
#endif
    {
	OBPrintException(ex);
	return 1;
    }

    return 0;
}


