package org.jboss.iiop.rmi.ir;
import org.omg.CORBA.ORB;
import org.omg.CORBA.IRObject;
import org.omg.CORBA.IRObjectOperations;
import org.omg.CORBA.DefinitionKind;
import org.omg.CORBA.BAD_INV_ORDER;
import org.omg.CORBA.UserException;
import org.omg.CORBA.CompletionStatus;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.Servant;
import org.omg.PortableServer.POAPackage.WrongPolicy;
import org.omg.PortableServer.POAPackage.ServantAlreadyActive;
import org.omg.PortableServer.POAPackage.ObjectAlreadyActive;
import org.omg.PortableServer.POAPackage.ObjectNotActive;
abstract class IRObjectImpl
implements IRObjectOperations
{
protected RepositoryImpl repository;
protected DefinitionKind def_kind;
private static final org.jboss.logging.Logger logger =
org.jboss.logging.Logger.getLogger(IRObjectImpl.class);
IRObjectImpl(DefinitionKind def_kind, RepositoryImpl repository)
{
this.def_kind = def_kind;
this.repository = repository;
}
public DefinitionKind def_kind()
{
logger.trace("IRObjectImpl.def_kind() entered.");
return def_kind;
}
public void destroy()
{
throw new BAD_INV_ORDER("Cannot destroy RMI/IIOP mapping.", 2,
CompletionStatus.COMPLETED_NO);
}
abstract public IRObject getReference();
public void allDone()
throws IRConstructionException
{
getReference();
}
public void shutdown()
{
POA poa = getPOA();
try {
poa.deactivate_object(poa.reference_to_id(getReference()));
} catch (UserException ex) {
logger.warn("Could not deactivate IR object", ex);
}
}
public RepositoryImpl getRepository()
{
return repository;
}
protected ORB getORB()
{
return repository.orb;
}
protected POA getPOA()
{
return repository.poa;
}
protected abstract byte[] getObjectId();
protected org.omg.CORBA.Object servantToReference(Servant servant)
{
byte[] id = getObjectId();
try {
logger.debug("#### IRObject.srv2ref: id=[" + new String(id) + "]");
repository.poa.activate_object_with_id(id, servant);
org.omg.CORBA.Object ref = repository.poa.id_to_reference(id);
logger.debug("#### IRObject.srv2ref: returning ref.");
return ref;
} catch (WrongPolicy ex) {
logger.debug("Exception converting CORBA servant to reference", ex);
} catch (ServantAlreadyActive ex) {
logger.debug("Exception converting CORBA servant to reference", ex);
} catch (ObjectAlreadyActive ex) {
logger.debug("Exception converting CORBA servant to reference", ex);
} catch (ObjectNotActive ex) {
logger.debug("Exception converting CORBA servant to reference", ex);
}
return null;
}
}