blob: 89b8050e89fc6d50ba24cdf6441da80151972837 [file] [log] [blame]
/*
* Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Mike Norman - July 13 2010
// fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=318207
package org.eclipse.persistence.tools.dbws;
//javase imports
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
//EclipseLink imports
import org.eclipse.persistence.internal.sessions.factories.model.SessionConfigs;
import org.eclipse.persistence.internal.sessions.factories.model.log.LogConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.DatabaseLoginConfig;
import org.eclipse.persistence.internal.sessions.factories.model.platform.CustomServerPlatformConfig;
import org.eclipse.persistence.internal.sessions.factories.model.project.ProjectConfig;
import org.eclipse.persistence.internal.sessions.factories.model.session.DatabaseSessionConfig;
import org.eclipse.persistence.internal.sessions.factories.model.session.ServerSessionConfig;
import org.eclipse.persistence.sessions.JNDIConnector;
import static org.eclipse.persistence.tools.dbws.DBWSPackager.ArchiveUse.archive;
/**
* Packages generated artifacts for deployment to JBoss AS.
*
*/
public class JBossPackager extends WarPackager {
// For JBoss AS 7
static final String deploymentDescriptorFileName = "jboss-deployment-structure.xml";
// JBoss AS 7 utilizes module dependencies - we need the EclipseLink module
static final String deploymentDescriptorXml =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<jboss-deployment-structure>\n" +
" <deployment>\n" +
" <dependencies>\n" +
" <module name=\"org.eclipse.persistence\" />\n" +
" </dependencies>\n" +
" </deployment>\n" +
"</jboss-deployment-structure>";
/**
* The default constructor configures for deployment as a WAR archive to JBoss AS.
*/
public JBossPackager() {
this(new WarArchiver(),"jboss", archive);
}
protected JBossPackager(Archiver archiver, String packagerLabel, ArchiveUse useJavaArchive) {
super(archiver, packagerLabel, useJavaArchive);
}
/**
* Write the deployment descriptor contents to the provided OutputStream.
*/
@Override
public void writeDeploymentDescriptor(OutputStream descriptorOutputStream) {
OutputStreamWriter osw = new OutputStreamWriter(new BufferedOutputStream(descriptorOutputStream));
try {
osw.write(new StringBuilder(deploymentDescriptorXml).toString());
osw.flush();
}
catch (IOException e) {/* ignore */}
}
/**
* Return an OutputStream to the deployment descriptor.
*/
@Override
public OutputStream getDeploymentDescriptorStream() throws FileNotFoundException {
return new FileOutputStream(new File(stageDir, deploymentDescriptorFileName));
}
/**
* Closes the given OutputStream.
*/
@Override
public void closeDeploymentDescriptorStream(OutputStream descriptorOutputStream) {
closeStream(descriptorOutputStream);
}
/**
* Return the name of the deployment descriptor file.
*/
@Override
public String getDeploymentDescriptorFileName() {
return deploymentDescriptorFileName;
}
@Override
public SessionConfigs buildSessionsXML(OutputStream dbwsSessionsStream, DBWSBuilder builder) {
SessionConfigs ts = super.buildSessionsXML(dbwsSessionsStream, builder);
String dataSource = builder.getDataSource();
if (dataSource != null) {
DatabaseSessionConfig tmpConfig =
(DatabaseSessionConfig)ts.getSessionConfigs().firstElement();
ProjectConfig orProject = tmpConfig.getPrimaryProject();
LogConfig logConfig = tmpConfig.getLogConfig();
String sessionName = tmpConfig.getName();
DatabaseSessionConfig orSessionConfig = new ServerSessionConfig();
orSessionConfig.setPrimaryProject(orProject);
orSessionConfig.setName(sessionName);
orSessionConfig.setLogConfig(logConfig);
CustomServerPlatformConfig customServerPlatformConfig = new CustomServerPlatformConfig();
customServerPlatformConfig.setEnableJTA(true);
customServerPlatformConfig.setEnableRuntimeServices(true);
customServerPlatformConfig.setServerClassName(
"org.eclipse.persistence.platform.server.jboss.JBossPlatform");
customServerPlatformConfig.setExternalTransactionControllerClass(
"org.eclipse.persistence.transaction.jboss.JBossTransactionController");
orSessionConfig.setServerPlatformConfig(customServerPlatformConfig);
DatabaseLoginConfig dlc = new DatabaseLoginConfig();
dlc.setPlatformClass(builder.getPlatformClassname());
dlc.setExternalConnectionPooling(true);
dlc.setExternalTransactionController(true);
dlc.setDatasource(dataSource);
dlc.setLookupType(JNDIConnector.STRING_LOOKUP);
dlc.setBindAllParameters(true);
dlc.setStreamsForBinding(true);
orSessionConfig.setLoginConfig(dlc);
ts.getSessionConfigs().set(0, orSessionConfig);
}
return ts;
}
}