A repository may support workspace management. A repository that supports this feature must the semantics of multiple workspaces and support cross-workspace operations (copying across Workspaces and cloning and updating node, share node)
AL은 Worksapce에서 좀 다른 기능을 가지고 있다.
AL은 1개 이상의 Workspae로 구성되어 있고 AnotherLore.login(new Credential("bleujin"), "otherWorkspaceName") ; 로 통해 default가 아닌 다른 Worksapce에 접속할 수 있다.
이를테면 이런 경우를 생각하면 된다. AL을 이용하여 인사관리 시스템을 만들었다. 이제 재고관리 프로그램을 만들어야 할때 또 다른 AL을 설치해야 할까?
또 다른 AL이 필요치는 않다. 다만 새로운 Workspace를 정의해 두고 재고관리 프로그램은 이 newWorkspace를 사용하면 된다.
<global-store>
<reference-storage>default-dc</reference-storage>
</global-store>
<workspaces>
<workspace name="default_workspace" default="true">
<default-locale>ko</default-locale>
<reference-storage>default-dc</reference-storage>
</workspace>
<workspace name="other_workspace">
<default-locale>en</default-locale>
<reference-storage>default-dc</reference-storage>
</workspace>
<workspace name="other2_workspace">
<default-locale>en</default-locale>
<reference-storage>default-mm</reference-storage>
</workspace>
</workspaces>
<storage id="default-mm" type="memory">
</storage>
<storage id="default-dc" type="db.oracle">
<database-controller>
<controller-name>framework default database service</controller-name>
<database-manager>
<!-- Development server2 ,novision -->
<description>Oracle database manager.</description>
<configured-object>
<class-name>com.bleujin.framework.db.manager.Oracle9iCacheDBManager</class-name>
<constructor>
<constructor-param>
<description>jdbcURL</description>
<type>java.lang.String</type>
<value>jdbc:oracle:thin:@novision:1521:bleujin</value>
</constructor-param>
<constructor-param>
<description>userId</description>
<type>java.lang.String</type>
<value>al</value>
</constructor-param>
<constructor-param>
<description>password</description>
<type>java.lang.String</type>
<value>redf</value>
</constructor-param>
<constructor-param>
<description>connectionLimit</description>
<type>int</type>
<value>10</value>
</constructor-param>
</constructor>
</configured-object>
</database-manager>
<test-query>select 1</test-query>
</database-controller>
</storage>
위와 같이 설정되 있을 경우 AL은 1개의 GlobalStorage와 3개의 WorkspaceStorage를 가진다.
GlobalStorage는 주로 NodeType과 Sequecne등의 Global 객체 정보를 가지고 있으며 개개의 Workspace는 개별적인 Tree 형태의 Node 구조를 가지고 있다.
특징적인 점은 other_workspace와 other_workspace는 같은 DB를 참조하고 있다. Workspace는 Storage형태가 메모리이든(물론 이경우 매번 리셋된다.) DB이든 상관하지 않으며 다른 DB 종류일수도 있고 같은 DB이지만 Schema만 다를 수 있고 심지어는 같은 DB의 같은 Table에 여러개의 workspace 정보를 관리할 수도 있다.
이런 구조를 택한 이유는 Workspace로 관리하고자 하는 Node의 양이 상황에 따라 다르기 때문이다. 이를테면 A Workspace가 전체 노드의 50%이상이고 나머지 50% 이하를 9개의 Workspace가 관리한다면 A Workspace만 별도의 DB로 관리하고 나머지 9개를 하나의 Storage로 공유하여 사용할 수 있다.
AnotherLore.logn(Credential)로 접속을 하면 default=true인 Default Worksapce로 접속하고 일반적으로는 AnotherLore.login(Credintial, workspaceName)으로 별도의 Session을 할당받는다.
기본적으로는 A workspace로 login해서 얻은 NodeA는
B Workspace의 NodeB를 Node.getIdentifier로 언제든 참조할 수 있지만 각각의 Workspace는 개별적인 SecurityFilter를 관리하기 때문에 특정 ShareNode만 노출시킬 수도 있다.
'Framework > Another Lore' 카테고리의 다른 글
AL : Permission (1) | 2009.04.30 |
---|---|
AL : 현재의 난제들 (0) | 2009.04.30 |
AL : Property Type Conversion (0) | 2009.04.26 |
AL : Reading (0) | 2009.04.25 |
AL : Link (0) | 2009.04.24 |