Search in sources :

Example 1 with Persistence

use of org.apache.openejb.jee.jpa.unit.Persistence in project tomee by apache.

the class CmpJpaConversion method getCmpPersistenceUnit.

private PersistenceUnit getCmpPersistenceUnit(final AppModule appModule) {
    // search for the cmp persistence unit
    PersistenceUnit persistenceUnit = findCmpPersistenceUnit(appModule);
    // if not found create one
    if (persistenceUnit == null) {
        persistenceUnit = new PersistenceUnit();
        persistenceUnit.setName(CMP_PERSISTENCE_UNIT_NAME);
        persistenceUnit.setTransactionType(TransactionType.JTA);
        // Don't set default values here, let the autoconfig do that
        // persistenceUnit.setJtaDataSource("java:openejb/Resource/Default JDBC Database");
        // persistenceUnit.setNonJtaDataSource("java:openejb/Resource/Default Unmanaged JDBC Database");
        // todo paramterize this
        final Properties properties = new Properties();
        final String property = SystemInstance.get().getProperty("openejb.cmp.openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true, Indexes=false, IgnoreErrors=true)");
        if (property != null && !property.isEmpty()) {
            properties.setProperty("openjpa.jdbc.SynchronizeMappings", property);
        }
        // properties.setProperty("openjpa.DataCache", "false");
        properties.setProperty("openjpa.Log", "DefaultLevel=INFO");
        persistenceUnit.setProperties(properties);
        final Persistence persistence = new Persistence();
        persistence.setVersion("1.0");
        persistence.getPersistenceUnit().add(persistenceUnit);
        final PersistenceModule persistenceModule = new PersistenceModule(appModule, getPersistenceModuleId(appModule), persistence);
        appModule.addPersistenceModule(persistenceModule);
    }
    return persistenceUnit;
}
Also used : Persistence(org.apache.openejb.jee.jpa.unit.Persistence) PersistenceUnit(org.apache.openejb.jee.jpa.unit.PersistenceUnit) Properties(java.util.Properties)

Example 2 with Persistence

use of org.apache.openejb.jee.jpa.unit.Persistence in project tomee by apache.

the class ApplicationComposerDeployer method configureModule.

private Object configureModule(final AppModule appModule, final EjbModule ejbModule, final Class<?> clazz, Object instance, final Method m) {
    final int modifiers = m.getModifiers();
    if (!Modifier.isPublic(modifiers)) {
        throw new IllegalArgumentException("@Module should be public");
    }
    final boolean isStatic = Modifier.isStatic(modifiers);
    if (!isStatic) {
        try {
            instance = clazz.newInstance();
        } catch (final Exception e) {
        // no-op
        }
    }
    try {
        final Object result = m.invoke(isStatic ? null : instance);
        if (EjbJar.class.isInstance(result)) {
            ejbModule.setEjbJar(EjbJar.class.cast(result));
        } else if (Persistence.class.isInstance(result)) {
            final Persistence persistence = Persistence.class.cast(result);
            if (!persistence.getPersistenceUnit().isEmpty()) {
                appModule.getPersistenceModules().add(new PersistenceModule(appModule, rootUrl(ejbModule), persistence));
            }
        } else if (PersistenceUnit.class.isInstance(result)) {
            final PersistenceUnit unit = PersistenceUnit.class.cast(result);
            appModule.addPersistenceModule(new PersistenceModule(appModule, rootUrl(ejbModule), new Persistence(unit)));
        } else if (Beans.class.isInstance(result)) {
            final Beans beans = Beans.class.cast(result);
            ejbModule.setBeans(beans);
        } else {
            throw new IllegalArgumentException(result + " not yet supported (" + m + ")");
        }
    } catch (final IllegalAccessException | InvocationTargetException e) {
        throw new IllegalStateException(e);
    }
    return instance;
}
Also used : MalformedURLException(java.net.MalformedURLException) OpenEJBException(org.apache.openejb.OpenEJBException) InvocationTargetException(java.lang.reflect.InvocationTargetException) InvocationTargetException(java.lang.reflect.InvocationTargetException) Persistence(org.apache.openejb.jee.jpa.unit.Persistence) Beans(org.apache.openejb.jee.Beans) PersistenceUnit(org.apache.openejb.jee.jpa.unit.PersistenceUnit) EjbJar(org.apache.openejb.jee.EjbJar)

