I prefer WLST (maybe called from within an ANT script) - simple reason is that its a higher level tool.
Of course if you need to do something special then JMX would be the way to go. Never needed to do so myself...
It depends on what you are creating. For e.g., if you are creating a web app in JSP/Servlets (say for monitoring a domain), JMX is the obvious choice. Just include the wlfullclient.jar in the classpath and you are good to go.
On the other hand, if all you need is to quickly automate administration stuff like deploying apps, monitoring server health, generating alerts, stop/start servers etc then you should use WLST as it is quick and simple.
Performance wise there is hardly any difference in overhead. It would rarely be a factor in deciding between the two.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com