LINUX.ORG.RU

Подскажите как сделать такую штуку на Hibernate


0

0

Нужна необходимость внутри приложения переключаться между разными базами данных. Т.е. приложение одно, инстанцированно на сервере один раз, но в зависимости от того какой клиент подключился (есть мап subdomain-name -> database-name), чтобы выбиралась нужная база данных.

Как мне такую штуку проделать в связке с Hibernate?

anonymous

Создать по SessionManager на каждую базу, подсовывая Configuration нужные тебе параметры коннекта к базе.

Nagwal ★★★★
()

Не понял: необходимости нет, но она нужна? Или необходимость есть, и нужно, чтобы оставалась?

Miguel ★★★★★
()
Ответ на: комментарий от anonymous

Хм, по логике вещей вроде не должно, там вроде Map для хранения пропертов используется, так что если после создания конфигурации положить уже из кода какие-то свойства, то они должны перекрыть те, что получены из файла. Правда сейчас под рукой нет среды разработки, посмотреть не могу.

Nagwal ★★★★
()

public class HibernateUtil {
    private static SessionFactory sessionFactory;
    private static HibernateUtilState state;
    
    static {
        try {
            SetState(MySqlHibernateUtilState.instance());
            sessionFactory = state.BuildSessionFactory();
        } catch (Throwable ex) {            
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    
    public static void SetState(HibernateUtilState newstate) {
        state = newstate;
    }
    
    public static SessionFactory getSessionFactory() {
        return state.getSessionFactory();
    }   
}

public abstract class HibernateUtilState {
    public abstract SessionFactory getSessionFactory();
    public abstract SessionFactory BuildSessionFactory() throws Throwable;    
}

public class MySqlHibernateUtilState extends HibernateUtilState {
    
    SessionFactory sf;
    private static MySqlHibernateUtilState _instance;
    
    private MySqlHibernateUtilState() {
    }

    public SessionFactory getSessionFactory() {
        return sf;
    }
    
    public static HibernateUtilState instance() {
        if (_instance == null) {
            synchronized (MySqlHibernateUtilState.class) {
                if (_instance == null) {   // second check
                    _instance = new MySqlHibernateUtilState();  // create single object
                }
            }
        }
        return _instance;
    }

    public SessionFactory BuildSessionFactory() throws Throwable {
        sf = new Configuration().configure("mysql_hibernate.cfg.xml").buildSessionFacto
ry();
        return sf;
    }
}

a?

in_dance
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.