Я использую стороннее приложение, размещенное на tomcat, которое разрешает только соединения jdbc для запросов к базе данных.В мастере настройки нового источника данных я вставил следующие данные
URL: jdbc:calcite:model=/someLocation/jdbcConnectionModel.json
Driver: org.apache.calcite.jdbc.Driver
/ someLocation / jdbcConnectionModel.json content:
inline:
{
version: '1.0',
schemas: [
{
type: 'custom',
name: 'TEST',
factory: 'org.apache.calcite.adapter.geode.rel.GeodeSchemaFactory',
operand: {
locatorHost: 'serverUrl',
locatorPort: '10150',
regions: 'testRegion',
pdxSerializablePackagePath: 'org.apache.calcite.adapter.geode.domain.*'
}
}
]
}
Я скопировал следующие jar-файлы в папку lib tomcat, к которой приложение может получить доступ:
calcite-geode-1.17.0.jar
calcite-core-1.17.0.jar
commons-compiler-jdk-3.0.9.jar
Но выдает ошибку:
Ошибка тестирования соединения, проверьте конфигурацию DataSourceи попробуйте еще раз: не удается загрузить класс драйвера JDBC 'org.apache.calcite.jdbc.Driver'
Есть ли что-то, чего мне не хватает?
Я пытался из кода Java, и этоработает:
public class RelationalJdbcExample {
final static String geodeModelJson =
"inline:"
+ "{\n"
+ " version: '1.0',\n"
+ " schemas: [\n"
+ " {\n"
+ " type: 'custom',\n"
+ " name: 'TEST',\n"
+ " factory: 'org.apache.calcite.adapter.geode.rel.GeodeSchemaFactory',\n"
+ " operand: {\n"
+ " locatorHost: 'serverUrl', \n"
+ " locatorPort: '10150', \n"
+ " regions: 'testRegion', \n"
+ " pdxSerializablePackagePath: 'org.apache.calcite.adapter.geode.domain.*' \n"
+ " }\n"
+ " }\n"
+ " ]\n"
+ "}";
public static Connection getGemfireConnection() throws ClassNotFoundException, SQLException{
Class.forName("org.apache.calcite.jdbc.Driver");
Properties info = new Properties();
info.put("model", geodeModelJson);
Connection connection = DriverManager.getConnection("jdbc:calcite:", info);
return connection;
}
public static void main(String[] args) {
Statement statement;
try {
Connection connection = getGemfireConnection();
CalciteConnection calciteConnection =
connection.unwrap(CalciteConnection.class);
statement = calciteConnection.createStatement();
String query= "SELECT \"a\".\"testAttr\" FROM \"TEST\".\"testRegion\" AS \"a\" ";
ResultSet resultSet = statement.executeQuery(query);
System.out.println("resultSet===="+resultSet);
while (resultSet.next()) {
ResultSetMetaData metaData = resultSet.getMetaData();
System.out.println(metaData.toString());
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
Приведенный выше код извлекает данные из кэша и возвращает их правильно.Пожалуйста, помогите.