blob: d342d92170fd6f1b0e3064be5bab2c1fbfa985b7 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you 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.
-->
<entitymodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/entitymodel.xsd">
<!-- ========================================================= -->
<!-- ======================== Defaults ======================= -->
<!-- ========================================================= -->
<title>Entity of an Apache OFBiz Component</title>
<description>None</description>
<version>1.0</version>
<!-- ========================================================= -->
<!-- ======================== Data Model ===================== -->
<!-- The modules in this file are as follows: -->
<!-- - org.apache.ofbiz.entity.audit -->
<!-- - org.apache.ofbiz.entity.crypto -->
<!-- - org.apache.ofbiz.entity.sequence -->
<!-- - org.apache.ofbiz.entity.tenant -->
<!-- ========================================================= -->
<entity entity-name="EntityAuditLog" package-name="org.apache.ofbiz.entity.audit" title="Entity Audit Log">
<field name="auditHistorySeqId" type="id-ne"><description>Sequenced primary key</description></field>
<field name="changedEntityName" type="long-varchar"></field>
<field name="changedFieldName" type="long-varchar"></field>
<field name="pkCombinedValueText" type="long-varchar"></field>
<field name="oldValueText" type="long-varchar"></field>
<field name="newValueText" type="long-varchar"></field>
<field name="changedDate" type="date-time"></field>
<field name="changedByInfo" type="long-varchar"><description>This should contain whatever information is available about the user or system that changed the value. This could be a userLoginId, but could be something else too, so there is no foreign key.</description></field>
<field name="changedSessionInfo" type="long-varchar"><description>This should contain whatever information is available about the session during which the value was changed. This could be a visitId, but could be something else too, so there is no foreign key.</description></field>
<prim-key field="auditHistorySeqId"/>
</entity>
<entity entity-name="EntityKeyStore" package-name="org.apache.ofbiz.entity.crypto" title="Entity Key Store Entity">
<field name="keyName" type="id-vlong-ne"></field>
<field name="keyText" type="long-varchar"></field>
<prim-key field="keyName"/>
</entity>
<entity entity-name="SequenceValueItem" package-name="org.apache.ofbiz.entity.sequence" title="Sequence Value Item Entity">
<field name="seqName" type="id-long-ne"></field>
<field name="seqId" type="numeric"></field>
<prim-key field="seqName"/>
</entity>
<entity entity-name="JavaResource" package-name="org.apache.ofbiz.entity" title="Java Resource">
<field name="resourceName" type="id-vlong-ne" />
<field name="resourceValue" type="byte-array" />
<prim-key field="resourceName" />
</entity>
<!-- ========================================================= -->
<!-- org.apache.ofbiz.entity.tenant -->
<!-- ========================================================= -->
<entity entity-name="Tenant" package-name="org.apache.ofbiz.entity.tenant">
<field name="tenantId" type="id-ne"/>
<field name="tenantName" type="name"/>
<field name="initialPath" type="value"/>
<field name="disabled" type="indicator"><description>Disabled if 'Y', defaults to 'N' (not disabled).</description></field>
<prim-key field="tenantId"/>
</entity>
<entity entity-name="TenantDataSource" package-name="org.apache.ofbiz.entity.tenant">
<description>
There should be one record for each tenant and each group-map for the active delegator.
The jdbc fields will override the datasource -> inline-jdbc values for the per-tenant delegator.
</description>
<field name="tenantId" type="id-ne"/>
<field name="entityGroupName" type="name"/>
<field name="jdbcUri" type="long-varchar"/>
<field name="jdbcUsername" type="long-varchar"/>
<field name="jdbcPassword" type="long-varchar">
<!-- This field should probably be encrypted, but the encrypt=true attribute will not work in this case
because different tenants will have different sets of encryption keys because the EntityKeyStore table is
in the per-tenant database an not in the shared tenant control database, which causes different keys to
be used for those logged in under different tenants, causing decryption errors unless you do all
TenantDataSource maintenance from only one tenant (or the non-tenant master db).
The problem is that each tenant has their own encryption keys, and that is they way it should be since
having easy access to the encryption keys that other tenants are using would be bad, and not having access
to your own encryption keys would also be bad. Because of that we can't move the EntityKeyStore entity
into the tenant control database. If we encrypt this with the keys from one tenant then no one logged in
with another tenant database will be able to decrypt it, so we can't use the keys in the per-tenant
databases for this.
Technically we don't have to encrypt the JDBC password, it often isn't encrypted in the configuration
files anyway. But it would be nice to encrypt it to protect other databases anyway, even if they are
probably on the same box and in the same database server instance.
-->
</field>
<prim-key field="tenantId"/>
<prim-key field="entityGroupName"/>
<relation type="one" fk-name="TNTDTSRC_TNT" rel-entity-name="Tenant">
<key-map field-name="tenantId"/>
</relation>
</entity>
<entity entity-name="TenantKeyEncryptingKey" package-name="org.apache.ofbiz.entity.tenant">
<description>
There should be one record for each tenant and each group-map for the active delegator.
The jdbc fields will override the datasource -> inline-jdbc values for the per-tenant delegator.
</description>
<field name="tenantId" type="id-ne"/>
<field name="kekText" type="long-varchar"></field>
<prim-key field="tenantId"/>
<relation type="one" fk-name="TNTKEK_TNT" rel-entity-name="Tenant">
<key-map field-name="tenantId"/>
</relation>
</entity>
<!-- may be no reason for this entity, user is authenticated inside the tenant and this would only be useful to
get a list of tenants per user
<entity entity-name="TenantUserLogin" package-name="org.apache.ofbiz.entity.tenant">
<field name="tenantId" type="id-ne"/>
<field name="userLoginId" type="id-vlong-ne"/>
<field name="fromDate" type="date-time"/>
<field name="thruDate" type="date-time"/>
<prim-key field="tenantId"/>
<prim-key field="userLoginId"/>
<prim-key field="fromDate"/>
<relation type="one" fk-name="TNTUSRLGN_TNT" rel-entity-name="Tenant">
<key-map field-name="tenantId"/>
</relation>
<!- - NOTE: there is no FK to the UserLogin entity, which is in a higher-level component, and would normally be in a separate database - ->
</entity>
-->
<entity entity-name="Component" package-name="org.apache.ofbiz.entity.tenant">
<description>Component Entity</description>
<field name="componentName" type="name"></field>
<field name="rootLocation" type="description"></field>
<prim-key field="componentName"/>
</entity>
<entity entity-name="TenantComponent" package-name="org.apache.ofbiz.entity.tenant">
<description></description>
<field name="tenantId" type="id-ne"></field>
<field name="componentName" type="name"></field>
<field name="sequenceNum" type="numeric"></field>
<prim-key field="componentName"/>
<prim-key field="tenantId"/>
<relation type="one" fk-name="TNTCOMP_TNT" rel-entity-name="Tenant">
<key-map field-name="tenantId"/>
</relation>
<relation type="one" fk-name="COMP_CNT" rel-entity-name="Component">
<key-map field-name="componentName"/>
</relation>
</entity>
<entity entity-name="TenantDomainName" package-name="org.apache.ofbiz.entity.tenant"
title="Tenant and its Domain Name">
<field name="tenantId" type="id-ne"></field>
<field name="domainName" type="long-varchar"></field>
<prim-key field="domainName"/>
<relation type="one" fk-name="TNNT_DMNAM" rel-entity-name="Tenant">
<key-map field-name="tenantId"/>
</relation>
</entity>
</entitymodel>