`
xidajiancun
  • 浏览: 492275 次
文章分类
社区版块
存档分类
最新评论

使用koala插件完成项目创建、业务开发、打包发布

 
阅读更多

Quick Start

1 Koala的下载和安装

1.1 前提准备

使用koala,确保你的电脑上已安装并正确运行以下软件:

1) JDK 1.5以上

2) Maven 2以上

3) eclipse 3.7以上

4) eclipse安装m2eclipse插件

m2eclispe的插件更新地址为:http://download.eclipse.org/technology/m2e/releases

Warning

koala依赖m2eclipse插件,请确保你的m2eclipse插件的版本为1.2以上。旧有的0.2版本的m2eclipse与koala存在不兼容的现象。

如果当前eclispe安装版本为0.2版本的m2eclipse,请先uninstall,再安装最新版本的m2eclipse。

Warning

确保maven的配置文件在${user.home}/.m2/setting.xml中,如果直接使用maven的conf/settting.xml配置,将会导致部分功能出现

项目不能正常编译,请检查”错误

1.2 Koala的下载

koala是一款eclipse插件,请下载我们的插件zip包进行安装。点击此处下载

1.3 Koala的安装

遵照以下步骤进行安装:

1) 打开eclipse,Help->Install New Software。

2) 选择Add,分别输入名称及更新地址(或Archeive选择下载的更新ZIP包)。

3)点击确定,出现可安装的koala列表,全选。

4) 按照提示进行Next>进行安装,eclipse提示重启便表示安装成功。

现在,你可以开始使用koala进行项目的开发了。

2 项目的创建

下面我们将带领大家使用Koala插件创建一个新的项目,打开eclipse的新建项目向导对话框,选择Koala->Koala Project。

点击Next按钮,出现Koala的新建项目向导,如图:

在“Project name”处填写项目名称:demo,其他使用默认,点击Next按钮,进入下一步,maven信息填写的向导页。

“Group Id”处填写:org.foreveross,“Artifact Id”处填写:demo,其他默认,点击Next按钮,进入添加模块的向导页。

Koala根据领域驱动设计的分层思想默认生成了四个层的模块,其中应用层分为接口和实现两个模块。“demo-infra”为基础设施层的模块,“demo-core”为领域层的模块,“demo-application”为应用层接口模块,“demo-applicationImpl”为应用层实现模块,“demo-web”为展现层模块并默认使用了Struts2(如果用户有不同需求可自行修改)。用户可根据需要点击“add”按钮添加新模块,或者选中模块后点击“edit”按钮修改模块配置,或者选中点击“remove“按钮删除模块等。这里我们不做修改,使用默认生成的模块。

点击Next按钮,进入下一步。

由于我们项目中有视图层web模块,koala会让我们选择是否将权限系统加入到web模块中。下面第一个单选按钮组是选择权限的认证连接方式,第二个单选按钮组是选择所要使用的缓存技术类型(对用户,角色,资源等信息的缓存),最后一个单选按钮组是选择权限系统的页面菜单结构布局的模版。同样,我们使用默认选中的配置,即使用“集成式(jdbc)”的连接方式,“ehCache”来实现缓存,并使用“TemplateA”的页面模版。点击Next按钮,进入最后的项目信息汇总展示页面。

该页面展示了我们所配置的项目信息。点击“Finish”按钮完成项目信息的填写并开始生成项目。

在生成项目完成之后会弹出导入项目的对话框。

选择要导入的项目和模块,此处我们可以看到,在导入项目列表中,多了一个“demo-conf”项目,这是koala默认用来存放公用配置文件的模块,所以可以多模块共享的配置文件均放在此模块中。

在这里,我们一样使用默认的全部导入,直接点击“Finish”按钮开始项目和模块的导入。

完成之后我们可以在eclipse的“Project Explorer”看到我们使用Koala新建并导入的demo项目。

接下来,我们就可以在demo项目中开始我们的业务开发了。

3 权限系统

我们在生成项目的时候已经勾选了在demo-web模块加入了koala权限系统。现在我们的项目中便已经有了一套基于角色授权的权限管理系统。

右键点击demo项目的demo-web模块,选择Run As --> Koala Jetty Run,运行Jetty服务器

跑起服务器之后,打开浏览器,输入:http://localhost:8080,由于有了权限管理,系统将要求用户必须进行登录。

关于权限系统的详细使用方法,请参考4.权限系统支持

4 实体类CRUD

下面我们自己新建一个Organization领域类及其的关联属性Address领域类(ManyToOne),Employee领域类(OneToMany)。

下面是各领域类代码:

Organization.java
packageorg.foreveross.demo.core;
importjava.util.List;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.JoinColumn;
importjavax.persistence.ManyToOne;
importjavax.persistence.OneToMany;
importjavax.persistence.Table;
importcom.dayatang.domain.BaseEntity;
@Entity
@Table(name ="organizations")
publicclassOrganizationextendsBaseEntity {
/**
*
*/
privatestaticfinallongserialVersionUID = 1946346499573992799L;
privateString name;
@Column(name ="serial_number")
privateString serialNumber;
@ManyToOne
@JoinColumn(name ="address_id")
privateAddress address;
@OneToMany
privateList<Employee> employees;
publicAddress getAddress() {
returnaddress;
}
publicvoidsetAddress(Address address) {
this.address = address;
}
publicList<Employee> getEmployees() {
returnemployees;
}
publicvoidsetEmployees(List<Employee> employees) {
this.employees = employees;
}
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name = name;
}
publicString getSerialNumber() {
returnserialNumber;
}
publicvoidsetSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
@Override
publicinthashCode() {
finalintprime =31;
intresult =1;
result = prime * result + ((getId() ==null) ?0: getId().hashCode());
returnresult;
}
@Override
publicbooleanequals(Object obj) {
if(this== obj)
returntrue;
if(obj ==null)
returnfalse;
if(getClass() != obj.getClass())
returnfalse;
Organization other = (Organization) obj;
if(getId() ==null) {
if(other.getId() !=null)
returnfalse;
}elseif(!getId().equals(other.getId()))
returnfalse;
returntrue;
}
publicbooleanexisted() {
returnfalse;
}
publicbooleanexisted(String arg0, Object arg1) {
returnfalse;
}
publicbooleannotExisted() {
returnfalse;
}
Address.java
packageorg.foreveross.demo.core;
importjavax.persistence.Entity;
importjavax.persistence.Table;
importcom.dayatang.domain.BaseEntity;
@Entity
@Table(name ="addresses")
publicclassAddressextendsBaseEntity {
/**
*
*/
privatestaticfinallongserialVersionUID = -208372668032795503L;
privateString country;
privateString province;
privateString city;
publicString getCountry() {
returncountry;
}
publicvoidsetCountry(String country) {
this.country = country;
}
publicString getProvince() {
returnprovince;
}
publicvoidsetProvince(String province) {
this.province = province;
}
publicString getCity() {
returncity;
}
publicvoidsetCity(String city) {
this.city = city;
}
@Override
publicinthashCode() {
finalintprime =31;
intresult =1;
result = prime * result + ((getId() ==null) ?0: getId().hashCode());
returnresult;
}
@Override
publicbooleanequals(Object obj) {
if(this== obj)
returntrue;
if(obj ==null)
returnfalse;
if(getClass() != obj.getClass())
returnfalse;
Address other = (Address) obj;
if(getId() ==null) {
if(other.getId() !=null)
returnfalse;
}elseif(!getId().equals(other.getId()))
returnfalse;
returntrue;
}
publicbooleanexisted() {
returnfalse;
}
publicbooleanexisted(String arg0, Object arg1) {
returnfalse;
}
publicbooleannotExisted() {
returnfalse;
}
}
Employee.java
packageorg.foreveross.demo.core;
importjavax.persistence.Entity;
importjavax.persistence.Table;
importcom.dayatang.domain.BaseEntity;
@Entity
@Table(name ="employees")
publicclassEmployeeextendsBaseEntity {
/**
*
*/
privatestaticfinallongserialVersionUID = 7289549346393758637L;
privateString name;
privateintage;
privateString gender;
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name = name;
}
publicintgetAge() {
returnage;
}
publicvoidsetAge(intage) {
this.age = age;
}
publicString getGender() {
returngender;
}
publicvoidsetGender(String gender) {
this.gender = gender;
}
@Override
publicinthashCode() {
finalintprime =31;
intresult =1;
result = prime * result + ((getId() ==null) ?0: getId().hashCode());
returnresult;
}
@Override
publicbooleanequals(Object obj) {
if(this== obj)
returntrue;
if(obj ==null)
returnfalse;
if(getClass() != obj.getClass())
returnfalse;
Employee other = (Employee) obj;
if(getId() ==null) {
if(other.getId() !=null)
returnfalse;
}elseif(!getId().equals(other.getId()))
returnfalse;
returntrue;
}
publicbooleanexisted() {
returnfalse;
}
publicbooleanexisted(String arg0, Object arg1) {
returnfalse;
}
publicbooleannotExisted() {
returnfalse;
}
}

其中要注意的是,领域类需要在类名前加上@Entity的标注以表明其是一个领域类。

下面我们将使用Koala快速为Organization生成增删改查的功能及web页面。

右键点击Organization领域类,选择Koala—>CRUD,Koala会对Organization.java类进行分析,然后弹出CRUD的配置窗口

在配置窗口中,“查询条件”标签页是对在web页面的查询功能中要显示的查询条件进行配置,“列表页面”标签页是对前端列表页面要显示的列进行配置,“详情页面”标签页是对前端单个实体的显示页面所要显示的内容进行配置,“新增页面”标签页是对新增实体页面中要填写的内容进行配置,“修改页面”标签页是对修改实体页面中要修改的内容进行配置。

为了快速,我们使用koala自动分析生成的配置,具体如何配置CRUD,请参考CRUD配置说明文档

点击“OK”按钮,弹出生成文件列表及各层生成文件所处模块选择的窗口,如下图:

第一个框中列出了应用层接口所要生成的文件,并列出了项目中的应用层接口模块供用户选择要把文件生成在哪个应用层接口模块中。

第二个框中列出了应用层实现所要生成的文件,并列出了项目中的应用层实现模块供用户选择要把文件生成在哪个应用层实现模块中。

第二个框中列出了展现层所要生成的文件,并列出了项目中的展现层模块供用户选择要把文件生成在哪个展现层模块中。

由于我们每一层只创建了一个模块,所以我们此处无需做选择,直接点击“OK”按钮。Koala将为我们生成一整套的增删改查功能的实现,从应用层的功能代码生成和配置,到展现层web模块的配置和代码实现,包括页面端代码。下面介绍每层生成的文件的作用:

1) 在应用层接口(demo-application)模块,生成了实体操作的接口以及相关的VO及OrganizationApplication接口,该接口中定义了对Organization的增删改查功能。

2) 在应用层实现(applicationImpl)模块,生成了应用层接口的实现:OrganizationApplicationImpl。该类实现了OrganizationApplication接口,实现了对Organization的增删改查功能。

3) 在web模块,生成了OrganizationAction和前端的jsp界面。其中,OrganizationAction通过调用应用层接口实现了对Organization的增删改查,并通过jsp页面与用户交互

下面我们运行Jetty服务器,访问Koala生成的Organization实体的CRUD页面。

右键点击demo项目的demo-web模块,选择Run As --> Koala Jetty Run,运行Jetty服务器。

跑起服务器之后,打开浏览器,输入:http://localhost:8080/pages/core/Organization-list.jsp

点击“增加”按钮,添加新的数据

弹出的新增页面中出现的填写内容及其标签都是根据我们之前在Koala插件CRUD的配置生成的。点击“保存”按钮。

保存成功后回到列表页面,列表上出现我们刚刚添加的信息。

点击该条信息操作列的“查看”链接

系统弹出内容查看页面,页面中出现的信息标签均是我们之前在Koala插件中所配置的,下方是我们所配置的关联实体的标签页显示。

关闭查看页面,在列表页面中勾选信息条目,点击“修改”按钮。

同样,弹出页面中的属性及其标签是根据我们使用koala插件进行的配置生成的,对内容做修改,点击“保存”按钮,回到列表页面。列表上显示已经我们更新的信息。

勾选信息行,点击“删除”按钮,可以将该信息删除。

至此,我们完成了根据Koala插件配置生成增删改查功能。

5 项目的发布

5.1 WebService发布:

假设当我们的程序需要以WebService的形式发布给外界使用,我们可以使用koala插件进行WebService发布。

右键点击项目,选择“Koala Public”->“发布为WebService”。

点击“发布为WebService”选项,Koala插件会先检查项目的正确性,然后自动扫描项目中可以发布为WebService服务的接口,最后弹出选择发布WebService服务的对话框。如下图:

Koala插件会根据方法名称,自动决定选择使用的HTTP方法,在每个方法名称的最前面的中括号中显示了Koala为该方法选定的WebService HTTP方法。如果用户想修改,可以右键点击方法名,在弹出的右键菜单中选择相应的HTTP方法。这里我们只需按照默认的配置发布,点击OK按钮,开始执行发布操作。

Koala插件在弹出框显示的目录中生成了打包了WebService发布的war包,一个在原项目的基础上加入WebService发布代码的WebService项目和一个用于访问该WebService项目的客户端项目,用户可以调用该客户端项目的代码来访问发布的WebService服务。

点击“打开文件夹”按钮,打开发布包所在文件夹。我们将该文件夹中的“demo-WS.war”文件拷到jboss的发布目录中进行发布,并跑起jboss服务器。然后打开浏览器,访问:http://localhost:8081/demo-WS/(8081为jboss的web服务端口号,请根据自己jboss端口号修改)。

点击链接:http://localhost:8081/demo-WS/v1?_wadl

可以看到,页面中显示了我们所发布的webservice接口。

5.2 EJB发布:

假设当我们的程序需要以EJB的形式发布接口给外界调用,我们同样可以使用koala插件进行EJB发布。

右键点击要发布EJB的项目,选择Koala->发布为EJB。

点击“发布为EJB”后,Koala插件会先检查项目的正确性,然后自动扫描项目中可以发布为EJB的接口,最后弹出选择EJB发布的对话框。如下图:

用户可以根据需要选择想要发布为EJB的接口实现,Koala插件为每一个方法提供了EJB发布的两种方式,在“local”树下勾选的方法将作为本地EJB发布,在“remote”树下勾选的方法将作为远程EJB发布。这里我们只需按照默认的配置发布,点击OK按钮,开始执行打包发布EJB的操作。

Koala插件在弹出框显示的目录下生成了用户发布的ear包,一个在原项目的基础上加入了EJB发布代码的EJB项目和一个用于调用本项目EJB服务的客户端项目。用户可以调用该项目的代码进行EJB调用。

点击“打开文件夹”按钮,打开发布包所在文件夹。我们将该文件夹中的“demo-EJB.war”文件拷到jboss的发布目录中进行发布,并跑起jboss服务器。

打开jboss的JNDI查看,可以看到我们所发布的EJB接口。

至此,我们完成了一个使用koala插件从项目创建,业务开发到打包发布的简单项目过程。

---恢复内容结束---

Quick Start

1 Koala的下载和安装

1.1 前提准备

使用koala,确保你的电脑上已安装并正确运行以下软件:

1) JDK 1.5以上

2) Maven 2以上

3) eclipse 3.7以上

4) eclipse安装m2eclipse插件

m2eclispe的插件更新地址为:http://download.eclipse.org/technology/m2e/releases

Warning

koala依赖m2eclipse插件,请确保你的m2eclipse插件的版本为1.2以上。旧有的0.2版本的m2eclipse与koala存在不兼容的现象。

如果当前eclispe安装版本为0.2版本的m2eclipse,请先uninstall,再安装最新版本的m2eclipse。

Warning

确保maven的配置文件在${user.home}/.m2/setting.xml中,如果直接使用maven的conf/settting.xml配置,将会导致部分功能出现

“项目不能正常编译,请检查”错误

1.2 Koala的下载

koala是一款eclipse插件,请下载我们的插件zip包进行安装。点击此处下载

1.3 Koala的安装

遵照以下步骤进行安装:

1) 打开eclipse,Help->Install New Software。

2) 选择Add,分别输入名称及更新地址(或Archeive选择下载的更新ZIP包)。

3)点击确定,出现可安装的koala列表,全选。

4) 按照提示进行Next>进行安装,eclipse提示重启便表示安装成功。

现在,你可以开始使用koala进行项目的开发了。

2 项目的创建

下面我们将带领大家使用Koala插件创建一个新的项目,打开eclipse的新建项目向导对话框,选择Koala->Koala Project。

点击Next按钮,出现Koala的新建项目向导,如图:

在“Project name”处填写项目名称:demo,其他使用默认,点击Next按钮,进入下一步,maven信息填写的向导页。

“Group Id”处填写:org.foreveross,“Artifact Id”处填写:demo,其他默认,点击Next按钮,进入添加模块的向导页。

Koala根据领域驱动设计的分层思想默认生成了四个层的模块,其中应用层分为接口和实现两个模块。“demo-infra”为基础设施层的模块,“demo-core”为领域层的模块,“demo-application”为应用层接口模块,“demo-applicationImpl”为应用层实现模块,“demo-web”为展现层模块并默认使用了Struts2(如果用户有不同需求可自行修改)。用户可根据需要点击“add”按钮添加新模块,或者选中模块后点击“edit”按钮修改模块配置,或者选中点击“remove“按钮删除模块等。这里我们不做修改,使用默认生成的模块。

点击Next按钮,进入下一步。

由于我们项目中有视图层web模块,koala会让我们选择是否将权限系统加入到web模块中。下面第一个单选按钮组是选择权限的认证连接方式,第二个单选按钮组是选择所要使用的缓存技术类型(对用户,角色,资源等信息的缓存),最后一个单选按钮组是选择权限系统的页面菜单结构布局的模版。同样,我们使用默认选中的配置,即使用“集成式(jdbc)”的连接方式,“ehCache”来实现缓存,并使用“TemplateA”的页面模版。点击Next按钮,进入最后的项目信息汇总展示页面。

该页面展示了我们所配置的项目信息。点击“Finish”按钮完成项目信息的填写并开始生成项目。

在生成项目完成之后会弹出导入项目的对话框。

选择要导入的项目和模块,此处我们可以看到,在导入项目列表中,多了一个“demo-conf”项目,这是koala默认用来存放公用配置文件的模块,所以可以多模块共享的配置文件均放在此模块中。

在这里,我们一样使用默认的全部导入,直接点击“Finish”按钮开始项目和模块的导入。

完成之后我们可以在eclipse的“Project Explorer”看到我们使用Koala新建并导入的demo项目。

接下来,我们就可以在demo项目中开始我们的业务开发了。

3 权限系统

我们在生成项目的时候已经勾选了在demo-web模块加入了koala权限系统。现在我们的项目中便已经有了一套基于角色授权的权限管理系统。

右键点击demo项目的demo-web模块,选择Run As --> Koala Jetty Run,运行Jetty服务器。

跑起服务器之后,打开浏览器,输入:http://localhost:8080,由于有了权限管理,系统将要求用户必须进行登录。

关于权限系统的详细使用方法,请参考4.权限系统支持

4 实体类CRUD

下面我们自己新建一个Organization领域类及其的关联属性Address领域类(ManyToOne),Employee领域类(OneToMany)。

下面是各领域类代码:

Organization.java
packageorg.foreveross.demo.core;
importjava.util.List;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.JoinColumn;
importjavax.persistence.ManyToOne;
importjavax.persistence.OneToMany;
importjavax.persistence.Table;
importcom.dayatang.domain.BaseEntity;
@Entity
@Table(name ="organizations")
publicclassOrganizationextendsBaseEntity {
/**
*
*/
privatestaticfinallongserialVersionUID = 1946346499573992799L;
privateString name;
@Column(name ="serial_number")
privateString serialNumber;
@ManyToOne
@JoinColumn(name ="address_id")
privateAddress address;
@OneToMany
privateList<Employee> employees;
publicAddress getAddress() {
returnaddress;
}
publicvoidsetAddress(Address address) {
this.address = address;
}
publicList<Employee> getEmployees() {
returnemployees;
}
publicvoidsetEmployees(List<Employee> employees) {
this.employees = employees;
}
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name = name;
}
publicString getSerialNumber() {
returnserialNumber;
}
publicvoidsetSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
@Override
publicinthashCode() {
finalintprime =31;
intresult =1;
result = prime * result + ((getId() ==null) ?0: getId().hashCode());
returnresult;
}
@Override
publicbooleanequals(Object obj) {
if(this== obj)
returntrue;
if(obj ==null)
returnfalse;
if(getClass() != obj.getClass())
returnfalse;
Organization other = (Organization) obj;
if(getId() ==null) {
if(other.getId() !=null)
returnfalse;
}elseif(!getId().equals(other.getId()))
returnfalse;
returntrue;
}
publicbooleanexisted() {
returnfalse;
}
publicbooleanexisted(String arg0, Object arg1) {
returnfalse;
}
publicbooleannotExisted() {
returnfalse;
}
Address.java
packageorg.foreveross.demo.core;
importjavax.persistence.Entity;
importjavax.persistence.Table;
importcom.dayatang.domain.BaseEntity;
@Entity
@Table(name ="addresses")
publicclassAddressextendsBaseEntity {
/**
*
*/
privatestaticfinallongserialVersionUID = -208372668032795503L;
privateString country;
privateString province;
privateString city;
publicString getCountry() {
returncountry;
}
publicvoidsetCountry(String country) {
this.country = country;
}
publicString getProvince() {
returnprovince;
}
publicvoidsetProvince(String province) {
this.province = province;
}
publicString getCity() {
returncity;
}
publicvoidsetCity(String city) {
this.city = city;
}
@Override
publicinthashCode() {
finalintprime =31;
intresult =1;
result = prime * result + ((getId() ==null) ?0: getId().hashCode());
returnresult;
}
@Override
publicbooleanequals(Object obj) {
if(this== obj)
returntrue;
if(obj ==null)
returnfalse;
if(getClass() != obj.getClass())
returnfalse;
Address other = (Address) obj;
if(getId() ==null) {
if(other.getId() !=null)
returnfalse;
}elseif(!getId().equals(other.getId()))
returnfalse;
returntrue;
}
publicbooleanexisted() {
returnfalse;
}
publicbooleanexisted(String arg0, Object arg1) {
returnfalse;
}
publicbooleannotExisted() {
returnfalse;
}
}
Employee.java
packageorg.foreveross.demo.core;
importjavax.persistence.Entity;
importjavax.persistence.Table;
importcom.dayatang.domain.BaseEntity;
@Entity
@Table(name ="employees")
publicclassEmployeeextendsBaseEntity {
/**
*
*/
privatestaticfinallongserialVersionUID = 7289549346393758637L;
privateString name;
privateintage;
privateString gender;
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name = name;
}
publicintgetAge() {
returnage;
}
publicvoidsetAge(intage) {
this.age = age;
}
publicString getGender() {
returngender;
}
publicvoidsetGender(String gender) {
this.gender = gender;
}
@Override
publicinthashCode() {
finalintprime =31;
intresult =1;
result = prime * result + ((getId() ==null) ?0: getId().hashCode());
returnresult;
}
@Override
publicbooleanequals(Object obj) {
if(this== obj)
returntrue;
if(obj ==null)
returnfalse;
if(getClass() != obj.getClass())
returnfalse;
Employee other = (Employee) obj;
if(getId() ==null) {
if(other.getId() !=null)
returnfalse;
}elseif(!getId().equals(other.getId()))
returnfalse;
returntrue;
}
publicbooleanexisted() {
returnfalse;
}
publicbooleanexisted(String arg0, Object arg1) {
returnfalse;
}
publicbooleannotExisted() {
returnfalse;
}
}

其中要注意的是,领域类需要在类名前加上@Entity的标注以表明其是一个领域类。

下面我们将使用Koala快速为Organization生成增删改查的功能及web页面。

右键点击Organization领域类,选择Koala—>CRUD,Koala会对Organization.java类进行分析,然后弹出CRUD的配置窗口

在配置窗口中,“查询条件”标签页是对在web页面的查询功能中要显示的查询条件进行配置,“列表页面”标签页是对前端列表页面要显示的列进行配置,“详情页面”标签页是对前端单个实体的显示页面所要显示的内容进行配置,“新增页面”标签页是对新增实体页面中要填写的内容进行配置,“修改页面”标签页是对修改实体页面中要修改的内容进行配置。

为了快速,我们使用koala自动分析生成的配置,具体如何配置CRUD,请参考CRUD配置说明文档

点击“OK”按钮,弹出生成文件列表及各层生成文件所处模块选择的窗口,如下图:

第一个框中列出了应用层接口所要生成的文件,并列出了项目中的应用层接口模块供用户选择要把文件生成在哪个应用层接口模块中。

第二个框中列出了应用层实现所要生成的文件,并列出了项目中的应用层实现模块供用户选择要把文件生成在哪个应用层实现模块中。

第二个框中列出了展现层所要生成的文件,并列出了项目中的展现层模块供用户选择要把文件生成在哪个展现层模块中。

由于我们每一层只创建了一个模块,所以我们此处无需做选择,直接点击“OK”按钮。Koala将为我们生成一整套的增删改查功能的实现,从应用层的功能代码生成和配置,到展现层web模块的配置和代码实现,包括页面端代码。下面介绍每层生成的文件的作用:

1) 在应用层接口(demo-application)模块,生成了实体操作的接口以及相关的VO及OrganizationApplication接口,该接口中定义了对Organization的增删改查功能。

2) 在应用层实现(applicationImpl)模块,生成了应用层接口的实现:OrganizationApplicationImpl。该类实现了OrganizationApplication接口,实现了对Organization的增删改查功能。

3) 在web模块,生成了OrganizationAction和前端的jsp界面。其中,OrganizationAction通过调用应用层接口实现了对Organization的增删改查,并通过jsp页面与用户交互。

下面我们运行Jetty服务器,访问Koala生成的Organization实体的CRUD页面。

右键点击demo项目的demo-web模块,选择Run As --> Koala Jetty Run,运行Jetty服务器。

跑起服务器之后,打开浏览器,输入:http://localhost:8080/pages/core/Organization-list.jsp

点击“增加”按钮,添加新的数据。

弹出的新增页面中出现的填写内容及其标签都是根据我们之前在Koala插件CRUD的配置生成的。点击“保存”按钮。

保存成功后回到列表页面,列表上出现我们刚刚添加的信息。

点击该条信息操作列的“查看”链接。

系统弹出内容查看页面,页面中出现的信息标签均是我们之前在Koala插件中所配置的,下方是我们所配置的关联实体的标签页显示。

关闭查看页面,在列表页面中勾选信息条目,点击“修改”按钮。

同样,弹出页面中的属性及其标签是根据我们使用koala插件进行的配置生成的,对内容做修改,点击“保存”按钮,回到列表页面。列表上显示已经我们更新的信息。

勾选信息行,点击“删除”按钮,可以将该信息删除。

至此,我们完成了根据Koala插件配置生成增删改查功能。

5 项目的发布

5.1 WebService发布:

假设当我们的程序需要以WebService的形式发布给外界使用,我们可以使用koala插件进行WebService发布。

右键点击项目,选择“Koala Public”->“发布为WebService”。

点击“发布为WebService”选项,Koala插件会先检查项目的正确性,然后自动扫描项目中可以发布为WebService服务的接口,最后弹出选择发布WebService服务的对话框。如下图:

Koala插件会根据方法名称,自动决定选择使用的HTTP方法,在每个方法名称的最前面的中括号中显示了Koala为该方法选定的WebService HTTP方法。如果用户想修改,可以右键点击方法名,在弹出的右键菜单中选择相应的HTTP方法。这里我们只需按照默认的配置发布,点击OK按钮,开始执行发布操作。

Koala插件在弹出框显示的目录中生成了打包了WebService发布的war包,一个在原项目的基础上加入WebService发布代码的WebService项目和一个用于访问该WebService项目的客户端项目,用户可以调用该客户端项目的代码来访问发布的WebService服务。

点击“打开文件夹”按钮,打开发布包所在文件夹。我们将该文件夹中的“demo-WS.war”文件拷到jboss的发布目录中进行发布,并跑起jboss服务器。然后打开浏览器,访问:http://localhost:8081/demo-WS/(8081为jboss的web服务端口号,请根据自己jboss端口号修改)。

点击链接:http://localhost:8081/demo-WS/v1?_wadl

可以看到,页面中显示了我们所发布的webservice接口。

5.2 EJB发布:

假设当我们的程序需要以EJB的形式发布接口给外界调用,我们同样可以使用koala插件进行EJB发布。

右键点击要发布EJB的项目,选择Koala->发布为EJB。

点击“发布为EJB”后,Koala插件会先检查项目的正确性,然后自动扫描项目中可以发布为EJB的接口,最后弹出选择EJB发布的对话框。如下图:

用户可以根据需要选择想要发布为EJB的接口实现,Koala插件为每一个方法提供了EJB发布的两种方式,在“local”树下勾选的方法将作为本地EJB发布,在“remote”树下勾选的方法将作为远程EJB发布。这里我们只需按照默认的配置发布,点击OK按钮,开始执行打包发布EJB的操作。

Koala插件在弹出框显示的目录下生成了用户发布的ear包,一个在原项目的基础上加入了EJB发布代码的EJB项目和一个用于调用本项目EJB服务的客户端项目。用户可以调用该项目的代码进行EJB调用。

点击“打开文件夹”按钮,打开发布包所在文件夹。我们将该文件夹中的“demo-EJB.war”文件拷到jboss的发布目录中进行发布,并跑起jboss服务器。

打开jboss的JNDI查看,可以看到我们所发布的EJB接口。

至此,我们完成了一个使用koala插件从项目创建,业务开发到打包发布的简单项目过程。

分享到:
评论

相关推荐

    考拉开发指南

    - **目的**:确保开发环境能够顺利地支持Koala4项目的创建与运行。 - **步骤**:通常涉及下载插件包、导入Eclipse或其他IDE中,并完成必要的配置工作。 **快速创建基本项目** - **准备**:安装好Koala4插件后,通过...

    li_3ck_02a_1118.pdf

    li_3ck_02a_1118

    基于MATLAB的牛顿迭代法实现

    基于MATLAB的牛顿迭代法实现

    mellitz_3ck_01_0319.pdf

    mellitz_3ck_01_0319

    2025探索银行业人工智能驱动技术转型的投资回报率

    内容概要:文章阐述了银行采用人工智能(AI)技术替代传统系统的紧迫性和收益,讨论了通过构建现代化的数据和技术平台实现效率提升的方法,同时强调实施过程中确保数据质量和建立信任的重要性。文中提及,在金融行业中,若想优化业绩则必须拥抱AI带来的机遇,并为此进行经营模式的革新。根据Workday主办的研讨会内容,PwC金融服务风险与监管领导和Workday金融服务高层指出了大部分银行对AI认知不足的问题,强调AI在金融、人力资源以及IT等领域的广泛应用潜力及具体应用场景,如欺诈检测、技能映射和财务管理方面的作用。并且提到了AI部署过程中可能出现的技术与非技术难题及相应解决办法,鼓励金融机构及时投资建设新型基础设施,以保持竞争力。 适用人群:银行及其他金融机构管理人员;金融科技领域的专业研究人员;对企业数字化和智能化转型感兴趣的商业分析师、投资者;从事信息技术咨询工作的顾问。 使用场景及目标:本文可以帮助金融机构制定合理的技术发展战略规划,评估是否有必要推进AI技术转型,同时也为希望涉足银行科技项目的开发者提供了宝贵的市场洞察,帮助理解行业内普遍存在的困难与潜在的市场需求。此外,对于想要了解银行

    matlab程序代码项目案例论文+程序 基于在线优化的快速模型预测控制Fast model predicitive control with matlab interface.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_043071]Phase Manager and a Scalable Batching Solution.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_044386]1769-SM2 Compact I-O to DSI Module - Multi Drive Mode Operation - with.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_041232]Monitor I-O Connections in Logix.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    chromedriver-linux64-136.0.7058.0.zip

    chromedriver-linux64-136.0.7058.0.zip

    [AB PLC例程源码][MMS_042504]Logix5000 interface to Atlas-Copco Tool Controller over EtherNet-IP.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    电力工程领域中背压热电联产电厂的设计与参数计算

    内容概要:本文档介绍了背压热电联产(CHP)发电厂的详细设计步骤,涵盖确定各状态点的压力、温度、比焓以及质量流率的具体方法。主要内容围绕计算净电功率、燃料消耗及其效率展开,并提供了T-s图绘制的指南。针对每个组件(如蒸汽轮机、冷凝器、除氧器等),都列出了详细的效率假设和压力损失表,为实际工程应用提供了宝贵的参考资料和操作指导。同时,该作业任务要求学生从给定初始值中选择合适的操作条件进行系统模拟,并利用课程讲义和Moodle平台资料完成计算流程。 适用人群:对能源转换和动力设备设计感兴趣的学生或者初涉该领域的工程师。 使用场景及目标:旨在帮助学员深入了解并掌握背压热电联产装置的工作原理和技术指标计算的方法论,通过实践练习提高他们的问题解决能力。 其他说明:文档强调了稳态运行假设的重要性,即物质平衡等于能量输入等于输出的原则,并鼓励参与者借助附录提供的典型操作参数图表来寻找解决问题的方向。此外,它还特别指出对于一些变量值求解可能需要迭代法来进行调整,直至获得稳定结果。提交的报告必须含有一份详细的T-s图和其他必要附件。

    机器学习-市财政收入分析(含数据集)

    机器学习_市财政收入分析(含数据集)

    [AB PLC例程源码][MMS_046989]KAT with Code Sequencer.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    tracy_3cd_01_0318.pdf

    tracy_3cd_01_0318

    lusted_3cd_01_0918.pdf

    lusted_3cd_01_0918

    基于51的自动分拣系统设计20250307

    题目:基于51的自动分拣系统设计 主控:AT89C52 测距模块:超声波测距模块 甲醛传感器(ADC0832+滑动变阻器模拟) 粉尘传感器(PCF8591+滑动变阻器模拟) 净化模块(继电器驱动蓝灯) 排风模块(继电器驱动绿灯) 电源电路(5V降压为3.3V供电) 显示模块(LCD1602) 声光报警 按键(3个,切换阈值选择,阈值加减) 检测物体:开关模拟 电机驱动模块(继电器驱动直流电机转动) 功能: 1.显示屏显示甲醛,粉尘浓度可以切换设置阈值。 2.通过甲醛传感器检测车间环境,大于阈值时声光报警并启动净化模块。 3.通过粉尘传感器检测车间环境,大于阈值时声光报警并启动排风模块。 4.采用超声波传感器进行物体超高监测异常(大于XX距离)时触发声光报警 5.检测到物体(开关闭合)直流电机转动(模拟传送带)

    network-server

    network_server

    [AB PLC例程源码][MMS_046691]Integrated Architecture Foundations of Modular Programming.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

Global site tag (gtag.js) - Google Analytics