diff --git a/pom.xml b/pom.xml
index d511f05..a766b84 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,6 +50,12 @@
mysql-connector-java
8.0.20
+
+ com.microsoft.sqlserver
+ mssql-jdbc
+ 12.6.2.jre11
+
+
org.powermock
powermock-api-mockito
diff --git a/src/main/java/SQLDatabaseConnection.java b/src/main/java/SQLDatabaseConnection.java
new file mode 100644
index 0000000..8857c93
--- /dev/null
+++ b/src/main/java/SQLDatabaseConnection.java
@@ -0,0 +1,45 @@
+import java.sql.*;
+import java.util.Properties;
+
+public class SQLDatabaseConnection {
+
+ // Connect to your database.
+ // Replace server name, username, and password with your credentials
+ public static void main(String[] args) {
+ String connectionUrl =
+ args.length == 3 ? args[2] : "jdbc:sqlserver://localhost:1434;servername=localhost\\MSSQLSERVER01;database=master;integratedSecurity=true;encrypt=false;trustServerCertificate=false";
+
+ ResultSet resultSet = null;
+ try{
+ //System.loadLibrary(args[2]);
+ System.setProperty("java.library.path", args[0]);
+ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
+ Connection connection = DriverManager.getConnection(connectionUrl);
+ DatabaseMetaData metadata = connection.getMetaData();
+ Statement statement = connection.createStatement();
+
+ // Create and execute a SELECT SQL statement.
+ String selectSql = "SELECT TOP (1000) [lastrun]" +
+ " ,[cpu_busy]" +
+ " ,[io_busy]" +
+ " ,[idle]" +
+ " ,[pack_received]" +
+ " ,[pack_sent]" +
+ " ,[connections]" +
+ " ,[pack_errors]" +
+ " ,[total_read]" +
+ " ,[total_write]" +
+ " ,[total_errors]" +
+ " FROM [master].[dbo].[spt_monitor]";
+ resultSet = statement.executeQuery(selectSql);
+
+ // Print results from select statement
+ while (resultSet.next()) {
+ System.out.println(resultSet.getString(Integer.parseInt(args[1])));
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/appdynamics/extensions/sql/JDBCConnectionAdapter.java b/src/main/java/com/appdynamics/extensions/sql/JDBCConnectionAdapter.java
index 7171ee8..8b97696 100644
--- a/src/main/java/com/appdynamics/extensions/sql/JDBCConnectionAdapter.java
+++ b/src/main/java/com/appdynamics/extensions/sql/JDBCConnectionAdapter.java
@@ -12,9 +12,14 @@
import com.google.common.base.Strings;
import org.slf4j.Logger;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
import java.util.Map;
import java.util.Properties;
+import java.util.logging.Level;
public class JDBCConnectionAdapter {
@@ -23,6 +28,10 @@ public class JDBCConnectionAdapter {
private final String connUrl;
private final Map connectionProperties;
+ private String winLibPath;
+
+ private boolean enableWindowsAuthentication;
+
private JDBCConnectionAdapter(String connStr, Map connectionProperties) {
this.connUrl = connStr;
@@ -36,20 +45,26 @@ static JDBCConnectionAdapter create(String connUrl, Map connecti
Connection open(String driver) throws SQLException, ClassNotFoundException {
Connection connection;
+ java.util.logging.Logger log = java.util.logging.Logger.getLogger("com.microsoft.sqlserver.jdbc");
+ log.setLevel(Level.FINE);
Class.forName(driver);
-
- Properties properties = new Properties();
-
- if (connectionProperties != null) {
- for (String key : connectionProperties.keySet()) {
- if (!Strings.isNullOrEmpty(connectionProperties.get(key)))
- properties.put(key, connectionProperties.get(key));
+ logger.info("driver====>"+driver);
+ logger.info("Passed all checks for properties and attempting to connect to =====>"+ connUrl);
+ long timestamp1 = System.currentTimeMillis();
+ if(enableWindowsAuthentication){
+ System.setProperty("java.library.path", winLibPath);
+ logger.info("setting the libreary path :"+ winLibPath);
+ connection = DriverManager.getConnection(connUrl);
+ } else {
+ Properties properties = new Properties();
+ if (connectionProperties != null) {
+ for (String key : connectionProperties.keySet()) {
+ if (!Strings.isNullOrEmpty(connectionProperties.get(key)))
+ properties.put(key, connectionProperties.get(key));
+ }
}
+ connection = DriverManager.getConnection(connUrl, properties);
}
-
- logger.debug("Passed all checks for properties and attempting to connect to: "+ connUrl);
- long timestamp1 = System.currentTimeMillis();
- connection = DriverManager.getConnection(connUrl, properties);
long timestamp2 = System.currentTimeMillis();
logger.debug("Connection received in JDBC ConnectionAdapter in :"+ (timestamp2-timestamp1)+ " ms");
@@ -67,4 +82,12 @@ void closeStatement(Statement statement) throws SQLException {
void closeConnection(Connection connection) throws SQLException {
connection.close();
}
+
+ public void setWinLibPath(String winLibPath) {
+ this.winLibPath = winLibPath;
+ }
+
+ public void setEnableWindowsAuthentication(boolean enableWindowsAuthentication) {
+ this.enableWindowsAuthentication = enableWindowsAuthentication;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/appdynamics/extensions/sql/SQLMonitor.java b/src/main/java/com/appdynamics/extensions/sql/SQLMonitor.java
index d7c786a..d6d3e60 100644
--- a/src/main/java/com/appdynamics/extensions/sql/SQLMonitor.java
+++ b/src/main/java/com/appdynamics/extensions/sql/SQLMonitor.java
@@ -80,6 +80,13 @@ private SQLMonitorTask createTask(Map server, TasksExecutionServicePr
Map connectionProperties = getConnectionProperties(server);
JDBCConnectionAdapter jdbcAdapter = JDBCConnectionAdapter.create(connUrl, connectionProperties);
+ boolean windowsAuthentication = (System.getProperty("os.name").toLowerCase().contains("win") && connUrl.contains("integratedSecurity"));
+ logger.info("setting the connUrl==============================>"+ connUrl);
+ if(windowsAuthentication) {
+ jdbcAdapter.setEnableWindowsAuthentication(windowsAuthentication);
+ jdbcAdapter.setWinLibPath(getWinLibPath(server));
+ }
+
logger.debug("Task Created for "+server.get("displayName"));
@@ -108,6 +115,11 @@ private String createConnectionUrl(Map server) {
return url;
}
+ private String getWinLibPath(Map server) {
+ String url = Util.convertToString(server.get("driverDllFolderPath"), "");
+ return url;
+ }
+
private Map getConnectionProperties(Map server) {
Map connectionProperties = (Map) server.get("connectionProperties");
String password = connectionProperties.get("password");
diff --git a/src/main/java/com/appdynamics/extensions/sql/Util.java b/src/main/java/com/appdynamics/extensions/sql/Util.java
index eb923c7..84d4149 100644
--- a/src/main/java/com/appdynamics/extensions/sql/Util.java
+++ b/src/main/java/com/appdynamics/extensions/sql/Util.java
@@ -15,7 +15,7 @@ static String convertToString(final Object field,final String defaultStr){
if(field == null){
return defaultStr;
}
- return field.toString();
+ return field+"";
}