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

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

Introduction

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

Prototype

public void setJtaDataSource(Object jtaDataSource) 

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";
                }/*from ww w.j  a  va 2s .  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  ww  .ja  va  2  s  .c om
    }

    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);
    }
}