Example usage for org.hibernate Session persist

List of usage examples for org.hibernate Session persist

Introduction

In this page you can find the example usage for org.hibernate Session persist.

Prototype

void persist(Object object);

Source Link

Document

Make a transient instance persistent.

Usage

From source file:com.client.quickstart.hibernate4.controller.ProductRegistration.java

License:Apache License

@Produces
public void register() throws Exception {
    log.info("Registering " + newProductInfo.getCompanyName());

    // using Hibernate session(Native API) and JPA entitymanager
    Session session = (Session) em.getDelegate();
    session.persist(newProductInfo);

    try {/*w w  w . j  a  v  a2  s .c o  m*/
        ProductEventSrc.fire(newProductInfo);
    } catch (Exception e) {
        log.info("Registration Failed!You may have tried to insert a duplicate Product!!!");
        e.printStackTrace();
    }

    initNewProductInfo();
}

From source file:com.codepianist.orderws.dao.AbstractDao.java

public long add(T entity) throws DatabaseException {

    Session hibernateSession = null;
    long id = -1;
    try {//from   ww  w .j  ava 2 s.  c o m
        hibernateSession = hibernate.getSession();
        Transaction transaction = hibernateSession.beginTransaction();
        hibernateSession.persist(entity);
        id = entity.getId();

        if (!transaction.wasCommitted())
            transaction.commit();

    } catch (Exception e) {
        throw new DatabaseException(e.getLocalizedMessage());
    } finally {
        hibernate.closeSession(hibernateSession);
    }
    return id;
}

From source file:com.core.controller.Kimera.java

/**
 * Persist obj in DataBase/*w ww . j ava2  s  .  c  o m*/
 * @param obj
 * @return true if obj was added suyccessfuly- False in otherwise.
 */
