使用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
package org.foreveross.demo.core;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.dayatang.domain.BaseEntity;
@Entity
@Table (name = "organizations" )
public class Organization extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = 1946346499573992799L;
private String name;
@Column (name = "serial_number" )
private String serialNumber;
@ManyToOne
@JoinColumn (name = "address_id" )
private Address address;
@OneToMany
private List<Employee> employees;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this .address = address;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this .employees = employees;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this .serialNumber = serialNumber;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((getId() == null ) ? 0 : getId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
Organization other = (Organization) obj;
if (getId() == null ) {
if (other.getId() != null )
return false ;
} else if (!getId().equals(other.getId()))
return false ;
return true ;
}
public boolean existed() {
return false ;
}
public boolean existed(String arg0, Object arg1) {
return false ;
}
public boolean notExisted() {
return false ;
}
Address.java
package org.foreveross.demo.core;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.dayatang.domain.BaseEntity;
@Entity
@Table (name = "addresses" )
public class Address extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = -208372668032795503L;
private String country;
private String province;
private String city;
public String getCountry() {
return country;
}
public void setCountry(String country) {
this .country = country;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this .province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this .city = city;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((getId() == null ) ? 0 : getId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
Address other = (Address) obj;
if (getId() == null ) {
if (other.getId() != null )
return false ;
} else if (!getId().equals(other.getId()))
return false ;
return true ;
}
public boolean existed() {
return false ;
}
public boolean existed(String arg0, Object arg1) {
return false ;
}
public boolean notExisted() {
return false ;
}
}
Employee.java
package org.foreveross.demo.core;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.dayatang.domain.BaseEntity;
@Entity
@Table (name = "employees" )
public class Employee extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = 7289549346393758637L;
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this .gender = gender;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((getId() == null ) ? 0 : getId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
Employee other = (Employee) obj;
if (getId() == null ) {
if (other.getId() != null )
return false ;
} else if (!getId().equals(other.getId()))
return false ;
return true ;
}
public boolean existed() {
return false ;
}
public boolean existed(String arg0, Object arg1) {
return false ;
}
public boolean notExisted() {
return false ;
}
}

其中要注意的是,领域类需要在类名前加上@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
package org.foreveross.demo.core;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.dayatang.domain.BaseEntity;
@Entity
@Table (name = "organizations" )
public class Organization extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = 1946346499573992799L;
private String name;
@Column (name = "serial_number" )
private String serialNumber;
@ManyToOne
@JoinColumn (name = "address_id" )
private Address address;
@OneToMany
private List<Employee> employees;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this .address = address;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this .employees = employees;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this .serialNumber = serialNumber;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((getId() == null ) ? 0 : getId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
Organization other = (Organization) obj;
if (getId() == null ) {
if (other.getId() != null )
return false ;
} else if (!getId().equals(other.getId()))
return false ;
return true ;
}
public boolean existed() {
return false ;
}
public boolean existed(String arg0, Object arg1) {
return false ;
}
public boolean notExisted() {
return false ;
}
Address.java
package org.foreveross.demo.core;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.dayatang.domain.BaseEntity;
@Entity
@Table (name = "addresses" )
public class Address extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = -208372668032795503L;
private String country;
private String province;
private String city;
public String getCountry() {
return country;
}
public void setCountry(String country) {
this .country = country;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this .province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this .city = city;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((getId() == null ) ? 0 : getId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
Address other = (Address) obj;
if (getId() == null ) {
if (other.getId() != null )
return false ;
} else if (!getId().equals(other.getId()))
return false ;
return true ;
}
public boolean existed() {
return false ;
}
public boolean existed(String arg0, Object arg1) {
return false ;
}
public boolean notExisted() {
return false ;
}
}
Employee.java
package org.foreveross.demo.core;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.dayatang.domain.BaseEntity;
@Entity
@Table (name = "employees" )
public class Employee extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = 7289549346393758637L;
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this .gender = gender;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((getId() == null ) ? 0 : getId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
Employee other = (Employee) obj;
if (getId() == null ) {
if (other.getId() != null )
return false ;
} else if (!getId().equals(other.getId()))
return false ;
return true ;
}
public boolean existed() {
return false ;
}
public boolean existed(String arg0, Object arg1) {
return false ;
}
public boolean notExisted() {
return false ;
}
}

其中要注意的是,领域类需要在类名前加上@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插件从项目创建,业务开发到打包发布的简单项目过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值