Running Command Prompt’s Command from JAVA


Seperti yang anda ketahui, kita dapat menjalan kan command line di dalam JAVA. Sebagai contoh saya ingin men-compress file, saya dapat menggunakan software third party seperti 7zip untuk melakukan proses zipping, sedangkan JAVA hanya sebagai trigger untuk menjalankan command line nya saja.

Kode JAVA yang diperlukan untuk merunning command line kira-kira seperti ini:

public class ZipUtil {

 public static void zipFile(String appPath, String archiveName, String fromDirectory)throws IOException {

String s = null;
Process p = Runtime.getRuntime().exec(appPath + " u " + archiveName + " " + fromDirectory);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

// read the output from the command
//logger.info("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}

// read any errors from the attempted command
while ((s = stdError.readLine()) != null) {
System.out.println(s);

}
}
}

Tapi ada permasalahan disini, jika kita ingin merunning command-command dasar dari command prompt itu sendiri, seperti copy, dir, del, dll akan muncul error.Penjelasan kenapa error ini bisa terjadi ada pada paragraph di bawah ini:

Perlu diketahui saat kita memanggil method getRuntime() dari Class Runtime artinya system harus merunning executable file (ada di dalam parameter) dan tidak ada return value. Saat kita coba menjalankan copy file1 file2 system akan mencoba mencari file copy.exe pada System Path di komputer, jika ada file copy.exe maka file inilah yang akan di execute, dengan file1 dan file2 sebagai parameternya.

Lalu bagaimana caranya untuk merunning command prompt’s command melalui JAVA. Caranya sangat simple, apa nama file executable untuk menjalankan command prompt? Jawabannya adalah command prompt itu sendiri – cmd.exe. Jadi untuk menjalankan command prompt’s command melalui JAVA adalah dengan cara menggunakan command line seperti ini:

cmd.exe /C [command] [parameter1] [parameter2] .. [parameter..]
Advertisement

Kettle: Spoon Job Error – Running Old Transformation Design


Baru saja dapet case yang menarik dengan Spoon – nya Kettle nih. Permasalahannya sih sederhana, saya mencoba membuat beberapa design transformasi, lalu digabungkan ke dalam satu job, ternyata dalam design tersebut terdapat kesalahan dan harus diperbaiki. Setelah diperbaiki lalu di save kemudian saya coba running job tersebut, tetapi kenapa design yang di running adalah design yang lama bukan yang baru?

Sebagai ilustrasi, silahkan anda perhatikan design job yang sudah saya buat:

Job Design

Job Design

Jadi saya membuat 3 buah design transformation yang akan dijalankan sekaligus melalui satu job. Jika saya running melalui job, terjadi error. Tapi jika dijalankan secara terpisah tiap transformation, hasilnya sukses. Why??

Panik dan bingung.. Kenapa ya kira-kira hal ini bisa terjadi? Apa karena saya salah men-save filenya? Saya coba buka lagi design transformasi yang sudah saya buat, loh kok design-nya sudah benar? Saya coba jalankan kembali job yang tadi, tetapi errornya masih tetap sama. Lalu saya coba jalankan transformasi-nya secara terpisah (diluar job) ternyata hasilnya benar. Lalu dibagian mananya yang error?

Ternyata kesalahan ini terjadi karena terjadi kesalahan target saat menjalankan Job. Untuk lebih jelasnya bisa anda lihat pada gambar di bawah. Seperti dapat dilihat pada form di bawah, terlihat bahwa transformasi yang akan dijalankan adalah Transformasi 1, tetapi sumber design yang akan dijalankan berasal dari file.ktr atau file save-an dari local komputer, bukan dari repository database yang sudah saya buat.

Job Transformation Detail

Job Transformation Detail

Solusi dari permasalahan seperti ini adalah merubah target design yang akan dijalankan, yaitu dengan cara mengosongkan saja field Transformation Filename, atau bisa juga dengan cara meng-eksport ulang transformasi yang telah di re-design menjadi file .ktr, lalu edit agar job menargetkan transformasinya ke file .ktr yang baru.

Demikian penjelasan dari saya semoga bermanfaat.