2015-07-21 4 views
0

Я понимаю, что это то, что будет считаться дублирующей темой, но я не выполнил рекомендуемые шаги в других темах этого же характера без успеха.Не найдено подходящего драйвера для jdbc: sqlserver

Я использую Ггц 3.6.4 с

  • Grails 2.3.0
  • jdk1.7.0_80
  • Groovy компилятор уровень 2,3
  • Microsoft SQL Server 2012

I имеют grails-приложение, которое аутентифицирует пользователей, регистрирующихся на сервере LDAP с Apache Shiro, и у меня есть следующий код (в Shiro сгенерированный AuthController.groovy), чтобы попытаться сохранить некоторую информацию из внешней базы данных в сеансе. (Примечание: В отношении имен пользователей, паролей и имен баз данных, я изменил их все здесь по причинам конфиденциальности)

def signIn = { 
    Subject subject = SecurityUtils.getSubject(); 
    String lowerCaseUserName=params.username.toLowerCase(); 
    def authToken = new UsernamePasswordToken(lowerCaseUserName, params.password) 

    // Support for "remember me" 
    if (params.rememberMe) { 
     authToken.rememberMe = true 
    } 

    try{ 
     subject.login(authToken) 

     if (subject.isAuthenticated()) 
     { 
      session.username = lowerCaseUserName 

      // Attempting to get employee id from MS SQL 
      Sql Database = Sql.newInstance(
       'jdbc:sqlserver://myserver;DatabaseName=mydatabase', 
       'user', 
       'password', 
       'com.microsoft.sqlserver.jdbc.SQLServerDriver' 
      ); 
      Database.eachRow('select empid from table_name where username=${session.username}') { row -> 
       session.empid = row.empid 
      } 
      Database.close(); 

      def targetUri = params.targetUri ?: "/home" 
      log.info "Redirecting to '${targetUri}'." 
      redirect(uri: targetUri) 
     } 
    } 
    ... 
} 

Однако, я получаю следующее сообщение об ошибке

SQLException occurred when processing request: [POST] /app/auth/signIn - parameters: 
username: user 
_rememberMe: 
targetUri: 
password: *** 
No suitable driver found for jdbc:sqlserver://myserver;DatabaseName=mydatabase. Stacktrace follows: 
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://myserver;DatabaseName=mydatabase 
at java.sql.DriverManager.getConnection(DriverManager.java:596) 
at java.sql.DriverManager.getConnection(DriverManager.java:215) 
at app.AuthController$_closure3.doCall(AuthController.groovy:45) 
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200) 
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) 
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) 
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) 
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) 
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) 
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

Я пытался следующий без успеха:

  • добавлен sqljdbc4.jar в/приложении/Lib/
  • добавлено вручную/приложении/Библиотека/пути к классам (через .classpath)
  • Добавлено sqljdbc4.jar путь к классам через Properties>Java Build Path>Add JARs

Я пробовал эти вариации с sqljdbc4.jar, sqljdbc.jar и sqlserverjdbc.jar и каждый комбо его.

Я в основном застрял. Ни одна из исправлений, которые я прочитал здесь, или где-либо еще, не разрешил мою ошибку. Любая помощь будет принята с благодарностью!

Edit 1: Добавление Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver") выше newInstance вызова производит следующие ошибки:

ClassNotFoundException occurred when processing request: [POST] /app/auth/signIn - parameters: 
username: user 
_rememberMe: 
targetUri: 
password: *** 
com.microsoft.sqlserver.jdbc.SQLServerDriver. Stacktrace follows: 
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
at java.lang.Class.forName(Class.java:195) 
at isec.AuthController$_closure3.doCall(AuthController.groovy:45) 
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200) 
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) 
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) 
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) 
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) 
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) 
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

Является ли это шагом вперед, назад, или мы бежим на месте?

Edit 2: То, что я закончил тем, что нужно было изменить мой DataSource.groovy к этому

dataSource { 
    pooled = true 
} 
hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = false 
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3 
    //cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4 
} 

// environment specific settings 
environments { 
    development { 
     dataSource { 
      dbCreate = "validate" 
      url = "jdbc:sqlserver://myserver:1433;databaseName=mydatabase;" 
      driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver" 
      username = "myusername" 
      password = "mypassword" 
     } 
    } 
.... 
} 

и изменил мой доступ AuthController.groovy данных в

try{ 
     subject.login(authToken) 
     if (subject.isAuthenticated()) 
     { 
      ShiroUser currentUser = new ShiroUser() 

      def targetUri = params.targetUri ?: "/home" 
      log.info "Redirecting to '${targetUri}'." 
      redirect(uri: targetUri) 
     } 
    } 

и я успешно обращались мой DB с модифицировано ShiroUser.groovy file

class ShiroUser { 

    static hasMany = [ roles: ShiroRole, permissions: String ] 

    User_Data userData; 

    static constraints = { 
    } 

    def getUsername() { 
     return userData.username 
    } 
} 

, где User_Data.groovy новый класс домен, содержащий

class User_Data { 

    static mapping = { 
     table "mytablename" 
    } 
    ... 
} 

Так что теперь я на баловаться с методами!Не уверен, почему материал JDBC не сработал, но GORM - это путь, который я сейчас беру.

+0

Я не знаю о Groovy, в частности, но вам действительно нужно загрузить класс на Java. Попробуйте 'Class.forName (" package.name.for.DriverClassName ");'. –

+0

Публикация обновленных ошибок с вашими изменениями – mjswartz

+1

В соответствии с сообщением об ошибке файл jar драйвера, конечно, не находится в пути к классам. Как вы сказали, файл jar драйвера находится в папке app/lib, я бы рекомендовал запустить «grails run-app» и пропустить среду IDE. – defectus

ответ

0

вам определенно нужно добавить sqljdbc4.jar в/app/lib /, который вы уже сделали.

вы пробовали добавлять подключение к базе BuildConfig.groovy

dataSource { 
     dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', '' 
     driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver" 
     dialect = "org.hibernate.dialect.SQLServerDialect" 
     url = "jdbc:sqlserver://localhost:1433;databaseName=dbName" 
     username = "sa" 
     password = "" 
    } 

Также убедитесь, что сервер SQL настроен на прием соединения на порт 1433. Это по умолчанию отключена.

+0

Это то, что я должен был сделать, но в среде разработки – mjswartz

+0

вы можете настроить источник данных для среды Ссылка: http://grails.github.io/grails-doc/2.2.1/guide/conf.html#environments – elixir

Смежные вопросы