Сбой встроенного арендатора для контейнера HDI в базе данных HANA - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь создать таблицу службы HANA, предоставляемой SCP, с учетной записью trail. Следующие коды используют класс com.sap.cloud.sdk.frameworks.liquibase.SchemaPerTenantProvisioner, чтобы подключить арендатора с помощью файла конфигурации Liquibase.

SchemaPerTenantProvisioner schemaProvisioner = new SchemaPerTenantProvisioner(connection, "PATH_TO_CONFIG");
schemaProvisioner.subscribeTenant("TenantID");

Затем возникает исключение и некоторые полезные Сообщения. Подробности ниже.

Exception class: com.sap.db.jdbc.exceptions.JDBCDriverException
Exception Message: SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "IF": line 1 col 15 (at pos 15)

Стек вызовов следующим образом.

com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "IF": line 1 col 15 (at pos 15)
    at com.sap.db.jdbc.exceptions.SQLExceptionSapDB._newInstance(SQLExceptionSapDB.java:195)
    at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.newInstance(SQLExceptionSapDB.java:45)
    at com.sap.db.jdbc.packet.HReplyPacket._buildExceptionChain(HReplyPacket.java:841)
    at com.sap.db.jdbc.packet.HReplyPacket.getSQLExceptionChain(HReplyPacket.java:158)
    at com.sap.db.jdbc.packet.HPartInfo.getSQLExceptionChain(HPartInfo.java:39)
    at com.sap.db.jdbc.ConnectionSapDB._receive(ConnectionSapDB.java:4214)
    at com.sap.db.jdbc.ConnectionSapDB.exchange(ConnectionSapDB.java:1660)
    at com.sap.db.jdbc.PreparedStatementSapDB._prepare(PreparedStatementSapDB.java:2733)
    at com.sap.db.jdbc.PreparedStatementSapDB._doParse(PreparedStatementSapDB.java:2615)
    at com.sap.db.jdbc.PreparedStatementSapDB.<init>(PreparedStatementSapDB.java:156)
    at com.sap.db.jdbc.HanaPreparedStatement.<init>(HanaPreparedStatement.java:42)
    at com.sap.db.jdbc.HanaPreparedStatementFinalize.<init>(HanaPreparedStatementFinalize.java:39)
    at com.sap.db.jdbc.HanaPreparedStatementFinalize.newInstance(HanaPreparedStatementFinalize.java:23)
    at com.sap.db.jdbc.ConnectionSapDB._prepareStatement(ConnectionSapDB.java:2390)
    at com.sap.db.jdbc.ConnectionSapDB.prepareStatement(ConnectionSapDB.java:289)
    at com.sap.cloud.sdk.frameworks.liquibase.SchemaPerTenantProvisioner.subscribeTenant(SchemaPerTenantProvisioner.java:113)
    at com.sap.cloud.s4hana.examples.addressmgr.TenantProvisioningServlet.doPut(TenantProvisioningServlet.java:42)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:663)
    at com.sap.cloud.s4hana.examples.addressmgr.util.HttpServlet.service(HttpServlet.java:15)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextServletFilter.lambda$doFilter$0(RequestContextServletFilter.java:171)
    at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextCallable.call(RequestContextCallable.java:95)
    at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextServletFilter.doFilter(RequestContextServletFilter.java:173)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpCachingHeaderFilter.doFilter(HttpCachingHeaderFilter.java:57)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter.doFilter(HttpSecurityHeadersFilter.java:42)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    at com.sap.xs.security.container.XSSecurityAuthenticator.invoke(XSSecurityAuthenticator.java:134)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at com.sap.xs.java.valves.ErrorReportValve.invoke(ErrorReportValve.java:66)
    at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at com.sap.xs.jdbc.datasource.valve.JDBCValve.invoke(JDBCValve.java:62)
    at com.sap.xs.security.UserInfoValve.invoke(UserInfoValve.java:19)
    at com.sap.xs.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:43)
    at com.sap.xs.logging.catalina.RuntimeInfoValve.invoke(RuntimeInfoValve.java:40)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:836)

