Java native code necessities:
- h/w access and control.
- use of commercial s/w and system services[h/w related].
- use of legacy s/w that hasn't or cannot be ported to Java.
- Using native code to perform time-critical tasks.
hope these points answers your question :)