JPA не может подключиться к SqlServer из пакета OSGi с помощью Bnd
Я занимаюсь разработкой с использованием Eclipse и рабочей области Bnd. У меня есть пакет приложений, а также пакет персистентности, который я настраиваю для доступа к базе данных SqlServer. Я работаю с SqlServer 2012.
Пакет приложения содержит файл resouce/OSGI-INF/configurator/configuration.json, который определяет параметры для подключения к базе данных. Эти параметры были бы ранее определены в файле persistence.xml. Файл persistence.xml находится в папке META-INF пакета постоянства.
Я могу запустить пакет приложений. При использовании базы данных Postgres таблицы генерируются, как и ожидалось, и отображаются в выходных данных. Когда файл configuration.json изменяется, чтобы иметь правильные параметры для подключения к SqlServer, таблицы не создаются.
configuration.json для postgres
{
// Comments are explicitly permitted in configuration files.
// To comply with strict JSON this file should be minified
// Global Configuration file identity
":configurator:resource-version" : 1,
":configurator:symbolic-name" : "com.auth.persistence.config",
":configurator:version" : "1.0.0",
"org.apache.aries.tx.control.jpa.xa~authPersist": {
"name": "authentication.persistence.microservice",
"osgi.jdbc.driver.class": "org.postgresql.Driver",
"url": "jdbc:postgresql://127.0.0.1:5432/db",
"osgi.unit.name": "persistence-pu",
"user": "postgres",
"password": "postgres"
},
// Target the Dao with the provider configuration above
"com.auth.AuthenticationDao": {
"authPersist.target": "(name=authentication.persistence.microservice)"
}
}
configuration.json для SqlServer (для простоты я создал пользователя postgres / postgres на SqlServer вместе с тем же именем базы данных)
{
// Comments are explicitly permitted in configuration files.
// To comply with strict JSON this file should be minified
// Global Configuration file identity
":configurator:resource-version" : 1,
":configurator:symbolic-name" : "com.auth.persistence.config",
":configurator:version" : "1.0.0",
"org.apache.aries.tx.control.jpa.xa~authPersist": {
"name": "authentication.persistence.microservice",
"osgi.jdbc.driver.class": "com.microsoft.sqlserver.jdbc.SqlServerDriver",
"url": "jdbc:sqlserver://127.0.0.1:1433/db",
"osgi.unit.name": "persistence-pu",
"user": "postgres",
"password": "postgres"
},
// Target the Dao with the provider configuration above
"com.auth.persistence.AuthenticationDao": {
"authPersist.target": "(name=authentication.persistence.microservice)"
}
}
persistence.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.1"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="persistence-pu">
<!--description>AuthenticationPersistenceManager Persistence Unit</description-->
<properties>
<!--
Add any static properties for the persistence unit in here, but avoid
setting any runtime specific information, such as Database drivers or URLs
-->
<property name="javax.persistence.schema-generation.create-database-schemas" value="true"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.scripts.create-target" value="./create.sql" />
<property name="javax.persistence.schema-generation.scripts.drop-target" value="./drop.sql" />
<!-- populate the tables -->
<property name="javax.persistence.sql-load-script-source" value="META-INF/default-data.sql"/>
<property name="eclipselink.logging.logger" value="ServerLogger" />
<property name="eclipselink.logging.logger" value="DefaultLogger" />
<property name="eclipselink.logging.level.sql" value="FINE" />
</properties>
</persistence-unit>
</persistence>
Драйвер sqlserver, который я определил для использования,
com.microsoft.sqlserver:mssql-jdbc:jar:7.1.3.jre8-preview
Когда пакет начинается с postgres cfg, он показывает com.zaxxer.hikari.pool.HikariPool с установленными соединениями. Также показано удаление и создание таблиц и схем.
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--SELECT 1
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--Connection(979129822)--DROP TABLE auth.account_phone_map CASCADE
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--SELECT 1
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--Connection(1777688999)--DROP TABLE auth.system_user_phone_map CASCADE
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--SELECT 1
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--Connection(464276565)--DROP TABLE auth.system_user_role_type_map CASCADE
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--SELECT 1
[EL Fine]: sql: 2018-12-08 09:32:05.138--ServerSession(1541284904)--Connection(210591570)--DROP SCHEMA auth
[EL Fine]: sql: 2018-12-08 09:32:05.153--ServerSession(1541284904)--Connection(1999155124)--CREATE SCHEMA auth
[EL Fine]: sql: 2018-12-08 09:32:05.153--ServerSession(1541284904)--Connection(297339340)--CREATE TABLE auth.authentication (AUTHENTICATIONID SERIAL NOT NULL, ACTIVE BOOLEAN DEFAULT TRUE, created_time BYTEA, last_access_time BYTEA, TOKEN VARCHAR(100), user_id BIGINT, system_user_id BIGINT, PRIMARY KEY (AUTHENTICATIONID))
09:32:05.192 [HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.apache.aries.tx.control.jdbc.xa.connection.impl.XAConnectionWrapper@582d0e9f
09:32:05.268 [HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.apache.aries.tx.control.jdbc.xa.connection.impl.XAConnectionWrapper@3c28ae83
09:32:05.321 [HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.apache.aries.tx.control.jdbc.xa.connection.impl.XAConnectionWrapper@cc1166f
[EL Fine]: sql: 2018-12-08 09:32:05.368--ServerSession(1541284904)--Connection(2067407812)--CREATE TABLE auth.security_question (security_question_id SERIAL NOT NULL, question VARCHAR(255) NOT NULL, PRIMARY KEY (security_question_id))
09:32:05.399 [HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.apache.aries.tx.control.jdbc.xa.connection.impl.XAConnectionWrapper@188f6e1e
[EL Fine]: sql: 2018-12-08 09:32:05.462--ServerSession(1541284904)--Connection(1365562508)--CREATE TABLE auth.role_type (role_type_id SERIAL NOT NULL, is_admin BOOLEAN DEFAULT FALSE, role_type VARCHAR(20), PRIMARY KEY (role_type_id))
09:32:05.477 [HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.apache.aries.tx.control.jdbc.xa.connection.impl.XAConnectionWrapper@5051c763
09:32:05.477 [HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - After adding stats (total=10, active=2, idle=8, waiting=0)
[EL Fine]: sql: 2018-12-08 09:32:05.555--ServerSession(1541284904)--Connection(1669563419)--CREATE TABLE auth.mobile_provider (mobile_provider_id SERIAL NOT NULL, CARRIER VARCHAR(100), GATEWAY VARCHAR(100), major_carrier BOOLEAN DEFAULT FALSE, PRIMARY KEY (mobile_provider_id))
[EL Fine]: sql: 2018-12-08 09:32:05.68--ServerSession(1541284904)--Connection(984417998)--CREATE TABLE auth.phone (phone_id SERIAL NOT NULL, extension VARCHAR(7), is_mobile BOOLEAN, phone_number VARCHAR(20), mobile_provider_id BIGINT, phone_type_id BIGINT, PRIMARY KEY (phone_id))
[EL Fine]: sql: 2018-12-08 09:32:05.79--ServerSession(1541284904)--Connection(279127644)--CREATE TABLE auth.account (account_id SERIAL NOT NULL, active BOOLEAN DEFAULT TRUE, disabled BOOLEAN DEFAULT FALSE, EMAIL VARCHAR(100), KEY VARCHAR(25) NOT NULL UNIQUE, NAME VARCHAR(100) NOT NULL UNIQUE, URL VARCHAR(100), account_type_id BIGINT NOT NULL, address_id BIGINT, PRIMARY KEY (account_id))
[EL Fine]: sql: 2018-12-08 09:32:06.165--ServerSession(1541284904)--Connection(1729384560)--CREATE TABLE auth.address (address_id SERIAL NOT NULL, address_line_1 VARCHAR(100), address_line_2 VARCHAR(100), CITY VARCHAR(50), STATE VARCHAR(25), ZIPCODE VARCHAR(10), PRIMARY KEY (address_id))
[EL Fine]: sql: 2018-12-08 09:32:06.305--ServerSession(1541284904)--Connection(407413717)--CREATE TABLE auth.phone_type (phone_type_id SERIAL NOT NULL, is_mobile BOOLEAN DEFAULT FALSE, phone_type VARCHAR(10), PRIMARY KEY (phone_type_id))
[EL Fine]: sql: 2018-12-08 09:32:06.43--ServerSession(1541284904)--Connection(1249992036)--CREATE TABLE auth.account_type (account_type_id SERIAL NOT NULL, account_type VARCHAR(100) UNIQUE, is_master BOOLEAN DEFAULT FALSE, PRIMARY KEY (account_type_id))
[EL Fine]: sql: 2018-12-08 09:32:06.696--ServerSession(1541284904)--Connection(1125716910)--CREATE TABLE auth.security_answer (security_answer_id SERIAL NOT NULL, ANSWER VARCHAR(100) NOT NULL, QUESTION VARCHAR(255), user_defined_question BOOLEAN DEFAULT FALSE, security_question_id BIGINT, system_user_id BIGINT, PRIMARY KEY (security_answer_id))
У меня есть существующая база данных, использующая SqlServer, и хранимые процедуры в SqlServer, к которым я хотел бы получить доступ с помощью пакетов OSGi. Если вы знакомы с доступом к SqlServer с помощью рабочего пространства Bnd, мне нужна ваша помощь в решении этой проблемы.
Спасибо.