@Override
    public void register() throws ServiceRegistrationException {
        try {
            POA rootPOA = POAHelper.narrow(orb_.resolve_initial_references("RootPOA"));
            SimulationHandlePOA simulationServant = provider_.get();
            rootPOA.activate_object(simulationServant);
            String[] ID = SimulationHandleHelper.id().split(":");
            ((com.sun.corba.se.spi.orb.ORB) orb_).register_initial_reference(
                    ID[1],
                    rootPOA.servant_to_reference(simulationServant)
            );
            logger_.info("Simulation service registered");
        } catch (InvalidName invalidName) {
            throw new ServiceRegistrationException(invalidName);
        } catch (WrongPolicy wrongPolicy) {
            throw new ServiceRegistrationException(wrongPolicy);
        } catch (ServantNotActive servantNotActive) {
            throw new ServiceRegistrationException(servantNotActive);
        } catch (ServantAlreadyActive servantAlreadyActive) {
            throw new ServiceRegistrationException(servantAlreadyActive);
        }
    }