I think you might just need to use async -
http://docs.ansible.com/ansible/playbooks_async.html to get this working.
However, depending on what you are trying to achieve, it might be worth re-organising things so that ansible starts the cluster nodes individually. This would let you do useful things like do rolling restarts of your cluster members (this is very easy to do using the 'serial' directive - see
http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size).
Also might be worth considering wrapping the scripts that you use to start your nodes as services. That way, once a host is booted, it could bring the service (jboss) up straight away.
We use tomcat, which we have wrapped as a service and use ansible to do rolling upgrades of our tomcat apps without downtime. Originally we used to just wait between nodes but once we had figured out how to poll our apps to check that they had completed deploying and were serving requests by polling them using the uri module we are now able to do relatively smooth rolling updates. Here's the url task we use to poll.
- name: check every 3 seconds for 40 attempts if tomcat is up and ready to serve the healthcheck json
uri:
url: 'http://{{ inventory_hostname }}/application/healthcheck.json'
return_content: yes
timeout: 2
delegate_to: localhost
register: tomcat_result
until: tomcat_result['status']|default(0) == 200
retries: 40
delay: 3
Hope this helps,
Jon