Example usage for org.hibernate.jpa.boot.internal ParsedPersistenceXmlDescriptor getProperties

List of usage examples for org.hibernate.jpa.boot.internal ParsedPersistenceXmlDescriptor getProperties

Introduction

In this page you can find the example usage for org.hibernate.jpa.boot.internal ParsedPersistenceXmlDescriptor getProperties.

Prototype

@Override
    public Properties getProperties() 

Source Link

Usage

From source file:org.lightmare.jpa.hibernate.internal.PersistenceXmlParserImpl.java

License:Open Source License

@SuppressWarnings("rawtypes")
private List<ParsedPersistenceXmlDescriptor> parsePersistenceXml(URL xmlUrl, Map integration) {
    LOG.tracef("Attempting to parse persistence.xml file : %s", xmlUrl.toExternalForm());

    final Document doc = loadUrl(xmlUrl);
    final Element top = doc.getDocumentElement();

    final List<ParsedPersistenceXmlDescriptor> persistenceUnits = new ArrayList<ParsedPersistenceXmlDescriptor>();

    final NodeList children = top.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
        if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
            final Element element = (Element) children.item(i);
            final String tag = element.getTagName();
            if (tag.equals("persistence-unit")) {

                // Decides which sub path in archives to use
                String shortPath = MetaConfig.getShortPath(metaConfig);
                if (StringUtils.invalid(shortPath)) {
                    shortPath = "/META-INF/persistence.xml";
                }/*  ww w . jav a2s . co  m*/

                // Decides whether is needed to scan archives
                final URL puRootUrl;
                if (MetaConfig.isScanArchives(metaConfig)) {
                    puRootUrl = ArchiveHelper.getJarURLFromURLEntry(xmlUrl, shortPath);
                } else {
                    puRootUrl = xmlUrl;
                }

                ParsedPersistenceXmlDescriptor persistenceUnit = new ParsedPersistenceXmlDescriptor(puRootUrl);
                bindPersistenceUnit(persistenceUnit, element);

                // per JPA spec, any settings passed in to
                // PersistenceProvider bootstrap methods should override
                // values found in persistence.xml
                if (integration.containsKey(AvailableSettings.PROVIDER)) {
                    persistenceUnit.setProviderClassName((String) integration.get(AvailableSettings.PROVIDER));
                }

                if (integration.containsKey(AvailableSettings.TRANSACTION_TYPE)) {
                    String transactionType = (String) integration.get(AvailableSettings.TRANSACTION_TYPE);
                    persistenceUnit.setTransactionType(parseTransactionType(transactionType));
                }

                PersistenceDescriptorUtils.resolveTransactionType(persistenceUnit, metaConfig);

                if (integration.containsKey(AvailableSettings.JTA_DATASOURCE)) {
                    persistenceUnit.setJtaDataSource(integration.get(AvailableSettings.JTA_DATASOURCE));
                }
                if (integration.containsKey(AvailableSettings.NON_JTA_DATASOURCE)) {
                    persistenceUnit.setNonJtaDataSource(integration.get(AvailableSettings.NON_JTA_DATASOURCE));
                }

                PersistenceDescriptorUtils.resolveDataSource(persistenceUnit, metaConfig);

                decodeTransactionType(persistenceUnit);

                Properties properties = persistenceUnit.getProperties();
                ConfigurationHelper.overrideProperties(properties, integration);

                persistenceUnits.add(persistenceUnit);
            }
        }
    }
    return persistenceUnits;
}

From source file:org.lightmare.jpa.hibernate.internal.PersistenceXmlParserImpl.java

License:Open Source License

private void bindPersistenceUnit(ParsedPersistenceXmlDescriptor persistenceUnit,
        Element persistenceUnitElement) {
    final String name = persistenceUnitElement.getAttribute("name");
    if (StringHelper.isNotEmpty(name)) {
        LOG.tracef("Persistence unit name from persistence.xml : %s", name);
        persistenceUnit.setName(name);//w  w  w .  j  a  va 2  s.  c  o m
    }

    final PersistenceUnitTransactionType transactionType = parseTransactionType(
            persistenceUnitElement.getAttribute("transaction-type"));
    if (transactionType != null) {
        persistenceUnit.setTransactionType(transactionType);
    }

    NodeList children = persistenceUnitElement.getChildNodes();
    boolean resolvedClasses = Boolean.FALSE;
    for (int i = 0; i < children.getLength(); i++) {
        if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) children.item(i);
            String tag = element.getTagName();
            if (tag.equals("non-jta-data-source")) {
                persistenceUnit.setNonJtaDataSource(extractContent(element));
            } else if (tag.equals("jta-data-source")) {
                persistenceUnit.setJtaDataSource(extractContent(element));
            } else if (tag.equals("provider")) {
                persistenceUnit.setProviderClassName(extractContent(element));
            } else if (tag.equals("class")) {
                if (CollectionUtils.invalid(MetaConfig.getClasses(metaConfig))) {
                    persistenceUnit.addClasses(extractContent(element));
                } else if (Boolean.FALSE.equals(resolvedClasses)) {
                    PersistenceDescriptorUtils.resolveEntities(persistenceUnit, metaConfig);
                    resolvedClasses = Boolean.TRUE;
                }
            } else if (tag.equals("mapping-file")) {
                persistenceUnit.addMappingFiles(extractContent(element));
            } else if (tag.equals("jar-file")) {
                persistenceUnit.addJarFileUrl(ArchiveHelper.getURLFromPath(extractContent(element)));
            } else if (tag.equals("exclude-unlisted-classes")) {
                persistenceUnit.setExcludeUnlistedClasses(extractBooleanContent(element, true));
            } else if (tag.equals("delimited-identifiers")) {
                persistenceUnit.setUseQuotedIdentifiers(true);
            } else if (tag.equals("validation-mode")) {
                persistenceUnit.setValidationMode(extractContent(element));
            } else if (tag.equals("shared-cache-mode")) {
                persistenceUnit.setSharedCacheMode(extractContent(element));
            } else if (tag.equals("properties")) {
                NodeList props = element.getChildNodes();
                for (int j = 0; j < props.getLength(); j++) {
                    if (props.item(j).getNodeType() == Node.ELEMENT_NODE) {
                        Element propElement = (Element) props.item(j);
                        if (!"property".equals(propElement.getTagName())) {
                            continue;
                        }
                        String propName = propElement.getAttribute("name").trim();
                        String propValue = propElement.getAttribute("value").trim();
                        if (StringHelper.isEmpty(propValue)) {
                            // fall back to the natural (Hibernate) way of
                            // description
                            propValue = extractContent(propElement, "");
                        }
                        persistenceUnit.getProperties().put(propName, propValue);
                    }
                }
            }
        }
    }

    if (Boolean.FALSE.equals(resolvedClasses)) {
        PersistenceDescriptorUtils.resolveEntities(persistenceUnit, metaConfig);
    }
}