A DataSource is the preferred means of getting a connection from a Database. Let’s learn how to fetch the list of Datasources which are configured in the application server using the CLI and programmatically.
WildFly / JBoss EAP 6/7
The simplest way to retrieve the list of Datasources at runtime is using the CLI:
./jboss-cli.sh --connect --command="/subsystem=datasources:read-resource" | grep "data-source"
On the other hand, if you are running in Domain mode, include the profile name in the CLI command. For example:
./jboss-cli.sh --connect --command=" /profile=full-ha/subsystem=datasources:read-resource" | grep "data-source"
To fetch the list of Datasources programmatically, you can also use the JMX API. Example:
import javax.management.*;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HelloWorld {
public static void main(String[] args) throws Exception {
status();
}
public static void status() throws Exception{
String host = "localhost";
int port = 9990; // management-http port
String urlString = "service:jmx:remote+http://" + host + ":" + port;
System.out.println("\n\n\t**** urlString: "+urlString);;
JMXServiceURL serviceURL = new JMXServiceURL(urlString);
Map map = new HashMap();
String[] credentials = new String[] { "admin", "admin" };
map.put("jmx.remote.credentials", credentials);
JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, map);
MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
Set instances = connection.queryMBeans(null, null);
Iterator iterator = instances.iterator();
while (iterator.hasNext()) {
ObjectInstance instance = iterator.next();
if (instance.getObjectName().toString().startsWith("jboss.as:subsystem=datasources,data-source=") &&
(!instance.getObjectName().toString().contains(",statistics")))
System.out.println("Object Name:" + instance.getObjectName());
}
jmxConnector.close();
}
}
Please note that you need to include in your application’s classpath the jboss-client JAR files in order to be able to use the remote+http protocol:
<dependency> <groupId>org.wildfly</groupId> <artifactId>wildfly-client-all</artifactId> <version>20.0.0.Final</version> </dependency>
JBOSS AS 4/5 Users
You can use the twiddle command line for this purpose:
$ twiddle.sh query "jboss.jca:service=DataSourceBinding,*"