Example 3 with Persistence

use of org.apache.openejb.jee.jpa.unit.Persistence in project tomee by apache.

the class OutputGeneratedDescriptors method writeGenratedCmpMappings.

private void writeGenratedCmpMappings(final AppModule appModule) {
    for (final PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
        try {
            final Persistence persistence = persistenceModule.getPersistence();
            if (hasCmpPersistenceUnit(persistence)) {
                final File tempFile = tempFile("persistence-", ".xml");
                final OutputStream out = IO.write(tempFile);
                try {
                    JpaJaxbUtil.marshal(Persistence.class, persistence, out);
                    logger.info("Dumping Generated CMP persistence.xml to: " + tempFile.getAbsolutePath());
                } catch (final JAXBException e) {
                // no-op
                } finally {
                    IO.close(out);
                }
            }
        } catch (final IOException e) {
        // no-op
        }
    }
    try {
        final File tempFile = tempFile("openejb-cmp-generated-orm-", ".xml");
        final OutputStream out = IO.write(tempFile);
        try {
            JpaJaxbUtil.marshal(EntityMappings.class, appModule.getCmpMappings(), out);
            logger.info("Dumping Generated CMP mappings.xml to: " + tempFile.getAbsolutePath());
        } catch (final JAXBException e) {
        // no-op
        } finally {
            IO.close(out);
        }
    } catch (final IOException e) {
    // no-op
    }
}
Also used : Persistence(org.apache.openejb.jee.jpa.unit.Persistence) OutputStream(java.io.OutputStream) JAXBException(javax.xml.bind.JAXBException) IOException(java.io.IOException) File(java.io.File)

Example 4 with Persistence

use of org.apache.openejb.jee.jpa.unit.Persistence in project tomee by apache.

the class ReadDescriptors method deploy.

