【11.1】Tomcat環境でMicrosoft SQL Server2019を使用する場合

フォローする

概要

11.1環境ではKappletsを利用するためにkapplets.xmlの編集/作成が必要ですが、
SQLServer2019を利用する場合、後述の対処に記載のパラメータが不足しているとエラーが発生する事が報告されています。

エラーメッセージ

24-Jun-2022 11:40:58.948 重大 [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
  org.apache.catalina.LifecycleException: コンポーネント [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/kapplets]] の開始に失敗しました
      at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:727)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)
      at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:673)
      at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1881)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:750)
  Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'kappletSchedulesManagementServiceImpl' defined in file [C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\kapplets\WEB-INF\classes\com\kapowtech\kapplets\services\bl\schedules\impl\KappletSchedulesManagementServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 3; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'quartzSchedulerManagementServiceImpl' defined in file [C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\kapplets\WEB-INF\classes\com\kapowtech\kapplets\services\scheduler\impl\QuartzSchedulerManagementServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'quartzScheduler' defined in class path resource [org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.class]: Invocation of init method failed; nested exception is org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: 行 1: FOR UPDATE 句は DECLARE CURSOR だけに許可されます。 [See nested exception: com.microsoft.sqlserver.jdbc.SQLServerException: 行 1: FOR UPDATE 句は DECLARE CURSOR だけに許可されます。]
      at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
      at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218)
      :

対処方法

kapplets.xmlのurlプロパティ指定値に「SelectMethod=cursor」を追記する事で解消します。
<設定例>

<Resource name="jdbc/kapow/kapplets"
auth="Container"
type="javax.sql.DataSource"
initialSize="5"
maxTotal="100"
maxIdle="10"
maxWaitMillis="-1"
validationQuery="SELECT 1"
testOnBorrow="true"
testWhileIdle="true"
username="<DB_User>"
password="<DB_Password>"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://<DB_Hostname>:1433;DatabaseName=KAPLLETSDatabase;SelectMethod=cursor"/>

<Environment name="spring.datasource.jndi-name" value="jdbc/kapow/kapplets" type="java.lang.String" override="false"/>
<Environment name="spring.jpa.database-platform" value="org.hibernate.dialect.SQLServer2012Dialect" type="java.lang.String" override="false"/>
<Environment name="kapplets.services.mc.connection.url" value="<MC_URL>" type="java.lang.String" override="false"/>
<Environment name="kapplets.services.mc.connection.username" value="<MC_User>" type="java.lang.String" override="false"/>
<Environment name="kapplets.services.mc.connection.password" value="<MC_Password>" type="java.lang.String" override="false"/>
</Context>

参考

Tomcat環境でMicrosoft SQL Serverを使用した場合の設定について

区分 確認Ver
トラブルシュート 11.1.0.6