JBoss진영에서 미는 Hibernate.
조만간에 Hibernate Core 4가 정식으로 릴리즈될 예상이다. 2011년 7월 현재 beta 버전이다.
Hibernate에 좋은 기능이 생겼다.
- Multi-tenancy
DB를 사용할 때, 서로 다른 고객들이 다른 고객의 정보를 보지 않도록 하는 것을 의미한다. 쓰지 않을 수도 있는 DB장비를 매번 구성한다면 비용이 드니, 같은 DB를 쓰지만, 마치 client쪽은 모르고 쓰게 하는 기술.
클라우드 서비스에서는 이 부분이 중요하다.
3가지 방법으로 나눌 수 있다.
1. DB 나누기
2. 스키마 나누기
3. 파티셔닝
파티셔닝 방법
CUSTOMER (
ID BIGINT,
NAME VARCHAR,
...
TENANT_ID VARCHAR
)
데이터를 분할
CUSTOMER (
ID BIGINT,
NAME VARCHAR,
...
)
하이버네이트 코드
- 새로운 클래스로더 서비스
http://in.relation.to/Bloggers/JBossAS7AndHibernateWhatsUp
http://in.relation.to/Bloggers/MultitenancyInHibernate
조만간에 Hibernate Core 4가 정식으로 릴리즈될 예상이다. 2011년 7월 현재 beta 버전이다.
Hibernate에 좋은 기능이 생겼다.
- Multi-tenancy
DB를 사용할 때, 서로 다른 고객들이 다른 고객의 정보를 보지 않도록 하는 것을 의미한다. 쓰지 않을 수도 있는 DB장비를 매번 구성한다면 비용이 드니, 같은 DB를 쓰지만, 마치 client쪽은 모르고 쓰게 하는 기술.
클라우드 서비스에서는 이 부분이 중요하다.
3가지 방법으로 나눌 수 있다.
1. DB 나누기
2. 스키마 나누기
3. 파티셔닝
파티셔닝 방법
CUSTOMER (
ID BIGINT,
NAME VARCHAR,
...
TENANT_ID VARCHAR
)
데이터를 분할
CUSTOMER (
ID BIGINT,
NAME VARCHAR,
...
)
하이버네이트 코드
public class MyTenantAwareConnectionProvider implements ConnectionProvider {
public static final String BASE_JNDI_NAME_PARAM = "MyTenantAwareConnectionProvider.baseJndiName";
private String baseJndiName;
public void configure(Properties props) {
baseJndiName = props.getProperty( BASE_JNDI_NAME_PARAM );
}
public Connection getConnection() throws SQLException {
final String tenantId = TenantContext.getTenantId()
final String tenantDataSourceName = baseJndiName + '/' + tenantId;
DataSource tenantDataSource = JndiHelper.lookupDataSource( tenantDataSourceName );
return tenantDataSource.getConnection();
}
public void closeConnection(Connection conn) throws SQLException {
conn.close();
}
public boolean supportsAggressiveRelease() {
// so long as the tenant identifier remains available in TL throughout, we can
return true;
}
public close() {
// currently nothing to do here
}
}
public static final String BASE_JNDI_NAME_PARAM = "MyTenantAwareConnectionProvider.baseJndiName";
private String baseJndiName;
public void configure(Properties props) {
baseJndiName = props.getProperty( BASE_JNDI_NAME_PARAM );
}
public Connection getConnection() throws SQLException {
final String tenantId = TenantContext.getTenantId()
final String tenantDataSourceName = baseJndiName + '/' + tenantId;
DataSource tenantDataSource = JndiHelper.lookupDataSource( tenantDataSourceName );
return tenantDataSource.getConnection();
}
public void closeConnection(Connection conn) throws SQLException {
conn.close();
}
public boolean supportsAggressiveRelease() {
// so long as the tenant identifier remains available in TL throughout, we can
return true;
}
public close() {
// currently nothing to do here
}
}
- 새로운 클래스로더 서비스
http://in.relation.to/Bloggers/JBossAS7AndHibernateWhatsUp
http://in.relation.to/Bloggers/MultitenancyInHibernate
'general java' 카테고리의 다른 글
Jersey Framework 맛보기 (0) | 2011.08.05 |
---|---|
구글 프로토콜 버퍼 (Google Protocl Buffer) (0) | 2011.08.03 |
특정 로직에 대해서 성능 확인 (속도 체크) - stopwatch (0) | 2011.07.08 |
DBCP connection 정리 (0) | 2011.07.05 |
Spring Batch - MSSQL 채번 (0) | 2011.04.07 |