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..]
Advertisements

Concat Two File with Command Prompt


Bagi para pengguna *NIX, pasti sudah familiar dengan fungsi CAT. Secara garis besar fungsi CAT digunakan untuk mem-print isi sebuah file ke dalam terminal.

cat file1

Lalu untuk Join 2 file menjadi 1 file biasanya menggunakan command berikut

cat file1 file2 > file3

Konsep di atas adalah konsep dasar yang akan saya gunakan. Tapi bagaimana cara menerapkannya untuk OS Windows. Khususnya Windows XP – karena saat ini saya asih menggunakan Windows XP sebagai OS. Pada Command Prompt ada command TYPE, yang fungsinya sama dengan command CAT pada *NIX. Untuk selebihnya sama saja syntaxnya dengan di *NIX

type file1 file2 >> file3

Keterangan:

Tanda >> artinya, Jika file3 NOT EXISTS maka akan di create, jika sudah ada maka data yang baru akan di append ke data sebelumnya.

Tanda > artinya, file3 akan direcreate, EXISTS or NOT EXISTS.

Java mail on Exchange Server 2007


Pada artikel kali ini saya coba untuk menjabarkan bagaimana cara untuk mengirimkan email melalui Java. <*reader*>Yah ini mah common banget – cari di internet juga udah banyak contohnya </*reader*>.  Tenang dulu, sesuai dengan judulnya saya juga akan coba bahas common problem yang terjadi pada saat mengirimkan email melalui Echange Server 2007.

1.Pertama – tama saya berikan contoh untuk

 String host = "your mail server";
 String from = "your email";

 Properties props = System.getProperties();
 props.put("mail.smtp.host", host);
 props.put("mail.smtp.user", from);
 props.put("mail.smtp.port", "25");
 props.put("mail.debug", "true");

 //props.put("mail.smtp.auth", "true");
 //String userId = "user01";
 //String userPassword = "password01";

 String[] to = {"your email"};

 Session session = Session.getDefaultInstance(props, null);
 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 InternetAddress[] toAddress = new InternetAddress[to.length];

 // To get the array of addresses
 for( int i=0; i < to.length; i++ ) { // changed from a while loop
 toAddress[i] = new InternetAddress(to[i]);
 }
 for( int i=0; i < toAddress.length; i++) { // changed from a while loop
 message.addRecipient(Message.RecipientType.TO, toAddress[i]);
 }

 String bodyMessage = "TESTING";
 message.setSubject("EMAIL TESTING");
 message.setText(bodyMessage);

 Transport transport = session.getTransport("smtp");

 try{
//transport.connect(userId, userPassword);
 transport.connect();
 transport.sendMessage(message, message.getAllRecipients());
 transport.close();
 }
 catch(Exception e){
 System.out.println(e.getMessage());
 }
 

Sekarang coba dijalankan dulu syntax di atas. Jangan lupa diliat output nya, untuk men-trace jika ada error. Jika aplikasi ini gagal mengirimkan email ada beberapa hal yang harus anda check:

  • Check apakah PORT 25 di block Firewall tidak
  • Coba check antivirus anda, apakah java.exe sudah masuk ke exception list untuk bagian mail sendernya. (Saya pernah mengalami hal ini pada antivirus Mc Affe)
  • Check Settingan Exchange Server anda. Server Configuration -> Hub Transport -> Default your server. Apakah anonymous nya di check list? Kemungkinan besar anonymousnya tidak di check list, jika hal ini terjadi berarti Security Networking anda hanya mengijinkan pengiriman email oleh user dengan authentikasi.

2. Contoh pengiriman email menggunakan authentikasi, tinggal dibuka comment nya saja. 😉

 String host = "your mail server";
 String from = "your email";

 Properties props = System.getProperties();
 props.put("mail.smtp.host", host);
 props.put("mail.smtp.user", from);
 props.put("mail.smtp.port", "25");
 props.put("mail.debug", "true");

 props.put("mail.smtp.auth", "true");
 String userId = "user01";
 String userPassword = "password01";

 String[] to = {"your email"};

 Session session = Session.getDefaultInstance(props, null);
 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 InternetAddress[] toAddress = new InternetAddress[to.length];

 // To get the array of addresses
 for( int i=0; i < to.length; i++ ) { // changed from a while loop
 toAddress[i] = new InternetAddress(to[i]);
 }
 for( int i=0; i < toAddress.length; i++) { // changed from a while loop
 message.addRecipient(Message.RecipientType.TO, toAddress[i]);
 }

 String bodyMessage = "TESTING";
 message.setSubject("EMAIL TESTING");
 message.setText(bodyMessage);

 Transport transport = session.getTransport("smtp");

 try{
 transport.connect(userId, userPassword);
 //transport.connect();
 transport.sendMessage(message, message.getAllRecipients());
 transport.close();
 }
 catch(Exception e){
 System.out.println(e.getMessage());
 }
 

Untuk mengirimkan email yang masih ke dalam Local Area Networks saja, seharusnya tidak ada masalah.

3. sekarang coba anda ganti To – nya ke alamat email di luar jaringan anda, misalnya ke gmail atau ke yahoo. Jika tidak bisa terkirim berarti harus ada penambahan beberapa settingan lagi pada Exchange Server anda.

Silahkan melihat referensi berikut:
http://msexchangeteam.com/archive/2006/12/28/432013.aspx

Creating Web Statistic Analyzer in Tomcat


Original tutorial: http://www.nuxora.com/2007/07/10/awstats-on-tomcat/

Please give credit to Him.

Saya akan menjelaskan bagaimana cara untuk membuat sebuah Web Statistic Analyzer pada Tomcat 5/6 khususnya untuk Operating System berbasis Windows. (Pada tutorial ini saya menggunakan OS Windows XP)

Requirement:
1. Perl 5.2 or Above (Pada tutorial ini saya akan menggunakan Strawberry Perl untuk Windows)
2. Tomcat 5 or above (Pada tutorial ini saya akan menggunakan Tomcat 6)
3. awstats.war –> original war file sudah tidak aktif, anda bisa mendownloadnya disini

Langsung saja saya coba menerangkan langkah2 yang harus dilakukan:
A. Installation
1. Install Strawberry Perl pada OS anda, atau anda bisa menggunakan installasi lain untuk Perl.

B. Tomcat Setting
Pada tahapan ini saya anggap configurasi pada Tomcat anda adalah by default, atau anda tidak pernah melakukan perubahan konfigurasi apapun pada Tomcat server anda.
1. Buka file %Tomcat_Home%/conf/server.xml. Langsung menujun pada beberapa baris paling bawah. Uncomment bagian Valve, lalu modifikasi sedikit menjadi seperti ini:

<Valve className="org.apache.catalina.valves.FastCommonAccessLogValve" directory="logs"
               prefix="access." suffix=".log" pattern="combined" resolveHosts="false"

2. Buka file %Tomcat_Home%/conf/context.xml. Modifikasi dan Tambahkan line berikut:

<Context reloadable="true" privileged="true">
.
.
.
	WatchedResource>WEB-INF/web.xml</WatchedResource>
.
.
.
</Context>

3. Jika anda menggunakan Tomcat 6, anda membutuhkan file servlets-cgi.jar dari library Tomcat 5.

C. Installation awstats

1. Taruh awstats.war pada file webapps Tomcat.

2. Jalankan Tomcat – biarkan sampai awstats di deploy oleh Tomcat

3. Matikan Tomcat, sekarang masuk ke bagian setup awstats

D. Awstats Setting

1. Buka Windows Explorer, lalu masuk ke Directory %Tomcat_Home%/webapps/WEB-INF/cgi-bin, copy file awstats.model.conf ke folder yang sama, lalu rename file copy-an nya menjadi awstats.%nama_aplikasi%.conf. Sebagai contoh awstats.www.tjong.com.conf (NOTE: untuk selanjutnya pada referensi ini, saya akan menggunakan istilah awstats.www.tjong.com.conf sebagai referensi untuk file configurasi anda).

2. Buka file awstats.pl. Rubah baris pertama

dari:

#!usr/bin/perl

menjadi

#!%strawberry_perl_home%/perl/bin/perl

NOTE %strawberry_perl_home% = directory tempat anda menginstall strawberrry perl.

3. Buka file awstats.www.tjong.com.conf, modifikasi beberapa line sebagai berikut:

a. Baris ke-50:

dari:

LogFile="[TomcatInstallDir]/webapps/awstats/WEB-INF/tools/logresolvemerge.pl [TomcatInstallDir]/logs/*.log |"

menjadi:

LogFile="%Tomcat_Home%/logs/access.%YYYY-0-%MM-0-%DD-0.log"

b. Baris ke-146:

dari:

SiteDomain=""

menjadi:

SiteDomain="localhost"

c. Baris ke-232:

dari:

AllowToUpdateStatsFromBrowser=0

menjadi:

AllowToUpdateStatsFromBrowser=1

4. Open Command Prompt. Masuk ke Directory %Tomcat_Home%/webapps/awstats/WEB-INF/cgi-bin jalankan perintah berikut:

perl awstats.pl -config=www.tjong.com -update

D. Running Application
1. Jalankan Tomcat Server anda
2. Pergi ke alamat ini:

http://localhost:8080/awstats/cgi-bin/awstats.pl?config=www.tjong.com

3. Tampilannya kurang lebih akan seperti ini:

4. Click Update Now untuk menggenerate data terbaru

Creating Web Statistic Analyzer


Required Software:

  1. Web Server: Apache Server 2.2 – bisa di download disini
  2. Perl: Strawberry Perl 5.10.1.0 – bisa di download disini
  3. Web Statistik Analyzer: awstats 6.95 – bisa di download disini

Scenario nya, menggunakan Apache Server sebagai web server – nya, 1 website aja dan lokasinya ada di root. Intinya yang akan kita gunakan adalah file access.log nya apache, log file ini sebagai raw datanya. Lokasi peng-install-an apache server pada contoh ditulisan ini, saya bikin default aja di C:\Program Files\ . Untuk strawberry perl lokasi default nya ada di C:\ . Kalau untuk awstats lokasi defaultnya di C:\Program Files\.

Jangan menginstall awstats nya dulu, kalau sudah terlanjur di install – ya udah di uninstall aja lagi :p. Sabar yah nanti akan saya bimbing pelan-pelan. Pertama-tama yang harus anda lakukan adalah menginstall strawberry Perl. Sudah? Kalau sudah selesai kita akan melanjutkan ke step selanjutnya dengan menginstall awstats.

Kita mulai ke tahap selanjutnya. Klik 2 kali setup file awstats – nya. Next – I Agree – Next – Next aja sampai muncul command prompt.

  1. Inputan pertama masukkan path installasi  Apache Server, kalau dicontoh ini berarti berada pada:
    C:\Program Files\Apache Software Foundation\Apache2.2
  2. Inputan kedua masukkan path tempat httpd.conf berada, kalau dicontoh ini berarti:
    C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
  3. Inputan Ketiga – “Do you want me to build a new AWStats config/profile?” – isi saja dengan y
  4. Inputan Keempat tuliskan nama profile yang akan dibuat: myweb
  5. Pencet Enter to continue.
  6. Pencet Enter lagi untuk finish.

(*) Kita mulai dengan tahap selanjutnya, yaitu untuk memodifikasi configurasi file di profile yang baru saja kita create. Masuk ke path C:\Program Files\AWStats\wwwroot\cgi-bin ini buka file awstats.myweb.conf dengan notepad. Dan rubah baris2 berikut:

1.

 LogFile="/var/log/httpd/mylog.log"
 

menjadi

 LogFile="C:/Program Files/Apache Software Foundation/Apache2.2/logs/access.log"
 

2.

 LogFormat=1
 

menjadi

 LogFormat=4
 

Kita mulai masuk ke tahap selanjutnya, testing configurasi awstats nya sudah benar atau belum. Silahkan ikuti langkah berikut:

  1. Buka Command prompt
  2. Masuk ke direktori C:\Program Files\AWStats\wwwroot\cgi-bin
  3. ketikkan command berikut:
 perl awstats.pl -config=myweb -update
 

Jika dia mengeluarkan hasil seperti berikut ini, maka configurasi anda sudah berhasil:

Create/Update database for config "./awstats.myweb.conf" by AWStats version 6.9
5 (build 1.943)
From data in log file "C:/Program Files/Apache Software Foundation/Apache2.2/log
s/access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 5847
 Found 0 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 5847 new qualified records.
 

Kita sudah hampir menikmati hasil kerja keras ini, ayo yang semangat. 🙂
Next step, mostly untuk user windows mengalami masalah pada file awstats.pl nya yang tidak bisa mengakses perl. Padahal sewaktu menginstall Strawberry Perl, sudah automatis di-include kan ke dalam System PATH. Dugaan saya karena perbedaan file separator antara windows base dengann unix base.
Untuk menanggulanginya tinggal edit file awstats.pl nya sedikit. Silahkan ikuti langkah berikut ini:

  1. Masuk ke direktori C:\Program Files\AWStats\wwwroot\cgi-bin
  2. Buka file awstats.pl dengan notepad
  3. Ganti first line nya:
 #!/usr/bin/perl
 

menjadi

#!C:\strawberry\perl\bin\perl
 

Akhirnya, setelah perjalanan yang panjang, kita dapat menikmati hasilnya. Buka browser anda, coba masukkan alamat berikut: http://localhost/awstats/awstats.pl?config=myweb

Kalau anda perhatikan pada statistik yang dihasilkan, pada bagian TOP 10 OS dan TOP 10 Browser, datanya masih unknown. Jika anda mau melengkapinya silahkan merubah format log file pada apache anda. Untuk melengkapinya kita bisa menggunakan combined.log. Noted: jika anda menggunakan combined.log sebagai raw datanya, jangan lupa untuk merubah LogFormat nya menjadi tipe 1. Bagi anda yang belum tau bagaimana caranya – silahkan baca referensi nya di tulisan saya yang sebelumnya (click here).

Oopss saya lupa memberitahukan, kalau untuk meng-update data log ke dalam awstats – bagi pengguna OS Windows tidak bisa automatis – tetap harus di-update manual. Cara nya coba liat yang saya beri tanda (*) pada artikel ini. Jika anda sudah mengerti flow nya, coba mengupdate data nya menggunakan scheduler pada windows. Kalau masih bingung bagaimana caranya, silahkan nantikan tulisan saya yang berikutnya. :p

Increasing JVM memory allocation for Tomcat 6


Pernah mengalami error seperti ini:

java.lang.OutOfMemoryError: Java heap space

Kalau anda cari secara plain ke Paman google, pasti hasil yang anda temui adalah karena memory pada JVM yang kurang besar. Solusi untuk permasalahan seperti ada banyak, contohnya: membagi file yang ditransfer agar lebih kecil, solusi yang kedua adalah memperbesar memory allocation untuk JVM.

Jika aplikasi anda adalah Desktop Base, maka caranya relatif mudah, cukup menambahkan -Xms dan -Xmx pada saat me-run aplikasi:

java -Xms[memory size] -Xmx[memory size] className

-Xms menunjukkan minimum memory location yang digunakan.

-Xmx menunjukkan maximum memory location yang digunakan.

Contoh penggunaannya:

java -Xms128m -Xmx1024m andreas

Contoh di atas menjalankan file andreas dengan minimum memory di JVM 128 MB dan maksimum memory-nya 1 GB.

Lalu bagaimana untuk aplikasi Web-base? Bagaimana caranya? Karena aplikasi berjalan di atas sebuah Web server maka sangat jelas, kalau memory JVM si Web server inilah yang harus diperbesar.

Bagi pengguna Apache Tomcat Versi 6, caranya relatif mudah. Cukup menambahkan variable CATALINA_OPTS pada system environment. Value yang perlu diisikan cukup seperti ini:

-Xms128m -Xmx1024m

See. It’s very simple. Silahkan anda sekalian untuk mencobanya.