Erudika / para-dao-sql

A generic SQL DAO plugin for Para (H2, MySQL, MariaDB, ProstgreSQL, MS SQL Server, Oracle, SQLite)
https://paraio.org
Apache License 2.0
5 stars 2 forks source link

setup does not create new app #1

Closed jegarne closed 5 years ago

jegarne commented 5 years ago

I'm trying to connect to an MS SQL server database. When calling _setup it returns the accessKey / secretKey but it looks like the app is never created - logging is showing this error:

2019-02-15 13:27:15,270 [INFO ] com.erudika.para.ParaServer - Started ParaServer in 3.479 seconds (JVM running for 5.133) 2019-02-15 13:27:23,476 [INFO ] com.erudika.para.Para - --- Para.destroy() --- 2019-02-15 13:27:25,941 [INFO ] com.erudika.para.Para - --- Para.initialize() [embedded] --- 2019-02-15 13:27:25,952 [INFO ] c.erudika.para.core.utils.CoreUtils - Loaded new DAO, Search and Cache implementations - SqlDAO, LuceneSearch and CaffeineCache. 2019-02-15 13:27:25,980 [ERROR] c.erudika.para.persistence.SqlUtils - Failed to read rows for appid 'para' in the SQL database 2019-02-15 13:27:25,981 [WARN ] com.erudika.para.utils.HealthUtils - Server is unhealthy - root app not found. Open /v1/_setup in the browser to initialize Para. 2019-02-15 13:27:26,001 [ERROR] c.erudika.para.persistence.SqlUtils - Failed to read rows for appid 'para' in the SQL database 2019-02-15 13:27:26,002 [INFO ] com.erudika.para.Para - Instance #1 initialized. 2019-02-15 13:27:26,378 [INFO ] com.erudika.para.ParaServer - Starting ParaServer on with PID 2788 (C:\Para\para-jar-1.31.1.jar started by in C:\Para) 2019-02-15 13:27:26,380 [INFO ] com.erudika.para.ParaServer - The following profiles are active: embedded 2019-02-15 13:27:26,846 [INFO ] com.erudika.para.ParaServer - Listening on port 8080... 2019-02-15 13:27:29,465 [INFO ] com.erudika.para.ParaServer - Started ParaServer in 3.46 seconds (JVM running for 5.0) 2019-02-15 13:27:44,288 [ERROR] c.erudika.para.persistence.SqlUtils - Failed to read rows for appid 'para' in the SQL database 2019-02-15 13:27:44,290 [ERROR] c.erudika.para.persistence.SqlUtils - Failed to read rows for appid 'para' in the SQL database 2019-02-15 13:27:44,445 [ERROR] c.erudika.para.persistence.SqlUtils - Failed to create rows for appid 'para' in the SQL database java.lang.IllegalArgumentException: name at sun.misc.URLClassPath$Loader.getResource(Unknown Source) at sun.misc.URLClassPath.getResource(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at com.erudika.para.persistence.SqlUtils.getConnection(SqlUtils.java:86) at com.erudika.para.persistence.SqlUtils.createRows(SqlUtils.java:307) at com.erudika.para.persistence.SqlDAO.create(SqlDAO.java:73) at com.erudika.para.persistence.SqlDAO$$EnhancerByGuice$$cac464f8.CGLIB$create$7() at com.erudika.para.persistence.SqlDAO$$EnhancerByGuice$$cac464f8$$FastClassByGuice$$49ebfb18.invoke() at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:76) at com.erudika.para.aop.IndexAndCacheAspect.invokeDAO(IndexAndCacheAspect.java:152) at com.erudika.para.aop.IndexAndCacheAspect.addToIndexOperation(IndexAndCacheAspect.java:217) at com.erudika.para.aop.IndexAndCacheAspect.handleIndexing(IndexAndCacheAspect.java:162) at com.erudika.para.aop.IndexAndCacheAspect.invoke(IndexAndCacheAspect.java:129) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:78) at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:54) at com.erudika.para.persistence.SqlDAO$$EnhancerByGuice$$cac464f8.create() at com.erudika.para.core.App.create(App.java:995) at com.erudika.para.Para.newApp(Para.java:368) at com.erudika.para.Para.setup(Para.java:345) at com.erudika.para.rest.Api1$24.apply(Api1.java:740) at com.erudika.para.rest.Api1$24.apply(Api1.java:726) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:200) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104) at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268) at org.glassfish.jersey.internal.Errors.process(Errors.java:316) at org.glassfish.jersey.internal.Errors.process(Errors.java:298) at org.glassfish.jersey.internal.Errors.process(Errors.java:268) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703) at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:867) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at com.erudika.para.utils.filters.CORSFilter.handleNonCORS(CORSFilter.java:415) at com.erudika.para.utils.filters.CORSFilter.doFilter(CORSFilter.java:164) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at com.erudika.para.utils.filters.ErrorFilter.doFilter(ErrorFilter.java:59) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.Server.handle(Server.java:502) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) at java.lang.Thread.run(Unknown Source) 2019-02-15 13:27:45,408 [INFO ] com.erudika.para.Para - Created root app 'para', sharingTable = false, sharingIndex = false. 2019-02-15 13:27:56,001 [ERROR] c.erudika.para.persistence.SqlUtils - Failed to read rows for appid 'para' in the SQL database

albogdano commented 5 years ago

@jegarne Are you including the proper driver JAR inside ./lib along with the plugin JAR? Also do you set para.sql.driver in your configuration file?

jegarne commented 5 years ago

Yes. I've tried playing around with several different settings. I tried the driver in the root of the .\lib and also in .\lib\sqlserver\ as it looks like the code was looking for that string in the driver path to determine what flavor of SQL was running. Either way the logging is showing that its able to find that driver file correctly (when it can't find it, it complains in the logging) Driver version is 7.2.1. I've also confirmed that my SQL credentials are valid by connecting through a .udl file.

Just a theory, but I'm wondering if the Hikari config needs an additional setting? I'm see something like this in a few posts:

ds.setDataSourceClassName("com.microsoft.sqlserver.jdbc.SQLServerDataSource");

Admittedly I have little experience with Hikari.

Here are the relevant config settings:

# ms sql
para.dao = "SqlDAO"
para.sql.driver = "C:\\Para\\lib\\sqlserver\\mssql-jdbc-7.2.1.jre8.jar"
para.sql.url = "sqlserver://computername:1433;databaseName=Scoold;"
para.sql.user = "scooldAdmin"
para.sql.password = "password"
albogdano commented 5 years ago

@jegarne I'll start working on this issue now and I'll let you know how it goes. I'll be testing against SQL Server on Linux.

albogdano commented 5 years ago

I couldn't reproduce the issue. An example of a correct configuration would look like this:

para.dao = "SqlDAO"
para.sql.driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
para.sql.url = "sqlserver://localhost:1433"
para.sql.user = "SA"
para.sql.password = "password"

I'm running SQL Server by using the official docker image. Para connects without errors. The driver and plugin JAR files should be placed inside the ./lib folder. I'm not sure what this class does: com.microsoft.sqlserver.jdbc.SQLServerDataSource.