Example usage for javax.enterprise.deploy.spi DeploymentConfiguration save

List of usage examples for javax.enterprise.deploy.spi DeploymentConfiguration save

Introduction

In this page you can find the example usage for javax.enterprise.deploy.spi DeploymentConfiguration save.

Prototype

public void save(OutputStream outputArchive) throws ConfigurationException;

Source Link

Document

Save to disk the current set configuration beans created for this deployable module.

Usage

From source file:org.apache.geronimo.console.databasemanager.wizard.DatabasePoolPortlet.java

private static String save(PortletRequest request, ActionResponse response, PoolData data, boolean planOnly) {
    ImportStatus status = getImportStatus(request);
    if (data.abstractName == null || data.abstractName.equals("")) { // we're creating a new pool
        data.name = data.name.replaceAll("\\s", "");
        DeploymentManager mgr = ManagementHelper.getManagementHelper(request).getDeploymentManager();
        try {/*from  w w w  . j a v a  2s .c o  m*/
            String rarPath = data.getRarPath();
            File rarFile = getRAR(request, rarPath);
            //URI uri = getRAR(request, data.getRarPath()).toURI();
            ConnectorDeployable deployable = new ConnectorDeployable(
                    PortletManager.getRepositoryEntryBundle(request, rarPath));
            DeploymentConfiguration config = mgr.createConfiguration(deployable);
            final DDBeanRoot ddBeanRoot = deployable.getDDBeanRoot();
            Connector15DCBRoot root = (Connector15DCBRoot) config.getDConfigBeanRoot(ddBeanRoot);
            ConnectorDCB connector = (ConnectorDCB) root
                    .getDConfigBean(ddBeanRoot.getChildBean(root.getXpaths()[0])[0]);

            EnvironmentData environment = new EnvironmentData();
            connector.setEnvironment(environment);
            org.apache.geronimo.deployment.service.jsr88.Artifact configId = new org.apache.geronimo.deployment.service.jsr88.Artifact();
            environment.setConfigId(configId);
            configId.setGroupId("console.dbpool");
            configId.setVersion("1.0");
            configId.setType("car");

            String artifactId = data.name;
            // simply replace / with _ if / exists within the artifactId
            // this is needed because we don't allow / within the artifactId
            artifactId = artifactId.replace('/', '_');

            // Let's check whether the artifact exists
            ConfigurationManager configurationManager = ConfigurationUtil
                    .getConfigurationManager(PortletManager.getKernel());
            if (configurationManager.isInstalled(new Artifact(configId.getGroupId(), artifactId,
                    configId.getVersion(), configId.getType()))) {
                artifactId = artifactId + "_" + new Random(System.currentTimeMillis()).nextInt(99);
            }

            configId.setArtifactId(artifactId);

            String[] jars = data.getJars();
            int length = jars[jars.length - 1].length() == 0 ? jars.length - 1 : jars.length;
            org.apache.geronimo.deployment.service.jsr88.Artifact[] dependencies = new org.apache.geronimo.deployment.service.jsr88.Artifact[length];
            for (int i = 0; i < dependencies.length; i++) {
                dependencies[i] = new org.apache.geronimo.deployment.service.jsr88.Artifact();
            }
            environment.setDependencies(dependencies);
            for (int i = 0; i < dependencies.length; i++) {
                Artifact tmp = Artifact.create(jars[i]);
                dependencies[i].setGroupId(tmp.getGroupId());
                dependencies[i].setArtifactId(tmp.getArtifactId());
                dependencies[i].setVersion(tmp.getVersion().toString());
                dependencies[i].setType(tmp.getType());
            }

            ResourceAdapter adapter = connector.getResourceAdapter()[0];
            ConnectionDefinition definition = new ConnectionDefinition();
            adapter.setConnectionDefinition(new ConnectionDefinition[] { definition });
            definition.setConnectionFactoryInterface("javax.sql.DataSource");
            ConnectionDefinitionInstance instance = new ConnectionDefinitionInstance();
            definition.setConnectionInstance(new ConnectionDefinitionInstance[] { instance });
            instance.setName(data.getName());
            ConfigPropertySetting[] settings = instance.getConfigPropertySetting();
            if (data.isGeneric()) { // it's a generic TranQL JDBC pool
                for (ConfigPropertySetting setting : settings) {
                    if (setting.getName().equals("UserName")) {
                        setting.setValue(data.user);
                    } else if (setting.getName().equals("Password")) {
                        setting.setValue(data.password);
                    } else if (setting.getName().equals("ConnectionURL")) {
                        setting.setValue(data.url);
                    } else if (setting.getName().equals("Driver")) {
                        setting.setValue(data.driverClass);
                    }
                }
            } else { // it's an XA driver or non-TranQL RA
                for (ConfigPropertySetting setting : settings) {
                    String value = data.properties.get("property-" + setting.getName());
                    setting.setValue(value == null ? "" : value);
                }
            }
            ConnectionManager manager = instance.getConnectionManager();
            if (XA.equals(data.transactionType)) {
                manager.setTransactionXA(true);
            } else if (NONE.equals(data.transactionType)) {
                manager.setTransactionNone(true);
            } else {
                manager.setTransactionLocal(true);
            }

            SinglePool pool = new SinglePool();
            manager.setPoolSingle(pool);
            pool.setMatchOne(true);
            // Max Size needs to be set before the minimum.  This is because
            // the connection manager will constrain the minimum based on the
            // current maximum value in the pool.  We might consider adding a
            // setPoolConstraints method to allow specifying both at the same time.
            if (data.maxSize != null && !data.maxSize.equals("")) {
                pool.setMaxSize(new Integer(data.maxSize));
            }
            if (data.minSize != null && !data.minSize.equals("")) {
                pool.setMinSize(new Integer(data.minSize));
            }
            if (data.blockingTimeout != null && !data.blockingTimeout.equals("")) {
                pool.setBlockingTimeoutMillis(new Integer(data.blockingTimeout));
            }
            if (data.idleTimeout != null && !data.idleTimeout.equals("")) {
                pool.setIdleTimeoutMinutes(new Integer(data.idleTimeout));
            }

            if (planOnly) {
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                config.save(out);
                out.close();
                return new String(out.toByteArray(), "US-ASCII");
            } else {
                File tempFile = File.createTempFile("console-deployment", ".xml");
                tempFile.deleteOnExit();
                log.debug("Writing database pool deployment plan to " + tempFile.getAbsolutePath());
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile));
                config.save(out);
                out.flush();
                out.close();
                Target[] targets = mgr.getTargets();
                if (null == targets) {
                    throw new IllegalStateException("No target to distribute to");
                }
                targets = new Target[] { targets[0] };

                ProgressObject po = mgr.distribute(targets, rarFile, tempFile);
                waitForProgress(po);
                if (po.getDeploymentStatus().isCompleted()) {
                    TargetModuleID[] ids = po.getResultTargetModuleIDs();
                    po = mgr.start(ids);
                    waitForProgress(po);
                    if (po.getDeploymentStatus().isCompleted()) {
                        ids = po.getResultTargetModuleIDs();
                        if (status != null) {
                            status.getCurrentPool().setName(data.getName());
                            status.getCurrentPool().setConfigurationName(ids[0].getModuleID());
                            status.getCurrentPool().setFinished(true);
                            response.setRenderParameter(MODE_KEY, IMPORT_STATUS_MODE);
                        }

                        log.info("Deployment completed successfully!");
                    }
                } else if (po.getDeploymentStatus().isFailed()) {
                    data.deployError = "Unable to deploy: " + data.name;
                    response.setRenderParameter(MODE_KEY, EDIT_MODE);
                    log.info("Deployment Failed!");
                }
            }
        } catch (Exception e) {
            log.error("Unable to save connection pool", e);
        } finally {
            if (mgr != null)
                mgr.release();
        }
    } else { // We're saving updates to an existing pool
        if (planOnly) {
            throw new UnsupportedOperationException("Can't update a plan for an existing deployment");
        }
        try {
            JCAManagedConnectionFactory factory = (JCAManagedConnectionFactory) PortletManager
                    .getManagedBean(request, new AbstractName(URI.create(data.getAbstractName())));
            if (data.isGeneric()) {
                factory.setConfigProperty("ConnectionURL", data.getUrl());
                factory.setConfigProperty("UserName", data.getUser());
                factory.setConfigProperty("Password", data.getPassword());
            } else {
                for (Map.Entry<String, String> entry : data.getProperties().entrySet()) {
                    factory.setConfigProperty(entry.getKey().substring("property-".length()), entry.getValue());
                }
            }
            /*Make pool setting effective after server restart*/
            Jsr77Naming naming = new Jsr77Naming();
            AbstractName connectionManagerName = naming.createChildName(
                    new AbstractName(URI.create(data.getAbstractName())), data.getName(),
                    NameFactory.JCA_CONNECTION_MANAGER);
            PoolingAttributes pool = (PoolingAttributes) PortletManager.getManagedBean(request,
                    connectionManagerName);

            pool.setPartitionMinSize(
                    data.minSize == null || data.minSize.equals("") ? 0 : Integer.parseInt(data.minSize));
            pool.setPartitionMaxSize(
                    data.maxSize == null || data.maxSize.equals("") ? 10 : Integer.parseInt(data.maxSize));
            pool.setBlockingTimeoutMilliseconds(
                    data.blockingTimeout == null || data.blockingTimeout.equals("") ? 5000
                            : Integer.parseInt(data.blockingTimeout));
            pool.setIdleTimeoutMinutes(data.idleTimeout == null || data.idleTimeout.equals("") ? 15
                    : Integer.parseInt(data.idleTimeout));

        } catch (Exception e) {
            log.error("Unable to save connection pool", e);
        }
    }
    return null;
}