|
| WebLogic Server 6.1 Code Examples, BEA Systems, Inc. |
Package examples.iiop.ejb.entity.cppclient
WebLogic Server 6.1 Examples: Package examples.iiop.ejb.entity.tuxclient
#include "CosNaming_c.hh"
#include
#include "client_c.hh"
USE_STD_NS
#define BASIC_VALUETYPE(name,package) \
class name##Impl : public virtual package##::OBV_##name, \
public virtual CORBA::DefaultValueRefCountBase \
{ \
public: \
name##Impl () {} \
~##name##Impl () {} \
CORBA_ValueBase* _copy_value() { \
return new name##Impl(); \
} \
friend class name##Helper; \
}; \
\
class name##Factory : public package##::##name##_init \
{ \
public: \
name##Factory () {} \
~##name##Factory () {} \
CORBA::ValueBase* create_for_unmarshal() \
{ \
return new name##Impl(); \
} \
}
#define BASIC_VALUETYPE_FACTORY(name,package,impl) \
class name##Factory : public package##::##name##_init \
{ \
public: \
name##Factory () {} \
~##name##Factory () {} \
CORBA::ValueBase* create_for_unmarshal() \
{ \
return new impl(); \
} \
}
BASIC_VALUETYPE(RemoveException,::javax::ejb);
BASIC_VALUETYPE(FinderException,::javax::ejb);
BASIC_VALUETYPE(ObjectNotFoundException,::javax::ejb);
BASIC_VALUETYPE(ProcessingErrorException,
::examples::iiop::ejb::entity);
class FinderEnumeration : public virtual ::weblogic::ejb::OBV_EJBObjectEnum,
public virtual CORBA::DefaultValueRefCountBase
{
public:
FinderEnumeration () {}
~FinderEnumeration () {}
CORBA_ValueBase* _copy_value() {
return new FinderEnumeration();
}
::java::util::Vector_ptr elements() const
{
return v();
}
};
//
// This class partly implements the java.util.Vector API.
//
class Vector : public virtual ::java::util::OBV_Vector,
public virtual CORBA::DefaultValueRefCountBase
{
public:
Vector () {}
~Vector () {}
CORBA_ValueBase* _copy_value() {
return new Vector();
}
const CORBA::Long size() const
{
return elementCount();
}
void setSize(const CORBA::Long sz)
{
elementCount(sz);
capacityIncrement(0L);
::org::omg::boxedRMI::java::lang::seq1__Object_ptr seq =
new ::org::omg::boxedRMI::java::lang::seq1__Object(sz);
seq->length(sz);
elementData(seq);
}
CORBA::Any& elementAt(CORBA::Long i) const
{
return (*elementData())[i];
}
};
BASIC_VALUETYPE_FACTORY(EJBObjectEnum, ::weblogic::ejb,
FinderEnumeration);
BASIC_VALUETYPE_FACTORY(Vector, ::java::util, Vector);
int main(int argc, char* const* argv)
{
try {
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
// string to object
CORBA::Object_ptr o;
cout << "Getting name service reference" << endl;
if (argc >= 2 && strncmp (argv[1], "IOR", 3) == 0)
o = orb->string_to_object(argv[1]);
else
o = orb->resolve_initial_references("NameService");
// Unfortunately we have to register valuetype factories for all the exceptions
// we use.
orb->register_value_factory("RMI:javax.ejb.FinderException:FD98A9711F66DF7F:79EE1514C8B7CA15", (CORBA::ValueFactory)new FinderExceptionFactory);
orb->register_value_factory("RMI:javax.ejb.ObjectNotFoundException:5E2415FE96422431:00106DD5ADF01DDA", (CORBA::ValueFactory)new ObjectNotFoundExceptionFactory);
orb->register_value_factory("RMI:javax.ejb.RemoveException:FD98A9711F66DF7F:C06A008FD05A462A", (CORBA::ValueFactory)new RemoveExceptionFactory);
orb->register_value_factory("RMI:weblogic.ejb.EJBObjectEnum:F75CF1075F12B574:250FA3B2514485F0", (CORBA::ValueFactory)new EJBObjectEnumFactory);
orb->register_value_factory("RMI:java.util.Vector:62E909C46C1937A3:D9977D5B803BAF01", (CORBA::ValueFactory)new VectorFactory);
orb->register_value_factory("RMI:[Ljava.lang.Object;:0000000000000000", (CORBA::ValueFactory)new ::org::omg::boxedRMI::java::lang::seq1__Object_factory);
// obtain a naming context
cout << "Narrowing to a naming context" << endl;
CosNaming::NamingContext_var context = CosNaming::NamingContext::_narrow(o);
CosNaming::Name name;
name.length(1);
name[0].id = "AccountHome_iiop";
name[0].kind = "";
// resolve and narrow to RMI object
cout << "Resolving the naming context" << endl;
CORBA::Object_var object = context->resolve(name);
cout << "Narrowing to the AccountHome" << endl;
examples::iiop::ejb::entity::AccountHome_var home =
examples::iiop::ejb::entity::AccountHome::_narrow(object);
int numBeans = 7;
examples::iiop::ejb::entity::Account_ptr accounts[7];
// Create 7 accounts with varying balances and some null accountTypes.
cout << "Creating accounts ...." << endl;
for (int i=0; ifindByPrimaryKey(&id));
} catch (const ::javax::ejb::ObjectNotFoundEx& e) {
cout << "failed, creating ...";
::CORBA::WStringValue type = ::CORBA::WStringValue(L"Savings");
// the account id does not yet exist so create it.
accounts[i] = examples::iiop::ejb::entity::Account::_narrow
(home->create(&id, i * 1000, &type));
}
cout << "done" << endl;
}
// print out the account balances
for (i=0; iprimaryKey() <<
" has a balance of "<< accounts[i]->balance() << endl;
}
cout << "Creating and marshalling a Vector" << endl;
Vector* vin = new Vector();
vin->setSize(2);
vin->elementAt(0) <<= new ::CORBA::WStringValue(L"hello");
vin->elementAt(1) <<= new ::CORBA::WStringValue(L"hi");
::java::util::List_ptr list = accounts[0]->test_seq(vin);
cout << "Finding big accounts ..." << endl;
// find all accounts with a balance > 5000
::java::util::Enumeration_ptr en =
home->findBigAccounts(5000.0);
::weblogic::ejb::EJBObjectEnum_ptr e
= ::weblogic::ejb::EJBObjectEnum::_downcast(en);
FinderEnumeration* fe = dynamic_cast(e);
Vector* v = dynamic_cast(fe->elements());
if(v->size() <= 0) {
cout << "No accounts were found!" << endl;
}
for (i=0; isize(); i++) {
CORBA::Object_ptr theNext;
v->elementAt(i) >>= theNext;
examples::iiop::ejb::entity::Account_ptr bigAccount =
examples::iiop::ejb::entity::Account::_narrow(theNext);
cout << "Account " << bigAccount->primaryKey() <<
"; balance is $" << bigAccount->balance() << endl;
}
// Remove our accounts
cout << "Removing beans..." << endl;
for (i=0; iremove();
}
} catch(const CORBA::Exception& e) {
cout << "Failure: " << e << endl;
}
return 0;
}
Copyright © 2001 BEA Systems, Inc. All Rights Reserved.