<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4098885671918163159</id><updated>2012-01-13T09:48:31.471-08:00</updated><category term='NTFS'/><category term='skills'/><category term='com to IP'/><category term='unable to login'/><category term='serial to IP'/><category term='sql override'/><category term='changing install drive'/><category term='jersey'/><category term='JAX-RS'/><category term='sybase'/><category term='advanced installer'/><category term='process using a port'/><category term='routing data'/><category term='channels'/><category term='java SOAP tutorial'/><category term='lookup source filter'/><category term='process manager'/><category term='log files'/><category term='interleaving audio'/><category term='grep'/><category term='web service'/><category term='trouble shooting serial port'/><category term='JAX-WS'/><category term='program using port'/><category term='productivity'/><category term='default database informatica'/><category term='monitoring files'/><category term='process viewer'/><category term='thread dump'/><category term='jmx'/><category term='linux port'/><category term='serial port'/><category term='mixing audio for different channels'/><category term='java REST tutorial'/><category term='informatica sybase'/><category term='file watcher'/><category term='java 7'/><category term='build script'/><category term='REST'/><category term='xmlparser'/><category term='socat'/><category term='java thread dump'/><category term='mono to stereo'/><category term='startup'/><category term='custom install drive'/><category term='groups'/><category term='IP to serial'/><category term='java audio'/><category term='xml parsing java'/><category term='mixing audio'/><category term='screensaver'/><category term='linux task manager'/><category term='regular expression'/><category term='Java'/><category term='java monitoring files'/><category term='socket to serial'/><category term='viewing output changes'/><category term='tunneling data'/><category term='flex'/><category term='IP to com'/><category term='webservice'/><category term='SOAP'/><category term='regex'/><category term='windows partition'/><category term='locked'/><category term='monitor objects'/><category term='tray icon'/><category term='Java web service'/><category term='linux thread dump'/><category term='groovy'/><category term='jdic'/><category term='unix'/><category term='search'/><category term='install drive'/><category term='serial to socket'/><category term='monitoring serial port'/><category term='ubuntu'/><category term='xstream'/><title type='text'>Dollop of Desi</title><subtitle type='html'>Tips and tricks on Datawarehousing, Java, linux and Nonstop programming.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-7684027378030832452</id><published>2011-12-21T15:37:00.000-08:00</published><updated>2011-12-21T15:40:08.204-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java 7'/><category scheme='http://www.blogger.com/atom/ns#' term='java monitoring files'/><category scheme='http://www.blogger.com/atom/ns#' term='file watcher'/><title type='text'>Java 7 monitoring files/folders</title><content type='html'>Java 7 has this new &lt;a href="http://docs.oracle.com/javase/tutorial/essential/io/notification.html" target="_blank"&gt;watchservice &lt;/a&gt;which is a welcome development and you can read about it in many blogs as well as the &lt;a href="http://docs.oracle.com/javase/tutorial/essential/io/notification.html" target="_blank"&gt;oracle&lt;/a&gt; site. I tried playing with it using the code sample from some of the blogs. But unfortunately it seemed to work only the very first time and not after that.&lt;br /&gt;Here is the code&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public FileWatcher(String directoryPath) throws IOException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.directoryPath&amp;nbsp; = directoryPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FileSystem fileSystem = FileSystems.getDefault();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; watcher = fileSystem.newWatchService();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Path myDir = fileSystem.getPath(this.directoryPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myDir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; monitorFolder();&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;private void monitorFolder() {&lt;br /&gt;  executor = Executors.newSingleThreadScheduledExecutor();&lt;br /&gt;  executor.submit(this);&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;public void run() {&lt;br /&gt;  WatchKey watckKey = null;&lt;br /&gt;  try {&lt;br /&gt;   while(!shutdown ) {&lt;br /&gt;    watckKey = watcher.take();&lt;br /&gt;    events = watckKey.pollEvents();&lt;br /&gt;    listener.processEvent(events);       &lt;br /&gt;   }&lt;br /&gt;  } catch (InterruptedException e) {&lt;br /&gt;   logger.error("Error monitoring directory", e);&lt;br /&gt;  }&lt;br /&gt;} &lt;/pre&gt;&lt;br /&gt;Some more beating around the bush and googling I discovered that the WatchKey needs to be reset for subsequent events to flow through to the listener.&lt;br /&gt;Wonder why this strange behaviour. Anyhow here is the fix and after that everything was fine and dandy! &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public void run() {&lt;br /&gt;  WatchKey watchKey = null;&lt;br /&gt;  try {&lt;br /&gt;   while(!shutdown ) {&lt;br /&gt;    watchKey = watcher.take();&lt;br /&gt;    events = watchKey.pollEvents();&lt;br /&gt;    listener.processEvent(events);&lt;br /&gt;          &lt;br /&gt;    &lt;span style="color: blue;"&gt;&lt;b&gt;watchKey.reset();&lt;/b&gt;&lt;/span&gt;   }&lt;br /&gt;  } catch (InterruptedException e) {&lt;br /&gt;   logger.error("Error monitoring directory", e);&lt;br /&gt;  }&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;Found out later by paying more attention(!!) to the article on the oracle &lt;a href="http://docs.oracle.com/javase/tutorial/essential/io/notification.html" target="_blank"&gt;site&lt;/a&gt; that resetting the watchkey is key&lt;br /&gt;to getting future events.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-7684027378030832452?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/7684027378030832452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2011/12/java-7-monitoring-filesfolders.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7684027378030832452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7684027378030832452'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2011/12/java-7-monitoring-filesfolders.html' title='Java 7 monitoring files/folders'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-6226308930193056074</id><published>2011-09-23T14:19:00.000-07:00</published><updated>2011-09-29T12:41:11.684-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java audio'/><category scheme='http://www.blogger.com/atom/ns#' term='channels'/><category scheme='http://www.blogger.com/atom/ns#' term='mixing audio for different channels'/><category scheme='http://www.blogger.com/atom/ns#' term='mono to stereo'/><category scheme='http://www.blogger.com/atom/ns#' term='interleaving audio'/><category scheme='http://www.blogger.com/atom/ns#' term='mixing audio'/><title type='text'>Interleaving audio files to different channels</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Audio files have inherent characteristics like number of channels, sample size, frame size, sample rate, file type, number of samples, etc. to quote a few. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is a nice description of&amp;nbsp; samples and channels from the java sound faq.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;Each second of sound has so many (on a CD, 44,100)		  digital samples of sound pressure per second. The number of		  samples per second is called sample rate or sample		  frequency. In PCM (pulse code modulation) coding, each		  sample is usually a linear representation of amplitude as a		  signed integer (sometimes unsigned for 8 bit). &lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;There is one		  such sample for each channel, one channel for mono, two		  channels for stereo, four channels for quad, more for		  surround sound. One sample frame consists of one sample for		  each of the channels in turn, by convention running from		  left to right.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;span style="color: #999999;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Each sample can be one byte (8 bits), two bytes (16		  bits), three bytes (24 bits), or maybe even 20 bits or a		  floating-point number. Sometimes, for more than 16 bits per		  sample, the sample is padded to 32 bits (4 bytes) The order		  of the bytes in a sample is different on different		  platforms. In a Windows WAV soundfile, the less significant		  bytes come first from left to right ("little endian" byte		  order). In an AIFF soundfile, it is the other way round, as		  is standard in Java ("big endian" byte		  order). &lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Some more audio file fundamentals from the javadocs...&lt;br /&gt;&lt;br /&gt;frameSize is the number of bytes in each frame of a sound that has this format.&lt;br /&gt;&lt;br /&gt;sampleRate is the number of samples played or recorded per second, for sounds that have this format.&lt;br /&gt;&lt;br /&gt;More definitions can be found &lt;a href="http://download.oracle.com/javase/6/docs/api/javax/sound/sampled/AudioFormat.html"&gt;here. &lt;/a&gt;&lt;br /&gt;Audio files are made up of samples and samples are made up of bytes.&lt;br /&gt;Audio files come in two types, mono and stereo. Mono files have only one channel (perhaps was recorded with one receiver). Stereo audio files can have from two to as many channels.&lt;br /&gt;&lt;br /&gt;Mono audio files when played, samples from the single channel are automatically duplicated and sent to all the channels. For example if speakers are attached to a computer, that would be two channels.In the case of a stereo audio file, it is pre-recorded for multiple channels.&lt;br /&gt;&lt;br /&gt;Now what if you want to interleave two different audio files into one audio file such a way that each audio file is played on separate channels. There are many possible use cases for doing that. One could be to get the remix effect. For example you can take a song and mix it with some background music or add some percussion effect. Of course there are many sophisticated audio software out there which can do this and much more. But the goal here is to demonstrate a simple java program to achieve interleaving of audio files.&lt;br /&gt;&lt;br /&gt;Here I am going to take two mono audio files of the same format (wave file), encoding (PCM) and sample rate. Interleave them to produce another wave file with different audio playing on each channel.&lt;br /&gt;&lt;br /&gt;I am using Java Sound API for this exercise. Java supports only AU, AIFF and WAV formats. Extensions/plug-ins for MP3 and other audio formats are available through 3rd party &lt;a href="http://www.javazoom.net/javalayer/javalayer.html"&gt;vendors&lt;/a&gt;.&lt;br /&gt;The audio files used in this example are &lt;span style="color: blue;"&gt;leftChannelAudio.wav&lt;/span&gt; and &lt;span style="color: blue;"&gt;rightChannelAudio.wav&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The format details for the audio files are&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;rightChannelAudio.wav&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;nbChannel = 1&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;frameRate = 44100.0&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;frameSize = 2&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;sampleSize(bits)= 16&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;nbSamples = 1105408&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;encoding = PCM_SIGNED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;sample rate = 44100.0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;leftChannelAudio.wav&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;nbChannel = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;frameRate = 44100.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;frameSize = 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;sampleSize(bits) = 16&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;nbSamples = 1069056&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;encoding = PCM_SIGNED&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;sample rate = 44100.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is the main method of the class.&lt;br /&gt;&lt;pre&gt;public static void main(String[] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String soundFileLeft = "leftChannelAudio.wav";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File fileLeft = new File(soundFileLeft);&amp;nbsp;&amp;nbsp; // This is the file we'll be playing on the left channel.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String soundFileRight = "rightChannelAudio.wav";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File fileRight = new File(soundFileRight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float sampleRate = 44100.0f;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int sampleSizeInBits = 16;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int channels = 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; boolean signed = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; boolean bigEndian = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AudioFormat targetFormat = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AudioMixer mixAudio = new AudioMixer(fileLeft, fileRight, targetFormat);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File outFile = new File("outSingleSingleMixer.wav");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mixAudio.mixnWrite(AudioFileFormat.Type.WAVE, outFile);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(Exception e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The interleaving of audio bytes is done in &lt;b&gt;mixIntoStereoAudio&lt;/b&gt; method as shown below.&lt;br /&gt;&lt;pre&gt;&amp;nbsp;private AudioInputStream mixIntoStereoAudio(AudioInputStream leftAudioInputStream,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;AudioInputStream rightAudioInputStream) throws IOException{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ArrayList&lt;byte[]&gt; byteArrays = new ArrayList&lt;byte[]&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int nbChannels = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] compiledStream = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int leftAudioBytes = -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int rightAudioBytes = -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byteArrays.add(convertStream(leftAudioInputStream));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byteArrays.add(convertStream(rightAudioInputStream));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long maxSamples;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (leftAudioInputStream.getFrameLength() &amp;gt; rightAudioInputStream.getFrameLength()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxSamples = leftAudioInputStream.getFrameLength();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nbChannels = leftAudioInputStream.getFormat().getChannels();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxSamples = rightAudioInputStream.getFrameLength();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nbChannels = rightAudioInputStream.getFormat().getChannels();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long maxOutputSizeinBytes = maxSamples * sampleSizeinBytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (nbChannels == 1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxOutputSizeinBytes = maxOutputSizeinBytes * 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compiledStream = new byte[(int) maxOutputSizeinBytes]; //max size of number of bytes&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.info("Output bytes size: " + compiledStream.length);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i = 0; i &amp;lt; compiledStream.length; i += sampleSizeinBytes){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leftAudioBytes = writeSamplestoChannel(byteArrays, 0,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sampleSizeinBytes, compiledStream, leftAudioBytes, i);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += sampleSizeinBytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rightAudioBytes = writeSamplestoChannel(byteArrays, 1, &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sampleSizeinBytes, compiledStream, rightAudioBytes, i);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AudioInputStream newaudioStream = generateNewAudioStream(compiledStream);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return newaudioStream;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/byte[]&gt;&lt;/byte[]&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In this case the sample has two bytes.&amp;nbsp; In a stereo audio file samples are written out in the following fashion. First sample for left channel and second for right and so on.&lt;br /&gt;This example uses a simple technique of filling a sample from each audio file for each channel respectively.Filling in silence value whenever we run out of samples from an audio file. This is because the two audio files being interleaved might not have the same number of samples.&lt;br /&gt;&lt;br /&gt;This technique can be extended easily to handle stereo audio files or list of audio files for each channel.&lt;br /&gt;Go ahead and run this program with the sample audio files provided or you can just listen to how the interleaved output file plays out.&lt;br /&gt;&lt;br /&gt;The complete program and sample audio files are available &lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0Bw_Ej8uaENYXNTkxOWZhMjUtYThiYi00OGIyLWIyYjktOTFkNDljNzY1Yzcz&amp;amp;hl=en_US"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some good resources on using Java Sound API are listed below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jsresources.org/faq_audio.html"&gt;http://www.jsresources.org/faq_audio.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.builogic.com/java/javasound-read-write.html"&gt;http://www.builogic.com/java/javasound-read-write.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-6226308930193056074?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/6226308930193056074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2011/09/interleaving-audio-files-to-different.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6226308930193056074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6226308930193056074'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2011/09/interleaving-audio-files-to-different.html' title='Interleaving audio files to different channels'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-6159836655977192888</id><published>2011-07-08T12:22:00.000-07:00</published><updated>2011-07-08T12:22:50.676-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IP to serial'/><category scheme='http://www.blogger.com/atom/ns#' term='IP to com'/><category scheme='http://www.blogger.com/atom/ns#' term='socket to serial'/><category scheme='http://www.blogger.com/atom/ns#' term='routing data'/><category scheme='http://www.blogger.com/atom/ns#' term='serial to socket'/><category scheme='http://www.blogger.com/atom/ns#' term='serial to IP'/><category scheme='http://www.blogger.com/atom/ns#' term='com to IP'/><category scheme='http://www.blogger.com/atom/ns#' term='socat'/><category scheme='http://www.blogger.com/atom/ns#' term='tunneling data'/><title type='text'>Routing Serial data to a socket</title><content type='html'>You don't need&amp;nbsp; a hardware device (like Lantronix adapter) to route data from a Serial port to a socket. Thanks to &lt;a href="http://www.dest-unreach.org/socat/"&gt;socat&lt;/a&gt;, you can relay data from a serial port to another or serial port to a socket or socket to socket and plenty more such combos, all in one line! socat is exhaustive in what it can take as arguments. Check it out.&lt;br /&gt;&lt;br /&gt;Here is an example of making available data from serial port /dev/ttyS0 on a linux environment (usually this is COM1 on windows boxes) through a socket (port = 8023).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;socat TCP-LISTEN:8023,fork /dev/ttyS0,raw,b9600,echo=0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The baud rate specified here is 9600. &lt;i&gt;fork&lt;/i&gt; option lets you make multiple connections to the source of data, which in this case is the serial port.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;You can verify the data&amp;nbsp;&lt;/span&gt; &lt;span style="color: black;"&gt;from the socket by using a telnet or similar application.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: blue;"&gt;telnet localhost 8023&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-6159836655977192888?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/6159836655977192888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2011/07/routing-serial-data-to-socket.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6159836655977192888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6159836655977192888'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2011/07/routing-serial-data-to-socket.html' title='Routing Serial data to a socket'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-238652411480673953</id><published>2011-06-02T17:10:00.000-07:00</published><updated>2011-06-08T17:21:40.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial port'/><category scheme='http://www.blogger.com/atom/ns#' term='trouble shooting serial port'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring serial port'/><title type='text'>Monitoring data from a Serial port</title><content type='html'>Serialports have gone out of vogue! You no longer get serial ports on a computer except on Desktop PCs, unless you custom order it. Notebooks/Laptops, no such luck. But there there are many people and companies which deal with serial ports on a daily basis.&lt;br /&gt;&lt;br /&gt;In the windows world we had the good old Hyperterminal program which was shipped with all windows distributions until recently.&amp;nbsp; Now &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCwQFjAA&amp;amp;url=http%3A%2F%2Fwww.hilgraeve.com%2Fhyperterminal%2F&amp;amp;rct=j&amp;amp;q=hyperterminal&amp;amp;ei=DBPoTb7UO4i2sAO2yPj7DQ&amp;amp;usg=AFQjCNFbMrokbE_qcmXk9gtmj-PJloBXfA&amp;amp;sig2=L4uZIsJMoSGHh0Zb726low&amp;amp;cad=rja"&gt;Hyperterminal&lt;/a&gt; is a payware utility and can be purchased separately. No free utility available out there for windows!&amp;nbsp; But then in the linux world, things are friendlier. There is minicomm and many more free utilities that come with the operating system.&lt;br /&gt;&lt;br /&gt;Well the point of this blog post is not to berate windows or anything. Just wanted to share a way you could look at the data coming in from a serial port without downloading/purchasing any&amp;nbsp; software. This is very handy for troubleshooting, say if you are looking for any control characters or any noise in the serial line, etc.All this while an app is running using the serialport. This can be done outside the app space to monitor activity on a serial port.&lt;br /&gt;To see the data from a serial port on command line as well as save it to a file here is what you can do.&lt;br /&gt;&lt;br /&gt;The script command writes data from a terminal to the specified output file.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: blue;"&gt;script -af serialOut.txt &lt;/div&gt;&lt;br /&gt;hexdump reads from a serial port and prints out the bytes in hex and ASCII &lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;hexdump -vC /dev/ttyS0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is what the whole thing looks like after executing the commands above...&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-30x4Qi44cJU/TegjzNVnqCI/AAAAAAAAAE8/xeMHrDlbJrw/s1600/Screenshot-hexdump-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://1.bp.blogspot.com/-30x4Qi44cJU/TegjzNVnqCI/AAAAAAAAAE8/xeMHrDlbJrw/s320/Screenshot-hexdump-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The top window shows the output from the terminal and the bottom one shows the contents of the output file in real time.&lt;br /&gt;&lt;br /&gt;You can do this and much more on a windows platform too! By installing &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCUQFjAA&amp;amp;url=http%3A%2F%2Fwww.cygwin.com%2F&amp;amp;rct=j&amp;amp;q=cygwin&amp;amp;ei=0B7oTbHQO4qisQPD9qXYDQ&amp;amp;usg=AFQjCNG181i4HT_pzwalR1pEs9gAFGqazQ&amp;amp;sig2=aXjyo0Tu7X8gpmaiaH-aYg&amp;amp;cad=rja"&gt;cygwin&lt;/a&gt; and running linux commands within the cygwin environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-238652411480673953?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/238652411480673953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2011/06/monitoring-data-from-serial-port.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/238652411480673953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/238652411480673953'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2011/06/monitoring-data-from-serial-port.html' title='Monitoring data from a Serial port'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-30x4Qi44cJU/TegjzNVnqCI/AAAAAAAAAE8/xeMHrDlbJrw/s72-c/Screenshot-hexdump-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-8568025613980588961</id><published>2011-03-18T10:42:00.000-07:00</published><updated>2011-03-18T10:42:07.372-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advanced installer'/><category scheme='http://www.blogger.com/atom/ns#' term='install drive'/><category scheme='http://www.blogger.com/atom/ns#' term='custom install drive'/><category scheme='http://www.blogger.com/atom/ns#' term='changing install drive'/><title type='text'>Advanced Installer - Changing the package Install Drive</title><content type='html'>The default drive for installing an application on a windows system is C.&amp;nbsp; In fact on launching the .msi or .exe installer file it does show you the complete path where the package will be installed. but if you preset the drive to say D on the .aip file, the msi installer chokes on boxes where there is no D drive.&lt;br /&gt;&lt;br /&gt;The fix here is to create some custom action and execute the custom action as part of the install/uninstall sequence. See the custom action screen snapshot below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-459lO2D4ST4/TYJ0qciQJRI/AAAAAAAAAEw/65wCI78S-eU/s1600/Custom+Action.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="https://lh4.googleusercontent.com/-459lO2D4ST4/TYJ0qciQJRI/AAAAAAAAAEw/65wCI78S-eU/s320/Custom+Action.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Here we set the value for APPDIR property pointing to D drive if the condition D_DRIVE holds true. The INSTALL_DIR property is set in the Install parameters tab as shown below.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-r5NYoud2Md0/TYJ2BXw20KI/AAAAAAAAAE0/PRMJJrI7-d4/s1600/InstallParameters.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="https://lh6.googleusercontent.com/-r5NYoud2Md0/TYJ2BXw20KI/AAAAAAAAAE0/PRMJJrI7-d4/s320/InstallParameters.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Last but not the least is defining the D_DRIVE condition.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-IQCbHqpo2f8/TYJ2r39QBFI/AAAAAAAAAE4/0yRCG-R1d9s/s1600/Search.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="https://lh6.googleusercontent.com/-IQCbHqpo2f8/TYJ2r39QBFI/AAAAAAAAAE4/0yRCG-R1d9s/s320/Search.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Following the above steps should enable you to install on D drive or for that matter any drive&amp;nbsp; (if it exists) by default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-8568025613980588961?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/8568025613980588961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2011/03/advanced-installer-changing-package.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/8568025613980588961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/8568025613980588961'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2011/03/advanced-installer-changing-package.html' title='Advanced Installer - Changing the package Install Drive'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-459lO2D4ST4/TYJ0qciQJRI/AAAAAAAAAEw/65wCI78S-eU/s72-c/Custom+Action.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-7798190200445490149</id><published>2011-01-19T10:30:00.000-08:00</published><updated>2011-01-24T10:15:02.311-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unable to login'/><category scheme='http://www.blogger.com/atom/ns#' term='locked'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='screensaver'/><title type='text'>Unable to login to Ubuntu. Screensaver unresponsive!</title><content type='html'>Generally I don't power off my machine at the end of the day or for that matter anytime unless there are updates that prompt me to restart. Also I leave firefox ON with 10-15 tabs! So the system is ON for weeks sometimes even a month or two! Ofcourse some of the processes start getting slower and slower. especially Firefox. But then all I need to fix that is to restart Firefox.&lt;br /&gt;But in the last 6 months or so I have been encountering this weird problem.&lt;br /&gt;when I come to work the next day...many times I couldn't get to the login dialog screen, no matter how hard I tried with the mouse or keyboard. Seemed like the gnome screen saver had gone into the weeds! The machine was ON and everything was running. The solution to this is to login through a command line session CTRL-ALT-F6 and kill the gnome-screen saver process. I used &lt;i style="color: blue;"&gt;top&lt;/i&gt; utility to find the process id (look for gnome-screensaver in the &lt;i style="color: blue;"&gt;command&lt;/i&gt; column) and also kill it. and then try ALT-F7 and everything is fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-7798190200445490149?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/7798190200445490149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2011/01/unable-to-login-to-ubuntu-screensaver.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7798190200445490149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7798190200445490149'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2011/01/unable-to-login-to-ubuntu-screensaver.html' title='Unable to login to Ubuntu. Screensaver unresponsive!'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-3043001371090173905</id><published>2010-07-14T11:34:00.000-07:00</published><updated>2010-08-19T16:34:39.102-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webservice'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='Java web service'/><category scheme='http://www.blogger.com/atom/ns#' term='java REST tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><category scheme='http://www.blogger.com/atom/ns#' term='java SOAP tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jersey'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-RS'/><title type='text'>SOAP vs REST in Java land</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;SOAP and REST are the two most popular web service technologies in use today. REST has become the more preferred one, since it deals directly with URIs and can handle requests in plain text directly over HTTP. Testing it with a browser or tools like curl is super easy.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;Let's go through some examples here. Since our focus is on the Java landscape.All the examples are in the Java environment.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;The development environment I used is eclipse 3.5, Ubuntu 10.04 LTS the Lucid Lynx, JDK 1.16.20&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;With Java annotations kicking off in big style with Java 5. Now the coolest way to develop a web service is by using POJOs and some sprinkling of annotations here and there.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;Let's start with a simple Java class (POJO) and make a web service out of it!&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;Let's take the same Java class (CalcWSImpl.java and Calculator.java are pretty much identical except for the annotations) and setup a web service using SOAP as well as REST.  &lt;/span&gt;&lt;/div&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Developing a SOAP based web service&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;There are many nice tools available today bundled with the JRE like &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBcQFjAA&amp;amp;url=http%3A%2F%2Fdownload.oracle.com%2Fdocs%2Fcd%2FE17409_01%2Fjavase%2F6%2Fdocs%2Ftechnotes%2Ftools%2Fshare%2Fwsimport.html&amp;amp;ei=z7Y8TMiXDYGmsQOpvoHaCg&amp;amp;usg=AFQjCNF_ivfNilLDf3lsSAyc4NhWdwGHgA&amp;amp;sig2=cz_fjcHzaErLv_RVWjtzbQ"&gt;wsimport&lt;/a&gt;, &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CBkQFjAB&amp;amp;url=https%3A%2F%2Fjax-ws.dev.java.net%2Fnonav%2F2.1.2%2Fdocs%2Fwsgen.html&amp;amp;ei=97Y8TKvtF4j6sAOLj43aCg&amp;amp;usg=AFQjCNHQWcrd-PlH-MBOmti58q_42y7S8g&amp;amp;sig2=3pwmydaumYapwK-GztsHJQ"&gt;wsgen&lt;/a&gt; to generate web service client source code and wrapper classes to build a web service.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;We start with a  simple class Calculator.java. see the  listing below.&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_5dlZrY5HXrY/TD30MzAnmCI/AAAAAAAAAD0/47QFJCIPDB4/s1600/Screenshot-Java+-+WS+SOAP-src-org-webservice-server-Calculator.java+-+Eclipse+.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_5dlZrY5HXrY/TD30MzAnmCI/AAAAAAAAAD0/47QFJCIPDB4/s320/Screenshot-Java+-+WS+SOAP-src-org-webservice-server-Calculator.java+-+Eclipse+.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt; This class already has the following JAX-WS annotations...&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;@WebService  - to identify itself as an endpoint  class.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="LEFT" style="color: black; font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;@SOAPBinding(style=SOAPBinding.Style.&lt;i&gt;RPC&lt;/i&gt;) – style for messages used in a webservice.&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="LEFT" style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;@WebMethod – to expose the method as a webservice operation.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="LEFT" style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;For a complete list of all the JAX-WS annotations refer to &lt;a href="https://jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html"&gt;JAX-WS annotations&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;Just with these annotations , we are ready to expose this class through a web service.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;Take a look at TestCalc.java, which launches a web service.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;package org.webservice.server;&lt;br /&gt;&lt;br /&gt;import javax.xml.ws.Endpoint;&lt;br /&gt;&lt;br /&gt;public class TestCalc {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Calculator calcWS = new Calculator();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Endpoint.publish("http://localhost:8085/calc", calcWS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;Run it and you have a running webservice at &lt;/span&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;&lt;a href="http://localhost:8085/calc"&gt;http://localhost:8085/calc&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;The wsdl is available at &lt;a href="http://localhost:8085/calc?wsdl"&gt;http://localhost:8085/calc?wsdl&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;This is what the generated .wsdl looks like.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;&lt;/span&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&amp;lt;!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --&amp;gt;&amp;lt;!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --&amp;gt;&amp;lt;definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://server.webservice.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.webservice.org/" name="CalcWS"&amp;gt;&lt;br /&gt;&amp;lt;types&amp;gt;&amp;lt;/types&amp;gt;&lt;br /&gt;&amp;lt;message name="div"&amp;gt;&lt;br /&gt;&amp;lt;part name="arg0" type="xsd:int"&amp;gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;part name="arg1" type="xsd:int"&amp;gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&amp;lt;message name="divResponse"&amp;gt;&lt;br /&gt;&amp;lt;part name="return" type="xsd:float"&amp;gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&amp;lt;message name="add"&amp;gt;&lt;br /&gt;&amp;lt;part name="arg0" type="xsd:int"&amp;gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;part name="arg1" type="xsd:int"&amp;gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&amp;lt;message name="addResponse"&amp;gt;&lt;br /&gt;&amp;lt;part name="return" type="xsd:int"&amp;gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&amp;lt;message name="list"&amp;gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&amp;lt;message name="listResponse"&amp;gt;&lt;br /&gt;&amp;lt;part name="return" type="xsd:int"&amp;gt;&amp;lt;/part&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&amp;lt;portType name="Calc"&amp;gt;&lt;br /&gt;&amp;lt;operation name="div" parameterOrder="arg0 arg1"&amp;gt;&lt;br /&gt;&amp;lt;input message="tns:div"&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;output message="tns:divResponse"&amp;gt;&amp;lt;/output&amp;gt;&lt;br /&gt;&amp;lt;/operation&amp;gt;&lt;br /&gt;&amp;lt;operation name="add" parameterOrder="arg0 arg1"&amp;gt;&lt;br /&gt;&amp;lt;input message="tns:add"&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;output message="tns:addResponse"&amp;gt;&amp;lt;/output&amp;gt;&lt;br /&gt;&amp;lt;/operation&amp;gt;&lt;br /&gt;&amp;lt;operation name="list"&amp;gt;&lt;br /&gt;&amp;lt;input message="tns:list"&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;output message="tns:listResponse"&amp;gt;&amp;lt;/output&amp;gt;&lt;br /&gt;&amp;lt;/operation&amp;gt;&lt;br /&gt;&amp;lt;/portType&amp;gt;&lt;br /&gt;&amp;lt;binding name="CalcWSPortBinding" type="tns:Calc"&amp;gt;&lt;br /&gt;&amp;lt;soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"&amp;gt;&amp;lt;/soap:binding&amp;gt;&lt;br /&gt;&amp;lt;operation name="div"&amp;gt;&lt;br /&gt;&amp;lt;soap:operation soapAction=""&amp;gt;&amp;lt;/soap:operation&amp;gt;&lt;br /&gt;&amp;lt;input&amp;gt;&lt;br /&gt;&amp;lt;soap:body use="literal" namespace="http://server.webservice.org/"&amp;gt;&amp;lt;/soap:body&amp;gt;&lt;br /&gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;output&amp;gt;&lt;br /&gt;&amp;lt;soap:body use="literal" namespace="http://server.webservice.org/"&amp;gt;&amp;lt;/soap:body&amp;gt;&lt;br /&gt;&amp;lt;/output&amp;gt;&lt;br /&gt;&amp;lt;/operation&amp;gt;&lt;br /&gt;&amp;lt;operation name="add"&amp;gt;&lt;br /&gt;&amp;lt;soap:operation soapAction=""&amp;gt;&amp;lt;/soap:operation&amp;gt;&lt;br /&gt;&amp;lt;input&amp;gt;&lt;br /&gt;&amp;lt;soap:body use="literal" namespace="http://server.webservice.org/"&amp;gt;&amp;lt;/soap:body&amp;gt;&lt;br /&gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;output&amp;gt;&lt;br /&gt;&amp;lt;soap:body use="literal" namespace="http://server.webservice.org/"&amp;gt;&amp;lt;/soap:body&amp;gt;&lt;br /&gt;&amp;lt;/output&amp;gt;&lt;br /&gt;&amp;lt;/operation&amp;gt;&lt;br /&gt;&amp;lt;operation name="list"&amp;gt;&lt;br /&gt;&amp;lt;soap:operation soapAction=""&amp;gt;&amp;lt;/soap:operation&amp;gt;&lt;br /&gt;&amp;lt;input&amp;gt;&lt;br /&gt;&amp;lt;soap:body use="literal" namespace="http://server.webservice.org/"&amp;gt;&amp;lt;/soap:body&amp;gt;&lt;br /&gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;output&amp;gt;&lt;br /&gt;&amp;lt;soap:body use="literal" namespace="http://server.webservice.org/"&amp;gt;&amp;lt;/soap:body&amp;gt;&lt;br /&gt;&amp;lt;/output&amp;gt;&lt;br /&gt;&amp;lt;/operation&amp;gt;&lt;br /&gt;&amp;lt;/binding&amp;gt;&lt;br /&gt;&amp;lt;service name="CalcWS"&amp;gt;&lt;br /&gt;&amp;lt;port name="CalcWSPort" binding="tns:CalcWSPortBinding"&amp;gt;&lt;br /&gt;&amp;lt;soap:address location="http://localhost:8085/calc"&amp;gt;&amp;lt;/soap:address&amp;gt;&lt;br /&gt;&amp;lt;/port&amp;gt;&lt;br /&gt;&amp;lt;/service&amp;gt;&lt;br /&gt;&amp;lt;/definitions&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;definitions name="CalcWS" targetnamespace="http://server.webservice.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://server.webservice.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"&gt;&lt;service name="CalcWS"&gt;&lt;port binding="tns:CalcWSPortBinding" name="CalcWSPort"&gt;&lt;soap:address location="http://localhost:8085/calc"&gt;&lt;/soap:address&gt;&lt;/port&gt;&lt;/service&gt;&lt;/definitions&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt;Now we are ready to test the newly created web service. Either you can go use the free SOAP clients available on the Internet like &lt;a href="http://www.blogger.com/%20http://www.soapclient.com/soaptest.html"&gt;soap client&lt;/a&gt; or tools like wsimport (that comes with JDK) to generate wrapper classes to test a web service endpoint.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;Now using the live web service and wsimport tool, let's generate some client classes. Run the following command from the root folder of the project.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #b45f06; font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;wsimport -d bin -s test http://localhost:8085/calc?wsdl &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;The last step creates an interface Calc..... &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;package org.webservice.server;&lt;br /&gt;&lt;br /&gt;import javax.jws.WebMethod;&lt;br /&gt;import javax.jws.WebParam;&lt;br /&gt;import javax.jws.WebResult;&lt;br /&gt;import javax.jws.WebService;&lt;br /&gt;import javax.jws.soap.SOAPBinding;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* This class was generated by the JAX-WS RI.&lt;br /&gt;&amp;nbsp;* JAX-WS RI 2.1.6 in JDK 6&lt;br /&gt;&amp;nbsp;* Generated source version: 2.1&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;@WebService(name = "Calc", targetNamespace = "http://server.webservice.org/")&lt;br /&gt;@SOAPBinding(style = SOAPBinding.Style.RPC)&lt;br /&gt;public interface Calc {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param arg1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param arg0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; returns float&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebResult(partName = "return")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public float div(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebParam(name = "arg0", partName = "arg0")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int arg0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebParam(name = "arg1", partName = "arg1")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int arg1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param arg1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param arg0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; returns int&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebResult(partName = "return")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int add(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebParam(name = "arg0", partName = "arg0")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int arg0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebParam(name = "arg1", partName = "arg1")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int arg1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; returns int&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebMethod&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebResult(partName = "return")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int list();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;.....and a service class CalcWS&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;package org.webservice.server;&lt;br /&gt;&lt;br /&gt;import java.net.MalformedURLException;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.util.logging.Logger;&lt;br /&gt;import javax.xml.namespace.QName;&lt;br /&gt;import javax.xml.ws.Service;&lt;br /&gt;import javax.xml.ws.WebEndpoint;&lt;br /&gt;import javax.xml.ws.WebServiceClient;&lt;br /&gt;import javax.xml.ws.WebServiceFeature;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* This class was generated by the JAX-WS RI.&lt;br /&gt;&amp;nbsp;* JAX-WS RI 2.1.6 in JDK 6&lt;br /&gt;&amp;nbsp;* Generated source version: 2.1&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;@WebServiceClient(name = "CalcWS", targetNamespace = "http://server.webservice.org/", wsdlLocation = "http://localhost:8085/calc?wsdl")&lt;br /&gt;public class CalcWS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; extends Service&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private final static URL CALCWS_WSDL_LOCATION;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private final static Logger logger = Logger.getLogger(org.webservice.server.CalcWS.class.getName());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; URL url = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; URL baseUrl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseUrl = org.webservice.server.CalcWS.class.getResource(".");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url = new URL(baseUrl, "http://localhost:8085/calc?wsdl");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (MalformedURLException e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.warning("Failed to create URL for the wsdl Location: 'http://localhost:8085/calc?wsdl', retrying as a local file");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.warning(e.getMessage());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALCWS_WSDL_LOCATION = url;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CalcWS(URL wsdlLocation, QName serviceName) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super(wsdlLocation, serviceName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CalcWS() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super(CALCWS_WSDL_LOCATION, new QName("http://server.webservice.org/", "CalcWS"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; returns Calc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebEndpoint(name = "CalcWSPort")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Calc getCalcWSPort() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return super.getPort(new QName("http://server.webservice.org/", "CalcWSPort"), Calc.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param features&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.&amp;nbsp; Supported features not in the &lt;code&gt;features&lt;/code&gt; parameter will have their default values.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; returns Calc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @WebEndpoint(name = "CalcWSPort")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Calc getCalcWSPort(WebServiceFeature... features) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return super.getPort(new QName("http://server.webservice.org/", "CalcWSPort"), Calc.class, features);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;Now let's run the test client CalcWSClient&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;package org.webservice.server;&lt;br /&gt;&lt;br /&gt;import javax.xml.ws.WebServiceRef;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class CalcWSClient {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; @WebServiceRef(wsdlLocation="http://localhost:8085/calc?wsdl")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; static CalcWS service = new CalcWS();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; public static void main(String[] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CalcWSClient client = new CalcWSClient();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.doTest(args);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(Exception e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; public void doTest(String[] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Retrieving the port from the following service: " + service);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Calc port = service.getCalcWSPort();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Invoking the add operation on the port.");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int response = port.add(1, 3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(response);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(Exception e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;} &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;The picture below shows the results on eclipse console.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_5dlZrY5HXrY/TD3-MAbg5MI/AAAAAAAAAD8/o22a6yoXQLg/s1600/Screenshot-Java+-+WS+SOAP-test-org-webservice-server-CalcWSClient.java+-+Eclipse+.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://4.bp.blogspot.com/_5dlZrY5HXrY/TD3-MAbg5MI/AAAAAAAAAD8/o22a6yoXQLg/s320/Screenshot-Java+-+WS+SOAP-test-org-webservice-server-CalcWSClient.java+-+Eclipse+.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="western" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Developing a RESTful web service&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Using JAX-RS  the API for REST based web service. There are a couple frameworks out there. The  popular ones are Jersey and Apache CXF. This example was tested using Jersey 1.2 (you can download from &lt;a href="http://www.blogger.com/%20http://download.java.net/maven/2/com/sun/jersey/"&gt;jersey&lt;/a&gt;), the Sun's open source implementation.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Just with few annotations and some associated classes,  Jersey lets you expose POJOs as web services. It also provides support for JSON.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;You can find all the literature and code at  &lt;a href="https://jersey.dev.java.net/nonav/documentation/1.2/user-guide.html#chapter_deps"&gt;jersey docs.&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;All the annotations are defined in jsr311-api.jar.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Here is a nice &lt;a href="http://blogs.sun.com/enterprisetechtips/entry/implementing_restful_web_services_in"&gt;article&lt;/a&gt; about implementing REST in java. So in short RESTful architecture is about exposing resources and it's operations.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;A resource class is a Java class with JAX-RS annotations to identify itself as a web resource.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;The Root resource class used here is CalcWSImpl.java. It has three resource methods, add, div and list.  &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;The code listing is shown below.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;package org.rest.examples;&lt;br /&gt;&lt;br /&gt;import javax.ws.rs.GET;&lt;br /&gt;import javax.ws.rs.Path;&lt;br /&gt;import javax.ws.rs.PathParam;&lt;br /&gt;import javax.ws.rs.Produces;&lt;br /&gt;&lt;br /&gt;import org.json.JSONException;&lt;br /&gt;import org.json.JSONObject;&lt;br /&gt;&lt;br /&gt;//The Java class will be hosted at the URI path "/calc"&lt;br /&gt;@Path("/calc/")&lt;br /&gt;public class CalcWSImpl {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The Java method will process HTTP GET requests&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GET &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Path("add/{input1}/{input2}")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The Java method will produce content identified by the MIME Media&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // type "text/plain"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Produces("text/plain")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String add(@PathParam("input1") int a, @PathParam("input2") int b) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return String.valueOf(a+b);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GET&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Path("list/")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Produces("application/json")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String list() throws JSONException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; JSONObject list = new JSONObject();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list.put("mercedes", "20");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list.put("porsche", "25");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list.put("audi", "32");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list.put("lexus", "35");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return list.toString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The Java method will process HTTP GET requests&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GET &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Path("div/{input1}/{input2}")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The Java method will produce content identified by the MIME Media&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // type "text/plain"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Produces("text/plain")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String div (@PathParam("input1") int a, @PathParam("input2") int b) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return String.valueOf(a/b);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Some brief explanations of the annotations used...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: #646464; font-size: small;"&gt;&lt;span style="color: blue;"&gt;@Path&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #646464; font-size: small;"&gt;the URI path for a class or method. This is path you add to the base URL for the webservice to access the resource. For example  &lt;/span&gt;&lt;span style="color: black; font-size: small;"&gt;http://localhost:9998/calc/&lt;/span&gt;&lt;span style="color: navy; font-size: small;"&gt;list&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: #646464; font-size: small;"&gt;&lt;span style="color: blue;"&gt;@GET&lt;/span&gt;  method will process HTTP GET methods&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: #646464; font-size: small;"&gt;&lt;span style="color: blue;"&gt;@Produces&lt;/span&gt; MIME media type of objects returned by a method&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: #646464; font-size: small;"&gt;&lt;span style="color: blue;"&gt;@PathParam&lt;/span&gt; parameters in the URI path like in the following URI &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://localhost:9998/calc/add/6/7/"&gt;http://localhost:9998/calc/add/6/7/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: #646464; font-size: small;"&gt;6 and 7 are parameters as you can see from the @Path annotation &lt;/span&gt;&lt;span style="color: #2a00ff; font-size: small;"&gt;add/{input1}/{input2} &lt;/span&gt;&lt;span style="color: black; font-size: small;"&gt;for the add method.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;To find all the JSR-311 annotations refer to &lt;a href="https://jsr311.dev.java.net/nonav/releases/1.1/index.html"&gt;JAX-RS annotations&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;Now to get going we would need the following jars&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;asm-3.1.jar&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: #444444; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;jersey-bundle-1.2.jar&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: #444444; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;jsr311-api-1.11.jar&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: #444444; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;json.jar&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;You can download them from &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://download.java.net/maven/2/com/sun/jersey/"&gt;here.&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size: small;"&gt;We are ready to launch the webservice. Let's look at Main.java&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;package org.rest.examples;&lt;br /&gt;&lt;br /&gt;import com.sun.net.httpserver.HttpServer;&lt;br /&gt;import com.sun.jersey.api.container.httpserver.HttpServerFactory;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) throws IOException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HttpServer server = HttpServerFactory.create("http://localhost:9998/");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Server running");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Visit: http://localhost:9998/list");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Hit return to stop...");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.in.read();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Stopping server");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.stop(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Server stopped");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;} &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;Run Main.java from eclipse as a java application. You have a running web service.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;Let's try some examples here using curl.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;~$ curl http://localhost:9998/calc/add/6/7/ &lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;13&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black; font-size: small;"&gt;~$&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;~$ curl http://localhost:9998/calc/list &lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;{"lexus":"35","audi":"32","porsche":"25","mercedes":"20"}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-size: small;"&gt;~$&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Deploying...&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Let's deploy to a servlet container other than Tomcat :-) , Jetty for instance.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt; here is what the web.xml should look like.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;xml&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7f007f;"&gt;version&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;=&lt;/span&gt;&lt;span style="color: #2a00ff;"&gt;&lt;i&gt;"1.0"&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7f007f;"&gt;encoding&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;=&lt;/span&gt;&lt;span style="color: #2a00ff;"&gt;&lt;i&gt;"UTF-8"&lt;/i&gt;&lt;/span&gt;&lt;span style="color: teal;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;DOCTYPE&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;web-app&lt;/span&gt; &lt;span style="color: grey;"&gt;PUBLIC&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;"-//Sun Microsystems, Inc.//DTD Web&lt;br /&gt;Application 2.3//EN"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f7f5f;"&gt;"http://java.sun.com/dtd/web-app_2_3.dtd"&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;web-app&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #1a1a1a;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;    &lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-name&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;JerseyTest&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-name&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-class&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;         &lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;com.sun.jersey.spi.container.servlet.ServletContainer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-class&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;init-param&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;   &lt;br /&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;param-name&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;com.sun.jersey.config.property.packages&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;param-name&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;    &lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;param-value&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;org.rest.examples&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;param-value&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;init-param&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt; &lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;load-on-startup&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;1&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;load-on-startup&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;   &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;   &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-mapping&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt;    &lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-name&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;JerseyTest&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-name&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;      &lt;br /&gt; &lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;url-pattern&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #1a1a1a;"&gt;/*&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;url-pattern&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="color: #1a1a1a;"&gt;   &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;servlet-mapping&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;web-app&lt;/span&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="margin-bottom: 0in;"&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;span style="font-family: Monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;With jersey configured as a servlet. &lt;/span&gt;    &lt;style type="text/css"&gt; &lt;!--  @page { margin: 0.79in }  P { margin-bottom: 0.08in } --&gt; &lt;/style&gt;  &lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;All we are doing here is providing the package name (“ &lt;span style="color: #1a1a1a;"&gt;org.rest.examples”)&lt;/span&gt; which has resource classes.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;style type="text/css"&gt; &lt;!--  @page { margin: 0.79in }  P { margin-bottom: 0.08in } --&gt; &lt;/style&gt;  &lt;/div&gt;&lt;span style="color: black; font-size: small;"&gt;We need another class to instantiate Jetty! Yes we are going to start an embedded instance programmatically. Here is RunServlet.java &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: black; font-size: small;"&gt;&lt;/span&gt;&lt;span style="color: black; font-size: small;"&gt;package org.rest.examples;&lt;br /&gt;&lt;br /&gt;import org.mortbay.jetty.Server;&lt;br /&gt;import org.mortbay.jetty.webapp.WebAppContext;&lt;br /&gt;&lt;br /&gt;public class RunServlet {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Server server = new Server(8081);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WebAppContext context = new WebAppContext();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.setParentLoaderPriority(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.setDescriptor("./src/web/WEB-INF/web.xml");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.setResourceBase("./src/web");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; server.setHandler(context);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; server.start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; server.join();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;} &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: black; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black; font-size: small;"&gt;Need the following Jetty jars to be in the classpath.&lt;/span&gt;&lt;br /&gt;jetty-6.1.18.jar&lt;br /&gt;jetty-util-6.1.1.18.jar&lt;br /&gt;servlet-api-2.5-20081211.jar&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;style type="text/css"&gt; &lt;!--  @page { margin: 0.79in }  P { margin-bottom: 0.08in } --&gt; &lt;/style&gt;  &lt;/div&gt;&lt;span style="color: black; font-size: small;"&gt;On running RunServlet, see the console output below. The JerseyTest servlet scans the package org.rest.examples and finds HelloWorld and CalcWSImpl resource classes.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_5dlZrY5HXrY/TGAzvJWJ2MI/AAAAAAAAAEM/DgKB4-YJwfQ/s1600/Screenshot-Java+-+Running+Jetty+server+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://4.bp.blogspot.com/_5dlZrY5HXrY/TGAzvJWJ2MI/AAAAAAAAAEM/DgKB4-YJwfQ/s320/Screenshot-Java+-+Running+Jetty+server+.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt; &lt;!--  @page { margin: 0.79in }  P { margin-bottom: 0.08in } --&gt; &lt;/style&gt;  &lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;Now let's see how it works.&lt;/span&gt; &lt;span style="color: black; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_5dlZrY5HXrY/TGAzzrqrY0I/AAAAAAAAAEU/mexo1frGyww/s1600/Screenshot-+REST+Jetty+test:+%7E.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://4.bp.blogspot.com/_5dlZrY5HXrY/TGAzzrqrY0I/AAAAAAAAAEU/mexo1frGyww/s320/Screenshot-+REST+Jetty+test:+%7E.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: black; font-size: small;"&gt;All you need is just a few jars and resource classes and you are done creating a RESTful web service! Couldn't be easier than this.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;Conclusions:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: black; font-size: small;"&gt;As you can see, with frameworks like Jersey writing/deploying/testing REST based web services is much simpler and straight forward than it's SOAP equivalent. But of course SOAP has many more features that you may or may not need. So depending on your internal computing environment and external client needs you can choose SOAP or put everything to REST!&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-3043001371090173905?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/3043001371090173905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2010/07/soap-vs-rest-in-java-land.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3043001371090173905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3043001371090173905'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2010/07/soap-vs-rest-in-java-land.html' title='SOAP vs REST in Java land'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5dlZrY5HXrY/TD30MzAnmCI/AAAAAAAAAD0/47QFJCIPDB4/s72-c/Screenshot-Java+-+WS+SOAP-src-org-webservice-server-Calculator.java+-+Eclipse+.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-2549542215420800871</id><published>2010-02-24T16:48:00.000-08:00</published><updated>2010-02-24T16:48:13.929-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program using port'/><category scheme='http://www.blogger.com/atom/ns#' term='process using a port'/><category scheme='http://www.blogger.com/atom/ns#' term='linux port'/><title type='text'>Finding process/program using a port</title><content type='html'>Many a times you would get a "Bind Exception", "Address already in use" kind of errors and need to find the process that's using the port. For example say the port is 8080. The following command will get you the pid and program name as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;netstat -nlept | grep "8080"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The result might look something like this...&lt;br /&gt;&lt;br /&gt;&lt;span style="color: orange;"&gt;Proto Recv-Q Send-Q Local Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foreign Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; State&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; User&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PID/Program name &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;tcp6&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :::8080&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :::*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LISTEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 994652&amp;nbsp;&amp;nbsp;&amp;nbsp; 4024/java&amp;nbsp;&lt;/span&gt;&amp;nbsp; &lt;br /&gt;Where 4024 is the pid and it's a java app.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-2549542215420800871?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/2549542215420800871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2010/02/finding-processprogram-using-port.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/2549542215420800871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/2549542215420800871'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2010/02/finding-processprogram-using-port.html' title='Finding process/program using a port'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-1350280443757016018</id><published>2010-02-02T15:34:00.000-08:00</published><updated>2010-02-02T16:23:31.205-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process viewer'/><category scheme='http://www.blogger.com/atom/ns#' term='linux task manager'/><category scheme='http://www.blogger.com/atom/ns#' term='process manager'/><title type='text'>Upgraded process manager for Linux</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://htop.sourceforge.net/index.php?page=main" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://1.bp.blogspot.com/_5dlZrY5HXrY/S2iz5FdOBXI/AAAAAAAAADs/Q34ZFDJbvug/s320/htop-0.5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Check this out &lt;a href="http://htop.sourceforge.net/index.php?page=main"&gt;htop&lt;/a&gt; which is a more interactive and intuitive upgrade of the good old 'top' has many pluses to it like Color themes, mouse enabled and so on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-1350280443757016018?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/1350280443757016018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2010/02/upgraded-process-manager-for-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/1350280443757016018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/1350280443757016018'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2010/02/upgraded-process-manager-for-linux.html' title='Upgraded process manager for Linux'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5dlZrY5HXrY/S2iz5FdOBXI/AAAAAAAAADs/Q34ZFDJbvug/s72-c/htop-0.5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-3172624923716611870</id><published>2010-01-04T11:08:00.000-08:00</published><updated>2010-01-05T15:48:01.398-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml parsing java'/><category scheme='http://www.blogger.com/atom/ns#' term='xmlparser'/><category scheme='http://www.blogger.com/atom/ns#' term='xstream'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>XML parsing in Java and Groovy</title><content type='html'>XML is everywhere. Somebody said that XML is like violence. if it doesn't work for you then you are not using enough of it! Well like it or not you have to deal with XML everywhere. To say that XML handling in java is not easy is an understatement. What if you have to deal with SAX, DOM parsers, etc. Well there are some libraries out there which make the job a little easier. Like XOM, XSTREAM, etc. But what if you want to read an XML config file into a Java object?&lt;br /&gt;&lt;br /&gt;XSTREAM has a fairly simple way of doing that. Here is an &lt;a href="http://xstream.codehaus.org/tutorial.html"&gt;example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One other option is to look at the many jvm based languages like groovy, scala, jruby, etc. They all handle XML super easy. Let's see How easy it is in Groovy.&lt;br /&gt;Groovy has two APIs XMLParser and XMLSlurper for dealing with XML.&lt;br /&gt;&lt;br /&gt;Groovy lets you easily cut to the metadata instead of going through each node and getting the child and more.&lt;br /&gt;Using a scripting language gives you a tradeoff for complexity and since it is run by the same jvm you don't loose any performance either. A call to groovy functionality can be embedded in java or invoked through a shell. That way any scripting language can be used.&lt;br /&gt;&lt;br /&gt;The example here uses a simple xml data file (Cars.xml) shown below.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;records&amp;gt;&lt;br /&gt;&amp;lt;carList&amp;gt;&lt;br /&gt;      &amp;lt;car name='HSV Maloo' make='Holden' year='2006'&amp;gt;&lt;br /&gt;        &amp;lt;country&amp;gt;Australia&amp;lt;/country&amp;gt;&lt;br /&gt;        &amp;lt;record type='speed'&amp;gt;Production Pickup Truck with speed of 271kph&amp;lt;/record&amp;gt;&lt;br /&gt;      &amp;lt;/car&amp;gt;&lt;br /&gt;      &amp;lt;car name='P50' make='Peel' year='1962'&amp;gt;&lt;br /&gt;        &amp;lt;country&amp;gt;Isle of Man&amp;lt;/country&amp;gt;&lt;br /&gt;        &amp;lt;record type='size'&amp;gt;Smallest Street-Legal Car at 99cm wide and 59 kg in weight&amp;lt;/record&amp;gt;&lt;br /&gt;      &amp;lt;/car&amp;gt;&lt;br /&gt;      &amp;lt;car name='Royale' make='Bugatti' year='1931'&amp;gt;&lt;br /&gt;        &amp;lt;country&amp;gt;France&amp;lt;/country&amp;gt;&lt;br /&gt;        &amp;lt;record type='price'&amp;gt;Most Valuable Car at $15 million&amp;lt;/record&amp;gt;&lt;br /&gt;      &amp;lt;/car&amp;gt;&lt;br /&gt;&amp;lt;/carList&amp;gt;&lt;br /&gt;&amp;lt;/records&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The data structure to represent the XML data is defined in &lt;br /&gt;Records.java.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;records&gt;&lt;carlist&gt;package org.xml.example;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class Records {&lt;br /&gt; private List&lt;car&gt; carList = null;&lt;br /&gt; &lt;br /&gt; public static class Car {&lt;br /&gt;  String name;&lt;br /&gt;  String make;&lt;br /&gt;  String year;&lt;br /&gt;  Country country;&lt;br /&gt;  Record record;&lt;br /&gt;  &lt;br /&gt;  public static class Record {&lt;br /&gt;   String type;&lt;br /&gt;   String info;&lt;br /&gt;   &lt;br /&gt;   public String toString(){&lt;br /&gt;    return "Record type:" + type + ", info:" + info;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  public static class Country {&lt;br /&gt;   String name;&lt;br /&gt;   &lt;br /&gt;   public String toString(){&lt;br /&gt;    return "Country: " + name;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public String toString(){&lt;br /&gt;   return "name: " + name + ", make:" + make + ", year:" + year + " " &lt;br /&gt;   + country + " " + record;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public List&lt;car&gt; getCars() {&lt;br /&gt;  return carList;&lt;br /&gt; } &lt;br /&gt; &lt;br /&gt; public String toString(){&lt;br /&gt;  StringBuilder sb = new StringBuilder();&lt;br /&gt;  for (Car car : carList) {&lt;br /&gt;   sb.append(car.toString());&lt;br /&gt;   sb.append(System.getProperty("line.separator"));&lt;br /&gt;  }&lt;br /&gt;  return sb.toString();&lt;br /&gt; }&lt;br /&gt;}&lt;/car&gt;&lt;/car&gt;&lt;/carlist&gt;&lt;/records&gt;&lt;/pre&gt;&lt;br /&gt;The main program is XMLParseExample.java.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package org.xml.example;&lt;br /&gt;&lt;br /&gt;import groovy.lang.Binding;&lt;br /&gt;import groovy.util.GroovyScriptEngine;&lt;br /&gt;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileReader;&lt;br /&gt;&lt;br /&gt;import com.thoughtworks.xstream.XStream;&lt;br /&gt;&lt;br /&gt;public class XMLParseExample {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) throws FileNotFoundException {&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; parseXMLinGroovy();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; parseXMLinXstream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void parseXMLinXstream() throws FileNotFoundException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; XStream xstream = new XStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.aliasType("records", Records.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.aliasType("car", Records.Car.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.useAttributeFor(Records.Car.class, "name");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.useAttributeFor(Records.Car.class, "make");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.useAttributeFor(Records.Car.class, "year");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.aliasType("country", Records.Car.Country.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.aliasType("record", Records.Car.Record.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xstream.useAttributeFor(Records.Car.Record.class, "type");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Records records = (Records)xstream.fromXML(new FileReader("/home/csrinivasan/Documents/Nigeria/Cars.xml"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String xml = xstream.toXML(records);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.err.println(xml);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void parseXMLinGroovy()&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String[] roots = new String[] { "./scripts/" };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GroovyScriptEngine gse;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gse = new GroovyScriptEngine(roots);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Binding binding = new Binding();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gse.run("ParseXML.groovy", binding);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The groovy script is ParseXML.groovy.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import org.xml.example.*;&lt;br /&gt;import org.xml.example.Records.Car.*&lt;br /&gt;&lt;br /&gt;class ParseRecords {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List cars&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ParseRecords () {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cars = new ArrayList()&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; def parseRecords() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def data = sysClassLoader.getResource("Cars.xml").text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def xmlSlurper = new XmlParser()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def records = xmlSlurper.parseText(data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Records recs = new Records()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; records.carList.each {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; recs.carList = new ArrayList&lt;records.car&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; it.car.each {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Records.Car car = new Records.Car()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.name = it.attribute("name")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.make = it.attribute("make")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.year = it.attribute("year")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.country = new Records.Car.Country()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.country.name = it.country.text()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.record = new Records.Car.Record()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; it.record.each {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.record.type = it.attribute("type")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; car.record.info = it.record.text()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; recs.carList.add(car)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; println recs&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;ParseRecords algConfig = new ParseRecords()&lt;br /&gt;algConfig.parseRecords()&lt;/records.car&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-3172624923716611870?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/3172624923716611870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2010/01/xml-parsing-in-java-and-groovy.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3172624923716611870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3172624923716611870'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2010/01/xml-parsing-in-java-and-groovy.html' title='XML parsing in Java and Groovy'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-2447820301942327000</id><published>2009-10-13T16:42:00.000-07:00</published><updated>2009-10-14T09:33:57.790-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lookup source filter'/><category scheme='http://www.blogger.com/atom/ns#' term='default database informatica'/><category scheme='http://www.blogger.com/atom/ns#' term='sql override'/><title type='text'>Lookup Source Filter option in Informatica</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt; &lt;span style="font-size: small;"&gt;Informatica version 8.6.1 has a feature where Lookup Source filter could be used. This feature wouldn't work if&amp;nbsp; there are multiple lookups with different source filter based on the same source table that uses the same lookup cache. However, this could be overcome by writing a sql override&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;as shown below..... &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://4.bp.blogspot.com/_5dlZrY5HXrY/StUOeoe2_8I/AAAAAAAAADA/TT8rNv5lQQA/s1600-h/Filter+Expression+lookup.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_5dlZrY5HXrY/StUOeoe2_8I/AAAAAAAAADA/TT8rNv5lQQA/s320/Filter+Expression+lookup.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-2447820301942327000?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/2447820301942327000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/10/lookup-source-filter-option-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/2447820301942327000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/2447820301942327000'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/10/lookup-source-filter-option-in.html' title='Lookup Source Filter option in Informatica'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5dlZrY5HXrY/StUOeoe2_8I/AAAAAAAAADA/TT8rNv5lQQA/s72-c/Filter+Expression+lookup.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-2896365272507246256</id><published>2009-10-04T13:51:00.000-07:00</published><updated>2009-10-05T09:38:50.989-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='default database informatica'/><category scheme='http://www.blogger.com/atom/ns#' term='sybase'/><category scheme='http://www.blogger.com/atom/ns#' term='informatica sybase'/><title type='text'>Updating default database in Sybase version 9 and above</title><content type='html'>&lt;span style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;If multiple repositories are built in the same database platform and they all reside on the same server it's a good practice to check what the default database is, before installing or upgrading.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt; Say for example you have &lt;b&gt;Dev &lt;/b&gt;and &lt;b&gt;Test &lt;/b&gt;repo set on &amp;lt;&lt;server_name&gt;&amp;gt; server. If &lt;b&gt;Dev &lt;/b&gt;repo is installed and now you would like to install Informatica in&amp;nbsp; &lt;b&gt;Test &lt;/b&gt;repo. You would have to issue the following command to update the default database in Sybase.&lt;/server_name&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;For example in Rapid SQL...&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;login with uid to old repository database(say old is Dev)&lt;br /&gt;sp_modifylogin uid,defdb, TEST&lt;br /&gt; go&lt;br /&gt; sp_displaylogin uid&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-2896365272507246256?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/2896365272507246256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/10/updating-default-database-in-sybase.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/2896365272507246256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/2896365272507246256'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/10/updating-default-database-in-sybase.html' title='Updating default database in Sybase version 9 and above'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-562938672461575560</id><published>2009-09-21T16:42:00.000-07:00</published><updated>2009-09-22T22:03:45.014-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monitor objects'/><category scheme='http://www.blogger.com/atom/ns#' term='jmx'/><title type='text'>Bare bones JMX</title><content type='html'>Some times you wish there was a way to monitor objects in a app while it is running to check for potential problems, or just to troubleshoot a problem. Well JMX can do that and much more. JMX can also do notification for example if a Queue is full or database is out of space, things like that. But I wanted to get started with just being able to monitor an object whenever I wished to. &lt;br /&gt;&lt;br /&gt;The example used here is an application which is basically a Socket server serving clients with data from a queue. The use case here is to look at the app and query for number of clients connected or number of objects in the queue. pretty simple huh?&lt;br /&gt;&lt;br /&gt;Here is the code for the app.&lt;br /&gt;We will use JConsole to connect to the app process and invoke the operations defined.&lt;br /&gt;&lt;br /&gt;Now you might say that this can be done by logging the information (queue size and number of clients). True but like I said earlier using JMX gives you a way to check on things at runtime. also you could have an operation to clear the queue for a secure user (how? check for later posts!). Also why do you want to waste cpu cycles and disk space to keep logging stuff which you may or not look for.&lt;br /&gt;&lt;br /&gt;The Java artifacts you need are an interface that declares the methods that you want to expose, a class that implements that interface. That's it. TestJMX.java  is just to create and register a JMX bean.&lt;br /&gt;&lt;br /&gt;Interface....&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: x-small;"&gt;package com.example.testJMX;&lt;br /&gt;&lt;br /&gt;public interface DataSocketServerMBean {&lt;br /&gt; // operations&lt;br /&gt; public int numberofClients();&lt;br /&gt; public int dataQueueSize();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;The implementor...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.example.testJMX;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.ObjectInputStream;&lt;br /&gt;import java.io.ObjectOutputStream;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.net.ServerSocket;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.Collections;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.concurrent.ExecutorService;&lt;br /&gt;import java.util.concurrent.LinkedBlockingQueue;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;&lt;br /&gt;public class DataSocketServer extends Thread implements DataSocketServerMBean {&lt;br /&gt; private final static Logger log = Logger.getLogger(DataSocketServer.class);&lt;br /&gt; private final static int LISTENING_PORT = 3000;&lt;br /&gt; private ServerSocket weatherDataServer;&lt;br /&gt; public boolean shutdown = false;&lt;br /&gt; protected LinkedBlockingQueue outputDataQueue;&lt;br /&gt; private ConnectToNewClient newClient;&lt;br /&gt; private boolean byteData;&lt;br /&gt; private int listeningPort;&lt;br /&gt;&lt;br /&gt; public DataSocketServer() throws Exception {&lt;br /&gt;  weatherDataServer = new ServerSocket(LISTENING_PORT);&lt;br /&gt;  log.info("Server listening on port " + LISTENING_PORT);&lt;br /&gt;  this.start();&lt;br /&gt;  //start a new thread for writing data to each client socket&lt;br /&gt;  newClient = new ConnectToNewClient();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public DataSocketServer(LinkedBlockingQueue dataQueue) { &lt;br /&gt;  this.outputDataQueue = dataQueue;&lt;br /&gt;&lt;br /&gt;  try {&lt;br /&gt;   weatherDataServer = new ServerSocket(LISTENING_PORT);&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   log.error("Error creating ServerSocket :", e);&lt;br /&gt;  }&lt;br /&gt;  log.info("Server listening on port " + LISTENING_PORT);&lt;br /&gt;  this.setName("WeatherDataSocketServerfor" + listeningPort);&lt;br /&gt;  this.start();&lt;br /&gt;  //start a new thread for writing data to each client socket&lt;br /&gt;  newClient = new ConnectToNewClient();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void run() {&lt;br /&gt;  while (true) {&lt;br /&gt;   try {&lt;br /&gt;    log.debug("Waiting for connections.");&lt;br /&gt;    if (weatherDataServer != null){&lt;br /&gt;     Socket client = weatherDataServer.accept();&lt;br /&gt;     log.info("Accepted a connection from: " + client.getInetAddress());&lt;br /&gt;     newClient.addClient(new ClientSocket(client));&lt;br /&gt;    }&lt;br /&gt;    Thread.sleep(500);&lt;br /&gt;   } catch (InterruptedException ix) {&lt;br /&gt;    log.error("Shutting down socket server", ix);&lt;br /&gt;    newClient.interrupt();&lt;br /&gt;    break;&lt;br /&gt;   } catch (Exception e) {&lt;br /&gt;    log.error("Error accepting connections", e);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void ConnectToClient(Socket clientSocket) {&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Helper class to handle each client as a separate thread.&lt;br /&gt;  */&lt;br /&gt; class ConnectToNewClient extends Thread {&lt;br /&gt;  // DECLARE&lt;br /&gt;  private List&lt;clientsocket&gt; clientSockets = Collections.synchronizedList(new ArrayList&lt;clientsocket&gt;());&lt;br /&gt;&lt;br /&gt;  // INIT&lt;br /&gt;  public ConnectToNewClient() {&lt;br /&gt;   this.setName("ConnectToNewClientFor" + DataSocketServer.this.listeningPort);&lt;br /&gt;   this.start();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void addClient(ClientSocket clientSocket) {&lt;br /&gt;   clientSockets.add(clientSocket);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public ConnectToNewClient(ArrayList&lt;clientsocket&gt; clientList) {&lt;br /&gt;   this.clientSockets = clientList;&lt;br /&gt;   this.setName("ConnectToNewClientFor" + DataSocketServer.this.listeningPort);&lt;br /&gt;   this.start();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // ACTION&lt;br /&gt;  public void run() {&lt;br /&gt;   Object qobj = null;&lt;br /&gt;   try {&lt;br /&gt;    while (true) {&lt;br /&gt;     while (clientSockets.size() &amp;gt; 0 &amp;amp;&amp;amp; (qobj = DataSocketServer.this.outputDataQueue.peek()) != null) {&lt;br /&gt;      log.info("Number of clients =" + clientSockets.size());&lt;br /&gt;      //loop through each client and write to it.&lt;br /&gt;      for (int i = 0; i &amp;lt; clientSockets.size(); i++) {&lt;br /&gt;       ClientSocket clientSocket = null;&lt;br /&gt;       try {&lt;br /&gt;        //check if the socket is active.&lt;br /&gt;        clientSocket = clientSockets.get(i);&lt;br /&gt;        if (clientSocket.checkConnection()) {&lt;br /&gt;         DataSocketServer.log.info("Sending data to client "&lt;br /&gt;           + clientSocket.getInetAddress());&lt;br /&gt;         if (DataSocketServer.this.byteData &amp;amp;&amp;amp; qobj instanceof byte[])&lt;br /&gt;          clientSocket.writeBytes((byte[]) qobj);&lt;br /&gt;         else&lt;br /&gt;          clientSocket.writeObject(qobj);&lt;br /&gt;         DataSocketServer.this.outputDataQueue.remove(qobj);&lt;br /&gt;        } else {&lt;br /&gt;         //remove client from list&lt;br /&gt;         DataSocketServer.log.info("Removing client from list : "&lt;br /&gt;           + clientSocket.getInetAddress());&lt;br /&gt;         clientSocket.close();&lt;br /&gt;         clientSockets.remove(clientSocket);&lt;br /&gt;         clientSocket = null;&lt;br /&gt;        }&lt;br /&gt;       } catch (RuntimeException e) {&lt;br /&gt;        DataSocketServer.log.error("Error sending data to client ", e);&lt;br /&gt;        //the client socket may be dead. remove it&lt;br /&gt;        clientSockets.remove(clientSocket);&lt;br /&gt;        clientSocket = null;&lt;br /&gt;       }&lt;br /&gt;      }&lt;br /&gt;     }&lt;br /&gt;     Thread.sleep(1000);&lt;br /&gt;    }&lt;br /&gt;   } catch (Exception e) {&lt;br /&gt;    DataSocketServer.log.error("Error :", e);&lt;br /&gt;    DataSocketServer.log.error("outputDataQueue =" + DataSocketServer.this.outputDataQueue);&lt;br /&gt;    DataSocketServer.log.error("qobj = " + qobj);&lt;br /&gt;   }&lt;/clientsocket&gt;&lt;/clientsocket&gt;&lt;/clientsocket&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Socket wrapper for each client.&lt;br /&gt;*/&lt;br /&gt;class ClientSocket {&lt;br /&gt;// DECLARE&lt;br /&gt;private Socket socket = null;&lt;br /&gt;private ObjectInputStream ois = null;&lt;br /&gt;private OutputStream sos = null;&lt;br /&gt;private ExecutorService executor;&lt;br /&gt;private ObjectOutputStream oos = null;&lt;br /&gt;private BufferedOutputStream bos = null;&lt;br /&gt;&lt;br /&gt;// INIT&lt;br /&gt;public ClientSocket(Socket clientSocket) {&lt;br /&gt;this.socket = clientSocket;&lt;br /&gt;try {&lt;br /&gt;sos = socket.getOutputStream();&lt;br /&gt;if (DataSocketServer.this.byteData)&lt;br /&gt;bos   = new BufferedOutputStream(sos);&lt;br /&gt;else&lt;br /&gt;oos = new ObjectOutputStream(new BufferedOutputStream(sos));&lt;br /&gt;} catch (Exception e1) {&lt;br /&gt;try {&lt;br /&gt;socket.close();&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;log.error("Error creating client socket :" , e);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void close() {&lt;br /&gt;try {&lt;br /&gt;socket.close();&lt;br /&gt;if (oos != null)&lt;br /&gt;oos.close();&lt;br /&gt;if (bos != null)&lt;br /&gt;bos.close();&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;}&lt;br /&gt;socket = null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void writeObject(Object o) {&lt;br /&gt;try {&lt;br /&gt;oos.flush();&lt;br /&gt;if (o instanceof byte[]){&lt;br /&gt;byte[] buf = (byte[])o;&lt;br /&gt;bos.write(buf);&lt;br /&gt;} else {&lt;br /&gt;oos.writeObject(o);&lt;br /&gt;}&lt;br /&gt;oos.flush();&lt;br /&gt;} catch (IOException e) {&lt;br /&gt;// close socket.. connection maybe lost. The only way to find out is when&lt;br /&gt;//we get a socketexception!!!!!!&lt;br /&gt;log.error("Error writing to socket. closing socket...", e);&lt;br /&gt;try {&lt;br /&gt;socket.close();&lt;br /&gt;} catch (IOException e1) {&lt;br /&gt;}&lt;br /&gt;socket = null;&lt;br /&gt;} catch (Exception ex) {&lt;br /&gt;log.error("Error writing data to client socket for client " + this.getInetAddress(),ex);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// UTIL&lt;br /&gt;public boolean checkConnection() {&lt;br /&gt;if (socket != null &amp;amp;&amp;amp; !socket.isClosed() &amp;amp;&amp;amp; socket.isConnected() &amp;amp;&amp;amp; socket.isBound())&lt;br /&gt;return true;&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ACCESS&lt;br /&gt;public String getInetAddress() {&lt;br /&gt;if (socket != null)&lt;br /&gt;return socket.getInetAddress().getHostName();&lt;br /&gt;return "";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public Socket getSocket() {&lt;br /&gt;return socket;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void writeBytes(byte[] buf) {&lt;br /&gt;try {&lt;br /&gt;if (socket != null) {&lt;br /&gt;log.info("writing data " + new String(buf));&lt;br /&gt;bos.flush();&lt;br /&gt;bos.write(buf);&lt;br /&gt;bos.flush();&lt;br /&gt;}&lt;br /&gt;} catch (IOException e) {&lt;br /&gt;// close socket.. connection maybe lost. The only way to find out is when&lt;br /&gt;//we get a socketexception!!!!!!&lt;br /&gt;log.error("Error writing to socket. listening port: " + DataSocketServer.this.listeningPort + " closing socket...", e);&lt;br /&gt;try {&lt;br /&gt;socket.close();&lt;br /&gt;} catch (IOException e1) {&lt;br /&gt;}&lt;br /&gt;socket = null;&lt;br /&gt;} catch (Exception ex) {&lt;br /&gt;log.error("Error writing data to client socket for client " + this.getInetAddress(),ex);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int dataQueueSize() {&lt;br /&gt;if (outputDataQueue != null)&lt;br /&gt;return outputDataQueue.size();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int numberofClients() {&lt;br /&gt;if (newClient != null)&lt;br /&gt;return newClient.clientSockets.size();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;and finally the TestJMX class...   &lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: x-small;"&gt;package com.example.testJMX;&lt;br /&gt;&lt;br /&gt;import java.lang.management.*;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.concurrent.LinkedBlockingQueue;&lt;br /&gt;&lt;br /&gt;import javax.management.*;&lt;br /&gt;&lt;br /&gt;import org.json.JSONObject;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get the Platform MBean Server&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinkedBlockingQueue&lt;string&gt; testQueue = new LinkedBlockingQueue&lt;string&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSONObject sampleObj = new JSONObject();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sampleObj.put("The current time on host machine", new Date());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testQueue.add(sampleObj.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Construct the ObjectName for the MBean we will register&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectName name = new ObjectName("com.example.testJMX:type=DataSocketServer");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create the jmx MBean&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSocketServer mbean = new DataSocketServer(testQueue);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Register the jmx MBean&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mbs.registerMBean(mbean, name);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait forever&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Waiting forever...");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.sleep(Long.MAX_VALUE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/string&gt;&lt;/string&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;Now run the TestJMX java class.&lt;br /&gt;Launch JConsole and connect to the process&lt;br /&gt;Invoking dataQueueSize and numberofClients operations...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_5dlZrY5HXrY/Srk2q7sxkZI/AAAAAAAAAB4/v3K6rw__xbg/s1600-h/Screenshot-JConsole+dataQueueSize.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_5dlZrY5HXrY/Srk2q7sxkZI/AAAAAAAAAB4/v3K6rw__xbg/s200/Screenshot-JConsole+dataQueueSize.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_5dlZrY5HXrY/Srk3JXZp4gI/AAAAAAAAACA/8AL6aTXAnJ8/s1600-h/Screenshot-JConsole+numberofClients.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_5dlZrY5HXrY/Srk3JXZp4gI/AAAAAAAAACA/8AL6aTXAnJ8/s200/Screenshot-JConsole+numberofClients.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;connect to the socket server using telnet/netcat or any of those tools.&lt;br /&gt;On linux ...&lt;br /&gt;netcat localhost 4233&lt;br /&gt;Now invoking the same operations again gives you the following results...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_5dlZrY5HXrY/Srk6agUmfuI/AAAAAAAAACI/5tP7ERwzjYY/s1600-h/Screenshot-JConsole+numberofclients-+1client.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_5dlZrY5HXrY/Srk6agUmfuI/AAAAAAAAACI/5tP7ERwzjYY/s200/Screenshot-JConsole+numberofclients-+1client.png" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_5dlZrY5HXrY/Srk6hEFflwI/AAAAAAAAACQ/6d5SbaGGy60/s1600-h/Screenshot-JConsole+numberofclients-+1client.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_5dlZrY5HXrY/Srk6hEFflwI/AAAAAAAAACQ/6d5SbaGGy60/s200/Screenshot-JConsole+numberofclients-+1client.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-562938672461575560?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/562938672461575560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/09/bare-bones-jmx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/562938672461575560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/562938672461575560'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/09/bare-bones-jmx.html' title='Bare bones JMX'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5dlZrY5HXrY/Srk2q7sxkZI/AAAAAAAAAB4/v3K6rw__xbg/s72-c/Screenshot-JConsole+dataQueueSize.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-4442191338464613659</id><published>2009-09-08T13:51:00.000-07:00</published><updated>2009-09-15T09:11:49.650-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread dump'/><category scheme='http://www.blogger.com/atom/ns#' term='java thread dump'/><category scheme='http://www.blogger.com/atom/ns#' term='linux thread dump'/><title type='text'>Capturing jvm Thread Dump in linux</title><content type='html'>Many a times it has happened that a Java app froze and I needed to take a thread dump to look for deadlocks or any other issues. In this case you need to perform a Thread dump on a running process. Using kill command with argument 3 produces a Thread dump, but the output goes to the stdout of the process, Which could be a console on your favorite IDE. What if the IDE is frozen too?&lt;br /&gt;&lt;br /&gt;Well in that case using the /proc command comes in handy.&lt;br /&gt;&lt;span style="color: blue; font-family: Arial,Helvetica,sans-serif;"&gt;ls /proc&lt;/span&gt; lists all the processes running on the system currently.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;my-desktop:~$ ls&amp;nbsp; /proc&lt;br /&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2133&amp;nbsp;&amp;nbsp; 24921&amp;nbsp; 3132&amp;nbsp; 3615&amp;nbsp; 3744&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partitions&lt;br /&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2134&amp;nbsp;&amp;nbsp; 25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3135&amp;nbsp; 3616&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filesystems&amp;nbsp;&amp;nbsp;&amp;nbsp; sched_debug&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2141&amp;nbsp;&amp;nbsp; 25214&amp;nbsp; 3139&amp;nbsp; 3618&amp;nbsp; 4763&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; schedstat&lt;br /&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2142&amp;nbsp;&amp;nbsp; 26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3159&amp;nbsp; 3629&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; interrupts&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scsi&lt;br /&gt;12087&amp;nbsp; 22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26408&amp;nbsp; 3163&amp;nbsp; 3633&amp;nbsp; 5587&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iomem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;br /&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2213&amp;nbsp;&amp;nbsp; 26426&amp;nbsp; 3165&amp;nbsp; 3639&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioports&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; slabinfo&lt;br /&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2258&amp;nbsp;&amp;nbsp; 2881&amp;nbsp;&amp;nbsp; 3183&amp;nbsp; 3645&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; irq&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stat&lt;br /&gt;1495&amp;nbsp;&amp;nbsp; 2281&amp;nbsp;&amp;nbsp; 29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3184&amp;nbsp; 3654&amp;nbsp; 722&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kallsyms&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swaps&lt;br /&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2283&amp;nbsp;&amp;nbsp; 2913&amp;nbsp;&amp;nbsp; 3198&amp;nbsp; 3656&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kcore&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys&lt;br /&gt;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22886&amp;nbsp; 2935&amp;nbsp;&amp;nbsp; 32&amp;nbsp;&amp;nbsp;&amp;nbsp; 3658&amp;nbsp; 856&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key-users&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sysrq-trigger&lt;br /&gt;16653&amp;nbsp; 22894&amp;nbsp; 2938&amp;nbsp;&amp;nbsp; 3211&amp;nbsp; 3664&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kmsg&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sysvipc&lt;br /&gt;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2306&amp;nbsp;&amp;nbsp; 2939&amp;nbsp;&amp;nbsp; 3240&amp;nbsp; 3669&amp;nbsp; acpi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kpagecount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timer_list&lt;br /&gt;18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 23177&amp;nbsp; 294&amp;nbsp;&amp;nbsp;&amp;nbsp; 33&amp;nbsp;&amp;nbsp;&amp;nbsp; 3671&amp;nbsp; asound&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kpageflags&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timer_stats&lt;br /&gt;1865&amp;nbsp;&amp;nbsp; 23186&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3316&amp;nbsp; 3673&amp;nbsp; buddyinfo&amp;nbsp;&amp;nbsp;&amp;nbsp; latency_stats&amp;nbsp; tty&lt;br /&gt;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 23191&amp;nbsp; 30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3344&amp;nbsp; 3674&amp;nbsp; bus&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loadavg&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uptime&lt;br /&gt;19405&amp;nbsp; 23194&amp;nbsp; 3002&amp;nbsp;&amp;nbsp; 34&amp;nbsp;&amp;nbsp;&amp;nbsp; 3679&amp;nbsp; cgroups&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; locks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; version&lt;br /&gt;19406&amp;nbsp; 23197&amp;nbsp; 30137&amp;nbsp; 3466&amp;nbsp; 3683&amp;nbsp; cmdline&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdstat&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; version_signature&lt;br /&gt;19407&amp;nbsp; 2330&amp;nbsp;&amp;nbsp; 3032&amp;nbsp;&amp;nbsp; 35&amp;nbsp;&amp;nbsp;&amp;nbsp; 3685&amp;nbsp; cpuinfo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; meminfo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vmallocinfo&lt;br /&gt;19445&amp;nbsp; 23701&amp;nbsp; 3077&amp;nbsp;&amp;nbsp; 3536&amp;nbsp; 3691&amp;nbsp; crypto&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; misc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vmstat&lt;br /&gt;19988&amp;nbsp; 2389&amp;nbsp;&amp;nbsp; 3080&amp;nbsp;&amp;nbsp; 3549&amp;nbsp; 3694&amp;nbsp; devices&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modules&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zoneinfo&lt;br /&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3081&amp;nbsp;&amp;nbsp; 36&amp;nbsp;&amp;nbsp;&amp;nbsp; 3707&amp;nbsp; diskstats&amp;nbsp;&amp;nbsp;&amp;nbsp; mounts&lt;br /&gt;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2431&amp;nbsp;&amp;nbsp; 309&amp;nbsp;&amp;nbsp;&amp;nbsp; 3606&amp;nbsp; 3724&amp;nbsp; dma&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mtrr&lt;br /&gt;20798&amp;nbsp; 24772&amp;nbsp; 3099&amp;nbsp;&amp;nbsp; 3609&amp;nbsp; 3728&amp;nbsp; driver&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; net&lt;br /&gt;21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24803&amp;nbsp; 31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3610&amp;nbsp; 3740&amp;nbsp; execdomains&amp;nbsp; pagetypeinfo&lt;/pre&gt;&lt;br /&gt;Say we want to take a thread dump of a java process (PID 24772). &lt;span style="color: blue; font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Arial,Helvetica,sans-serif;"&gt;/proc/24772/fd/1&lt;/span&gt; gets you the stdout interface of the Java process where 1 is the file-descriptor for stdout.&lt;br /&gt;You can capture the output to stdoutby issuing the command&lt;br /&gt;&lt;span style="color: blue;"&gt;cat&amp;nbsp; /proc/24772/fd/1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;Now to generate a thread dump issue this from another session&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;kill -3&amp;nbsp; 24772&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;You should see the thread dump output like this..&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;my-desktop:~$ cat&amp;nbsp; /proc/24772/fd/1&lt;br /&gt;2009-09-08 10:41:19&lt;br /&gt;Full thread dump Java HotSpot(TM) Client VM (14.2-b01 mixed mode, sharing):&lt;br /&gt;&lt;br /&gt;"Low Memory Detector" daemon prio=10 tid=0x09060c00 nid=0x60d0 runnable [0x00000000]&lt;br /&gt;&amp;nbsp;&amp;nbsp; java.lang.Thread.State: RUNNABLE&lt;br /&gt;&lt;br /&gt;"CompilerThread0" daemon prio=10 tid=0x0905dc00 nid=0x60ce waiting on condition [0x00000000]&lt;br /&gt;&amp;nbsp;&amp;nbsp; java.lang.Thread.State: RUNNABLE&lt;br /&gt;&lt;br /&gt;"Signal Dispatcher" daemon prio=10 tid=0x0905c400 nid=0x60cd waiting on condition [0x00000000]&lt;br /&gt;&amp;nbsp;&amp;nbsp; java.lang.Thread.State: RUNNABLE&lt;br /&gt;&lt;br /&gt;"Finalizer" daemon prio=10 tid=0x0904dc00 nid=0x60cc in Object.wait() [0xb5326000]&lt;br /&gt;&amp;nbsp;&amp;nbsp; java.lang.Thread.State: WAITING (on object monitor)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.Object.wait(Native Method)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - waiting on &amp;lt;0x8bcd8918&amp;gt; (a java.lang.ref.ReferenceQueue$Lock)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - locked &amp;lt;0x8bcd8918&amp;gt; (a java.lang.ref.ReferenceQueue$Lock)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)&lt;br /&gt;&lt;br /&gt;"Reference Handler" daemon prio=10 tid=0x09049400 nid=0x60ca in Object.wait() [0xb5377000]&lt;br /&gt;&amp;nbsp;&amp;nbsp; java.lang.Thread.State: WAITING (on object monitor)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.Object.wait(Native Method)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - waiting on &amp;lt;0x8bcd89a0&amp;gt; (a java.lang.ref.Reference$Lock)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.Object.wait(Object.java:485)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - locked &amp;lt;0x8bcd89a0&amp;gt; (a java.lang.ref.Reference$Lock)&lt;br /&gt;&lt;br /&gt;"main" prio=10 tid=0x09023400 nid=0x60c6 runnable [0xb75e9000]&lt;br /&gt;&amp;nbsp;&amp;nbsp; java.lang.Thread.State: RUNNABLE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.net.PlainSocketImpl.socketAccept(Native Method)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - locked &amp;lt;0x8b8364b8&amp;gt; (a java.net.SocksSocketImpl)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.net.ServerSocket.implAccept(ServerSocket.java:453)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.net.ServerSocket.accept(ServerSocket.java:421)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at org.coastal.log4jext.SocketServerAsWinService.main(SocketServerAsWinService.java:41)&lt;br /&gt;&lt;br /&gt;"VM Thread" prio=10 tid=0x09047800 nid=0x60c9 runnable &lt;br /&gt;&lt;br /&gt;"VM Periodic Task Thread" prio=10 tid=0x09062800 nid=0x60d1 waiting on condition &lt;br /&gt;&lt;br /&gt;JNI global references: 945&lt;br /&gt;&lt;br /&gt;Heap&lt;br /&gt;&amp;nbsp;def new generation&amp;nbsp;&amp;nbsp; total 960K, used 488K [0x8b7d0000, 0x8b8d0000, 0x8bcb0000)&lt;br /&gt;&amp;nbsp; eden space 896K,&amp;nbsp; 47% used [0x8b7d0000, 0x8b83a3b8, 0x8b8b0000)&lt;br /&gt;&amp;nbsp; from space 64K, 100% used [0x8b8c0000, 0x8b8d0000, 0x8b8d0000)&lt;br /&gt;&amp;nbsp; to&amp;nbsp;&amp;nbsp; space 64K,&amp;nbsp;&amp;nbsp; 0% used [0x8b8b0000, 0x8b8b0000, 0x8b8c0000)&lt;br /&gt;&amp;nbsp;tenured generation&amp;nbsp;&amp;nbsp; total 4096K, used 467K [0x8bcb0000, 0x8c0b0000, 0x8f7d0000)&lt;br /&gt;&amp;nbsp;&amp;nbsp; the space 4096K,&amp;nbsp; 11% used [0x8bcb0000, 0x8bd24f00, 0x8bd25000, 0x8c0b0000)&lt;br /&gt;&amp;nbsp;compacting perm gen&amp;nbsp; total 12288K, used 373K [0x8f7d0000, 0x903d0000, 0x937d0000)&lt;br /&gt;&amp;nbsp;&amp;nbsp; the space 12288K,&amp;nbsp;&amp;nbsp; 3% used [0x8f7d0000, 0x8f82d6a0, 0x8f82d800, 0x903d0000)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ro space 8192K,&amp;nbsp; 74% used [0x937d0000, 0x93dca2a8, 0x93dca400, 0x93fd0000)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rw space 12288K,&amp;nbsp; 59% used [0x93fd0000, 0x946e7878, 0x946e7a00, 0x94bd0000)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-4442191338464613659?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/4442191338464613659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/09/capturing-jvm-thread-dump-in-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/4442191338464613659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/4442191338464613659'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/09/capturing-jvm-thread-dump-in-linux.html' title='Capturing jvm Thread Dump in linux'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-7188825292974449501</id><published>2009-07-21T16:45:00.000-07:00</published><updated>2009-07-31T16:02:07.605-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groups'/><category scheme='http://www.blogger.com/atom/ns#' term='regular expression'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>Search and replace using regular expression groups</title><content type='html'>Regular expressions come in very handy for searching and replacing texts in data files. Most IDEs (eclipse on which this was tested) and text editors (TextPad, JEdit, etc.) support regular expressions. Take for example an input data file that you need to create/modify.&lt;br /&gt;Here is the data file we are interested in...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;07/10/09,11:10:20 AM,63463284,credit,salary electronic deposit,$1000.00&lt;br /&gt;07/11/09,11:10:20 AM,63463284,credit,CD interest,$22.00&lt;br /&gt;07/12/09,11:10:20 AM,63463284,credit,tax refund,$300.00&lt;br /&gt;07/13/09,11:10:20 AM,63463284,credit,ATM deposit,$500.00&lt;br /&gt;07/14/09,11:10:20 AM,63463284,debit,credit card payment,$137.00&lt;br /&gt;07/15/09,11:10:20 AM,63463284,credit,checking a/c interest,$20.00&lt;br /&gt;07/16/09,11:10:20 AM,63463284,debit,power bill,$80.00&lt;br /&gt;07/17/09,11:10:20 AM,63463284,credit,Check #8774,$350.00&lt;br /&gt;07/18/09,11:10:20 AM,63463284,debit,overdraft fee,$5.00&lt;br /&gt;07/19/09,11:10:20 AM,63463284,credit,Check #167,$1000.00&lt;br /&gt;07/10/09,11:10:20 AM,77667529,credit,salary electronic deposit,$2000.00&lt;br /&gt;07/11/09,11:10:20 AM,77667529,credit,CD interest,$22.00&lt;br /&gt;07/12/09,11:10:20 AM,77667529,credit,tax refund,$300.00&lt;br /&gt;07/13/09,11:10:20 AM,77667529,credit,ATM deposit,$500.00&lt;br /&gt;07/14/09,11:10:20 AM,77667529,debit,credit card payment,$137.00&lt;br /&gt;07/15/09,11:10:20 AM,77667529,credit,checking a/c interest,$20.00&lt;br /&gt;07/16/09,11:10:20 AM,77667529,debit,power bill,$80.00&lt;br /&gt;07/17/09,11:10:20 AM,77667529,credit,Check #7766,$350.00&lt;br /&gt;07/18/09,11:10:20 AM,77667529,debit,Check copy fee,$10.00&lt;br /&gt;07/19/09,11:10:20 AM,77667529,credit,Check #125,$1000.00&lt;br /&gt;07/10/09,11:10:20 AM,33445398,credit,salary electronic deposit,$2000.00&lt;br /&gt;07/11/09,11:10:20 AM,33445398,credit,CD interest,$22.00&lt;br /&gt;07/12/09,11:10:20 AM,33445398,credit,tax refund,$300.00&lt;br /&gt;07/13/09,11:10:20 AM,33445398,credit,ATM deposit,$500.00&lt;br /&gt;07/14/09,11:10:20 AM,33445398,debit,credit card payment,$137.00&lt;br /&gt;07/15/09,11:10:20 AM,33445398,credit,checking a/c interest,$20.00&lt;br /&gt;07/16/09,11:10:20 AM,33445398,debit,power bill,$80.00&lt;br /&gt;07/17/09,11:10:20 AM,33445398,credit,Check #1255,$350.00&lt;br /&gt;07/18/09,11:10:20 AM,33445398,debit,overdraft fee,$5.00&lt;br /&gt;07/19/09,11:10:20 AM,33445398,credit,Check #433,$1000.00&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;The data is about bank transactions conducted on accounts.&lt;br /&gt;Let's take a look at the first few lines of data...&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-size:100%;" &gt;&lt;span style="font-family:arial;"&gt;Date         Time             account #   type     description                        currency      amount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;-------          -------              ---------------  -------    ------------------                     --------------    ------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;07/10/09,11:10:20 AM,63463284,credit,salary electronic deposit,$1000.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/11/09,11:10:20 AM,63463284,credit,CD interest,$22.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/12/09,11:10:20 AM,63463284,credit,tax refund,$300.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/13/09,11:10:20 AM,63463284,credit,ATM deposit,$500.00&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;07/14/09,11:10:20 AM,63463284,debit,credit card payment,$137.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/15/09,11:10:20 AM,63463284,credit,checking a/c interest,$20.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/16/09,11:10:20 AM,63463284,debit,power bill,$80.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/17/09,11:10:20 AM,63463284,credit,Check #8774,$350.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/18/09,11:10:20 AM,63463284,debit,overdraft fee,$5.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;07/19/09,11:10:20 AM,63463284,credit,Check #167,$1000.00&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;..&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Say we want to give credit to all overdraft fees charged for all accounts by adding an adjustment(credit) for the same amount. That is we want to add a new data line for every line which contains 'overdraft fee'. For example if you look at the lines of data above. For every line like this...&lt;br /&gt;07/18/09,11:10:20 AM,63463284,debit,overdraft fee,$5.00&lt;br /&gt;we want to add a new line like this....&lt;br /&gt;07/18/09,11:10:20 AM,63463284,credit,overdraft fee adjustment,$5.00&lt;br /&gt;&lt;br /&gt;The regular expression .*overdraft fee.*\n will get us the line containing overdraft fee. But we also need the timestamp at the beginning of the line. So let's refine the search string by adding a group.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;^(.*)debit,overdraft fee,(.*)\n&lt;/span&gt;&lt;br /&gt;So everything from the start of line upto debit forms group 1, which is the timestamp and account number.&lt;br /&gt;The replacement string should be the entire last line which is $0 plus the same timestamp and account number($1) plus new text (credit,overdraft fee adjustment, $2) plus platform independent line feed (\R). Putting them all together the replacement string should be&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$0$1credit,overdraft fee adjustment,$2\R&lt;/span&gt;&lt;br /&gt;This was tested in eclipse IDE. In case of text editors like Textpad, the search string will be&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;^\\(.*\\)debit,overdraft fee,\\(.*\\)\n&lt;/span&gt;&lt;br /&gt;and the replace string will be &lt;span style="font-weight: bold;"&gt;\0\1credit,overdraft fee adjustment,\2\n&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using the search and replace sub menu item of eclipse&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5dlZrY5HXrY/SnN0wtfrWZI/AAAAAAAAABk/4j5LEBmWmTY/s1600-h/eclipse-regularexpression-Replace+.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 295px;" src="http://3.bp.blogspot.com/_5dlZrY5HXrY/SnN0wtfrWZI/AAAAAAAAABk/4j5LEBmWmTY/s320/eclipse-regularexpression-Replace+.png" alt="" id="BLOGGER_PHOTO_ID_5364759961323395474" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-7188825292974449501?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/7188825292974449501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/07/search-and-replace-using-regular.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7188825292974449501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7188825292974449501'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/07/search-and-replace-using-regular.html' title='Search and replace using regular expression groups'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5dlZrY5HXrY/SnN0wtfrWZI/AAAAAAAAABk/4j5LEBmWmTY/s72-c/eclipse-regularexpression-Replace+.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-4161898600087147977</id><published>2009-07-09T10:45:00.000-07:00</published><updated>2009-07-14T10:01:22.695-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdic'/><category scheme='http://www.blogger.com/atom/ns#' term='tray icon'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Java System Tray icon in Ubuntu</title><content type='html'>Download JDIC.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;           Using Synaptic package manager&lt;br /&gt;search for jdic and download both libjdic -java and libjdic-bin packages.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;downloading from JDIC website&lt;br /&gt;download the linux distribution from &lt;a href="https://jdic.dev.java.net/"&gt;here&lt;/a&gt;.&lt;br /&gt;Say you extract it to the directory /home/myuser/jdic&lt;br /&gt;You should see a linux folder which has jdic.jar and some .so files.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Here is a code example for creating a tray icon.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;// Start Tray Icon Code&lt;br /&gt;SystemTray tray = SystemTray.getDefaultSystemTray();&lt;br /&gt;TrayIcon ti;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;if (Integer.parseInt(System.getProperty("java.version").substring(2, 3)) &gt;= 5)&lt;br /&gt;System.setProperty("javax.swing.adjustPopupLocationToFit", "false");&lt;br /&gt;menu = new JPopupMenu("MY APP Menu");&lt;br /&gt;&lt;br /&gt;// "Quit" menu item&lt;br /&gt;menuItem = new JMenuItem("Exit");&lt;br /&gt;menuItem.addActionListener(this);&lt;br /&gt;menu.add(menuItem);&lt;br /&gt;&lt;br /&gt;ImageIcon i = new ImageIcon(MyClass.class.getResource("/images/appImage.png"));&lt;br /&gt;&lt;br /&gt;ti = new TrayIcon(i, "Welcome to My App", menu);&lt;br /&gt;&lt;br /&gt;ti.setIconAutoSize(true);&lt;br /&gt;ti.addActionListener(new ActionListener() {&lt;br /&gt;public void actionPerformed(ActionEvent e) {&lt;br /&gt;            MyApp.this.setVisible(!MyApp.this.isVisible());&lt;br /&gt;            if (MyAppFrame.this.isVisible() == false) {&lt;br /&gt;                     ti.displayMessage(&lt;br /&gt;                                             "Welcome to MyApp",&lt;br /&gt;          "To open  MyApp Application click the icon. To exit the application right click the icon and click the Quit menu item.",&lt;br /&gt;          0);&lt;br /&gt;            }&lt;br /&gt; }&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;tray.addTrayIcon(ti);&lt;br /&gt;&lt;br /&gt;// Construct the GUI for balloon message.&lt;br /&gt;ActionListener al = new ActionListener() {&lt;br /&gt;&lt;br /&gt;public void actionPerformed(ActionEvent e) {&lt;br /&gt;MyApp.this.setVisible(!MyApp.this.isVisible());&lt;br /&gt;if (MyApp.this.isVisible() == false) {&lt;br /&gt;ti.displayMessage(&lt;br /&gt;  "MyApp",&lt;br /&gt;   "To open the MyApp Application click the icon. To exit the application right click the icon and click the Quit menu item.",&lt;br /&gt;                                          0);&lt;br /&gt;          }&lt;br /&gt;}&lt;br /&gt;};&lt;br /&gt;exitMnu.addActionListener(al);&lt;br /&gt;&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;logger.error("Unhandled error", e);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;this.setIconImage(new ImageIcon(MyApp.class&lt;br /&gt;  .getResource("/images/myApp.png")).getImage());&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;logger.error("Unhandled error", e);&lt;br /&gt;}&lt;br /&gt;// End Tray Icon Code&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For this to work, you need to add jdic jar to the build path and also add share library files location(&lt;span style="font-weight: bold;"&gt;/usr/lib/jni&lt;/span&gt; for the first case and &lt;span style="font-weight: bold;"&gt;/home/myuser/jdic/linux&lt;/span&gt; for the second) to the native library path for the project as shown in the picture below&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5dlZrY5HXrY/SlY4NRAsLlI/AAAAAAAAAA8/Ev8CwGRNHEA/s1600-h/build+path+for+jdic+.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 222px;" src="http://2.bp.blogspot.com/_5dlZrY5HXrY/SlY4NRAsLlI/AAAAAAAAAA8/Ev8CwGRNHEA/s320/build+path+for+jdic+.png" alt="" id="BLOGGER_PHOTO_ID_5356530607359536722" border="0" /&gt;&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-4161898600087147977?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/4161898600087147977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/07/java-system-tray-icon-in-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/4161898600087147977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/4161898600087147977'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/07/java-system-tray-icon-in-ubuntu.html' title='Java System Tray icon in Ubuntu'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5dlZrY5HXrY/SlY4NRAsLlI/AAAAAAAAAA8/Ev8CwGRNHEA/s72-c/build+path+for+jdic+.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-6124482546689193826</id><published>2009-07-06T17:15:00.000-07:00</published><updated>2009-07-08T13:08:23.687-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows partition'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='NTFS'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Mounting windows partition at bootup in Ubuntu</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;I have a dual booting linux system at work. I share the java projects (located on the windows partition) on both windows and Linux. But when I launch eclipse, all the projects show up closed since the windows partition is not mounted yet. The solution to this is to mount windows partition at boot up time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;To mount a windows partition at startup, you need to do the following.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;- get the UUID of the device&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;blkid&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;/dev/sda1: UUID="9044866844865140" TYPE="ntfs" &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;/dev/sda2: LABEL="GHOST DATA" UUID="FCF8-3D81" TYPE="vfat"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;/dev/sda5: UUID="b2293182-981b-4291-96ff-dba50f73510d" TYPE="ext3"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;/dev/sda6: TYPE="swap" UUID="1d3b683c-c559-43e2-ac46-f3500e27dbfd"&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;- create an entry in /etc/fstab file for the windows NTFS drive&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;  &amp;lt;options&amp;gt;       &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;UUID="9044866844865140" /media/disk ntfs-3g defaults,locale=en_US.utf8 0 0&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;Instead of UUID specifying the device also works. see below&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: rgb(51, 51, 255);"&gt;/dev/sda1 /media/disk ntfs-3g defaults,locale=en_US.utf8 0 0 &lt;/pre&gt;&lt;span style="font-size:100%;"&gt;Note : both ntfs and ntfs-3g works fine for a windows partition.&lt;br /&gt;&lt;br /&gt;The options for fstab are clearly explained in the ubuntu help docs &lt;a href="https://help.ubuntu.com/community/Fstab"&gt;here.&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-6124482546689193826?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/6124482546689193826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/07/loading-windows-partition-at-bootup-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6124482546689193826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6124482546689193826'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/07/loading-windows-partition-at-bootup-in.html' title='Mounting windows partition at bootup in Ubuntu'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-7542280960990751523</id><published>2009-06-04T16:41:00.000-07:00</published><updated>2009-07-09T14:02:48.096-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='build script'/><title type='text'>Ant build script for Flex projects</title><content type='html'>It took me a while to get the build script working for Flex. I started out by googgling for them. Took some scripts out there and put it together. But ran into some errors like"Unable to transcode swf", "Out of memory heap space". Having fixed them all, wanted to share what i ended up with.&lt;br /&gt;&lt;br /&gt;One compile error I was getting regularly was for embedded objects like swf or image files. Care needs to be taken to make sure that the paths are correct. For example inside a class which is deep in the source package tree, the path needs to be absolute. But for mxml files at the root level, relative paths are OK. Flex builder IDE or eclipse with Flex plugin will not raise a compile error for this issue. Only an ant build script will do that. FLEX_HOME environment variable needs to be set to the flex sdk directory.&lt;br /&gt;&lt;br /&gt;Also the mxmlc compile task can take a lot of memory, so added maxmemory attribute to take care of that.You need to use fork=true (launch it's own jvm process instead of running under ant's jvm).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;build.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(136, 136, 136); padding: 1em 0pt; overflow: scroll; left: 1em; width: 97%; font-family: 'Lucida Console',monospace; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; position: relative; background-color: rgb(248, 250, 255); font-size: 80%;"&gt;&lt;br /&gt;&amp;lt;?xml version='1.0'?&amp;gt;&lt;br /&gt;&amp;lt;project name='MYUIProject' default='masterbuild' basedir='.'&amp;gt;&lt;br /&gt;&amp;lt;target name='init'&amp;gt;&lt;br /&gt;&amp;lt;!--FLEX_HOME environment property should be set to where flex is installed--&amp;gt;&lt;br /&gt;&amp;lt;property environment="env"/&amp;gt;&lt;br /&gt;&amp;lt;property name="FLEX_HOME" value="${env.FLEX_HOME}"/&amp;gt;&lt;br /&gt;&amp;lt;property name="DEFAULT.LOCAL" value="en_US"/&amp;gt;&lt;br /&gt;&amp;lt;property name="ENCODING" value="UTF-8"/&amp;gt;&lt;br /&gt;&amp;lt;!-- directories--&amp;gt;&lt;br /&gt;&amp;lt;property name="application.name"  value="AppMain"/&amp;gt;&lt;br /&gt;&amp;lt;property name="src.dir" value="src"/&amp;gt;&lt;br /&gt;&amp;lt;property name="bin.dir" value="bin"/&amp;gt;&lt;br /&gt;&amp;lt;property name="build.dir" value="build"/&amp;gt;&lt;br /&gt;&amp;lt;property name="lib.dir" value="lib"/&amp;gt;&lt;br /&gt;&amp;lt;property name="vendor.lib.dir" value="${lib.dir}/vendor"/&amp;gt;&lt;br /&gt;&amp;lt;property name="dist.dir" value="${basedir}/dist"/&amp;gt;&lt;br /&gt;&amp;lt;property name="wrapper.dir" value="html-template"/&amp;gt;&lt;br /&gt;&amp;lt;property name="html.file" value="${dist.dir}/${application.name}.html"/&amp;gt;&lt;br /&gt;&amp;lt;property name="main.class" value="${src.dir}/AppMain.mxml"/&amp;gt;&lt;br /&gt;&amp;lt;property name="swf.export" value="${bin.dir}/AppMain.swf"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--ASSETS DIR--&amp;gt;&lt;br /&gt;&amp;lt;property name="assets.dir" value="${src.dir}/assets/"/&amp;gt;&lt;br /&gt;&amp;lt;path id="project.classpath"&amp;gt;&lt;br /&gt;&amp;lt;pathelement location="${build.dir}" /&amp;gt;&lt;br /&gt;&amp;lt;fileset dir="${lib.dir}"&amp;gt;&lt;br /&gt; &amp;lt;include name="**/*.swc" /&amp;gt;&lt;br /&gt;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&amp;lt;fileset dir="${vendor.lib.dir}"&amp;gt;&lt;br /&gt; &amp;lt;include name="**/*.jar" /&amp;gt;&lt;br /&gt;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Configure the custom Ant tasks --&amp;gt;&lt;br /&gt;&amp;lt;taskdef resource="flexTasks.tasks" classpath="${lib.dir}/vendor/flexTasks.jar" /&amp;gt;&lt;br /&gt;&amp;lt;taskdef resource="com/adobe/ac/ant/tasks/tasks.properties" classpath="${FLEX.ANT.TASK.DIR}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name='initdirs' depends="init"&amp;gt;&lt;br /&gt;&amp;lt;mkdir dir='${dist.dir}'/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- define all .mxml files and .css files that need to be converted into a .swf file&lt;br /&gt;for the application--&amp;gt;&lt;br /&gt;&amp;lt;target name="compile" depends="init, clean"&amp;gt;&lt;br /&gt;&amp;lt;antcall target="build-mxml-module"&amp;gt;&lt;br /&gt;&amp;lt;param name="module" value="AppMain" /&amp;gt;&lt;br /&gt;&amp;lt;/antcall&amp;gt;&lt;br /&gt;&amp;lt;antcall target="build-css-module"&amp;gt;&lt;br /&gt;&amp;lt;param name="module" value="core" /&amp;gt;&lt;br /&gt;&amp;lt;/antcall&amp;gt;&lt;br /&gt;&amp;lt;antcall target="build-css-module"&amp;gt;&lt;br /&gt;&amp;lt;param name="module" value="day" /&amp;gt;&lt;br /&gt;&amp;lt;/antcall&amp;gt;&lt;br /&gt;&amp;lt;antcall target="build-css-module"&amp;gt;&lt;br /&gt;&amp;lt;param name="module" value="night" /&amp;gt;&lt;br /&gt;&amp;lt;/antcall&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--Compile the "mxml" file passed in as an argument into a .swf file --&amp;gt;&lt;br /&gt;&amp;lt;target name="build-mxml-module" &amp;gt;&lt;br /&gt;&amp;lt;mxmlc fork="true" maxmemory="128m" file="${src.dir}/${module}.mxml"&lt;br /&gt;keep-generated-actionscript="true"&lt;br /&gt;output="${dist.dir}/${module}.swf"&lt;br /&gt;actionscript-file-encoding="UTF-8"&lt;br /&gt;optimize="true"&lt;br /&gt;debug="false"&lt;br /&gt;incremental="true"&amp;gt;&lt;br /&gt;&amp;lt;!-- Include the necessary libraries --&amp;gt;&lt;br /&gt;&amp;lt;load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/&amp;gt;&lt;br /&gt;&amp;lt;source-path path-element="${FLEX_HOME}/frameworks"/&amp;gt;&lt;br /&gt;&amp;lt;compiler.source-path path-element="${src.dir}"/&amp;gt;&lt;br /&gt;&amp;lt;compiler.include-libraries dir="${lib.dir}" append="true"&amp;gt;&lt;br /&gt; &amp;lt;include name="as3crypto.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="AS3IteratorImplementation.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="Cairngorm.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="flexunit.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="flexlib-.2.1.swc" /&amp;gt;&lt;br /&gt;&amp;lt;/compiler.include-libraries&amp;gt;&lt;br /&gt;&amp;lt;/mxmlc&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--Compile the "css" file passed in into a .swf file --&amp;gt;&lt;br /&gt;&amp;lt;target name="build-css-module" &amp;gt;&lt;br /&gt;&amp;lt;mxmlc fork="true" file="${src.dir}/${module}.css"&lt;br /&gt;keep-generated-actionscript="true"&lt;br /&gt;output="${dist.dir}/${module}.swf"&lt;br /&gt;actionscript-file-encoding="UTF-8"&lt;br /&gt;optimize="true"&lt;br /&gt;debug="false"&lt;br /&gt;incremental="true"&amp;gt;&lt;br /&gt;&amp;lt;!-- Include the necessary libraries --&amp;gt;&lt;br /&gt;&amp;lt;load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/&amp;gt;&lt;br /&gt;&amp;lt;source-path path-element="${FLEX_HOME}/frameworks"/&amp;gt;&lt;br /&gt;&amp;lt;compiler.source-path path-element="${src.dir}"/&amp;gt;&lt;br /&gt;&amp;lt;compiler.include-libraries dir="${lib.dir}" append="true"&amp;gt;&lt;br /&gt; &amp;lt;include name="as3crypto.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="AS3IteratorImplementation.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="as3-rpclib.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="Cairngorm.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="flexunit.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="primitives.swc" /&amp;gt;&lt;br /&gt; &amp;lt;include name="util.swc" /&amp;gt;&lt;br /&gt;&amp;lt;/compiler.include-libraries&amp;gt;&lt;br /&gt;&amp;lt;/mxmlc&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="clean" depends='initdirs'&amp;gt;&lt;br /&gt;&amp;lt;delete dir="${dist.dir}" /&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Create HTML wrapper --&amp;gt;&lt;br /&gt;&amp;lt;target name="wrapper" depends="compile" description="Creates the HTML wrapper"&amp;gt;&lt;br /&gt;&amp;lt;html-wrapper&lt;br /&gt;           title="Welcome to My Flex App"&lt;br /&gt;           file="${application.name}.html"&lt;br /&gt;           height="800"&lt;br /&gt;           width="800"&lt;br /&gt;           bgcolor="red"&lt;br /&gt;           application="app"&lt;br /&gt;           swf="${application.name}"&lt;br /&gt;           version-major="9"&lt;br /&gt;           version-minor="0"&lt;br /&gt;           version-revision="0"&lt;br /&gt;           history="true"&lt;br /&gt;           template="express-installation"&lt;br /&gt;           output="${dist.dir}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Copy non-embedded files to output folder --&amp;gt;&lt;br /&gt;&amp;lt;target name="output" depends="compile" description="Copies non-embedded files to output folder"&amp;gt;&lt;br /&gt;&amp;lt;!-- Copy the assets dir --&amp;gt;&lt;br /&gt;&amp;lt;copy todir="${dist.dir}/assets"&amp;gt;&lt;br /&gt;&amp;lt;fileset dir="${assets.dir}"&amp;gt;&lt;br /&gt;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&amp;lt;/copy&amp;gt;&lt;br /&gt;&amp;lt;!-- Copy the swf files from src dir --&amp;gt;&lt;br /&gt;&amp;lt;copy todir="${dist.dir}"&amp;gt;&lt;br /&gt;&amp;lt;fileset dir="${src.dir}" includes="*.swf"&amp;gt;&lt;br /&gt;&amp;lt;/fileset&amp;gt;&lt;br /&gt;&amp;lt;/copy&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Run all, default --&amp;gt;&lt;br /&gt;&amp;lt;target name="masterbuild"&lt;br /&gt;        depends="clean, compile, output, wrapper"&lt;br /&gt;        description="Complete build in efficient sequence"/&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-7542280960990751523?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/7542280960990751523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/06/ant-build-script-for-flex-projects.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7542280960990751523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7542280960990751523'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/06/ant-build-script-for-flex-projects.html' title='Ant build script for Flex projects'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-3409489953065855181</id><published>2009-05-22T11:37:00.000-07:00</published><updated>2009-05-26T13:07:24.134-07:00</updated><title type='text'>Watch and Curl</title><content type='html'>Watch is a utility I have already discussed in my earlier post. I want to bring your attention to this nifty little utility called &lt;a href="http://en.wikipedia.org/wiki/CURL"&gt;curl&lt;/a&gt;. It is basically a program to hit a URL and get data from it. There are hundreds of arguments that it can take. I won't be going into all that. I use it just as a tool to get data from a URL and here I combine it with the watch program to repeatedly execute the URL and also see the visible difference(s) in the output response from the URL.&lt;br /&gt;&lt;br /&gt;The command used here is&lt;br /&gt;watch -d -n 60 'curl "http://localhost:81/myapp/data/get-sample?userID=abc&amp;amp;password=foo"'&lt;br /&gt;&lt;br /&gt;The output produced is shown below....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5dlZrY5HXrY/Shb0wppPNeI/AAAAAAAAAAM/-7Lvk6rPMkc/s1600-h/WatchnCurl-Output2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 266px;" src="http://2.bp.blogspot.com/_5dlZrY5HXrY/Shb0wppPNeI/AAAAAAAAAAM/-7Lvk6rPMkc/s320/WatchnCurl-Output2.png" alt="" id="BLOGGER_PHOTO_ID_5338723524944016866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Where the highlighted text is what has changed in the output during the last time interval (which is 60 seconds in this case).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-3409489953065855181?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/3409489953065855181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/05/watch-and-curl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3409489953065855181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3409489953065855181'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/05/watch-and-curl.html' title='Watch and Curl'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5dlZrY5HXrY/Shb0wppPNeI/AAAAAAAAAAM/-7Lvk6rPMkc/s72-c/WatchnCurl-Output2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-5969519664223960407</id><published>2009-04-22T10:28:00.000-07:00</published><updated>2009-04-22T10:35:35.100-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='skills'/><title type='text'>Top 7 Qualities of an Expert Programmer</title><content type='html'>This &lt;a href="http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/"&gt;article &lt;/a&gt;from dzone nails it and will probably hold true for the life of a programmer! It is well thought out and well written. Any developer from novice to expert can relate to many of the points outlined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-5969519664223960407?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/5969519664223960407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/top-7-qualities-of-expert-programmer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/5969519664223960407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/5969519664223960407'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/top-7-qualities-of-expert-programmer.html' title='Top 7 Qualities of an Expert Programmer'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-7050824038775524177</id><published>2009-04-19T15:55:00.000-07:00</published><updated>2009-05-10T17:59:16.480-07:00</updated><title type='text'>Looping in Informatica</title><content type='html'>&lt;ol style="font-family: arial;"&gt;&lt;li&gt;&lt;div&gt;Separate mapping/session to get all pid from a file and load the pid's in a relational table(load_result table). The table could consist of the following fields.. pid, datawarehouse transaction datetime, completion_status(with a status of 'I').&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Create a mapping/session to ouput a  param flat file. The mapping should have a logic to pick the  (min) of pid where the completion_status is an 'I'.  Snapshot of lod_rlst table before the staging or fact load commences&lt;br /&gt;&lt;table style="width: 250px; height: 75px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;1&lt;/td&gt;&lt;br /&gt;&lt;td&gt;I&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;01/01/2009 12:00:00:000 AM&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Call your next dummy session to load staging or fact tables from post-session command(components tab). The Link between param file(step 2 above) and next dummy session (step 3) should say. Previous_task = succeeded and previous_target_success_rows &gt; 0. (We want to call the next session to load data warehouse tables, if only the param file has any pid in it).&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;After data is loaded through staging/facts, at the end of all successful staging/facts sessions, create another  dummy session with a post_sql to update the completion_status for the pid that was just loaded from 'I' to 'C' (Incomplete status to a Complete Status). Now  delete from load_result table where completion_status is 'C'.  In post_session success command of this dummy session, it should call step 2 above. Snapshot of load result table after a load is completed successfully but before it's deleted from lod_rslt table&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=";font-family:Arial,sans-serif;font-size:85%;"  &gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;br /&gt;&lt;td&gt;C&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;01/01/2009 12:00:00:000 AM&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;5. The link in step 2 will help the process continue if there are any pid's left in lod_rslt table. If all pid's are done, the session should complete gracefully and send an email.&lt;/div&gt;&lt;span style=";font-family:Arial,sans-serif;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:Arial,sans-serif;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:Arial,sans-serif;font-size:85%;"  &gt; &lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-7050824038775524177?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/7050824038775524177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/looping-in-informatica.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7050824038775524177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/7050824038775524177'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/looping-in-informatica.html' title='Looping in Informatica'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-6388712442867104622</id><published>2009-04-12T19:26:00.000-07:00</published><updated>2009-04-13T10:35:09.992-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='viewing output changes'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring files'/><title type='text'>Monitoring changes over time...</title><content type='html'>If you need to run a command repeatedly at some interval and watch the output and know what has changed from the last iteration. For example say you want to monitor an XML feed which is providing data from weather sensors  and you want to see the data every 2 minutes and also see the new data highlighted? try the Unix &lt;a href="http://en.wikipedia.org/wiki/Watch_%28Unix%29"&gt;watch &lt;/a&gt;utility. It has parameters to specify update interval and also supports matching wildcard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-6388712442867104622?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/6388712442867104622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/monitoring-changes-over-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6388712442867104622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/6388712442867104622'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/monitoring-changes-over-time.html' title='Monitoring changes over time...'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-3731182665279871750</id><published>2009-04-12T19:06:00.000-07:00</published><updated>2009-04-13T10:35:50.655-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='log files'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring files'/><title type='text'>Monitoring multiple log files simultaneously</title><content type='html'>Ever wanted to look at many log files in real time while it's being updated? &lt;a href="http://www.vanheusden.com/multitail/"&gt;Multitail &lt;/a&gt;is a Unix utility program which can be used to monitor multiple log files and it will break up the display console into one unit for each file. It can also use colors while displaying the logfiles (through regular expressions). Supports monitoring wild card and more. You can monitor entire directories of files.&lt;br /&gt;Also runs on Cygwin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-3731182665279871750?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/3731182665279871750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/monitoring-multiple-log-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3731182665279871750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3731182665279871750'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/04/monitoring-multiple-log-files.html' title='Monitoring multiple log files simultaneously'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-3954259167698434154</id><published>2009-01-30T14:39:00.000-08:00</published><updated>2009-01-30T20:38:27.681-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grep'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Search and grouping results in command line unix</title><content type='html'>Ever wanted to extract some metrics from log files and group the results. Also print the count for each group. All this without using a loop statement!!!&lt;br /&gt;Just using command line. Here is how it can be done.&lt;br /&gt;&lt;br /&gt;In the results, the first number is the count and the second is the group.&lt;br /&gt;&lt;br /&gt;For starters here is a bit of explanation...The grep is looking for the string &lt;span style="font-weight: bold; font-style: italic;"&gt;Failed to connect&lt;/span&gt; in service.log file. &lt;span style="font-weight: bold; font-style: italic;"&gt;sed &lt;/span&gt;is used to make a group. In this case it is the station number. Then the results are sorted, finally &lt;span style="font-weight: bold; font-style: italic;"&gt;uniq &lt;/span&gt;gives the unique rows and the &lt;span style="font-weight: bold; font-style: italic;"&gt;-c&lt;/span&gt; gives us the count for each group.&lt;br /&gt;BTW this was done on Ubuntu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;$ &lt;span style="color: rgb(51, 102, 255);"&gt;grep 'Failed to connect' service.log | sed 's/.*Station :\(.*\)/\1/' | sort | uniq -c&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &lt;span style="font-size:78%;"&gt;count&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;          &lt;span style="font-size:78%;"&gt;station&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span style="font-size:85%;"&gt;69    10 - Host : 123.456.103.106 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;356    11 - Host : 123.456.103.105 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;24    1 - Host : 123.456.103.107 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;24    2 - Host : 123.456.103.98 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;23    3 - Host : 123.456.103.99 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;24    4 - Host : 123.456.103.100 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;25    5 - Host : 123.456.103.101 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;25    6 - Host : 123.456.103.102 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;23    7 - Host : 123.456.103.97 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;34    8 - Host : 123.456.103.104 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect&lt;br /&gt;28    9 - Host : 123.456.103.103 -  Failed to connect - Error :java.net.ConnectException: Connection timed out: connect &lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-3954259167698434154?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/3954259167698434154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/01/search-and-grouping-results-in-command.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3954259167698434154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/3954259167698434154'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/01/search-and-grouping-results-in-command.html' title='Search and grouping results in command line unix'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-4293427051037609855</id><published>2009-01-27T11:12:00.000-08:00</published><updated>2009-01-27T11:56:26.860-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><title type='text'>Regular Expression Cheat sheet for Java</title><content type='html'>Regular expression is quirky enough. On top of that it's different for each platform. Even text editors have their own flavors. One way to keep your sanity is to have a cheat sheet for each environment. Here is &lt;a href="http://www.omicentral.com/cheatsheets/JavaRegularExpressionsCheatSheet.pdf"&gt;one&lt;/a&gt; for Java and a &lt;a href="http://toolkit.gmckinney.info/docs/regex.pdf"&gt;generic&lt;/a&gt; one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-4293427051037609855?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/4293427051037609855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/01/regular-expression-cheat-sheet-for-java.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/4293427051037609855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/4293427051037609855'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/01/regular-expression-cheat-sheet-for-java.html' title='Regular Expression Cheat sheet for Java'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4098885671918163159.post-8328589572512311670</id><published>2009-01-02T13:38:00.000-08:00</published><updated>2009-01-02T13:42:46.894-08:00</updated><title type='text'>System Clock vs Real Time clock</title><content type='html'>Applications which are time sensitive or store and process data that is periodic need to keep up with the  Real Time clock (RTC) (hardware clock). Time servers can be used to synch the system clock with external time servers (for example www.nist.gov) but there is no way for applications to synchronize the system clock with the RTC.  &lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;Typically at startup the operating system (read windows) sets the system clock to the RTC. After that the operating system generates interrupts(depending on the flavor of windows it could range from 10 ms to 15 ms or more) to update the system clock. Also if Windows finds the time lag between the two clocks to be at least 1 minute (Where exactly this value is set is not known publicly!!!), then it resets the system clock to the RTC. But if you want to keep up the system time much more accurately (say 100 ms, then there is  no way to do that.&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;a href="http://www.softdevlabs.com/ClockMon/ClockMon.html"&gt;ClockMon&lt;/a&gt; is a simple utility app that can be used to monitor the two clocks or resync the system clock when it drifts away from the RTC. It is a free program that can come quite handy when troubleshooting clock drift  issues in applications running on Windows platforms.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4098885671918163159-8328589572512311670?l=dollopofdesi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dollopofdesi.blogspot.com/feeds/8328589572512311670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dollopofdesi.blogspot.com/2009/01/system-clock-vs-real-time-clock.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/8328589572512311670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4098885671918163159/posts/default/8328589572512311670'/><link rel='alternate' type='text/html' href='http://dollopofdesi.blogspot.com/2009/01/system-clock-vs-real-time-clock.html' title='System Clock vs Real Time clock'/><author><name>Vishayam</name><uri>http://www.blogger.com/profile/07433414598837113307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_5dlZrY5HXrY/S1DpWHAc_vI/AAAAAAAAADM/qVO3_tAoZYs/S220/photo+2.jpg'/></author><thr:total>0</thr:total></entry></feed>
