How do I get the list of Datasources available ?
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,*"
Recommended Articles
Programmatically Define Datasource Using DataSourceDefinition Annotation for Enterprise Java Applications
Learn how to define a Datasource programmatically using the DataSourceDefinition annotation in Enterprise Java applications. Connect to H2 Database and execute SQL Statements.
JBoss Datasource High Availability Configuration Made Easy
Learn how to configure high availability in JBoss/ WildFly datasources, including multi-data source and Oracle RAC, with step-by-step examples.
WildFly and EAP 6/7: Upgrading from Remote JNDI Lookup of DataSources
WildFly and EAP 6/7 no longer support remote JNDI lookup. Use an EJB facade for data source access.
Datasource Configuration Cheatsheet for JBoss AS 7, JBoss EAP 6 and WildFly
Quick reference to valid Datasource configurations for JBoss AS 7, JBoss EAP 6 and WildFly. Includes examples for PostgreSQL, MySQL, Derby, Oracle, Microsoft SQLServer, IBM DB2.