powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, persistence.xml, изменение url, username и password в рантайме
9 сообщений из 9, страница 1 из 1
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003132
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу приложение на свинге, чтобы не ковыряться с БД, решил использовать хибер только лишь для маппинга.
При запуске первоначально открывается окно, с полями для ввода урла, юзернейма и пассворда.
После нажатия на кнопку "Проверить и сохранить", данные сгребаются в файл и кладутся в создаваемую папку в папке пользователя.
При следующем запуске данные уже заполнены если файл найден, прочитан и т.д.
Ну а на вкладке "Вход в систему", в зависимости от полученного коннекта в комбобокс вываливается список пользователей из БД и можно далее работать уже непосредственно с программой.

По идее, если бы приложение было полностью написано, проверено, протестировано пользователями и не надо было бы его дописывать, то проблем нет. Но даже если так, то, если поменяется урл, не хотелось бы его переписывать в persistence.xml, а поменять данные коннекта при запуске, тем более что сама программа пакуется в exe файл.

Прочитал, что можно создать файл конфигурации hibernate.cfg.xml а в persistence.xml прописать
<property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"/>
Но не могу найти пример такого файла и не уверен, что путь вообще верен. Кроме того, его нужно будет генерировать, и это тоже вызывает вопрос - чем? :)

Заранее спасибо :)
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003136
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003161
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В хибернейте используют объект Configuration:
Код: java
1.
2.
3.
4.
5.
6.
7.
Configuration cfg = new Configuration();
// из файла
cfg.configure(...ресурс...);
// в рантайме
cfg.setProperty(propName,propValue);
// и дальше строим фабрику
sessionFactory = cfg.buildSessionFactory();


Но поскольку речь идет только о коннекте, я бы смотрел в сторону использования datasource и его настройки в рантайме из отдельного ресурса
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003179
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,

datasource как раз и используется в дальнейшем, хиберней только для того, чтобы автоматом создались поля и/или таблицы в БД.
Он инициализируется при нажатии кнопки проверки, чтобы не лезть в БД напрямую, меняет все что нужно, а дальше работает datasource.
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003269
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как сделал, нашел пример:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
import java.util.Properties;
import nix.DAO.entities.common.Contractors;
import nix.DAO.entities.common.Users;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

    private static final SessionFactory concreteSessionFactory;

    static {
        try {
            Properties prop = new Properties();
            prop.setProperty("dialect", "org.hibernate.dialect.PostgreSQLDialect");
            prop.setProperty("hibernate.connection.url", "jdbc:postgresql://127.0.0.1:5432/db");
            prop.setProperty("hibernate.connection.username", "user");
            prop.setProperty("hibernate.connection.password", "12345678");
            prop.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.EhCacheProvider");
            prop.setProperty("hibernate.cache.use_second_level_cache", "true");
            prop.setProperty("hibernate.show_sql", "true");
            prop.setProperty("hibernate.format_sql", "true");
            prop.setProperty("hibernate.generate_statistics", "true");
            prop.setProperty("hibernate.cache.use_structured_entries", "true");
            prop.setProperty("hibernate.hbm2ddl.auto", "update");

            concreteSessionFactory = new AnnotationConfiguration()
                    .addPackage("com.concretepage.persistence")
                    .addProperties(prop)
                    .addAnnotatedClass(Users.class)
                    .addAnnotatedClass(Contractors.class)
                    .buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return concreteSessionFactory.openSession();
    }

    public static void main(String... args) {
        Session session = getSession();
        session.beginTransaction();
        Users user = (Users) session.get(Users.class, new Integer(1));
        System.out.println(user.getName());
        session.close();
    }
}


Это уже с моими добавленными параметрами.
В итоге просто дергаем сессию в каком-нибудь классе getSession();

а в
Код: java
1.
2.
3.
4.
5.
6.
concreteSessionFactory = new AnnotationConfiguration()
                    .addPackage("com.concretepage.persistence")
                    .addProperties(prop)
                    .addAnnotatedClass(Users.class)
                    .addAnnotatedClass(Contractors.class)
                    .buildSessionFactory();



в .addAnnotatedClass(...) добавляем классы для "проверки"

Думаю, что как обычно, решение моё не особо правильное, может как-то по другому можно то же самое сделать, более красиво и коротко? :)
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003301
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильное - когда выносится переменная часть. Почему я и написал о datasource. Если надо управлять только коннектом, то в исходном конфиге заменяем hibernate.connection.url, hibernate.connection.username, hibernate.connection.password на -> hibernate.connection.datasource
А в рантайме управляем этим datasource, совсем в другом месте.
Но если текущее решение подходит, то и так сойдет ))
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003318
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra, спасибо!
перепишу немного пример, добавлю переменные.
А вот с hibernate.connection.datasource, посмотрел немного примеров, не понял что ему в значение подставлять, так что, пока оставлю без него :)
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003837
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. чтобы не ковыряться с хибер - попробуйте spring data jpa
( http://docs.spring.io/spring-data/jpa/docs/1.5.x/reference/html/repositories.html )
2.возьмите spring javaconfig
3. файл настроек вынести в ресурсы и указать в коде

@PropertySource - указать мето где лежит файл с Property

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("ru.myopenwall.repositories")
@PropertySource(value = {"classpath:application.properties"})
@ComponentScan({"ru.myopenwall.entity" ,"ru.myopenwall.controllers","ru.myopenwall.services" ,"ru.myopenwall.repositories"})
public class AppConfig  {


    @Value("${application.message}")
    private String message;



примеров много :

https://github.com/spring-projects/spring-data-jpa-examples
...
Рейтинг: 0 / 0
Hibernate, persistence.xml, изменение url, username и password в рантайме
    #39003843
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, persistence.xml, изменение url, username и password в рантайме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]