@ -4,6 +4,10 @@ import java.io.File;
@@ -4,6 +4,10 @@ import java.io.File;
import java.io.IOException ;
import java.io.StringWriter ;
import java.io.Writer ;
import java.sql.Connection ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet ;
import java.sql.SQLException ;
import java.util.Arrays ;
import java.util.HashMap ;
import java.util.List ;
@ -40,9 +44,11 @@ public class EtlStarter implements TemplateTransformModel {
@@ -40,9 +44,11 @@ public class EtlStarter implements TemplateTransformModel {
private static Logger logger = Logger . getLogger ( EtlStarter . class ) ;
private String mandantenId = "default" ;
private LogLevel logLevel = LogLevel . BASIC ;
public EtlStarter ( String mandantenId ) {
this . mandantenId = mandantenId ;
}
@Override
public Writer getWriter ( Writer paramWriter , Map paramMap ) throws TemplateModelException , IOException {
logger . info ( "**EtlStarter**" ) ;
@ -73,7 +79,49 @@ public class EtlStarter implements TemplateTransformModel {
@@ -73,7 +79,49 @@ public class EtlStarter implements TemplateTransformModel {
logger . info ( "PARAM: " + key + " -> " + value . getAsString ( ) ) ;
}
String moduleDir = SuperXManager . getModuleDir ( ) + File . separator + component + File . separator ;
String moduleDir = SuperXManager . getModuleDir ( ) ;
if ( moduleDir = = null | | moduleDir . equals ( "" ) ) {
if ( System . getProperty ( "MODULE_PFAD" ) ! = null & & ! System . getProperty ( "MODULE_PFAD" ) . toString ( ) . equals ( "" ) )
moduleDir = System . getProperty ( "MODULE_PFAD" ) . toString ( ) ;
else
throw new IOException (
"Module-Pfad kann nicht ermittelt werden, bitte setzen Sie den JVM Parameter -DMODULE_PFAD=..." ) ;
}
String jobFilePath = null ;
if ( component . contentEquals ( "manual" ) ) {
jobFilePath = getFilePathFromDatabase ( etl_step , moduleDir ) ;
} else {
jobFilePath = getFilePathFromModule ( component , etl_step , moduleDir ) ;
}
logger . info ( "Kettle job: " + jobFilePath ) ;
kettleCallEmbedded ( jobFilePath , params ) ;
return null ;
}
private String getFilePathFromDatabase ( String etl_step , String moduleDir ) throws IOException {
String jobFilePath = null ;
try ( Connection con = SxPools . get ( mandantenId ) . getConnection ( ) ;
PreparedStatement pst = con . prepareStatement ( "select filepath from sx_jobs where uniquename=?" ) ) {
pst . setString ( 1 , etl_step ) ;
ResultSet rs = pst . executeQuery ( ) ;
while ( rs . next ( ) ) {
jobFilePath = rs . getString ( 1 ) ;
}
rs . close ( ) ;
} catch ( SQLException e ) {
e . printStackTrace ( ) ;
throw new IOException ( "Fehler beim Auslesen von sx_jobs mit uniquename " + etl_step + " " + e ) ;
}
if ( jobFilePath = = null ) {
throw new IOException (
"Fehler beim Auslesen von sx_jobs mit uniquename " + etl_step + " Kein Eintrag gefunden" ) ;
}
return moduleDir + File . separator + jobFilePath ;
}
private String getFilePathFromModule ( String component , String etl_step , String moduleDir )
throws TemplateModelException {
moduleDir + = File . separator + component + File . separator ;
if ( ! ( new File ( moduleDir ) ) . exists ( ) ) {
throw new TemplateModelException ( "Component not found: " + component ) ;
}
@ -96,20 +144,15 @@ public class EtlStarter implements TemplateTransformModel {
@@ -96,20 +144,15 @@ public class EtlStarter implements TemplateTransformModel {
}
String fileAttr = etl . attributeValue ( "file" ) ;
String jobFilePath = moduleDir + fileAttr . substring ( fileAttr . indexOf ( '/' ) + 1 ) ;
logger . info ( "Kettle job: " + jobFilePath ) ;
kettleCallEmbedded ( jobFilePath , params ) ;
return null ;
return jobFilePath ;
}
/ * *
* Abarbeiten des Kettle Jobs mit kettle ( Embedded ) .
*
* @param jobfile
* Dateiname des Jobs
* @param jobtype
* ktr = Transformation , kjb = Job
* @param params
* Parameter
* @param jobfile Dateiname des Jobs
* @param jobtype ktr = Transformation , kjb = Job
* @param params Parameter
* @throws Exception
* /
final StringBuffer kettleCallEmbedded ( final String jobfile , final Map < String , String > jobParams ) {
@ -119,15 +162,15 @@ public class EtlStarter implements TemplateTransformModel {
@@ -119,15 +162,15 @@ public class EtlStarter implements TemplateTransformModel {
/ * *
* Abarbeiten des Kettle Jobs mit kettle ( Embedded ) .
*
* @param jobfile
* Dateiname des Jobs
* @param params
* Parameter
* @param isPostgres - für Metainformationen , wenn false dann wird Informix genommen
* @param jobfile Dateiname des Jobs
* @param params Parameter
* @param isPostgres - für Metainformationen , wenn false dann wird Informix
* genommen
* @return StringBuffer mit Logging für Ausgabe im Browser
* @throws Exception
* /
public final StringBuffer kettleCallEmbedded ( final String mandantenID , final String jobfile , final Map < String , String > jobParams , boolean isPostgres ) {
public final StringBuffer kettleCallEmbedded ( final String mandantenID , final String jobfile ,
final Map < String , String > jobParams , boolean isPostgres ) {
StringWriter writer = new StringWriter ( ) ;
WriterAppender appender = new WriterAppender ( new SimpleLayout ( ) , writer ) ;
org . apache . log4j . Level oldLevel = logger . getLevel ( ) ;
@ -146,20 +189,23 @@ public class EtlStarter implements TemplateTransformModel {
@@ -146,20 +189,23 @@ public class EtlStarter implements TemplateTransformModel {
}
JndiUtil . initJNDI ( ) ;
MemoryMetaStore metastore = new MemoryMetaStore ( ) ;
//Dies hatte für Mandantenbetrieb nicht funktioniert, daher Umstellung auf SxPool , s.u.
//DataSourceProviderFactory.setDataSourceProviderInterface(new KettleDataSourceProvider(mandantenID,logger));
// Dies hatte für Mandantenbetrieb nicht funktioniert, daher Umstellung auf
// SxPool , s.u.
// DataSourceProviderFactory.setDataSourceProviderInterface(new
// KettleDataSourceProvider(mandantenID,logger));
/ *
* get all db connections configured in databases . xml as
* DataSource ' s by name
* get all db connections configured in databases . xml as DataSource ' s by name
* /
// Enumeration<String> dbNames =
// this.dbhandlerPool.getLogicalDatabaseNames();
List < String > dbNames = Arrays . asList ( new String [ ] { "eduetl" } ) ;
for ( String dbName : dbNames ) {
// Dies hatte für Mandantenbetrieb nicht funktioniert, daher Umstellung auf SxPool , s.u.
// Dies hatte für Mandantenbetrieb nicht funktioniert, daher Umstellung auf
// SxPool , s.u.
//DatabaseMeta dbmeta = new DatabaseMeta(dbName, isPostgres ? "POSTGRESQL" : "INFORMIX", "JNDI", null, dbName, "1521", null, null);
// DatabaseMeta dbmeta = new DatabaseMeta(dbName, isPostgres ? "POSTGRESQL" :
// "INFORMIX", "JNDI", null, dbName, "1521", null, null);
DatabaseMeta dbmeta = SxPools . get ( mandantenID ) . getKettleDatabaseMeta ( ) ;
DatabaseMetaStoreUtil . createDatabaseElement ( metastore , dbmeta ) ;