public boolean add(Object obj) {
    boolean resp = false;
    try {
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        s.persist(obj);
        tx.commit();
        s.close();
        resp = true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return resp;
}

From source file:com.cosylab.cdb.jdal.hibernate.plugin.HibernateWDALAlarmPluginImpl.java

License:Open Source License

private static final Location getLocation(Session session,
        alma.acs.alarmsystem.generated.Location daoLocation) {
    if (daoLocation == null)
        return null;

    Location location = (Location) session.createCriteria(Location.class)
            .add(Restrictions.eq("building", daoLocation.getBuilding()))
            .add(Restrictions.eq("floor", daoLocation.getFloor()))
            .add(Restrictions.eq("room", daoLocation.getRoom()))
            .add(Restrictions.eq("mnemonic", daoLocation.getMnemonic()))
            .add(Restrictions.eq("locationPosition", daoLocation.getPosition())).uniqueResult();

    if (location == null) {
        location = new Location();
        location.setBuilding(daoLocation.getBuilding());
        location.setFloor(daoLocation.getFloor());
        location.setRoom(daoLocation.getRoom());
        location.setMnemonic(daoLocation.getMnemonic());
        location.setLocationPosition(daoLocation.getPosition());
        session.persist(location);
    }/*from  w w w  .  ja v  a2  s.c o  m*/

    return location;
}

From source file:com.cosylab.cdb.jdal.hibernate.plugin.HibernateWDALAlarmPluginImpl.java

License:Open Source License

public static void importAlarms(Session session, Configuration config, ConfigurationAccessor conf,
        Logger m_logger) throws Exception {
    // clean up whatever is in the session
    session.getTransaction().commit();// w  w  w .  j  av  a 2s .co  m
    session.clear();
    session.beginTransaction();

    // create DAOs
    ACSAlarmDAOImpl alarmDAO = new ACSAlarmDAOImpl(m_logger);
    ACSCategoryDAOImpl categoryDAO = new ACSCategoryDAOImpl(m_logger, alarmDAO);
    ACSResponsiblePersonDAOImpl responsiblePersonDAO = new ACSResponsiblePersonDAOImpl();

    // configure
    alarmDAO.setConfAccessor(conf);
    alarmDAO.setSurveillanceAlarmId("SURVEILLANCE:SOURCE:1");
    alarmDAO.setResponsiblePersonDAO(responsiblePersonDAO);

    categoryDAO.setConfAccessor(conf);
    //categoryDAO.setCategoryTreeRoot("ACS");
    categoryDAO.setCategoryTreeRoot("ROOT");
    categoryDAO.setSurveillanceCategoryPath("ACS.SURVEILLANCE");

    responsiblePersonDAO.setAlarmDAO(alarmDAO);

    // load
    final List<alma.acs.alarmsystem.generated.FaultFamily> families = alarmDAO.loadAlarms();
    final alma.acs.alarmsystem.generated.Category[] categories = categoryDAO.loadCategories();
    Map<String, ArrayList<AlarmCategory>> categoryFaultFamilyLinks = new HashMap<String, ArrayList<AlarmCategory>>();

    // store categories
    if (categories != null)
        for (alma.acs.alarmsystem.generated.Category daoCategory : categories) {
            AlarmCategory category = (AlarmCategory) session.createCriteria(AlarmCategory.class)
                    .add(Restrictions.eq("configuration", config))
                    .add(Restrictions.eq("alarmCategoryName", daoCategory.getPath())).uniqueResult();
            if (category == null) {
                category = new AlarmCategory();
                category.setAlarmCategoryName(daoCategory.getPath());
                category.setConfiguration(config);
            }
            category.setDescription(nonEmptyString(daoCategory.getDescription(), "(description)"));
            category.setPath(daoCategory.getPath());
            category.setIsDefault(daoCategory.getIsDefault());
            session.saveOrUpdate(category);

            // clear first (in case of update)
            category.getFaultFamilies().clear();

            // cache mappings
            String[] faultFamilies = daoCategory.getAlarms().getFaultFamily();
            for (String faultFamily : faultFamilies) {
                ArrayList<AlarmCategory> list = categoryFaultFamilyLinks.get(faultFamily);
                if (list == null) {
                    list = new ArrayList<AlarmCategory>();
                    categoryFaultFamilyLinks.put(faultFamily, list);
                }
                list.add(category);
            }
        }

    // store fault families and contacts, etc.
    if (families != null)
        for (alma.acs.alarmsystem.generated.FaultFamily family : families) {
            final alma.acs.alarmsystem.generated.Contact daoContact = family.getContact();
            Contact contact = (Contact) session.createCriteria(Contact.class)
                    .add(Restrictions.eq("contactName", daoContact.getName())).uniqueResult();
            if (contact == null) {
                contact = new Contact();
                contact.setContactName(nonEmptyString(daoContact.getName(), "(empty)"));
                contact.setEmail(daoContact.getEmail());
                contact.setGsm(daoContact.getGsm());
                session.persist(contact);
            }
            // If contact exist, let's check if this contact contains different information. If so,
            // issue an error
            else {
                if (!trimAndNullToEmpty(contact.getEmail()).equals(trimAndNullToEmpty(daoContact.getEmail()))
                        || !trimAndNullToEmpty(contact.getGsm())
                                .equals(trimAndNullToEmpty(daoContact.getGsm()))) {
                    throw new RuntimeException(
                            "Data stored for contact '" + contact.getContactName() + "' in TMCDB "
                                    + "does not match that comming from the 'contact' node of fault family '"
                                    + family.getName() + "'. " + "TMCDB: <" + contact.getEmail() + ", "
                                    + contact.getGsm() + ">, " + "CDB: <" + daoContact.getEmail() + ", "
                                    + daoContact.getGsm() + ">");
                }
            }

            FaultFamily faultFamily = (FaultFamily) session.createCriteria(FaultFamily.class)
                    .add(Restrictions.eq("configuration", config))
                    .add(Restrictions.eq("familyName", family.getName())).uniqueResult();
            if (faultFamily == null) {
                faultFamily = new FaultFamily();
                faultFamily.setFamilyName(family.getName());
                faultFamily.setConfiguration(config);
            }
            faultFamily.setAlarmSource(family.getAlarmSource());
            faultFamily.setHelpURL(family.getHelpUrl());
            faultFamily.setContact(contact);
            session.saveOrUpdate(faultFamily);

            // clear first (in case of update)   
            faultFamily.getAlarmCategories().clear();
            ArrayList<AlarmCategory> list = categoryFaultFamilyLinks.get(family.getName());
            if (list != null)
                for (AlarmCategory category : list) {
                    category.getFaultFamilies().add(faultFamily);
                    faultFamily.getAlarmCategories().add(category);
                    session.update(category);
                    session.update(faultFamily);
                }

            // default fault member
            if (family.getFaultMemberDefault() != null) {
                DefaultMember defaultMember = null;
                // there can be only one
                if (faultFamily.getDefaultMembers().size() != 0)
                    defaultMember = faultFamily.getDefaultMembers().iterator().next();
                if (defaultMember == null) {
                    defaultMember = new DefaultMember();
                    defaultMember.setFaultFamily(faultFamily);
                }
                defaultMember.setLocation(getLocation(session, family.getFaultMemberDefault().getLocation()));
                session.saveOrUpdate(defaultMember);
            } else {
                for (DefaultMember memberToRemove : faultFamily.getDefaultMembers()) {
                    faultFamily.getDefaultMembers().remove(memberToRemove);
                    session.delete(memberToRemove);
                }
                session.update(faultFamily);
            }

            // copy all
            Set<FaultMember> faultMembersToRemove = new HashSet<FaultMember>(faultFamily.getFaultMembers());

            // add fault members
            for (alma.acs.alarmsystem.generated.FaultMember daoFaultMember : family.getFaultMember()) {
                FaultMember faultMember = (FaultMember) session.createCriteria(FaultMember.class)
                        .add(Restrictions.eq("memberName", daoFaultMember.getName()))
                        .add(Restrictions.eq("faultFamily", faultFamily)).uniqueResult();
                faultMembersToRemove.remove(faultMember);
                if (faultMember == null) {
                    faultMember = new FaultMember();
                    faultMember.setMemberName(daoFaultMember.getName());
                    faultMember.setFaultFamily(faultFamily);
                }
                faultMember.setLocation(getLocation(session, daoFaultMember.getLocation()));
                session.saveOrUpdate(faultMember);
            }

            if (faultMembersToRemove.size() > 0) {
                for (FaultMember faultMemberToRemove : faultMembersToRemove) {
                    faultFamily.getFaultMembers().remove(faultMemberToRemove);
                    session.delete(faultMemberToRemove);
                }
                session.update(faultFamily);
            }

            // copy all
            Set<FaultCode> faultCodesToRemove = new HashSet<FaultCode>(faultFamily.getFaultCodes());

            // add fault codes
            for (alma.acs.alarmsystem.generated.FaultCode daoFaultCode : family.getFaultCode()) {
                FaultCode faultCode = (FaultCode) session.createCriteria(FaultCode.class)
                        .add(Restrictions.eq("faultFamily", faultFamily))
                        .add(Restrictions.eq("codeValue", daoFaultCode.getValue())).uniqueResult();
                faultCodesToRemove.remove(faultCode);
                if (faultCode == null) {
                    faultCode = new FaultCode();
                    faultCode.setFaultFamily(faultFamily);
                    faultCode.setCodeValue(daoFaultCode.getValue());
                }
                faultCode.setPriority(daoFaultCode.getPriority());
                faultCode.setCause(daoFaultCode.getCause());
                faultCode.setAction(daoFaultCode.getAction());
                faultCode.setConsequence(daoFaultCode.getConsequence());
                faultCode.setProblemDescription(
                        nonEmptyString(daoFaultCode.getProblemDescription(), "(description)"));
                faultCode.setIsInstant(daoFaultCode.getInstant());
                session.saveOrUpdate(faultCode);
            }

            if (faultCodesToRemove.size() > 0) {
                for (FaultCode faultCodeToRemove : faultCodesToRemove) {
                    faultFamily.getFaultCodes().remove(faultCodeToRemove);
                    session.delete(faultCodeToRemove);
                }
                session.update(faultFamily);
            }
        }

    try {
        alma.alarmsystem.alarmmessage.generated.ReductionDefinitions redDefs = alarmDAO
                .getReductionDefinitions();
        if (redDefs != null) {
            if (redDefs.getLinksToCreate() != null)
                saveReductionLinks(session, config, redDefs.getLinksToCreate().getReductionLink(),
                        ReductionLinkAction.CREATE);
            if (redDefs.getLinksToRemove() != null)
                saveReductionLinks(session, config, redDefs.getLinksToRemove().getReductionLink(),
                        ReductionLinkAction.REMOVE);

            int count = 0;
            if (redDefs.getThresholds() != null) {
                alma.alarmsystem.alarmmessage.generated.Threshold[] thresholds = redDefs.getThresholds()
                        .getThreshold();
                for (alma.alarmsystem.alarmmessage.generated.Threshold threshold : thresholds) {
                    // also commit first
                    if (count % 100 == 0) {
                        session.getTransaction().commit();
                        session.clear(); // cleanup first level cache
                        session.beginTransaction();
                        config = (Configuration) session.get(Configuration.class, config.getConfigurationId());
                    }

                    count++;

                    alma.acs.tmcdb.AlarmDefinition alarm = getAlarmDefinition(session, config,
                            threshold.getAlarmDefinition(), false);
                    alma.acs.tmcdb.ReductionThreshold t = (alma.acs.tmcdb.ReductionThreshold) session
                            .createQuery("from ReductionThreshold " + "where AlarmDefinitionId = "
                                    + alarm.getAlarmDefinitionId())
                            .uniqueResult();

                    if (t == null) {
                        t = new ReductionThreshold();
                        t.setAlarmDefinition(alarm);
                        t.setConfiguration(config);
                    }
                    t.setValue(threshold.getValue());
                    session.saveOrUpdate(t);
                }
            }
        }
    } finally {
        // clear cache (to free memory)
        adCache.clear();
    }
}

From source file:com.cosylab.cdb.jdal.hibernate.plugin.HibernateWDALAlarmPluginImpl.java

License:Open Source License

private static alma.acs.tmcdb.AlarmDefinition getAlarmDefinition(Session session, Configuration config,
        alma.alarmsystem.alarmmessage.generated.AlarmDefinition alarmDef, boolean allowFMCreation) {
    // cache check
    ADWrapper wrappedAD = new ADWrapper(alarmDef);
    alma.acs.tmcdb.AlarmDefinition cachedAD = adCache.get(wrappedAD);
    if (cachedAD != null)
        return cachedAD;

    alma.acs.tmcdb.AlarmDefinition alarm = (alma.acs.tmcdb.AlarmDefinition) session
            .createCriteria(alma.acs.tmcdb.AlarmDefinition.class)
            .add(Restrictions.eq("faultFamily", alarmDef.getFaultFamily()))
            .add(Restrictions.eq("faultMember", alarmDef.getFaultMember()))
            .add(Restrictions.eq("faultCode", String.valueOf(alarmDef.getFaultCode()))).uniqueResult(); // TODO remove
    if (alarm == null) {
        alarm = new alma.acs.tmcdb.AlarmDefinition();
        alarm.setConfiguration(config);//from  w w w. j a va2  s . c om
        alarm.setFaultFamily(alarmDef.getFaultFamily());
        alarm.setFaultMember(alarmDef.getFaultMember());
        alarm.setFaultCode(String.valueOf(alarmDef.getFaultCode())); // TODO remove
        session.persist(alarm);
    }

    // put to cache
    adCache.put(wrappedAD, alarm);

    return alarm;
}

From source file:com.cosylab.cdb.jdal.HibernateWDALImpl.java

License:Open Source License

private void loadSchemas(Session session) throws Throwable {

    String schemas = DALImpl.getSchemas(m_root, m_logger);
    if (schemas == null)
        return;/* w  w  w  .  j  a v a2s  .  com*/

    StringTokenizer tokenizer = new StringTokenizer(schemas);
    while (tokenizer.hasMoreTokens()) {
        String urn = tokenizer.nextToken();
        String fileName = tokenizer.nextToken();

        // ignore all DTDs and files ending with XMLSchema.xsd
        if (fileName.toLowerCase().endsWith(".dtd") || fileName.endsWith("XMLSchema.xsd"))
            continue;

        Schemas schemaRecord = null;
        try {
            schemaRecord = (Schemas) session.createCriteria(Schemas.class).add(Restrictions.eq("URN", urn))
                    .add(Restrictions.eq("configuration", config)).uniqueResult();
        } catch (HibernateException ex) {
            // adding this to better understand a java.sql.BatchUpdateException: ORA-31001: Invalid resource handle or path name "/XMLSchema.dtd"
            m_logger.log(Level.INFO, "Failed to select (check existence of) schema with URN='" + urn
                    + "' in the database. The schema file to load would be " + fileName);
            throw ex;
        }
        if (schemaRecord == null) {
            final BufferedReader reader = new BufferedReader(new FileReader(fileName));
            final StringBuffer file = new StringBuffer();
            String line;
            while ((line = reader.readLine()) != null)
                file.append(line).append('\n');

            schemaRecord = new Schemas();
            schemaRecord.setURN(urn);
            schemaRecord.setConfiguration(config);
            schemaRecord.setSchema(file.toString());
            session.persist(schemaRecord);
        }
    }

}

From source file:com.cosylab.cdb.jdal.HibernateWDALImpl.java

License:Open Source License

protected boolean loadXMLCDB(String args[], ORB orb, POA poa, String configName) {
    m_logger.info("Reading configuration from XML CDB...");

    try {/*  ww w  .  ja  va  2 s.com*/
        loadInProgress.set(true);

        /* create new poa for xmlCDB */
        org.omg.CORBA.Policy[] policies = new org.omg.CORBA.Policy[] {
                poa.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID) };

        POA xmlCDBPOA = poa.create_POA("xmlCDBPOA", poa.the_POAManager(), policies);

        for (int i = 0; i < policies.length; i++)
            policies[i].destroy();

        // disable cache for XML CDB DAL (important)
        String[] newArgs = new String[args.length + 2];
        System.arraycopy(args, 0, newArgs, 0, args.length);
        newArgs[args.length] = "-disableRecoveryFile";
        newArgs[args.length + 1] = "-disableCache";

        final WDALImpl servantDelegate = new WDALImpl(newArgs, orb, xmlCDBPOA, m_logger);
        final Servant wdalImplServant = new WJDALPOATie(servantDelegate);
        //         WDALImpl wdalImplServant = new WDALImpl(args, orb, xmlCDBPOA, m_logger);
        xmlCDBPOA.activate_object_with_id(new byte[] { 'x', 'm', 'l', 'C', 'D', 'B' }, wdalImplServant);
        org.omg.CORBA.Object ref = xmlCDBPOA.servant_to_reference(wdalImplServant);
        final JDAL xmlCDB_ = JDALHelper.narrow(ref);

        // -----

        // get set of BACI property attributes (non-extras)
        String[] baciPropertyAttributes = DOMJavaClassIntrospector.getAccessibleFields(new BACIPropertyType(),
                true);
        Set<String> baciPropertyAttributesSet = new HashSet<String>();
        for (String attribute : baciPropertyAttributes) {
            baciPropertyAttributesSet.add(attribute);
        }

        XSDElementTypeResolver xsdElementTypeResolver = new XSDElementTypeResolver(m_root, m_logger);
        Set<String> nonControlDeviceSet = new TreeSet<String>();
        Set<String> characteristicsDeviceSet = new TreeSet<String>();

        Set<String> processedComponentTypes = new HashSet<String>();
        // -----

        CDBAccess cdbAccess = new CDBAccess(orb, m_logger);
        cdbAccess.setDAL(xmlCDB_);

        try {
            hibernateUtil.beginTransaction();
            Session session = hibernateUtil.getSession();
            schemaResourceResolverLoader.setSession(session);

            // check if configuration already exists
            config = (Configuration) session.createCriteria(Configuration.class)
                    .add(Restrictions.eq("configurationName", configName)).uniqueResult();
            if (config != null) {
                m_logger.warning("Configuration with name '" + configName
                        + "' already exists. Skipping loading XML stage.");
                return false;
            }

            // create configuration
            config = new Configuration();
            config.setConfigurationName(configName);
            config.setFullName(configName);
            config.setActive(true);
            config.setCreationTime(Calendar.getInstance().getTime());
            config.setDescription("Imported from CDB by HibernateWDAL");
            session.persist(config);

            configId = config.getConfigurationId();

            // plugin importPrologue()
            if (plugin != null) {
                try {
                    plugin.importPrologue(session, config, cdbAccess);
                } catch (Throwable th) {
                    // @TODO decent exception log. Is OK to swallow th?
                    th.printStackTrace();
                }
            }

            // load all schemas            
            loadSchemas(session);

            try {
                //DAO managerDAO = xmlCDB.get_DAO_Servant("MACI/Managers/Manager");
                DAOProxy managerDAO = cdbAccess.createDAO("MACI/Managers/Manager");

                LoggingConfig managerLoggingConfig = persistLoggingConfig(session, managerDAO, false);

                Manager manager = new Manager();
                manager.setConfiguration(config);
                manager.setLoggingConfig(managerLoggingConfig);
                manager.setStartup(managerDAO.get_string("Startup"));
                manager.setServiceComponents(managerDAO.get_string("ServiceComponents"));
                try {
                    manager.setServiceDaemons(managerDAO.get_string("ServiceDaemons"));
                } catch (CDBFieldDoesNotExistEx e) {
                    manager.setServiceDaemons(""); // Optional, but has no default!
                }
                manager.setTimeout((int) managerDAO.get_double("Timeout"));
                manager.setClientPingInterval((int) managerDAO.get_double("ClientPingInterval"));
                manager.setAdministratorPingInterval((int) managerDAO.get_double("AdministratorPingInterval"));
                manager.setContainerPingInterval((int) managerDAO.get_double("ContainerPingInterval"));
                manager.setServerThreads((byte) managerDAO.get_long("ServerThreads"));
                session.persist(manager);
                m_logger.info("Imported Manager from XML.");
            } catch (Throwable e) {
                m_logger.log(Level.WARNING,
                        "MACI/Managers/Manager record does not exist or misconfigured, using defaults.", e);
            }

            /*
            String containers = xmlCDB.list_nodes("MACI/Containers");
            StringTokenizer tokenizer = new StringTokenizer(containers);
            while (tokenizer.hasMoreTokens())
            {
               String containerName = tokenizer.nextToken();
            */
            StringTokenizer tokenizer;
            String[] containerSubnodes = getSubNodes(xmlCDB_, "MACI/Containers");
            for (String containerName : containerSubnodes) {
                //DAO containerDAO = xmlCDB.get_DAO_Servant("MACI/Containers/"+containerName);
                DAOProxy containerDAO = cdbAccess.createDAO("MACI/Containers/" + containerName);

                // check if real config, otherwice skip
                if (readLong(containerDAO, "LoggingConfig/minLogLevel", -1) < 0)
                    continue;

                LoggingConfig loggingConfig = persistLoggingConfig(session, containerDAO, true);

                Computer hostComputer = null;
                String computerHostName = readString(containerDAO, "DeployInfo/Host", null);
                if (computerHostName != null) {
                    hostComputer = (Computer) session.createCriteria(Computer.class)
                            .add(Restrictions.eq("networkName", computerHostName)).uniqueResult();
                    if (hostComputer == null) {
                        // NOTE: we add some dummy data as computer name, realtime flag, CPU type here
                        String computerName = computerHostName;
                        int dotPos = computerName.indexOf('.');
                        if (dotPos > 0)
                            computerName = computerName.substring(0, dotPos);
                        hostComputer = new Computer();
                        hostComputer.setName(computerName);
                        hostComputer.setConfiguration(config);
                        hostComputer.setNetworkName(computerHostName);
                        hostComputer.setRealTime(false);
                        hostComputer.setDiskless(false);
                        hostComputer.setProcessorType(ComputerProcessorType.UNI);
                        hostComputer.setPhysicalLocation(null);
                        session.persist(hostComputer);
                    }
                }

                final String containerPath;
                int hierarchySeparatorPos = containerName.lastIndexOf('/');
                if (hierarchySeparatorPos != -1) {
                    containerPath = containerName.substring(0, hierarchySeparatorPos);
                    containerName = containerName.substring(hierarchySeparatorPos + 1);
                } else
                    containerPath = "/"; // for Oracle

                Container container = new Container();
                container.setContainerName(containerName);
                container.setPath(containerPath);
                container.setConfiguration(config);
                container.setLoggingConfig(loggingConfig);
                container.setComputer(hostComputer);

                container.setImplLang(
                        ContainerImplLang.valueOfForEnum(readString(containerDAO, "ImplLang", "cpp"))); // cpp is default, since field is required
                container.setTypeModifiers(readString(containerDAO, "DeployInfo/TypeModifiers", null));
                container.setStartOnDemand(
                        Boolean.valueOf(readString(containerDAO, "DeployInfo/StartOnDemand", "false")));

                container.setRealTime(false);
                container.setRealTimeType(null);
                container.setKernelModuleLocation(null);
                container.setKernelModule(null);

                container.setKeepAliveTime(readLong(containerDAO, "DeployInfo/KeepAliveTime", -1));
                container.setServerThreads(containerDAO.get_long("ServerThreads"));
                container.setManagerRetry(containerDAO.get_long("ManagerRetry"));
                container.setCallTimeout((int) containerDAO.get_double("Timeout"));
                container.setRecovery(Boolean.valueOf(containerDAO.get_string("Recovery")));

                int pingInterval = readLong(containerDAO, "PingInterval", Integer.MIN_VALUE);
                if (pingInterval != Integer.MIN_VALUE)
                    container.setPingInterval(pingInterval);
                container.setAutoloadSharedLibs(containerDAO.get_string("Autoload"));
                session.persist(container);
                // convert the "Flags" string of concatenated options to ContainerStartupOption 
                String containerStartFlags = readString(containerDAO, "DeployInfo/Flags", null);
                ContainerStartupOptionHelper containerStartupOptionHelper = new ContainerStartupOptionHelper(
                        m_logger);
                Collection<ContainerStartupOption> contOptions = containerStartupOptionHelper
                        .convertFlagsString(container, containerStartFlags);
                for (ContainerStartupOption containerStartupOption : contOptions) {
                    session.persist(containerStartupOption);
                }
            }
            if (containerSubnodes.length > 0) {
                m_logger.info("Imported Containers from XML.");
            } else {
                m_logger.info("No XML container data found.");
            }

            // set of all existing component names
            // used to generate *, *1, *2 names, as CDB does
            // NOTE: initial set is not filled with component names that are already in the DB
            Set<String> existingComponentNames = new HashSet<String>();

            LinkedHashSet nodes = new LinkedHashSet();

            //DAO componentDAO = xmlCDB.get_DAO_Servant("MACI/Components");
            DAOProxy componentDAO = null;

            try {
                componentDAO = cdbAccess.createDAO("MACI/Components");

                // current
                nodes.add("/");
                String[] subnodes = getSubnodes(xmlCDB_, "MACI/Components");
                if (subnodes != null)
                    for (int i = 0; i < subnodes.length; i++)
                        nodes.add(subnodes[i]);
            } catch (RuntimeException rte) {
                m_logger.warning("Failed to read MACI/Components DAO, skipping...");
            }

            Iterator iter = nodes.iterator();
            while (iter.hasNext()) {
                String path = iter.next().toString();
                String prefix;
                if (path.length() == 0 || path.equals("/"))
                    prefix = "";
                else
                    prefix = path + "/";

                String components = (String) componentDAO.get_field_data(prefix + "_elements");

                // store "original" path/prefix (it can be changed)
                final String originalPath = path;
                final String originalPrefix = prefix;

                tokenizer = new StringTokenizer(components, ",");
                while (tokenizer.hasMoreTokens()) {
                    // set original values
                    path = originalPath;
                    prefix = originalPrefix;

                    String componentName = prefix + tokenizer.nextToken();

                    String realComponentName = readString(componentDAO, componentName + "/Name", null);
                    if (realComponentName == null)
                        continue;

                    // hierarchical name fix
                    int hierarchySeparatorPos = realComponentName.lastIndexOf('/');
                    if (hierarchySeparatorPos != -1)
                        realComponentName = realComponentName.substring(hierarchySeparatorPos + 1);

                    // handle duplicate names, i.e. "*"
                    // a "trick" of adding "/" to path is being used to achieve uniques
                    // "/////" is the same as "/" for TMCDB, but not for DB
                    while (existingComponentNames.contains(prefix + realComponentName)) {
                        path = path + "/";
                        prefix = prefix + "/";
                    }
                    existingComponentNames.add(prefix + realComponentName);

                    int componentContainerId = -1;
                    Container tmpComponentContainer = null;
                    String containerName = readString(componentDAO, componentName + "/Container", null);
                    if (containerName != null && !containerName.equals("*")) {

                        String containerPath;
                        hierarchySeparatorPos = containerName.lastIndexOf('/');
                        if (hierarchySeparatorPos != -1) {
                            containerPath = containerName.substring(0, hierarchySeparatorPos);
                            containerName = containerName.substring(hierarchySeparatorPos + 1);
                        } else {
                            containerPath = "/"; // for Oracle
                        }

                        Container container = (Container) session.createCriteria(Container.class)
                                .add(Restrictions.eq("configuration", config))
                                .add(Restrictions.eq("containerName", containerName))
                                .add(Restrictions.eq("path", containerPath)).uniqueResult();
                        if (container != null) {
                            componentContainerId = container.getContainerId();
                            tmpComponentContainer = container;
                        } else {
                            LoggingConfig loggingConfig = new LoggingConfig();
                            loggingConfig.setMinLogLevelDefault((byte) 2);
                            loggingConfig.setMinLogLevelLocalDefault((byte) 2);
                            loggingConfig.setCentralizedLogger("Log");
                            loggingConfig.setDispatchPacketSize((byte) 10);
                            loggingConfig.setImmediateDispatchLevel((byte) 10);
                            loggingConfig.setFlushPeriodSeconds((byte) 10);
                            loggingConfig.setMaxLogQueueSize(1000);
                            loggingConfig.setMaxLogsPerSecond(-1);
                            session.persist(loggingConfig);

                            container = new Container();
                            container.setContainerName(containerName);
                            container.setPath(containerPath);
                            container.setConfiguration(config);
                            container.setLoggingConfig(loggingConfig);
                            container.setComputer(null);
                            container.setImplLang(ContainerImplLang
                                    .valueOfForEnum(readString(componentDAO, "ImplLang", "cpp"))); // cpp is default, since field is required
                            container.setTypeModifiers(DUMMY_CONTAINER_FLAG);
                            container.setRealTime(false);
                            container.setRealTimeType(null);
                            container.setKernelModuleLocation(null);
                            container.setKernelModule(null);
                            container.setKeepAliveTime(-1);
                            container.setServerThreads(5);
                            container.setManagerRetry(10);
                            container.setCallTimeout(2);
                            container.setRecovery(false);
                            container.setAutoloadSharedLibs(null);
                            session.persist(container);
                            componentContainerId = container.getContainerId();
                            tmpComponentContainer = container;
                        }
                    }

                    String xml = null;
                    boolean almaBranchDoesNotExist = componentName.startsWith("*");
                    boolean forceSubcomponentCheck = false;

                    int typeId;
                    String type = componentDAO.get_string(componentName + "/Type");
                    DAOProxy componentConfigurationDAO = null; // pulled out for performance optimization, to avoid reading it twice in many cases
                    Schemas schema = null;

                    {
                        String schemaURN = null;

                        // check if it is a non-control device, simply check for existence of "ControlDevice" element
                        if (!almaBranchDoesNotExist) {
                            try {
                                // @TODO: Suppress the NOTICE log (or lower its level) which we get from the CDB code if there is no component configuration under the CDB/alma/ branch.
                                //        NOTICE [CDB-RDB] Curl 'alma/SCHEDULING_MASTERSCHEDULER' does not exist.
                                componentConfigurationDAO = cdbAccess
                                        .createDAO(COMPONENT_TREE_NAME + "/" + componentName);

                                schemaURN = componentConfigurationDAO.get_string("xmlns");

                                if (!processedComponentTypes.contains(type)) {
                                    boolean isControlDevice = !TMCDB_ACS_ONLY
                                            && xsdElementTypeResolver.doesExtend(schemaURN, "ControlDevice");
                                    m_logger.fine(schemaURN + " does extend Control? " + isControlDevice);
                                    if (!isControlDevice)
                                        nonControlDeviceSet.add(type);

                                    boolean isCharateristicsComponent = xsdElementTypeResolver
                                            .doesExtend(schemaURN, "CharacteristicComponent")
                                            || (TMCDB_ACS_ONLY && xsdElementTypeResolver.doesExtend(schemaURN,
                                                    "ControlDevice")); // sadly ControlDevice does not extend CharacteristicComponent XSD
                                    m_logger.fine(schemaURN + " does extend CharacteristicsComponent? "
                                            + isCharateristicsComponent);
                                    if (isCharateristicsComponent)
                                        characteristicsDeviceSet.add(type);

                                    processedComponentTypes.add(type);
                                }
                            } catch (Throwable th) {
                                almaBranchDoesNotExist = true;

                                // obviously not a control device (no component, i.e. alma, branch)
                                // NOTE: if this device is missing alma branch data (and as control device it should have it), 
                                // this type will not be identified as control device at all, also for all devices of this type
                                // (ComponentType is filled at first occurrence of the type) 
                                if (th.getCause() instanceof CDBRecordDoesNotExistEx) {
                                    // does not exists, this is OK... do not complain
                                } else if (th instanceof CDBFieldDoesNotExistEx) {
                                    // field does not exist, but it might have sub-components
                                    forceSubcomponentCheck = true;
                                } else {
                                    m_logger.log(AcsLogLevel.WARNING, "Failed to read component configuration: "
                                            + COMPONENT_TREE_NAME + "/" + componentName, th);
                                }
                            }
                        }

                        // get the Schema identifier for the schemaURN
                        schema = (Schemas) session.createCriteria(Schemas.class)
                                .add(Restrictions.eq("URN", schemaURN))
                                .add(Restrictions.eq("configuration", config)).uniqueResult();
                        if (schema == null && !almaBranchDoesNotExist)
                            m_logger.severe("Component " + componentName + " of XSD type " + schemaURN
                                    + " has no XSD file.");

                        ComponentType componentType = (ComponentType) session
                                .createCriteria(ComponentType.class).add(Restrictions.eq("IDL", type))
                                .uniqueResult();
                        if (componentType == null) {
                            componentType = new ComponentType();
                            componentType.setIDL(type);
                            session.saveOrUpdate(componentType);
                        }

                        typeId = componentType.getComponentTypeId();
                    }

                    boolean isControlDevice = !nonControlDeviceSet.contains(type) && !almaBranchDoesNotExist;
                    boolean isCharateristicsDevice = characteristicsDeviceSet.contains(type);
                    if (!isControlDevice && !isCharateristicsDevice && xml == null && !almaBranchDoesNotExist) {
                        xml = getComponentXML(xmlCDB_, componentName, xml);
                    }

                    Component component = new Component();
                    // TODO this can be optimized!!!
                    component.setComponentType((ComponentType) session.get(ComponentType.class, typeId));
                    component.setComponentName(realComponentName);
                    component.setConfiguration(config);
                    //                   component.setContainerId(componentContainerId);
                    component.setContainer(tmpComponentContainer); // TODO verify this and clean up
                    component.setImplLang(ComponentImplLang
                            .valueOfForEnum(readString(componentDAO, componentName + "/ImplLang", "cpp"))); // cpp is default, since field is required
                    component.setRealTime(false);
                    component.setCode(componentDAO.get_string(componentName + "/Code"));
                    component.setPath(path);
                    component.setIsAutostart(
                            Boolean.parseBoolean(componentDAO.get_string(componentName + "/Autostart")));
                    component.setIsDefault(
                            Boolean.parseBoolean(componentDAO.get_string(componentName + "/Default")));
                    component.setIsStandaloneDefined(true);
                    component.setIsControl(isControlDevice);
                    component.setKeepAliveTime(componentDAO.get_long(componentName + "/KeepAliveTime"));
                    component.setMinLogLevel(
                            (byte) readLong(componentDAO, componentName + "/ComponentLogger/minLogLevel", -1));
                    component.setMinLogLevelLocal((byte) readLong(componentDAO,
                            componentName + "/ComponentLogger/minLogLevelLocal", -1));
                    component.setXMLDoc(xml);
                    component.setURN(schema == null ? null : schema.getURN());
                    session.persist(component);
                    session.flush();

                    // try to create alma branch (if available)
                    if ((isControlDevice || isCharateristicsDevice) && !almaBranchDoesNotExist) {
                        try {
                            if (componentConfigurationDAO == null) {
                                componentConfigurationDAO = cdbAccess
                                        .createDAO(COMPONENT_TREE_NAME + "/" + componentName);
                            }
                            if (plugin != null && isControlDevice) {
                                plugin.controlDeviceImportEpilogue(session, config, cdbAccess, componentName,
                                        component);
                            }

                            Set<String> propertySet = new TreeSet<String>();
                            String[] propertyCandidates = componentConfigurationDAO.get_string_seq("_elements");
                            for (String propertyName : propertyCandidates) {
                                // check if really property
                                if (readString(componentConfigurationDAO, propertyName + "/format",
                                        null) != null) {
                                    m_logger.finer("Adding property " + propertyName);
                                    propertySet.add(propertyName);
                                }
                            }

                            if (propertySet.size() > 0) {
                                String[] properties = propertySet.toArray(new String[propertySet.size()]);

                                String defaultPropertyNs = componentConfigurationDAO.get_string("xmlns");
                                String[] propertyNs = new String[properties.length];
                                for (int i = 0; i < properties.length; i++)
                                    propertyNs[i] = readString(componentConfigurationDAO,
                                            properties[i] + "/xmlns", defaultPropertyNs);

                                ExtraDataFeatureUtil extraDataFeatureUtil = new ExtraDataFeatureUtil(m_logger);

                                String[] propertyTypes = xsdElementTypeResolver.getElementTypes(
                                        componentConfigurationDAO.getElementName(), propertyNs, properties);
                                for (int i = 0; i < properties.length; i++) {
                                    String propertyName = properties[i];
                                    if (propertyTypes[i] != null && propertyTypes[i].endsWith("Seq")) {
                                        propertyTypes[i] = propertyTypes[i].substring(0,
                                                propertyTypes[i].length() - 3);
                                    }

                                    BACIProperty baciPropertyType = new BACIProperty();
                                    baciPropertyType.setComponent(component);
                                    baciPropertyType.setPropertyName(propertyName);
                                    baciPropertyType.setDescription(nonEmptyString(
                                            componentConfigurationDAO.get_string(propertyName + "/description"),
                                            "-"));
                                    baciPropertyType.setFormat(nonEmptyString(
                                            componentConfigurationDAO.get_string(propertyName + "/format"),
                                            "%s"));
                                    baciPropertyType.setUnits(nonEmptyString(
                                            componentConfigurationDAO.get_string(propertyName + "/units"),
                                            "-"));
                                    baciPropertyType.setResolution(nonEmptyString(
                                            componentConfigurationDAO.get_string(propertyName + "/resolution"),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));

                                    baciPropertyType.setArchive_priority(componentConfigurationDAO
                                            .get_long(propertyName + "/archive_priority"));
                                    baciPropertyType.setArchive_min_int(componentConfigurationDAO
                                            .get_double(propertyName + "/archive_min_int"));
                                    baciPropertyType.setArchive_max_int(componentConfigurationDAO
                                            .get_double(propertyName + "/archive_max_int"));
                                    baciPropertyType
                                            .setArchive_suppress(Boolean.parseBoolean(componentConfigurationDAO
                                                    .get_string(propertyName + "/archive_suppress")));
                                    baciPropertyType.setArchive_mechanism(
                                            BACIPropArchMech.valueOfForEnum(nonEmptyString(
                                                    componentConfigurationDAO
                                                            .get_string(propertyName + "/archive_mechanism"),
                                                    "monitor_collector")));
                                    baciPropertyType.setDefault_timer_trig(componentConfigurationDAO
                                            .get_double(propertyName + "/default_timer_trig"));
                                    baciPropertyType.setMin_timer_trig(componentConfigurationDAO
                                            .get_double(propertyName + "/min_timer_trig"));

                                    baciPropertyType
                                            .setInitialize_devio(Boolean.parseBoolean(componentConfigurationDAO
                                                    .get_string(propertyName + "/initialize_devio")));

                                    /* P<type> */
                                    baciPropertyType.setMin_delta_trig(readDouble(componentConfigurationDAO,
                                            propertyName + "/min_delta_trig", 0.0));
                                    baciPropertyType.setDefault_value(nonEmptyString(componentConfigurationDAO
                                            .get_string(propertyName + "/default_value"), "-"));

                                    baciPropertyType
                                            .setGraph_min(limitDouble(readDouble(componentConfigurationDAO,
                                                    propertyName + "/graph_min", null)));
                                    baciPropertyType
                                            .setGraph_max(limitDouble(readDouble(componentConfigurationDAO,
                                                    propertyName + "/graph_max", null)));
                                    baciPropertyType.setMin_step(readDouble(componentConfigurationDAO,
                                            propertyName + "/min_step", null));
                                    baciPropertyType.setArchive_delta(readDouble(componentConfigurationDAO,
                                            propertyName + "/archive_delta", 0.0));
                                    baciPropertyType
                                            .setArchive_delta_percent(readDouble(componentConfigurationDAO,
                                                    propertyName + "/archive_delta_percent", null));

                                    /* RO<type> */
                                    baciPropertyType.setAlarm_high_on(readDouble(componentConfigurationDAO,
                                            propertyName + "/alarm_high_on", null));
                                    baciPropertyType.setAlarm_low_on(readDouble(componentConfigurationDAO,
                                            propertyName + "/alarm_low_on", null));
                                    baciPropertyType.setAlarm_high_off(readDouble(componentConfigurationDAO,
                                            propertyName + "/alarm_high_off", null));
                                    baciPropertyType.setAlarm_low_off(readDouble(componentConfigurationDAO,
                                            propertyName + "/alarm_low_off", null));
                                    baciPropertyType.setAlarm_timer_trig(readDouble(componentConfigurationDAO,
                                            propertyName + "/alarm_timer_trig", null));

                                    /* RW<type> */
                                    baciPropertyType
                                            .setMin_value(limitDouble(readDouble(componentConfigurationDAO,
                                                    propertyName + "/min_value", null)));
                                    baciPropertyType
                                            .setMax_value(limitDouble(readDouble(componentConfigurationDAO,
                                                    propertyName + "/max_value", null)));

                                    /* ROpattern */
                                    baciPropertyType.setBitDescription(nonEmptyString(
                                            readString(componentConfigurationDAO,
                                                    propertyName + "/bitDescription", null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));
                                    baciPropertyType.setWhenSet(nonEmptyString(
                                            readString(componentConfigurationDAO, propertyName + "/whenSet",
                                                    null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));
                                    baciPropertyType.setWhenCleared(nonEmptyString(
                                            readString(componentConfigurationDAO, propertyName + "/whenCleared",
                                                    null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));

                                    /* PEnum */
                                    baciPropertyType.setStatesDescription(nonEmptyString(
                                            readString(componentConfigurationDAO,
                                                    propertyName + "/statesDescription", null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));
                                    baciPropertyType.setCondition(nonEmptyString(
                                            readString(componentConfigurationDAO, propertyName + "/condition",
                                                    null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));
                                    baciPropertyType.setAlarm_on(nonEmptyString(
                                            readString(componentConfigurationDAO, propertyName + "/alarm_on",
                                                    null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));
                                    baciPropertyType.setAlarm_off(nonEmptyString(
                                            readString(componentConfigurationDAO, propertyName + "/alarm_off",
                                                    null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));

                                    /* alarms */
                                    baciPropertyType.setAlarm_fault_family(nonEmptyString(
                                            readString(componentConfigurationDAO,
                                                    propertyName + "/alarm_fault_family", null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));
                                    baciPropertyType.setAlarm_fault_member(nonEmptyString(
                                            readString(componentConfigurationDAO,
                                                    propertyName + "/alarm_fault_member", null),
                                            EmptyStringHandlerBACIPropertyType.EMPTY_STRING_SUBSTITUTE));
                                    int level = readLong(componentConfigurationDAO,
                                            propertyName + "/alarm_level", Integer.MIN_VALUE);
                                    if (level != Integer.MIN_VALUE)
                                        baciPropertyType.setAlarm_level(level);

                                    baciPropertyType.setData(extraDataFeatureUtil.getExtraDataMap(
                                            componentConfigurationDAO, propertyName, baciPropertyAttributesSet,
                                            ExtraDataFeatureUtil.EMPTY_SET));

                                    session.persist(baciPropertyType);
                                }

                                // add non-property elements
                                propertySet.add("Address"); // this is handled by HW plugin
                                component.setXMLDoc(
                                        extraDataFeatureUtil.getExtraDataMap(componentConfigurationDAO, null,
                                                ExtraDataFeatureUtil.EMPTY_SET, propertySet));
                                session.update(component);
                            } else {
                                // no properties, add entire XML although it is a control device
                                component.setXMLDoc(
                                        xml == null ? getComponentXML(xmlCDB_, componentName, xml) : xml);
                                session.update(component);
                            }

                            // from remote, since DAO will compact it
                            if (!almaBranchDoesNotExist || forceSubcomponentCheck) {
                                String componentNodes = xmlCDB_
                                        .list_nodes(COMPONENT_TREE_NAME + "/" + componentName);
                                if (componentNodes != null) {
                                    StringTokenizer tokenizer2 = new StringTokenizer(componentNodes);
                                    while (tokenizer2.hasMoreTokens())
                                        propertySet.add(tokenizer2.nextToken());
                                }
                            }
                        } catch (RuntimeException rte) {
                            // ignore components with no configuration; this is very ugly wat of doing it...
                            if (rte.getMessage() != null && rte.getMessage().startsWith("Failed to obtain")) {
                                // noop (there is no configuration for component)
                            } else
                                rte.printStackTrace();
                        }
                    }
                }
            }
            if (nodes.size() > 0) {
                // if the preceding while loop actually did something...
                m_logger.info("Imported Components from XML.");
            }

            //
            // Channels configurations
            //
            String[] channelSubnodes = getSubNodes(xmlCDB_, "MACI/Channels");
            for (String channelName : channelSubnodes) {
                //DAO channelDAO = xmlCDB.get_DAO_Servant("MACI/Channels/"+channelName);
                DAOProxy channelDAO = cdbAccess.createDAO("MACI/Channels/" + channelName);

                final String channelPath;
                final String channelShortName;
                int hierarchySeparatorPos = channelName.lastIndexOf('/');
                if (hierarchySeparatorPos != -1) {
                    channelPath = channelName.substring(0, hierarchySeparatorPos);
                    channelShortName = channelName.substring(hierarchySeparatorPos + 1);
                } else {
                    channelPath = "/"; // for Oracle
                    channelShortName = channelName;
                }

                EventChannel eventChannel = new EventChannel();
                eventChannel.setConfiguration(config);
                eventChannel.setName(channelShortName);
                eventChannel.setPath(channelPath);
                eventChannel.setIntegrationLogs(
                        Boolean.valueOf(readString(channelDAO, "IntegrationLogs", "false")));
                eventChannel.setMaxQueueLength(readLong(channelDAO, "MaxQueueLength", 0));
                eventChannel.setMaxConsumers(readLong(channelDAO, "MaxConsumers", 0));
                eventChannel.setMaxSuppliers(readLong(channelDAO, "MaxSuppliers", 0));
                eventChannel.setRejectNewEvents(
                        Boolean.valueOf(readString(channelDAO, "RejectNewEvents", "false")));
                eventChannel.setDiscardPolicy(EventChannelDiscardPolicy
                        .valueOfForEnum(readString(channelDAO, "DiscardPolicy", "AnyOrder")));
                eventChannel.setEventReliability(EventChannelEventReliability
                        .valueOfForEnum(readString(channelDAO, "EventReliability", "BestEffort")));
                eventChannel.setConnectionReliability(EventChannelConReliability
                        .valueOfForEnum(readString(channelDAO, "ConnectionReliability", "BestEffort")));
                eventChannel.setPriority((short) readLong(channelDAO, "Priority", 0));
                eventChannel.setTimeout(readLong(channelDAO, "Timeout", 0));
                eventChannel.setOrderPolicy(EventChannelOrderPolicy
                        .valueOfForEnum(readString(channelDAO, "OrderPolicy", "AnyOrder")));
                eventChannel.setStartTimeSupported(
                        Boolean.valueOf(readString(channelDAO, "StartTimeSupported", "false")));
                eventChannel.setStopTimeSupported(
                        Boolean.valueOf(readString(channelDAO, "StopTimeSupported", "false")));
                eventChannel.setMaxEventsPerConsumer(readLong(channelDAO, "MaxEventsPerConsumer", 0));

                session.persist(eventChannel);

                Set<Event> eventSet = eventChannel.getEvents();
                String[] events = readStringSeq(channelDAO, "Events", null);
                if (events != null) {
                    for (String eventName : events) {
                        Event event = new Event();
                        event.setName(eventName);
                        event.setEventChannel(eventChannel);
                        event.setMaxProcessTime(readDouble(channelDAO, eventName + "/MaxProcessTime", 2.0));
                        eventSet.add(event);
                        session.persist(event);
                    }
                }

            }

            try {
                DAOProxy notificationServiceMappingDAO = cdbAccess
                        .createDAO("MACI/Channels/NotificationServiceMapping");

                String defaultNotSrv = notificationServiceMappingDAO.get_string("DefaultNotificationService");

                NotificationServiceMapping mappings = new NotificationServiceMapping();
                mappings.setConfiguration(config);
                mappings.setDefaultNotificationService(defaultNotSrv);
                session.persist(mappings);

                String[] domains = readStringSeq(notificationServiceMappingDAO, "Domains", null);
                if (domains != null) {
                    for (String domain : domains) {
                        String name = notificationServiceMappingDAO.get_string("Domains/" + domain + "/Name");
                        String notSrv = notificationServiceMappingDAO
                                .get_string("Domains/" + domain + "/NotificationService");
                        DomainsMapping domainsMapping = new DomainsMapping();
                        domainsMapping.setNotificationServiceMapping(mappings);
                        domainsMapping.setName(name);
                        domainsMapping.setNotificationService(notSrv);
                        mappings.getDomainsMappings().add(domainsMapping);
                        session.persist(domainsMapping);
                    }
                }

                String[] channels = readStringSeq(notificationServiceMappingDAO, "Channels_", null);
                if (channels != null) {
                    for (String channel : channels) {
                        String name = notificationServiceMappingDAO
                                .get_string("Channels_/" + channel + "/Name");
                        String notSrv = notificationServiceMappingDAO
                                .get_string("Channels_/" + channel + "/NotificationService");
                        ChannelMapping channelsMapping = new ChannelMapping();
                        channelsMapping.setNotificationServiceMapping(mappings);
                        channelsMapping.setName(name);
                        channelsMapping.setNotificationService(notSrv);
                        mappings.getChannelMappings().add(channelsMapping);
                        session.persist(channelsMapping);
                    }
                }

            } catch (RuntimeException re) {
                // no mappings
            }
            m_logger.info("Imported Notification Channels from XML.");

            // plugin importEpilogue()
            if (plugin != null) {
                try {
                    plugin.importEpilogue(session, config, cdbAccess);
                } catch (Throwable th) {
                    // @TODO: Decent exception log.
                    th.printStackTrace();
                }
            }

            hibernateUtil.commitTransaction();

            m_logger.info("Configuration from XML CDB loaded.");
        } catch (CDBFieldDoesNotExistEx ex) {
            throw AcsJCDBFieldDoesNotExistEx.fromCDBFieldDoesNotExistEx(ex);
        } catch (WrongCDBDataTypeEx ex) {
            throw AcsJWrongCDBDataTypeEx.fromWrongCDBDataTypeEx(ex);
        } catch (Throwable th) {
            throw new RuntimeException("Failed to fill-in the DB from CDB.", th);
        } finally {
            hibernateUtil.closeSession();
            cdbAccess.destroy();

            xmlCDB_._release();
            servantDelegate.shutdownEmbeddedWDALImpl();
            // destroy POA
            xmlCDBPOA.destroy(true, false);
        }

        return true;
    } catch (Throwable th) {
        m_logger.log(Level.SEVERE, "Failed to load XML CDB, exiting...", th);
        return false;
    } finally {
        loadInProgress.set(false);
    }
}

From source file:com.cosylab.cdb.jdal.HibernateWDALImpl.java

License:Open Source License

private LoggingConfig persistLoggingConfig(Session session, DAOOperations dao, boolean required)
        throws CDBFieldDoesNotExistEx, WrongCDBDataTypeEx {
    LoggingConfig loggingConfig = new LoggingConfig();
    if (required) {
        // TODO can be optimized
        loggingConfig.setMinLogLevelDefault((byte) dao.get_long("LoggingConfig/minLogLevel"));
        loggingConfig.setMinLogLevelLocalDefault((byte) dao.get_long("LoggingConfig/minLogLevelLocal"));
        loggingConfig.setCentralizedLogger(dao.get_string("LoggingConfig/centralizedLogger"));
        loggingConfig.setDispatchPacketSize((byte) dao.get_long("LoggingConfig/dispatchPacketSize"));
        loggingConfig.setImmediateDispatchLevel((byte) dao.get_long("LoggingConfig/immediateDispatchLevel"));
        loggingConfig.setFlushPeriodSeconds((byte) dao.get_long("LoggingConfig/flushPeriodSeconds"));
        loggingConfig.setMaxLogQueueSize(dao.get_long("LoggingConfig/maxLogQueueSize"));
        loggingConfig.setMaxLogsPerSecond(dao.get_long("LoggingConfig/maxLogsPerSecond"));
    } else {/*  w w w  .  ja va2  s  . c om*/
        // TODO can be optimized
        loggingConfig.setMinLogLevelDefault((byte) readLong(dao, "LoggingConfig/minLogLevel", 2));
        loggingConfig.setMinLogLevelLocalDefault((byte) readLong(dao, "LoggingConfig/minLogLevelLocal", 2));
        loggingConfig.setCentralizedLogger(readString(dao, "LoggingConfig/centralizedLogger", "Log"));
        loggingConfig.setDispatchPacketSize((byte) readLong(dao, "LoggingConfig/dispatchPacketSize", 10));
        loggingConfig
                .setImmediateDispatchLevel((byte) readLong(dao, "LoggingConfig/immediateDispatchLevel", 10));
        loggingConfig.setFlushPeriodSeconds((byte) readLong(dao, "LoggingConfig/flushPeriodSeconds", 10));
        loggingConfig.setMaxLogQueueSize(readLong(dao, "LoggingConfig/maxLogQueueSize", 1000));
        loggingConfig.setMaxLogsPerSecond(readLong(dao, "LoggingConfig/maxLogsPerSecond", -1));
    }
    session.persist(loggingConfig);

    final String[] LC_ATTRIBUTES = { "minLogLevel", "minLogLevelLocal", "centralizedLogger",
            "dispatchPacketSize", "immediateDispatchLevel", "flushPeriodSeconds", "maxLogQueueSize",
            "maxLogsPerSecond" };

    String[] children;
    if (required)
        children = dao.get_string_seq("LoggingConfig/");
    else
        children = readStringSeq(dao, "LoggingConfig/", new String[0]);
    for (String childName : children) {
        boolean attribute = false;
        for (int i = 0; i < LC_ATTRIBUTES.length; i++)
            if (childName.equals(LC_ATTRIBUTES[i])) {
                attribute = true;
                break;
            }

        if (!attribute) {
            NamedLoggerConfig namedLoggerConfig = new NamedLoggerConfig();
            namedLoggerConfig.setLoggingConfig(loggingConfig);
            namedLoggerConfig.setName(dao.get_string("LoggingConfig/" + childName + "/Name"));
            namedLoggerConfig
                    .setMinLogLevel((byte) dao.get_long("LoggingConfig/" + childName + "/minLogLevel"));
            namedLoggerConfig.setMinLogLevelLocal(
                    (byte) dao.get_long("LoggingConfig/" + childName + "/minLogLevelLocal"));
            session.persist(namedLoggerConfig);
        }
    }
    return loggingConfig;
}

From source file:com.dalamar.model.LateTrainDaoImpl.java

@Override
public void save(LateTrain tr) {
    Session session = this.sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    session.persist(tr);
    tx.commit();/*from  w  w w. j  av a  2  s . c  o m*/
    session.close();
}