@SuppressWarnings({ "unchecked" })
public AppModule deploy(final AppModule appModule) throws OpenEJBException {
    for (final EjbModule ejbModule : appModule.getEjbModules()) {
        if (ejbModule.getEjbJar() == null) {
            readEjbJar(ejbModule, appModule);
        }
        if (ejbModule.getOpenejbJar() == null) {
            readOpenejbJar(ejbModule);
        }
        if (ejbModule.getBeans() == null) {
            readBeans(ejbModule);
        }
        readValidationConfigType(ejbModule);
        readCmpOrm(ejbModule);
        readResourcesXml(ejbModule);
    }
    for (final ClientModule clientModule : appModule.getClientModules()) {
        readAppClient(clientModule, appModule);
        readValidationConfigType(clientModule);
        readResourcesXml(clientModule);
    }
    for (final ConnectorModule connectorModule : appModule.getConnectorModules()) {
        readConnector(connectorModule, appModule);
        readValidationConfigType(connectorModule);
        readResourcesXml(connectorModule);
    }
    for (final WebModule webModule : appModule.getWebModules()) {
        readWebApp(webModule, appModule);
        readValidationConfigType(webModule);
        readResourcesXml(webModule);
    }
    final List<Object> persistenceUrls = (List<Object>) appModule.getAltDDs().get("persistence.xml");
    if (persistenceUrls != null) {
        for (final Object persistenceUrl : persistenceUrls) {
            final boolean url = persistenceUrl instanceof URL;
            final Source source = getSource(persistenceUrl);
            final String moduleName;
            final String path;
            final String rootUrl;
            if (url) {
                final URL pUrl = (URL) persistenceUrl;
                File file = URLs.toFile(pUrl);
                path = file.getAbsolutePath();
                if (file.getName().endsWith("persistence.xml")) {
                    final File parentFile = file.getParentFile();
                    final String parent = parentFile.getName();
                    if (parent.equalsIgnoreCase("WEB-INF") || parent.equalsIgnoreCase("META-INF")) {
                        file = parentFile.getParentFile();
                    } else {
                        // we don't really know so simply go back (users will often put persistence.xml in root resource folder with arquillian)
                        file = file.getParentFile();
                    }
                }
                moduleName = file.toURI().toString();
                String tmpRootUrl = moduleName;
                final String extForm = pUrl.toExternalForm();
                if (extForm.contains("WEB-INF/classes/META-INF/")) {
                    if (!ROOT_URL_FROM_WEBINF) {
                        tmpRootUrl = extForm.substring(0, extForm.indexOf("/META-INF"));
                    } else {
                        tmpRootUrl = extForm.substring(0, extForm.indexOf("/classes/META-INF"));
                    }
                }
                if (tmpRootUrl.endsWith(".war")) {
                    tmpRootUrl = tmpRootUrl.substring(0, tmpRootUrl.length() - ".war".length());
                }
                rootUrl = tmpRootUrl;
            } else {
                moduleName = "";
                rootUrl = "";
                path = null;
            }
            try {
                final Persistence persistence = JaxbPersistenceFactory.getPersistence(Persistence.class, source.get());
                final PersistenceModule persistenceModule = new PersistenceModule(appModule, rootUrl, persistence);
                persistenceModule.getWatchedResources().add(moduleName);
                if (url && "file".equals(((URL) persistenceUrl).getProtocol())) {
                    persistenceModule.getWatchedResources().add(path);
                }
                appModule.addPersistenceModule(persistenceModule);
            } catch (final Exception e1) {
                DeploymentLoader.LOGGER.error("Unable to load Persistence Unit from EAR: " + appModule.getJarLocation() + ", module: " + moduleName + ". Exception: " + e1.getMessage(), e1);
            }
        }
    }
    final List<URL> persistenceFragmentUrls = (List<URL>) appModule.getAltDDs().get("persistence-fragment.xml");
    if (persistenceFragmentUrls != null) {
        for (final URL persistenceFragmentUrl : persistenceFragmentUrls) {
            try {
                final PersistenceFragment persistenceFragment = JaxbPersistenceFactory.getPersistence(PersistenceFragment.class, persistenceFragmentUrl);
                // merging
                for (final PersistenceUnitFragment fragmentUnit : persistenceFragment.getPersistenceUnitFragment()) {
                    for (final PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
                        final Persistence persistence = persistenceModule.getPersistence();
                        for (final PersistenceUnit unit : persistence.getPersistenceUnit()) {
                            if (!fragmentUnit.getName().equals(unit.getName())) {
                                continue;
                            }
                            if (!persistenceFragment.getVersion().equals(persistence.getVersion())) {
                                logger.error("persistence unit version and fragment version are different, fragment will be ignored");
                                continue;
                            }
                            if ("file".equals(persistenceFragmentUrl.getProtocol())) {
                                persistenceModule.getWatchedResources().add(URLs.toFile(persistenceFragmentUrl).getAbsolutePath());
                            }
                            for (final String clazz : fragmentUnit.getClazz()) {
                                if (!unit.getClazz().contains(clazz)) {
                                    logger.info("Adding class " + clazz + " to persistence unit " + fragmentUnit.getName());
                                    unit.getClazz().add(clazz);
                                }
                            }
                            for (final String mappingFile : fragmentUnit.getMappingFile()) {
                                if (!unit.getMappingFile().contains(mappingFile)) {
                                    logger.info("Adding mapping file " + mappingFile + " to persistence unit " + fragmentUnit.getName());
                                    unit.getMappingFile().add(mappingFile);
                                }
                            }
                            for (final String jarFile : fragmentUnit.getJarFile()) {
                                if (!unit.getJarFile().contains(jarFile)) {
                                    logger.info("Adding jar file " + jarFile + " to persistence unit " + fragmentUnit.getName());
                                    unit.getJarFile().add(jarFile);
                                }
                            }
                            if (fragmentUnit.isExcludeUnlistedClasses()) {
                                unit.setExcludeUnlistedClasses(true);
                                logger.info("Excluding unlisted classes for persistence unit " + fragmentUnit.getName());
                            }
                        // else let the main persistence unit decide
                        }
                    }
                }
            } catch (final Exception e1) {
                DeploymentLoader.LOGGER.error("Unable to load Persistence Unit Fragment from EAR: " + appModule.getJarLocation() + ", fragment: " + persistenceFragmentUrl.toString() + ". Exception: " + e1.getMessage(), e1);
            }
        }
    }
    return appModule;
}
Also used : URL(java.net.URL) InputSource(org.xml.sax.InputSource) OpenEJBException(org.apache.openejb.OpenEJBException) JAXBException(javax.xml.bind.JAXBException) SAXException(org.xml.sax.SAXException) IOException(java.io.IOException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) Persistence(org.apache.openejb.jee.jpa.unit.Persistence) PersistenceUnitFragment(org.apache.openejb.jee.jpa.fragment.PersistenceUnitFragment) PersistenceUnit(org.apache.openejb.jee.jpa.unit.PersistenceUnit) PersistenceFragment(org.apache.openejb.jee.jpa.fragment.PersistenceFragment) List(java.util.List) File(java.io.File)

