/*
* Copyright 2011-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package kr.debop4j.data.hibernate.repository.impl;
import kr.debop4j.core.Guard;
import kr.debop4j.core.Local;
import kr.debop4j.data.hibernate.repository.IHibernateRepository;
import kr.debop4j.data.hibernate.repository.IHibernateRepositoryFactory;
import kr.debop4j.data.model.IStatefulEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* {@link kr.debop4j.data.hibernate.repository.impl.HibernateRepository}를 생성해주는 Factory 입니다.
* 이것보다는 Spring framework의 @Repository를 사용하는 것이 좋다.
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 12. 11. 27.
* @deprecated {@link HibernateDao}를 사용할 때에는 사용할 필요가 없습니다.
*/
@Deprecated
@Component
@Slf4j
public class HibernateRepositoryFactory implements IHibernateRepositoryFactory {
private static final String HIBERNATE_DAO_KEY = "kr.debop4j.data.hibernate.repository.IHibernateRepository.";
public <E extends IStatefulEntity> IHibernateRepository<E> getOrCreateHibernateRepository(Class<E> entityClass) {
Guard.shouldNotBeNull(entityClass, "entityClass");
return getOrCreateHibernateRepositoryInternal(entityClass);
}
@SuppressWarnings("unchecked")
protected synchronized <E extends IStatefulEntity> IHibernateRepository<E> getOrCreateHibernateRepositoryInternal(Class<E> entityClass) {
String repositoryKey = getHibernateRepositoryKey(entityClass);
HibernateRepository<E> repository = null;
// try {
// repository = (HibernateRepository<E>) Springs.getBean(repositoryKey);
// } catch (Exception ignored) {}
//
// if (repository == null) {
// if (HibernateRepositoryFactory.log.isDebugEnabled())
// HibernateRepositoryFactory.log.debug("HibernateRepository<{}> 인스턴스를 생성합니다.", entityClass.getName());
//
// repository = new HibernateRepository<E>(entityClass);
// Springs.registerSingletonBean(repositoryKey, repository);
// }
// return repository;
String daoKey = getHibernateRepositoryKey(entityClass);
IHibernateRepository<E> dao = (IHibernateRepository<E>) Local.get(daoKey);
if (dao == null) {
if (log.isDebugEnabled())
log.debug("IHibernateRepository<{}> 인스턴스를 생성합니다.", entityClass.getName());
dao = new HibernateRepository<E>(entityClass);
Local.put(daoKey, dao);
}
return dao;
}
protected String getHibernateRepositoryKey(Class<?> entityClass) {
return HIBERNATE_DAO_KEY + entityClass.getName();
}
}