����һ�Σ����ǽ����� FruitsBasket::Apple ��������������Ҫ���ˣ�������Ǵ���: ���в��ֶ��Ѿ����������о����ˡ�
#include <orb/orbit.h>
#include <ORBitservices/CosNaming.h>
void MyEatMe (PortableServer_Servant servant,
CORBA_Environment * ev)
{
/* ���������Լ�����Ӧ�Ķ���ʵ�ֵĴ��� */
}
void MyThrowMe (PortableServer_Servant servant,
CORBA_Environment * ev)
{
/* ���������Լ�����Ӧ�Ķ���ʵ�ֵĴ��� */
}
PortableServer_ServantBase__epv base_epv {
NULL, /* �ض��� ORB ������ */
NULL, /* ��ֹ���� */
NULL /* ȱʡ POA */
}
POA_FruitsBasket_Apple__epv Apple_epv {
NULL, /* �ض��� ORB ������ */
MyEatMe,
MyThrowMe
};
POA_FruitsBasket_Apple__vepv Apple_vepv {
&base_epv,
&Apple_epv
};
POA_FruitsBasket_Apple Apple_servant = {
NULL,
&Apple_vpev
};
int main (int argc, char **argv)
{
CORBA_Environment ev;
CORBA_ORB orb;
PortableServer_POA poa;
/* ����ʹ��ȱʡ�IJ��� */
CORBA_PolicyList policy_list = {0, 0, NULL};
PortableServer_POA root_poa;
PortableServer_POAManager root_poa_manager;
ObjectId *obj_id;
CORBA_Object obj;
CosNaming_NamingContext *root_name;
CosNaming_NameComponent name_component[1] = { {"MyApple", "server"} };
CosNaming_Name name = {1, 1, name_component, CORBA_FALSE};
/* ��ʼ�� ORB ���ʹ�
CORBA_exception_init (&ev);
orb = CORBA_ORB_init (&argc,
argv,
"orbit-local-orb",
&ev);
POA_FruitsBasket_Apple__init (orb,
Apple_servant,
&ev);
if (ev->_major != CORBA_NO_EXCEPTION) {
fprintf (stderr,
"Error: exception during Servant initialization: %s\n",
CORBA_exception_id(&ev));
exit (1);
}
/* ��ʼ�� POA */
root_poa = CORBA_ORB_resolve_initial_references (orb,
"RootPOA",
&ev);
root_poa_manager = PortableServer_POA_get_the_POAManager (root_poa,
&ev);
PortableServer_POAManager_activate (root_poa_manager,
&ev);
PortableServer_POA_create_poa (root_poa,
"my_own_poa",
root_poa_manager,
policy_list,
&ev);
poa = PortableServer_POA_find_poa (root_poa,
"my_own_poa",
&ev);
if (ev->_major != CORBA_NO_EXCEPTION) {
fprintf (stderr,
"Error: exception during POA initialization: %s\n",
CORBA_exception_id(&ev));
CORBA_exception_free (&ev);
exit (1);
}
/* ������� */
obj_id = PortableServer_POA_activate_object (poa,
&Apple_servant,
&ev);
/* �õ��������� */
obj = PortableServer_POA_id_to_reference (poa,
obj_id,
&ev);
/* ������������ע�� */
root_name = CORBA_ORB_resolve_initial_service (orb,
"NameService",
&ev);
if (ev->_major != CORBA_NO_EXCEPTION) {
fprintf (stderr,
"Error: could not get name service: %s\n",
CORBA_exception_id(&ev));
exit (1);
}
CosNaming_NamingContext_bind (root_amp,
&name,
obj,
&ev);
if (ev->_major != CORBA_NO_EXCEPTION) {
fprintf (stderr,
"Error: could register object: %s\n",
CORBA_exception_id(&ev));
exit (1);
}
CORBA_free (root_poa);
CORBA_exception_free (&ev);
/* pfew !! here we are !! */
return 0;
} |
���뿴�����зdz����Ե�һ����: ���˶����ĺ���ʵ�֣������������ض��� FruitsBasket::Apple �ӿڵ�(���Ƿdz�������)�� ������Щ����������κ��������ӿڵ�������������ʹ�á�
�����Ϊʲô ORBit �ṩ��һ������;���������Զ��������һ���һ����������͵Ĵ��롣 --skeleton-impl ѡ�����һ�������������������� C �ļ���������Ϊ��� FruitsBasket::Apple �ӿڵĵ����ɵ�������롣
#include "apple.h"
/*** App-specific servant structures ***/
typedef struct {
POA_FruitsBasket_Apple servant;
PortableServer_POA poa;
} impl_POA_FruitsBasket_Apple;
/*** Implementation stub prototypes ***/
static void impl_FruitsBasket_Apple__destroy(impl_POA_FruitsBasket_Apple * servant,
CORBA_Environment * ev);
static void
impl_FruitsBasket_Apple_EatMe(impl_POA_FruitsBasket_Apple * servant,
CORBA_Environment * ev);
static void
impl_FruitsBasket_Apple_ThrowMe(impl_POA_FruitsBasket_Apple * servant,
CORBA_Environment * ev);
/*** epv structures ***/
static PortableServer_ServantBase__epv impl_FruitsBasket_Apple_base_epv =
{
NULL, /* _private data */
NULL, /* finalize routine */
NULL, /* default_POA routine */
};
static POA_FruitsBasket_Apple__epv impl_FruitsBasket_Apple_epv =
{
NULL, /* _private */
(gpointer) & impl_FruitsBasket_Apple_EatMe,
(gpointer) & impl_FruitsBasket_Apple_ThrowMe,
};
/*** vepv structures ***/
static POA_FruitsBasket_Apple__vepv impl_FruitsBasket_Apple_vepv =
{
&impl_FruitsBasket_Apple_base_epv,
&impl_FruitsBasket_Apple_epv,
};
/*** Stub implementations ***/
static FruitsBasket_Apple
impl_FruitsBasket_Apple__create(PortableServer_POA poa,
CORBA_Environment * ev)
{
FruitsBasket_Apple retval;
impl_POA_FruitsBasket_Apple *newservant;
PortableServer_ObjectId *objid;
newservant = g_new0(impl_POA_FruitsBasket_Apple, 1);
newservant->servant.vepv = &impl_FruitsBasket_Apple_vepv;
newservant->poa = poa;
POA_FruitsBasket_Apple__init((PortableServer_Servant) newservant, ev);
objid = PortableServer_POA_activate_object(poa, newservant, ev);
CORBA_free(objid);
retval = PortableServer_POA_servant_to_reference(poa, newservant, ev);
return retval;
}
static void
impl_FruitsBasket_Apple__destroy(impl_POA_FruitsBasket_Apple * servant,
CORBA_Environment * ev)
{
PortableServer_ObjectId *objid;
objid = PortableServer_POA_servant_to_id(servant->poa, servant, ev);
PortableServer_POA_deactivate_object(servant->poa, objid, ev);
CORBA_free(objid);
POA_FruitsBasket_Apple__fini((PortableServer_Servant) servant, ev);
g_free(servant);
}
static void
impl_FruitsBasket_Apple_EatMe(impl_POA_FruitsBasket_Apple * servant,
CORBA_Environment * ev)
{
}
static void
impl_FruitsBasket_Apple_ThrowMe(impl_POA_FruitsBasket_Apple * servant,
CORBA_Environment * ev)
{
} |
��
ʣ�µ�Ψһ���������ʵ��һ������ create �����ͳ�ʼ��һЩ����...�� main ������
ע���������ʹ��������һ�½���������Ǹ����ţ�����ͨ���������ֽṹ�ķ�ʽ�� PortableServer_POA POA �������ʹ��ϡ�
typedef struct {
POA_FruitsBasket_Apple servant;
PortableServer_POA poa;
} impl_POA_FruitsBasket_Apple; |