Example 5 with Persistence

use of org.apache.openejb.jee.jpa.unit.Persistence in project tomee by apache.

the class PassivationWithEmTest method persistence.

@Module
public Persistence persistence() throws Exception {
    final PersistenceUnit unit = new PersistenceUnit("passivation-unit");
    unit.addClass(MyEntity.class);
    unit.setTransactionType(TransactionType.JTA);
    unit.setProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
    unit.getProperties().setProperty("openjpa.RuntimeUnenhancedClasses", "supported");
    unit.setExcludeUnlistedClasses(true);
    final Persistence persistence = new org.apache.openejb.jee.jpa.unit.Persistence(unit);
    persistence.setVersion("2.0");
    return persistence;
}
Also used : Persistence(org.apache.openejb.jee.jpa.unit.Persistence) PersistenceUnit(org.apache.openejb.jee.jpa.unit.PersistenceUnit) Module(org.apache.openejb.testing.Module)

Aggregations

Persistence (org.apache.openejb.jee.jpa.unit.Persistence)45 PersistenceUnit (org.apache.openejb.jee.jpa.unit.PersistenceUnit)36 Module (org.apache.openejb.testing.Module)19 AppInfo (org.apache.openejb.assembler.classic.AppInfo)10 ResourceInfo (org.apache.openejb.assembler.classic.ResourceInfo)9 EjbJar (org.apache.openejb.jee.EjbJar)8 WebApp (org.apache.openejb.jee.WebApp)7 Assembler (org.apache.openejb.assembler.classic.Assembler)6 SecurityServiceInfo (org.apache.openejb.assembler.classic.SecurityServiceInfo)6 TransactionServiceInfo (org.apache.openejb.assembler.classic.TransactionServiceInfo)6 URL (java.net.URL)5 ArrayList (java.util.ArrayList)5 AppModule (org.apache.openejb.config.AppModule)5 EjbModule (org.apache.openejb.config.EjbModule)5 File (java.io.File)4 Properties (java.util.Properties)4 PersistenceModule (org.apache.openejb.config.PersistenceModule)4 PersistenceUnit (javax.persistence.PersistenceUnit)3 PersistenceUnitInfo (org.apache.openejb.assembler.classic.PersistenceUnitInfo)3 StatelessBean (org.apache.openejb.jee.StatelessBean)3