Wednesday, July 21, 2010

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

Tuesday, May 25, 2010

Web Service Client

I discuss about how to create the stub of the web service and check whether it works. Now I am going to discuss how to create a client program which uses the web service. Here I am going to create a client program to my favorite web service "HelloService".
I thought it would be better to know about how things work.
First of all what is a stub? In simple language it is the interface which represent web service in the client side. So using stub we can work with the web service as it is in the same project/package. 
Then why we use Axis2? This is which do the communication between stub and the web service. For this Axis2 use SOAP(Simple Object Access Protocol) messages. Here two Axis2 servers are involved. 
The first one is in the client side and the other one is in the server side. Client side Axis2 server is responsible for create SOAP messages which invoke the web service through the stub, and catch and execute the response SOAP message which send by the  server side Axis2 server. The Server side Axis2 server is responsible for catch the SOAP message which the client side Axis2 server send and invoke the web service, and create a SOAP message to the response of the web service and send it to the client side Axis2 server. (The process is more complex than this)
Now lets finish the client implementation.
First of all take a look at the stub to see how it gave an interface to the remote service(need to have a rough idea).
You will see all the parameters of the the web service are represent as java classes and their values should set through setter methods and the output is also implemented as a class and we have to use getter method to get the real output (you may not understand this but you will realize your self when creating the client class).
now follow the following steps to create a client class.....
1. Create a java class with main method.
2. Import the package which include the "stub" into your class. This step can be skipped if you creating the class in the same package.
3. Create a object of the stub class (my stub class name is HelloServiceStub.java) in the your class. 
4. Let my stub object be "stub" and the method I need to invoke in the web service be sayHello().
    Then you see that you can access that method using the stub object. (for example stub.sayHello())
    But the thing is the parameters you need to parse to that method cannot be directly send as a String, Integer or  like that data type.
    We can use the IDE or you can look at the stub to see what parameters we need to parse through sayHello() . In my case it need to parse a SayHello object. (This SayHello java class is in the stub)
    Then create a object of the class it need. 
                  SayHello sayHello = new Sayhello();
    Then set the value you need to send as parameters for the actual method. 
                  sayHello.setName(name);
    Then send the sayHello object as the parameter of the method as stub.sayHello(sayHello);
    
5. Now its time to get the response
    Response is always come as an java class object. So we need to get it to a related class reference object.
    Use IDE or stub to see the response class type and get the response to it as follows. For my case it returns a SayHelloResponse object.(This SayHelloResponse java class is in the stub)
              SayHelloResponse helloMsg = stub.sayHello(sayHello);
   So at the end we can use that respond class to get the needed output.
               String output = helloMsg.get_return();
   If you use System.out.print(output); to print you can see the output print in the console.
   After all my Hello client look like as follows

6. After creating the client class you can run it as a java application which print the web service result.
   I send Eranda as the input and and I got the result as "Hello Eranda" 


PS: When you  creating the object you have to use a try-catch around some lines to catch the RemoteException. and AxisFault exceptions (so you need to import java.rmi.RemoteException and org.apache.axis2.AxisFault classes)

Monday, May 24, 2010

Web service client using eclipse axis2 plugin

Few months ago I blog how to deploy a web service and today I am going to create a client for that web service.
Here is the java class which I am going to deploy as the service.

package WebServices;

/**
* @author Eranda
*
*/
public class HelloService {
public String sayHello(String name){
return "Hello "+name;
}

}

This we service take a "name" and return Hello name.

The following things should be done after deploying the service to verify it's existance.

Go to your browser and check whether your web service is deployed or not. Use http://localhost:8080/ProjectName/services/listServices to check it. If it doesn't show the web service list then you have to deploy your service again properly.

Here is the page you have to have.



Now click on the service name of what you deployed. It will show you the wsdl of the web service. Now copy the URL of the wsdl.

Then go to eclipse  and then select File->new->Other->Web Service Client and click Next.

You can see a window like follows,


Copy the wsdl URL to Service Definition textbox.
Set the slider to Start Client.
Then click Server link and see whether the server is selected and set Web service runtime to axis2.



Click OK
Then goto Client project: Axis2 link and set the Web service client name as your preference or leave it as it is.


Click OK
And then click Next

Then the project will create and the following window appears.


Set the parameters with your values or you may use default.
Check the box Generate a JUnit test case to test the service and click Finish and the web service stub and the test case will create after that.

Here is the look of the project after doing that.


To test the web service you can use the test case which create automatically. To do this right click on the test class (here it is HelloServiceTest.java) Run As->JUnit Test
If all the test are successful then your client side is working correctly. Later we will see how to write a class to invoke the web service methods and get results.

PS: Some times you may get Axis faults. This exception throws because of  the wrong server host in stub. By correcting the stub(there are 2 places to correct) with the correct host name you can make it correct. (This host change thing mostly occurred because of the dynamic IP of the internet connections.)
Search Amazon.com for web services java

Sunday, May 9, 2010

PATH variable went wrong

Today I update /etc/bash.bashrc and set PATH variable wrong. This cause the terminal malfunction. Because the files need to function the commands are not exported. So I can't even open a file with terminal.
Shoot this trouble is simple(but I tried last 2 hours to shoot this :D)
What I have done is add /usr/bin to the PATH by executing export PATH=$PATH:/usr/bin
Then I could used the terminal as normal and correct the bash.bashrc file.