E.g. CitiBank Japan have different charge for remittance and transfer
/* SampleServer.java */
import java.rmi.*;
public interface SampleServer extends Remote
{
public int sum(int a,int b) throws RemoteException;
}
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
/* SampleServerImpl.java */
public class SampleServerImpl extends UnicastRemoteObject
implements SampleServer
{
SampleServerImpl() throws RemoteException
{
super();
}
public int sum(int a,int b) throws RemoteException
{
try {
Thread.sleep(5000);
} catch (InterruptedException e){
e.printStackTrace();
}
return a + b;
}
public static void main(String args[])
{
try
{
SampleServerImpl sampleServer = new SampleServerImpl();
Registry registry = LocateRegistry.createRegistry(8989);
registry.rebind("Sample", sampleServer);
System.out.println("Server waiting.....");
}
catch (RemoteException e)
{
e.printStackTrace();
}
}
}
I compile these classes compile and run using JDK1.5 with jmx enabled according jconsole article
$ javac SampleServer.java SampleServerImpl.java $ rmic SampleServerImpl $ java -Dcom.sun.management.jmxremote SampleServerImplI decide to use JRUBY to create and run a 20 thread(s), each issue a call RMI server
$jirb
> import java.rmi.Naming
> sample = Naming.lookup("//127.0.0.1:8989/Sample")
> (1..20).each { Thread.new { puts sample.sum(3,7)} }
>
Then I run jconsole supplied in JDK1.5 and watch thread pool of the RMI server
$jconsoleThe result is everything is OK, for each incoming call request, RMI server create a separate thread to handle it and the thread is dropped after it completion.
huy@huy-desktop:/u01/jruby-1.1.1/bin$ time jruby -e "puts 'hello world'" hello world real 0m2.934s user 0m2.604s sys 0m0.136s2. jruby lib in boot classpath
huy@huy-desktop:/u01/jruby-1.1.1/bin$ time jruby -e "puts 'hello world'" hello world real 0m1.124s user 0m0.896s sys 0m0.072s3. MRI
huy@huy-desktop:/u01/jruby-1.1.1/bin$ time ruby -e "puts 'hello world'" hello world real 0m0.060s user 0m0.004s sys 0m0.004s
git clone git://git.rubini.us/code cd code # goto directory containing local repository git config user.name "le huy" #configure your name git config user.email "lehuy20@gmail.com" #and email that will be used when committingSample .git/config - git create a .git directory to store it's data, file .git/config contains configuration data including remote repository, which remote branch is link with which local one
cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git://github.com/evanphx/rubinius.git
fetch = +refs/heads/*:refs/remotes/origin/*
[gui]
geometry = 885x450+5+65 399 192
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "cpp"]
remote = origin
merge = refs/heads/cpp
Submodule - git submodule is used to link to external repository (equivalent to subversion extern)
cat .gitmodules
[submodule "mspec"]
path = mspec
url = git://github.com/brixen/mspec.git
[submodule "spec/frozen"]
path = spec/frozen
url = git://github.com/brixen/rubyspec.git
init and update submodule from external repository
git submodule init # init submodule repository based on .gitmodules git submodule updateShow current branch - show which branch we are working on, switch between them
git branch # will show us local branches * cpp master git branch -a # will show us all branches including local and remote * cpp master origin/cmakebuild origin/cpp origin/fusion-experiment origin/instance_eval origin/master origin/wilson64 git checkout master # switch to branch named 'master' git checkout dev # switch to branch named 'dev'We can sometime create new branches in addition to 'master' to work concurrently on many features
git branch working # create branch 'working' git checkout working # switch to branch named 'working' git branch dev --track origin/dev # create local branch 'dev' that track the remote branch origin/devThe current working branch is now 'working'
git branch -d working # delete 'working' branchUpdate from remote repository - e.g. wait until someone commit the patch to the main trunk then update changes from git://git.rubini.us/code
git pullgit rebase will save local changes away, update from remote branch, and then reapply them
git rebase masterPush change to remote repository
git push # push will update a --track branch in remote repository,Edit source code - do some source code editing
gedit kernel/core/kernel.rbShow modification - show what I have modify without committing change
git diff HEAD # HEAD is symbol for latest/head version of current branchRevert back -when recognizing that there is something wrong, we can undo the modification, all changes are lost
git reset --hard HEADEdit source code - Do some source code editing again
gedit kernel/core/module.rbCommit changes - commit change in current branch
git commit -a -s # vi editor will be popped up for entering committing messageCreate patch - create patch containing changes between 2 branches local 'master' and remote 'origin/master'
git checkout master # switch to branch 'master' git format-patch origin/master --stdout # to standard output git format-patch origin/master -o ../patch # create formated patch as a file and store in directory ../patchCreate a ticket - goto in http://rubinius.lighthouseapp.com/m create a ticket and attach a patch file to it
git checkout master git reset --hard HEADResolve conflict - if there is a conflict on file, git stop doing and ask for manually resolve, to inform that the conflict has been resolved on e.g. kernel/core/module.rb, use
gedit kernel/core/module.rb # after manually resolve conflict git add kernel/core/module.rb # inform git that conflict on file kernel/core/module.rb is resolvedApply patch
git-apply ../patch/0001-Fixes-for-Class-include-and-Class-extend-to-handle-c.patchApply patch partly - if a patch contains modification of multi files and there are conflict with some of them during patching, then use --reject option to modify only non-conflicted files and create filename.rej for those conflicted
git-apply --reject ../patch/0001-Fixes-for-Class-include-and-Class-extend-to-handle-c.patchRemove file from stage Making change into git repository actually happens in two steps, 1) add the new/modified file into stage area 2) commit stage area. If for some reason, we want to revert the step 1) we can do as follow
$git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cachedGit getting popular now when many open source projects moved from subversion to git, Zack Rusin has done very nice git cheat sheet summarizing git usage scenarios below..." to unstage) # # new file: dict_parser/tests/dict_tests.py # $ git rm --cached dict_parser/tests/dict_tests.py rm 'dict_parser/tests/dict_tests.py' $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # dict_parser/