Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split SQL Server Platform into SqlServer16 and SqlServer17 #9

Open
wenbin151 opened this issue May 3, 2018 · 2 comments
Open

Split SQL Server Platform into SqlServer16 and SqlServer17 #9

wenbin151 opened this issue May 3, 2018 · 2 comments

Comments

@wenbin151
Copy link

When Ebean starts with SqlServer detected ... and no explicit platform choice is made Ebean will fail to start asking you to chose the preferred platform (2017 or 2018).

https://github.com/ebean-orm/ebean/issues/1340
For SqlServer please choose the more specific sqlserver16 or sqlserver17 platform via ServerConfig.setDatabasePlatformName. Refer to issue #1340 for details
` javax.persistence.PersistenceException: java.lang.IllegalArgumentException: For SqlServer please choose the more specific sqlserver16 or sqlserver17 platform via ServerConfig.setDatabasePlatformName. Refer to issue #1340 for details

at io.ebeaninternal.server.core.DatabasePlatformFactory.create(DatabasePlatformFactory.java:62)
at io.ebeaninternal.server.core.DefaultContainer.setDatabasePlatform(DefaultContainer.java:266)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:126)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:45)
at io.ebean.EbeanServerFactory.createInternal(EbeanServerFactory.java:109)
at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:70)
at io.ebean.config.ServerConfigSqlServerTest.need_explicitPlatform(ServerConfigSqlServerTest.java:35)`
@wenbin151
Copy link
Author

wenbin151 commented May 15, 2018

修复方式:

act.db.sql.DataSourceConfig

增加 public String databasePlatformName; 属性

在DataSourceConfig构造函数中增加此属性的判断加载,

if (url.contains("sqlserver")) {
     	if(get(conf, "databasePlatformName")!=null) {
       		databasePlatformName=get(conf, "databasePlatformName");
       	}	
}

act.db.ebean.ServerConfig

然后在ebean中设置ServerConfig时,判断是 sqlserver 驱动就把这个ServerConfig.setDatabasePlatformName 了。

不然启动会报如下错误:

2018-05-03_01:34:58.555 [jobs-thread-3] ERROR act.app.App - Block issue encountered
org.osgl.exception.ConfigurationException: Error init SQL db service
	at org.osgl.util.E.invalidConfiguration(E.java:291)
	at act.db.sql.SqlDbService$1.run(SqlDbService.java:116)
	at act.db.sql.SqlDbService$1.on(SqlDbService.java:77)
	at act.event.EventBus.callOn(EventBus.java:1313)
	at act.event.EventBus.access$1400(EventBus.java:53)
	at act.event.EventBus$4.run(EventBus.java:1342)
	at act.job.JobManager$ContextualJob$1.apply(JobManager.java:461)
	at act.job.Job.doJob(Job.java:345)
	at act.job.Job.run(Job.java:282)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: javax.persistence.PersistenceException: java.lang.IllegalArgumentException: For SqlServer please explicitly choose either sqlserver16 or sqlserver17 as the platform via ServerConfig.setDatabasePlatformName. Refer to issue #1340 for more details
	at io.ebeaninternal.server.core.DatabasePlatformFactory.create(DatabasePlatformFactory.java:66)
	at io.ebeaninternal.server.core.DefaultContainer.setDatabasePlatform(DefaultContainer.java:266)
	at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:126)
	at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:45)
	at io.ebean.EbeanServerFactory.createInternal(EbeanServerFactory.java:109)
	at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:70)
	at act.db.ebean.EbeanService.dataSourceProvided(EbeanService.java:91)
	at act.db.sql.SqlDbService.initDataSource(SqlDbService.java:210)
	at act.db.sql.SqlDbService.access$000(SqlDbService.java:51)
	at act.db.sql.SqlDbService$1.run(SqlDbService.java:90)
	... 14 common frames omitted
Caused by: java.lang.IllegalArgumentException: For SqlServer please explicitly choose either sqlserver16 or sqlserver17 as the platform via ServerConfig.setDatabasePlatformName. Refer to issue #1340 for more details
	at io.ebeaninternal.server.core.DatabasePlatformFactory.byDatabaseMeta(DatabasePlatformFactory.java:150)
	at io.ebeaninternal.server.core.DatabasePlatformFactory.byDataSource(DatabasePlatformFactory.java:123)
	at io.ebeaninternal.server.core.DatabasePlatformFactory.create(DatabasePlatformFactory.java:63)
	... 23 common frames omitted

@greenlaw110
Copy link
Contributor

@wenbin151 你发个 PR 我来 merge

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants