Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
Доброго времени!

Кое как добился того, что GlassFish запинговался с моей БД. Создал JDBC resources "jdbc_dbfastwater", в котором указал ранее созданный пул соединений "MySQLPool". Нашёл в интернете описание конфигурации Hibernate, для того чтобы Hibernate создавал сессию не на прямую с моей БД, а через GlassFish, но все конфигурации в формате XML, а у меня конфиг класс. Я попытался дописать в свой конфиг класс Hibernate параметры, которые указывались в XML-файлах, но не получается - JDBC соединение не создаётся:

автор
[2019-04-13T20:44:07.780+0500] [glassfish 5.0] [WARNING] [] [java.util.prefs] [tid: _ThreadID=46 _ThreadName=admin-listener(4)] [timeMillis: 1555170247780] [levelValue: 900] [[
Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.]]

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'geographKoordsDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'GeographKoordsService': Unsatisfied dependency expressed through field 'geographKoordsDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'GeographKoordsDao': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in config.HibernateConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.hibernate.SessionFactory]: Factory method 'sessionFactory' threw exception; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]


Без GlassFish тестил - всё работает.
Может кто знает, что не хватает в моей конфигурации или что не верно, подскажите.

@Configuration
@ComponentScan(basePackages = { "config","controller","dao","entity","service"})
@EnableWebMvc
@EnableTransactionManagement
public class HibernateConfig {
    private static Logger logger=LoggerFactory.getLogger(HibernateConfig.class);
 
    @Bean
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = null;
        try {
            dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/dbfastwater?useSSL=false");//"jdbc:mysql://localhost:3306/dbfastwater?useSSL=false"
            dataSource.setUsername("root");
            dataSource.setPassword("root");
        } catch (Exception e) {
            logger.error("MysqlDataSource bean cannot be created!", e);
        }
        return dataSource;
    }
    org.springframework.jndi.JndiObjectFactoryBean dataSourseJndi=new org.springframework.jndi.JndiObjectFactoryBean();
 
    private Properties hibernateProperties() {
        Properties hibernateProp = new Properties();
        hibernateProp.put("hibernate.dialect", "org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect");
        hibernateProp.put("connection.driver_class", "com.mysql.jdbc.Driver");
        hibernateProp.put("current_session_context_class","thread");
        hibernateProp.put("hibernate.connection.datasource","jdbc_dbfastwater");
        hibernateProp.put("hibernate.format_sql", true);
        hibernateProp.put("hibernate.use_sql_comments", true);
        hibernateProp.put("hibernate.show_sql", true);
        hibernateProp.put("hibernate.max_fetch_depth", 3);
        hibernateProp.put("hibernate.jdbc.batch_size", 10);
        hibernateProp.put("hibernate.jdbc.fetch_size", 50);
        hibernateProp.put("hibernate.hbm2ddl.auto","update");
        return hibernateProp;
    }
 
    @Bean
    public SessionFactory sessionFactory() throws IOException {
        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
        sessionFactoryBean.setDataSource(getDataSource());
        sessionFactoryBean.setPackagesToScan("entity","dao","service");
        sessionFactoryBean.afterPropertiesSet();
        sessionFactoryBean.setHibernateProperties(hibernateProperties());
        return sessionFactoryBean.getObject();
    }
 
    @Bean
    public PlatformTransactionManager transactionManager() throws IOException {
        HibernateTransactionManager transactionManager=new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory());
        return transactionManager;
    }
}


Пробовал прописывать сервер, порт и название ресурса GlassFish:"jdbc:mysql://localhost:8080/jdbc_dbfastwater":

dataSource.setUrl("jdbc:mysql://localhost:4848/jdbc_dbfastwater");


К сообщению приложен файл. Размер - 124Kb
13 апр 19, 21:50    [21861345]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
mayton
Member

Откуда: loopback
Сообщений: 39868
Проблема скорее всего в Windows где ты пытаешся запускать среду.

[2019-04-13T20:44:07.780+0500] [glassfish 5.0] [WARNING] [] [java.util.prefs] [tid: _ThreadID=46 _ThreadName=admin-listener(4)] [timeMillis: 1555170247780] [levelValue: 900] [[
Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.]]

Java Util Prefs пытается что-то писать в Виндовс-реестр и обламывается. Толи прав не хватило толи нет самой ветки.
Вобщем не знаю что делать. Погугли в стековерфлоу - масса вариантов как решать.
13 апр 19, 22:52    [21861372]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
mayton
Проблема скорее всего в Windows где ты пытаешся запускать среду.

[2019-04-13T20:44:07.780+0500] [glassfish 5.0] [WARNING] [] [java.util.prefs] [tid: _ThreadID=46 _ThreadName=admin-listener(4)] [timeMillis: 1555170247780] [levelValue: 900] [[
Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.]]

Java Util Prefs пытается что-то писать в Виндовс-реестр и обламывается. Толи прав не хватило толи нет самой ветки.
Вобщем не знаю что делать. Погугли в стековерфлоу - масса вариантов как решать.


Но это же вроде предупреждение, а не ошибка?

Запустил Intellije IDEA от имени администратора, предупреждение вроде пропало, но ошибка осталась:

автор
Class [ com/querydsl/core/dml/UpdateClause ] not found. Error while loading [ class org.springframework.data.jpa.repository.support.QuerydslRepositorySupport ]]]

[2019-04-14T01:08:06.495+0500] [glassfish 5.0] [WARN] [] [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator] [tid: _ThreadID=45 _ThreadName=admin-listener(4)] [timeMillis: 1555186086495] [levelValue: 900] [[
HHH000342: Could not obtain connection to query metadata : Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.]]

[2019-04-14T01:08:06.526+0500] [glassfish 5.0] [SEVERE] [] [javax.enterprise.web] [tid: _ThreadID=45 _ThreadName=admin-listener(4)] [timeMillis: 1555186086526] [levelValue: 1000] [[
WebModule[/fast-water]StandardWrapper.Throwable
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'geographKoordsDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'GeographKoordsService': Unsatisfied dependency expressed through field 'geographKoordsDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'GeographKoordsDao': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in config.HibernateConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.hibernate.SessionFactory]: Factory method 'sessionFactory' threw exception; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
13 апр 19, 23:13    [21861379]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
mayton
Member

Откуда: loopback
Сообщений: 39868
База поднята?
14 апр 19, 10:03    [21861475]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37971
JNDI без всякого хибера работает?
14 апр 19, 10:25    [21861484]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
mayton
База поднята?


Да.
Тестировал без Glassfisha, напрямую ссылку прописывал
dataSource.setUrl("jdbc:mysql://localhost:3306/dbfastwater?useSSL=false");


и без вот этих свойств Хибера:
hibernateProp.put("current_session_context_class","thread");
hibernateProp.put("hibernate.connection.datasource","jdbc_dbfastwater");


всё работает - соединяется подгружается.

Далее пробую через Glassfish, меняю
dataSource.setUrl("jdbc:mysql://localhost:4848/jdbc_dbfastwater");


добавляю:
hibernateProp.put("current_session_context_class","thread");
hibernateProp.put("hibernate.connection.datasource","jdbc_dbfastwater");

И вот эта ошибка (
14 апр 19, 10:40    [21861490]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
Petro123
JNDI без всякого хибера работает?


Пинг от созданного пола соединений glassfish к БД проходит.

Что ещё нужно проверить?
14 апр 19, 10:42    [21861491]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
alex55555
Member

Откуда:
Сообщений: 1966
Vlad__i__mir
чтобы Hibernate создавал сессию не на прямую с моей БД, а через GlassFish

В общем гуглим про пулы коннектов. Что это и с чем едят.

На серверах приложений пулы создаются серверами, а потом из пула коннекты пользуются всяческими хиберами. При этом как настроить запрос коннекта их пула - чистое админство, просто читаем мануалы и всё сразу начинает работать (ну почти сразу).
14 апр 19, 13:15    [21861534]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
alex55555, если бы можно было бы просто прочитать мнуал и сделать по аналогии, и всё заработало бы, то я бы не спрашивал.
Не работает так.
14 апр 19, 13:58    [21861554]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5611
Vlad__i__mir, я не понимаю людей который тащат спринг на JavaEE. Запустился на Tomcat и ладненько, зачем тащить 50Мб кода дублирующего код сервера приложений?
Нафига создавать в коде DataSource (getDataSource()), когда JDBC-пул создается в GlassFish?

1. JDBC-пул настраивается в сервере приложений ("добился того, что GlassFish запинговался с моей БД" - это не проблема GlassFish, а просто кто то с трудом выполнил элементарные настройки)

2. Пул цепляется в коде спринга:

@Bean(name = "dataSource")
public DataSource getDataSource() {
	DataSource dataSource = null;
	try {
		JndiTemplate jndi = new JndiTemplate();
		dataSource = jndi.lookup("путь к jdbc пулу в JNDI", DataSource.class);
	} catch (NamingException e) {
		LOG.error(e);
	}
	return dataSource;
}


3. Цепляется EntityManager в коде спринга:

@Bean
public EntityManagerFactory entityManagerFactory() {
  LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
  ...
  return factory.getObject();
}


4. Тонкие настройки Hibernate размещаются в persistence.xml или при получении бина EntityManager-а как property

В любом случае GlassFish не виноват
14 апр 19, 23:19    [21861803]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
mayton
Member

Откуда: loopback
Сообщений: 39868
Vlad__i__mir
alex55555, если бы можно было бы просто прочитать мнуал и сделать по аналогии, и всё заработало бы, то я бы не спрашивал.
Не работает так.

А сорцы у тебя где-то в гитхабе лежат?
14 апр 19, 23:21    [21861805]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37971
Vlad__i__mir
Petro123
JNDI без всякого хибера работает?


Пинг от созданного пола соединений glassfish к БД проходит.

Что ещё нужно проверить?
в коде JNDI 2 строки работает?
Это же очевидно, потыкал в админке кнопки и теперь проверил в коде.
15 апр 19, 07:45    [21861897]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
Kachalov, спасибо! Буду пробовать.
17 апр 19, 15:40    [21865170]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
mayton, нет, в Гитхаб ничего не выкладывал, всё локально
17 апр 19, 15:41    [21865171]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 180
Petro123
Vlad__i__mir
пропущено...


Пинг от созданного пола соединений glassfish к БД проходит.

Что ещё нужно проверить?
в коде JNDI 2 строки работает?
Это же очевидно, потыкал в админке кнопки и теперь проверил в коде.


Что значит в коде 2 строки работает? Я же говорю, напрямую без JNDI всё работает.
автор
Это же очевидно, потыкал в админке кнопки и теперь проверил в коде

Какие там кнопки нужно тыкать, я вроде все настройки выполнил?
Что и как нужно проверить в коде?
17 апр 19, 15:45    [21865179]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
mayton
Member

Откуда: loopback
Сообщений: 39868
Vlad__i__mir
mayton, нет, в Гитхаб ничего не выкладывал, всё локально

Можешь выложить макет где ошибка воспроизводится?
17 апр 19, 16:20    [21865261]     Ответить | Цитировать Сообщить модератору
 Re: Конфигурация Hibernate для доступа к БД через GlassFish  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37971
Vlad__i__mir
Что значит в коде 2 строки работает? Я же говорю, напрямую без JNDI всё работает.
ну как еще говорить.
У меня на сайте в коде, две строчки JNDI работают при коннекте к базе.
А у тебя? Покажи.
17 апр 19, 16:32    [21865286]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить