Tuesday, November 23, 2010

Apache ODE Jacob part 1 - Introduction

Here I am going to introduce some topics related to Jacob which is the framework which provides the mechanism necessary to deal with two key issues in implementing BPEL constructs in Apache ODE. The interesting part of this framework is it can be use to achieve,

  1. Resistance of execution state
  2. Concurrency
without using Java Thread (I must say it's a Java framework). 

Here I am not going to talk about how BPEL constructs are designed using Jacob, instead what I am going to talk is the behavior, how to use it to write programs etc...  This is my first post and will continue till I am not find anything new in Jacob. In this first post I like to introduce some basic Jacob concepts. If you don't understand this don't worry, because it is necessary to see them in a program to understand. So just remember there are such things as follows.
  • JacobObject/ JacobRunnable
JacobObject is the simplest element use in Jacob which can be created by extending a Java class using JacobRunnable. JacobRunnable is a command pattern which implement run() method. Further we can say all the JacobObjects should have this run() method implemented. 
  • Channels
Channels are use to communicate between JacobObjects. In this channels we should defined the methods which we use the channels to invoke. There are various channel types which we can found in Jacob and we will discuss them in later.
  • Channel Listeners or Method Lists
When we create a channel there should be a JacobObject which listening to the channel till the other JacobObject invoke a method. This is done using a Channel Listener.
  • JacobVPU, ExecutionQueueImpl
This is where Jacob is processed. JacobVPU uses ExecutionQueueImpl to put all the artifacts (mostly channels and reactions) used in processing. When we add JacobObjects to the VPU queue in runtime, VPU popped them up and executed them, and that's it. 
According to references (I listed them below) "Jacob VPU is responsible for persisting and its internal state, like serialize or de-serialize the object", but I don't have and idea yet about it. 

There is an short way to create Channels and ChannelListeners in compile time using a channel interface, by adding @ChannelType annotation as follows,

Channel interface

import org.apache.ode.jacob.ap.ChannelType;

@ChannelType
public interface Call {
public void answer();
public void reject();
public void engage();
}

Channel

public interface CallChannel extends 
org.apache.ode.jacob.
Channel, 
org.apache.ode.jacob.examples.HelloWorld.Call
{
}

ChannelListener

import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;

public abstract class CallChannelListener
 extends org.apache.ode.jacob.ChannelListener <
org.apache.ode.jacob.examples.HelloWorld.CallChannel
>
 implements 
org.apache.ode.jacob.examples.HelloWorld.Call
{

    /**
* 
*/
private static final long serialVersionUID = 1L;
private static final Log __log = LogFactory.getLog(
org.apache.ode.jacob.examples.HelloWorld.Call
.class);

    protected Log log() { return __log; } 

    protected CallChannelListener(
org.apache.ode.jacob.examples.HelloWorld.
CallChannel channel) {
       super(channel);
    }
}

To write this article I used three articles which were previously published,
  1. Exploring ODE part II: Jacob Framework by Jeff Yu http://jeff.familyyu.net/2010/01/exploring-apache-ode-source-code-part.html
  2. Wiki page of Apache ODE Jacob http://wiki.apache.org/ode/Jacob
  3. Documentation of Apache ODE Jacob http://ode.apache.org/jacob.html
When you read this you may find some places where I misunderstood, please let me and others know about it. 

Friday, October 8, 2010

How To Register The Nickname On Freenode

I thought to register my nickname in freenode because I want to keep my nickname as it is for a long time. (If not registered there is no guarantee that the same nickname can be used. Because anyone can assigned that nickname. After registering the registered nickname can be used only by using its owners password.)

This is the steps to follow to register on freenode,

First open the IRC client (Here I used X-chat)
Then select the FreeNode and click connect
Here is an image which shows that window.


NOTE: If you are using another client then you can connect to the freenode using the following command
/server irc.freenode.net

Now you are connect to the freenode
Then you will get a window that can connect to a IRC channel
And you can use it to connect it to any IRC channel (Here I am connecting to the Apache Derby IRC)
Or you can use Server->Join a Channel to join a prefered IRC channel.


Now lets do the registering
To do that enter the following commands in the text-box which is use for do the normal chatting.
(It is not a must to connect to the IRC to do the registration. But you have to connect to the freenode before registering)

Setting the nickname 
/nick nickname

Registering the nickname
/msg nickserv register password your_email

Login
This command will log you as the nickname owner
/msg nickserv identify password

Verify the registration
Go to the email account and get the verification code send by the NickServ
Then pass that verification code as other commands using the text-box.

Now you are done with the registering in freenode with your nick name.
Congratulations.....!!!

Wednesday, July 21, 2010

Silent killer

If you using UBUNTU or OTHER LINUX OS be aware of the silent killer
"rm -rf" - it removes everything without a warning. Once removed recovery may not be possible or extremely hard.

Transfer files one machine to another 2

I blog about two methods in the first and here is the second part which describes about
1. sshfs method
2. secret most easy two ways

SSHFS(mounting remote directory)

Here I am going to describe how to copy a file to remote machine using mounting it on to your machine. Lets see how to do that,
First you need sshfs install in your machine. You can do that by executing following command
sudo apt-get install sshfs.
Then what you have to do is create a folder in your machine where you want to mount the directory.
For example lets create a directory named eranda in Desktop.
Now you have to change the own of that folder, and it's content.
To do that execute the following command
chown -r username.username directory
eg: chown -r eranda.eranda Desktop/eranda

Now ready to mount the image.
You can mount the directory using the following command.
sshfs -o idmap=user username@remote-host:remote-directory your_directory
eg:sshfs -o idmap=user ishan@10.0.0.2:Desktop/xxx /home/eranda/Desktop/eranda

Now you can see the whole content of the xxx directory of the remote machine in your mounted folder. Now you can do r, w, x, copy from, copy to, delete, anything using that directory as a your local directory.
WARNING: All the changes that you done to this is changes to the original directory

As our main target now you can copy to/from remote machine.

After doing what you want you can unmount the directory as follows.
fusermount -u /home/eranda/Desktop/eranda

Two easy ways

1. Use a flash/portable drive etc...
2. Use a CD/DVD/Blue Ray etc...

NOTE: When you connect to the remote machine using ssh, scp or sshfs you always need to type the password of that user. If you doing it frequently you can save a passkey to that machine which will allow you to access without password. Now lets see how can we do that.

First you need to create a key.
ssh-keygen -t rsa
Now save it in the remote machine. To do that you first you should change your current location to home. Then execute the following command.
cat .ssh/id_rsa.pub | ssh user@remote.host 'cat >>.ssh/authorized_keys'


Special thanks to Damitha Kumarage, Tech lead at WSO2 Inc.

Transfer files one machine to another 1

These days I transfer files one machine to another frequently. There are few ways to do that.
1. scp (ssh)
2. using apache server
3. sshfs (by mounting remote directory)
4. the most easy two ways (this can be used even you don't know the ip address)

In this post I covered first two and will cover the next two in the 2nd part.

SCP (SSH)
To do this you need to install ssh-client in your machine and ssh-server in the other machine.
If you use Ubuntu in your machine you can install this by using sudo apt-get install openssh-client or openssh-server or you can download it and install from here.
If you have install ssh-client and server in your both machines then you can copy files from each another. To do this you can use the following command.

copy a file from remote machine to your machine
=>scp user@remote.host:file-path path-to-save
eg: copy a remote file named remotefile.txt which located in Desktop of the remote machine to your Desktop
scp eranda@10.0.0.4:Desktop/remotefile.txt ./Desktop

copy a file from your machine to remote machine
=>scp  file-path user@remote.host:path-to-save
eg:copy a file named remotefile.txt which located in Desktop of your machine to the Desktop of a remote machine
scp ./Desktop/myfile.txt  eranda@10.0.0.4:/home/eranda/Desktop

Using apache server
For this you have to have apache server install in your machine. If you do not have you can install using the command sudo apt-get install apache2 or you can download and install the apache server from here.

After installing apache2 your server should be up and running.
You can see that by going to the URL http://localhost/
You can see this kind of message in it.
------------------------------------------------------------------------------

It works!

This is the default web page for this server.
The web server software is running but no content has been added, yet
-----------------------------------------------------------------------------

If you see a Server Not Found 404 message, then you should start the apache2 server. You can do that by as follows
change directory to /usr/local/apache2
and execute the following commands
./clean.sh
./start.sh

Now lets start the file transferring.
First make directory in the location /var/
Put the file you want to copy to remote machine in that folder
For example I created a directory eranda in /var/ and put two of my files in that.

Now go to the remote machine and open a browser
Go to the URL http://your_machine_/your_folder_name (eg: http://10.0.0.4/eranda/)
You can see the files you put in the folder in your machine as follows

Now what you have to do is double click on the file you need and it will start downloading.

Special thank goes to Damitha Kumarage, Tech lead at WSO2 Inc.

Sunday, June 20, 2010

How to do Apache Derby Testing

Here I am going to log some important things which I had done during test Derby.
Here I have done two testings.
  1. derbyall test
  2. JUnit test
Before test Derby make sure that you build the trunk (need to put junit.jar (download) file in the tools/java folder if you don't skip the tests). You can build the truck by executing "ant all" command in the trunk and it will create classes folder which include build files. 

To run the test you need to set some class variables. One is path to classes which includes Derby build files. And path to the following jar files
  1. JUnit.jar (download)
  2. jakarta-oro-2.0.8.jar(download)
Here is my CLASSATH setting command I used,
export CLASSPATH=/home/eranda/Desktop/DERBY/trunk/classes:/home/eranda/Desktop/DERBY/trunk/tools/java/junit.jar:/home/eranda/Desktop/DERBY/trunk/tools/java/jakarta-oro-2.0.8.jar

Now we can start the the testing.

NOTE: Need to do the test in a separate folder not to mixes with others.

To run the derby all tests,
java org.apache.derbyTesting.functionTests.harness.RunSuite derbyall

This will do derbyall test and give you result files. Among them there are few important files which summarize the tests.
  1. derbyall_report.txt- in which include the summery of the tests
  2. derbyall_pass.txt- in which include the tests passed
  3. derbyall_fail.txt- in which include the tests failed
To run the JUnit all tests,
java -Xmx512m -XX:MaxPermSize=128m junit.textui.TestRunner org.apache.derbyTesting.functionTests.suites.All

Normally I pump this JUnit test results to a file by adding the following piece of code to the above execution.
>junitAll.out 2>&1

In JUnit tests it will return dots(.) for every passes test, 'E' for every error tests and 'F' for every failures. Also at the end it will show the stack trace of every errors and failures. 

If it need to run single test then it can be run using the following command,

java junit.textui.TestRunner PathToFile.TestName

for example I ran following command to test the InbetweenTest which is a JUnit test for testing the inbeween syntax.

java junit.textui.TestRunner org.apache.derbyTesting.functionTests.tests.lang.InbetweenTest 

Here I want to thank Bryan Pendleton (Apache Derby committer) whom I learnt most of this from.



Sunday, May 30, 2010

Fedora add sudoers

I install a fresh copy of Fedora in my virtual machine and it troubled me with sudo. When I use sudo in the terminal it gave me something like the current user is not in the /etc/sudoers file. So I did as follows and rid from it.
First I log into root using "su -" (then I had to enter the password)
Then I change the mode of /etc/sudoers file so that we can write to it by executing the command chmod +w /etc/sudoers.
Thirdly I add eranda ALL=(ALL) ALL
eranda is my username of my user account in fedora.
Then I remove the writing mode if the /etc/sudoers file using chmod -w /etc/sudoers

I thought it was the finish and execute sudo but it gave me another error.
sudo: /etc/sudoers is mode 0640, should be 0440 (to execute this you need root privileges)

then I change the mode of /etc/sudoers to 440 by executing chmod 440 /etc/sudoers
Finally I can use sudo in my machine.
Search Amazon.com for movies