51Testing软件测试论坛

标题: JIRA中的数据存储-----active object [打印本页]

作者: 听海——sky    时间: 2018-4-9 16:30
标题: JIRA中的数据存储-----active object
JIRA中,数据实体(entity)的字段、类型及和数据库表的对应关系这些设置在 entityengine.xml、entitygrou
p.xml、entitymodel.xml中。

entitymodel.xml------------定义实体、属性,以及和数据库表、字段的对应关系。

entitygroup.xml------------定义数据实体所属的分组信息。

entityengine.xml-----------加载entity group, entity model, field type位置信息、定义处理实体数据的delegator
(委托);属性、字段类型的对应信息设置在fieldtype-***.xml文件中。

使用  Ofbiz Entity Engine 来操作数据和数据库,需要编辑以上配置文件,操作略。本文讨论的是如何利用
active object 来处理数据。



1.实体entity的定义:

关系型数据库中,实体就是由一系列属性和该实体与其他实体间的关联关系定义的一组数据。



2. AO简介

ActiveObjects是一个纯Java ORM。

AO可以与现有数据库模式一起使用,也可以从用户指定的实体接口自动生成数据库模式。


ActiveObjects自然使用延迟加载以及复杂的缓存机制,比传统的数据映射器ORM更具性能。 然而,它的主
要设计目标不是性能,而是创建一个强大的ORM,用于集成到您的项目中。

JIRA产品是用Java语言写的,在JIRA中操作数据和数据库,也可以使用AO。



3.JIRA中使用AO的注意事项

3.1 在pom.xml中添加对activeobjects-plugin.jar的依赖。

3.2  AO通过接口(interface)来定义实体(entity),实体创建后,在数据库中也会自动生成数据库表(table)。

      接口继承了 Entity,它将主键直接定义为ID。

[java] view plain copy
public interface DemoEntity extends Entity{  
    /**
           定义 get,set方法以便存储数据
             */  
}  
[java] view plain copy
<span style="font-size:18px;">public interface Entity extends RawEntity<Integer>  
{  
    @AutoIncrement  
    @NotNull  
    @PrimaryKey("ID")  
    public int getID();             //Entity接口已经为用户定义好了ID主键  
}</span>  

    3.2.1 定义非空字段:

[java] view plain copy
@NotNull  
public String getAuthor();  
public void setAuthor(String author);  
3.3默认情况下,针对实体除ID以外的字段/属性,AO使用懒加载(lazy loading);
     使用 @Preload 注释来让AO立即加载。


3.4 为了能够操作数据实体,需要在JIRA配置文件(atlassian-plugin.xml)中引入AO组件(component import)。

    (在SDK高级版本中,配置 component import,会报错------atlassian-plugin.xml contains a definition of com
ponent-import.This is not allowed when Atlassian-Plugin-Key is set. 可以使用spring注解来解决,@Compone
ntImport)



3.5 每一个AO交互(interaction)的完成都需要在事务(transaction)中进行,可以在业务层接口上方加注解:

     @Transaction



3.6 在定义实体(entity)名时,长度不要超过30个字符,否则会报如下错误:

net.java.ao.ActiveObjectsException: Invalid entity, generated table name (AO_769468_******) for 'com.***
***.****' is too long! It should be no longer than 30 chars.







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2