2016-04-24 2 views
1

У меня эта ошибка при попытке подключиться к базе данных MySQL:Подключение к MySql через GlassFish пул соединений

No object bound to name java:comp/env/jdbc/mySql

Это мой класс конфигурации:

@Configuration 
@EnableTransactionManagement 
@ComponentScan({ "org.onmyown.config" }) 
@PropertySource(value = { "classpath:application.properties" }) 
public class HibernateConfiguration { 

@Autowired 
private Environment environment; 

@Bean 
public LocalSessionFactoryBean sessionFactory() { 
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
    sessionFactory.setDataSource(dataSource()); 
    sessionFactory.setPackagesToScan(new String[] { "org.onmyown" }); 
    sessionFactory.setHibernateProperties(hibernateProperties()); 
    return sessionFactory; 
} 

@Bean 
public DataSource dataSource() { 
    DataSource dataSource = null; 
    try { 
     Context initialContext = new InitialContext(); 
     Context environmentContext = (Context)initialContext.lookup("java:comp/env"); 
     dataSource = (DataSource) environmentContext.lookup("jdbc/mySql"); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 
    return dataSource; 
} 

private Properties hibernateProperties() { 
    Properties properties = new Properties(); 
    properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); 
    properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); 
    properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); 
    properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("hibernate.hbm2ddl.auto")); 
    return properties; 
} 

@Bean 
@Autowired 
public HibernateTransactionManager transactionManager(SessionFactory s) { 
    HibernateTransactionManager txManager = new HibernateTransactionManager(); 
    txManager.setSessionFactory(s); 
    return txManager; 
} 
} 

Я могу свистеть от GlassFish просто отлично. Я поместил все необходимые свойства (я думаю). Мой друг сделал эту конфигурацию с базой данных Derby, и она работает. Есть ли разница?

@edit

Я «исправил» что-то. Я добавил web.xml, здесь есть все:

https://github.com/afterlook/SpringMVC

Сейчас проблема заключается в том, что приложение на самом деле не волнует, что я поставил MySql в качестве источника данных. Он ищет DerbyPool, который является одним из значений по умолчанию в GlassFish. Любая идея почему?

+0

читать о [Окружающая среда для Context] (https://docs.oracle.com/javase/jndi/tutorial/beyond/env/context.html), вам должен был установить его, прежде чем получить его ... здесь [пример] (https://docs.oracle.com/javase/jndi/tutorial/beyond/env/src/GetEnv.java) –

+0

Я не понимаю его , вы пытаетесь сказать, что мои свойства, которые я возвращаю в hibernateProperties(), пусты? Если да, то это не так. Я прочитал эти примеры, которые вы связали, и я понятия не имею, как это должно мне помочь. Позвольте мне также отметить, что мое приложение работает, когда я не использовал пул соединений с кодом, как есть. Единственное, что я изменил, это dataSource(). – Afterlook

ответ

1

Проблема, с которой вы отправили оригинал, пытается использовать источник данных, который просматривается с помощью JNDI с ключом comp/env/jdbc/mySql, и это не настроено.

Если вы хотите использовать пул подключения Glasfish, вы должны настроить Glasfish поэтому он создает этот пул и публикует его в качестве компонента JNDI с ключом COMP/ENV/JDBC/MYSQL mysql glasfish показывает, как это делается.

С вашим исправлением вы прокомментировали код JNDI, вместо этого вы установили URL-адрес соединения из свойства.

db.url=jdbc:mysql://localhost:3306/app 

без дополнительной настройки, это, кажется, указывает на Glasfish пула подключения по умолчанию с использованием дерби дб.

Если вы хотите использовать Glasfish пул соединений:

  1. Настройка Glasfish к обрешетке этого пула с использованием MySQL, как описано в связанном документе.
  2. Вы настроите url, user, password для пула соединений Glsfish, поэтому, я думаю, вам не придется снова предоставлять его в конфигурации Spring. Возьмите источник данных, как вы получите его из поиска JNDI.
  3. Отмените исправление, которое закомментировал поиск JNDI. Ваш код должен выглядеть следующим образом:

    @Bean 
        public DataSource dataSource() { 
        DataSource dataSource = null; 
        try { 
         Context initialContext = new InitialContext(); 
         Context environmentContext = (Context)initialContext.lookup("java:comp/env"); 
         dataSource = (DataSource) environmentContext.lookup("jdbc/mySql"); 
        } catch (NamingException e) { 
         e.printStackTrace(); 
        }*/ 
        return dataSource; 
    } 
    
+0

спасибо. Эта документация была хорошей отправной точкой для моей проблемы. У меня было несколько мелких проблем на пути, но ничто из того, что было слишком сложно справиться самостоятельно.Если кто-то сталкивается с одной и той же проблемой, репо теперь обновляется, чтобы искать изменения. – Afterlook

+0

И это исправление было о web.xml. Я все время запускал приложение с JNDI-поиском. Я не знаю, почему я прокомментировал это, прежде чем нажимать на репо. – Afterlook

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