这几天看了datastage的调度,因为ds没有开放对java的接口去调用它,所以我们只能用java去调用dll的链接库,因为我刚接触对ds理解的也不是很深所以有的地方可能会说错,我现在想说说我的做法,说出来大家一起讨论一下对ds的调度,这里是一部分代码
import com.sun.jna.Library;
import com.sun.jna.Structure;
import com.sun.jna.Union;
import com.sun.jna.Native;
/** Simple example of native library declaration and usage. */
public class dsjobc {
public static class time_t extends Structure {
public int value;
public time_t() {}
public time_t(int value) {
this.value = value;
}
}
public static class DSPROJECT extends Structure{
public int dsapiVersionNo;
public int sessionId;
public byte valueMark;
public byte fieldMark;
}
public static class DSJOB extends Structure{
public DSPROJECT hProject; /* Reference to project handle for job */
String serverJobHandle; /* Text of handle to job on server */
String logData; /* Cached log summary data */
int logDataLen; /* Size of log summary data */
int logDataPsn; /* Current position in logData */
}
public static class DSparamValue extends Union{
String pString;
String pEncrypt;
int pInt;
float PFloat;
String pPath;
String pDate;
String pTime;
}
public static class DSPARAM extends Structure{
int paramType;
}
public interface libvmdsapi extends Library {
public DSJOB DSOpenJob(DSPROJECT pro,String job);
public int DSLockJob(DSJOB job);
public int DSRunJob(DSJOB job, int flag);
// public int DSGetJobInfo(DSJOB job, int flag, DSJOBINFO info);
public int DSSetParam(DSJOB job, String str, DSPARAM pam);
}
public static void main(String[] argv) {
DSPROJECT proj;
DSJOB dsjob;
dsjob=libvmdsapi.INSTANCE.DSOpenJob(proj,"ss");
int lock= libvmdsapi.INSTANCE.DSLockJob(dsjob);
// int jofs= libvmdsapi.INSTANCE.DSGetJobInfo(dsjob,1,info);
// System.out.println("jofs:"+jofs);
System.out.println("lock:"+lock);
System.out.println("dsapiv:"+proj.dsapiVersionNo+"/ndsapi_sessionid:"+proj.sessionId);
System.out.println(dsjob.logData);
// System.out.println("jobname:"+info.info.jobName);
int runf = libvmdsapi.INSTANCE.DSRunJob(dsjob,1);
System.out.println("runflag:"+runf);
}
}
我贴出来,这个是可以运行的。这个是通过jna方式调用ds的。全部的代码和需要的jar包在http://download.csdn.net/detail/chen756430226/4600337 可以下载的到,这个是我自己写的一个初期的demo。我会将demo放在群共享里讨论。因为ds的服务器一般都是在Linux上的所以我们要是在远程运行的时候需要将ds的vmdsapi.dll类库拷贝到运行的本地。还有需要的其他两个dsclnt32.dll dsrpc32.dll 拷贝到自己本地。ds开发的帮助文档可以在http://download.csdn.net/my下载,我也会放在群共享里面。欢迎大家加入一起讨论。最后这里提出我的疑问来,在调度的时候我们会传参数到调度的job去这个怎么传呢?还有怎么获取日志信息呢?
import com.sun.jna.Structure;
import com.sun.jna.Union;
import com.sun.jna.Native;
/** Simple example of native library declaration and usage. */
public class dsjobc {
public static class time_t extends Structure {
public int value;
public time_t() {}
public time_t(int value) {
this.value = value;
}
}
public static class DSPROJECT extends Structure{
public int dsapiVersionNo;
public int sessionId;
public byte valueMark;
public byte fieldMark;
}
public static class DSJOB extends Structure{
public DSPROJECT hProject; /* Reference to project handle for job */
String serverJobHandle; /* Text of handle to job on server */
String logData; /* Cached log summary data */
int logDataLen; /* Size of log summary data */
int logDataPsn; /* Current position in logData */
}
public static class DSparamValue extends Union{
String pString;
String pEncrypt;
int pInt;
float PFloat;
String pPath;
String pDate;
String pTime;
}
public static class DSPARAM extends Structure{
int paramType;
}
public interface libvmdsapi extends Library {
libvmdsapi INSTANCE = (libvmdsapi)Native.loadLibrary("vmdsapi",libvmdsapi.class);
public void DSSetServerParams( String ServerName, String UserName, String Password);
public DSJOB DSOpenJob(DSPROJECT pro,String job);
public int DSLockJob(DSJOB job);
public int DSRunJob(DSJOB job, int flag);
// public int DSGetJobInfo(DSJOB job, int flag, DSJOBINFO info);
public int DSSetParam(DSJOB job, String str, DSPARAM pam);
}
public static void main(String[] argv) {
DSPROJECT proj;
DSJOB dsjob;
// DSJOBINFO info;
libvmdsapi.INSTANCE.DSSetServerParams("193.158.163.243", "dsadm", "dsadmin");
dsjob=libvmdsapi.INSTANCE.DSOpenJob(proj,"ss");
int lock= libvmdsapi.INSTANCE.DSLockJob(dsjob);
// int jofs= libvmdsapi.INSTANCE.DSGetJobInfo(dsjob,1,info);
// System.out.println("jofs:"+jofs);
System.out.println("lock:"+lock);
System.out.println("dsapiv:"+proj.dsapiVersionNo+"/ndsapi_sessionid:"+proj.sessionId);
System.out.println(dsjob.logData);
// System.out.println("jobname:"+info.info.jobName);
int runf = libvmdsapi.INSTANCE.DSRunJob(dsjob,1);
System.out.println("runflag:"+runf);
}
}