/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.varia.deployment.convertor;
import java.io.File;
import java.util.Properties;
import java.util.jar.JarFile;
import java.net.URL;
import javax.management.JMException;
import javax.management.ObjectName;
import org.jboss.deployment.DeploymentInfo;
import org.jboss.system.ServiceMBeanSupport;
/**
* Converts WebLogic applications.
*
* @author <a href="mailto:aloubyansky@hotmail.com">Alex Loubyansky</a>
* @author <a href="mailto:andreas@jboss.org">Andreas Schaefer</a>
* @version $Revision: 81038 $
*
* <p><b>20020519 Andreas Schaefer:</b>
* <ul>
* <li>Creation</li>
* </ul>
*
* @jmx.mbean
* name="jboss.system:service=Convertor,type=WebLogic"
* extends="org.jboss.system.ServiceMBean"
*/
public class WebLogicConvertor
extends ServiceMBeanSupport
implements Convertor, WebLogicConvertorMBean
{
// Attributes ---------------------------------------
/** the deployer name this converter is registered with */
private String deployerName;
/** the version of xsl resources to apply */
private String wlVersion;
/** remove-table value */
private String removeTable;
/** datasource name that will be set up for converted bean */
private String datasource;
/** the datasource mapping for the datasource */
private String datasourceMapping;
/** xsl parameters used in transformations */
private Properties xslParams;
// WebLogicConverter implementation -----------------
/**
* @jmx.managed-attribute
*/
public String getDeployer()
{
return deployerName;
}
/**
* @jmx.managed-attribute
*/
public void setDeployer( String name )
{
if( deployerName != null && name!= null && deployerName != name )
{
// Remove deployer
try
{
server.invoke(
new ObjectName( deployerName ),
"removeConvertor",
new Object[] { this },
new String[] { this.getClass().getName() }
);
}
catch( JMException jme ) { }
}
if( name != null ) deployerName = name;
}
/**
* @jmx.managed-attribute
*/
public String getWlVersion()
{
return wlVersion;
}
/**
* @jmx.managed-attribute
*/
public void setWlVersion( String wlVersion )
{
this.wlVersion = wlVersion;
}
/**
* @jmx.managed-attribute
*/
public String getRemoveTable()
{
return removeTable;
}
/**
* @jmx.managed-attribute
*/
public void setRemoveTable( String removeTable )
{
this.removeTable = removeTable;
}
/**
* @jmx.managed-attribute
*/
public String getDatasource()
{
return datasource;
}
/**
* @jmx.managed-attribute
*/
public void setDatasource( String datasource )
{
this.datasource = datasource;
}
/**
* @jmx.managed-attribute
*/
public String getDatasourceMapping()
{
return datasourceMapping;
}
/**
* @jmx.managed-attribute
*/
public void setDatasourceMapping( String datasourceMapping )
{
this.datasourceMapping = datasourceMapping;
}
// ServiceMBeanSupport overridding ------------------
public void startService()
{
try
{
// init xsl params first
initXslParams();
server.invoke(
new ObjectName(deployerName),
"addConvertor",
new Object[] { this },
new String[] { Convertor.class.getName() }
);
}
catch( JMException jme )
{
log.error( "Caught exception during startService()", jme );
}
}
public void stopService()
{
if(deployerName != null)
{
// Remove deployer
try {
server.invoke(
new ObjectName(deployerName),
"removeConvertor",
new Object[] { this },
new String[] { this.getClass().getName() }
);
}
catch( JMException jme )
{
// Ingore
}
}
}
// Converter implementation ----------------------------------------
/**
* Checks if the deployment can be converted to a JBoss deployment
* by this converter.
*
* @param url The url of deployment to be converted
* @return true if this converter is able to convert
*/
public boolean accepts(URL url)
{
String stringUrl = url.toString();
JarFile jarFile = null;
boolean accepted = false;
try
{
jarFile = new JarFile(url.getPath());
accepted = (jarFile.getEntry("META-INF/weblogic-ejb-jar.xml" ) != null)
&& (stringUrl.endsWith(".wlar") || (stringUrl.endsWith(".wl")))
|| stringUrl.endsWith(".war.wl")
|| stringUrl.endsWith(".ear.wl") ;
jarFile.close();
}
catch(Exception e)
{
log.debug("Couldn't create JarFile for " + url.getPath(), e);
return false;
}
return accepted;
}
/**
* Converts the necessary files to make the given deployment deployable
* on JBoss
*
* @param di The deployment to be converted
* @param path Path of the extracted deployment
**/
public void convert(DeploymentInfo di, File path)
throws Exception
{
Properties xslParams = getXslParams();
JarTransformer.transform(path, xslParams);
}
// Public -------------------------------------------
/**
* Returns the XSL parameters
*/
public Properties getXslParams()
{
if(xslParams == null)
{
log.warn("xmlParams should have been initialized!");
xslParams = initXslParams();
}
// xsl resources path
xslParams.setProperty("resources_path", "resources/" + wlVersion + "/");
// set remove-table
xslParams.setProperty("remove-table", removeTable);
// datasource
xslParams.setProperty("datasource", datasource);
// datasource-mapping
xslParams.setProperty("datasource-mapping", datasourceMapping);
return xslParams;
}
// Private -------------------------------------------------------
/**
* Initializes XSL parameters
*/
private Properties initXslParams()
{
xslParams = new Properties();
ClassLoader cl = Thread.currentThread().getContextClassLoader();
// path to standardjboss.xml
URL url = cl.getResource( "standardjboss.xml" );
if( url != null )
xslParams.setProperty( "standardjboss",
new File( url.getFile()).getAbsolutePath() );
else log.debug( "standardjboss.xml not found." );
// path to standardjbosscmp-jdbc.xml
url = cl.getResource( "standardjbosscmp-jdbc.xml" );
if( url != null )
xslParams.setProperty( "standardjbosscmp-jdbc",
new File( url.getFile()).getAbsolutePath() );
else log.debug( "standardjbosscmp-jdbc.xml not found." );
log.debug( "initialized xsl parameters: " + xslParams );
return xslParams;
}
}