What protection measures to take really depends on your comfort level.
If you think "well, I better do something", then obfuscators are fine,
defending casual users.
If you think "God, I really need to protect my code", then try native
compilation.
I wrote my salamander decompiler in java languages, before release, I
tried obfuscation, but didn't meet my goals, so I converted java source
code to C++ (for this I developed our java to C++ Octopus translator),
and recompiled it to native executables. Today, I still develop in Java
for the decompiler, but generate native code for release.
This is made possible for C#/VB.NET/MC++, with our native compiler:
http://www.remotesoft.com/linker
Huihong