Дополнительное полезное сообщение:

WARNING 3/13/20 5:18 AM: liquibase: Unknown database: HDB

Просмотр исходных кодов com.sap.cloud .sdk.frameworks.liquibase.SchemaPerTenantProvisioner, внутри которого есть несколько кодов, на которые указывает сообщение об исключении.

final PreparedStatement statement =
                connection.prepareStatement("CREATE SCHEMA IF NOT EXISTS \"" + schemaName + "\"")

Кажется, этот оператор не может быть распознан. Вот больше информации из информации о Hibernate.

HHH000401: using driver [null] at URL [jdbc:sap://zeus.hana.prod.eu-central-1.whitney.xxxx.ondemand.com:23803/null?user=...
HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
HHH000412: Hibernate Core {4.3.0.Final}
HHH000206: hibernate.properties not found
HHH000021: Bytecode provider name : javassist
HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
HHH000402: Using Hibernate built-in connection pool (not for production use!)
HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
HHH000397: Using ASTQueryTranslatorFactory
HHH000400: Using dialect: org.hibernate.dialect.HANAColumnStoreDialect

Кстати, я ищу весь проект, javax.persistence.spi.PersistenceProvider вообще не используется. Мне интересно, почему появляется первое предупреждение.

Вот мой pom. xml, относящийся к Cloud SDK и Persistency.

<!-- S/4 Cloud SDK -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.sap.cloud.s4hana</groupId>
                <artifactId>sdk-bom</artifactId>
                <version>2.28.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


        <dependency>
            <groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
            <artifactId>scp-cf</artifactId>
            </dependency>
        <dependency>
            <groupId>com.sap.cloud.s4hana</groupId>
            <artifactId>s4hana-all</artifactId>
        </dependency>

<!-- Persistency -->
        <dependency>
            <groupId>com.sap.cloud.s4hana.frameworks</groupId>
            <artifactId>liquibase</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-cloudfoundry-connector</artifactId>
            <version>1.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.sap.hana.cloud</groupId>
            <artifactId>spring-cloud-cloudfoundry-hana-service-connector</artifactId>
            <version>1.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.sap.cloud.db.jdbc</groupId>
            <artifactId>ngdbc</artifactId>
            <version>2.4.70</version>
            <scope>test</scope>
        </dependency>

Есть идеи о том, что отсутствует / неверно?

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Кажется, это не моя ошибка кода или отсутствие каких-либо зависимостей.

Я пытался использовать WebIDE в SCP для просмотра моего контейнера HANA HDI, в котором я пытаюсь написать SQL

create schema if not exist "abc"

Синтаксис неверен и при выполнении той же ошибки сообщение подсказывает.

Error: (dberror) [257]: sql syntax error: incorrect syntax near "if": line 1 col 14 (at pos 15)

Кроме того, я пытаюсь создать схему со следующими кодами.

create schema "abc"

Жалуется на следующую ошибку из-за отсутствия привилегий.

Error: (dberror) [258]: insufficient privilege

Так что я обращаюсь к здесь для получения дополнительной информации о контейнере HDI. Похоже, что с HDI разработчик может получить доступ к артефактам БД только в рамках вашей «локальной схемы», созданной HDI при привязке приложения. У вас явно нет привилегий для создания схемы.

Наконец, я думаю, что сам вопрос является псевдопредложением. Я беру примеры для создания схемы для PostgreSQL и надеюсь, что она будет работать на контейнере HANA HDI, независимо от того, как работает HDI.

0 голосов
/ 16 марта 2020

Не могли бы вы также добавить версию SAP Cloud SDK, которую вы используете? Также, если вы используете версию 2, рассмотрите возможность перехода на версию 3, так как версия 2 в настоящее время находится в режиме обслуживания.

Не могли бы вы также включить трассировку стека в вопрос? Это поможет нам лучше проанализировать проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...