I write a similar icebox service like newsletter,when debug it,always report "object not exist",
snippet:
UserServiceI.cpp:
namespace NW
{
namespace Users
{
class UserServiceI : public ::IceBox::Service
{
public:
virtual void
start(const string& name, const CommunicatorPtr& communicator, const StringSeq&)
{ _adapter = communicator->createObjectAdapter("UserManager");
IdIndexPtr index = new IdIndex("userid");
vector<Freeze::IndexPtr> indices;
indices.push_back(index);
UserManagerIPtr manager = new UserManagerI(index,_adapter);
UserFactoryPtr userfactory = new UserFactory(manager);
communicator->addObjectFactory(userfactory,"::NW::Users::User") ;
Freeze::EvictorPtr evictor =Freeze::createEvictor(_adapter,name,"users",0,ind ices);
_adapter->addServantLocator(evictor,"users");
manager->SetEvictor(evictor);
_adapter->add(manager,Ice::stringToIdentity("UserManager")) ;
_adapter->activate();
}
virtual void
stop()
{
_adapter->deactivate();
}
private:
Ice::ObjectAdapterPtr _adapter;
};
}
}
UserManagerI.cpp:
UserManagerI::UserManagerI(const IdIndexPtr& idIndex,
const Ice::ObjectAdapterPtr& adapter)
{
_adapter = adapter;
_index =idIndex;
}
UserPrx UserManagerI::AddUser(const string& user,const string& passwd,
OperatorType optype,const Ice::Current&)
{
try
{
cout << "start adduser!" << endl;
vector<Ice::Identity> identities;
identities =_index->find(user);
if(identities.size()!=0)
{
cout << user << " exist! " << endl;
throw new UserExistException();
}
Ice::Identity ident ;
ident.category ="users";
ident.name =IceUtil::generateUUID();
UserIPtr userI = new UserI(this,user,passwd,optype);
cout <<"1!" <<endl;
_evictor->add(userI,ident);
return UserPrx::uncheckedCast(_adapter->createProxy(ident));
}
catch(DatabaseException ex)
{
cout << "Database inner error!" << endl;
DatabaseException e;
e.reason = ex.reason;
throw e;
}
I create UserManagerPrx in SessionService,like this :
UserManagerPrx usermanager =UserManagerPrx::checkedCast(ic->stringToProxy("UserManager")); then return usermanager to client,
when client run
"UserPrx user = _usermanager->AddUser(userid,passwd,OpType);"
protocal trace return "object not exist",like this:
[ Protocol: sending request
message type = 0 (request)
compression status = 0 (not compressed; do not compress response, if any)
message size = 62
request id = 9
identity = UserManager
facet =
operation = AddUser
mode = 0 (normal)
context = ]
[ Protocol: received reply
message type = 2 (reply)
compression status = 0 (not compressed; do not compress response, if any)
message size = 41
request id = 9
reply status = 2 (object not exist)
identity = UserManager
facet =
operation = AddUser ]
E
my chatapp.xml snippet:
<icebox id="UserManager" exe="icebox" activation="on-demand">
<service name="UserManager" entry="Users:create">
<dbenv name="${service}"/>
<adapter name="UserManager" endpoints="tcp -h 127.0.0.1">
<object identity="UserManager" type="::NW::Users::UserManager"/>
</adapter>
</service>
</icebox>
I run icegridadmin,object list,UserManager exist!,what is problem?
who can give me a hand?
regards!
ewiniar

Reply With Quote
perator-> (this=0x901dabc)
