apache isis_使用Apache Isis快速进行SEMAT应用程序开发

apache isis

TL; DR这是关于一个帖子会谈SEMAT宠物项目我创建使用Apache伊希斯和部署到OpenShift在线这里http://semat.ofbizian.com

Apache Isis

作为主要在后端系统上工作的Java开发人员,我讨厌创建用户界面和处理Java脚本。 幸运的是,有一些Java项目,例如JSF(grrr),Apache Wicket和Vaadin,它们可以帮助完全避免使用Javascript并仍然创建功能用户界面。 但是即使有这些项目,开发人员也必须考虑并积极地从Java代码创建用户界面。 这类似于在诸如Hibernate之类的ORM时代编写自己SQL语句–只有在OOTB ORM不足以适合用例的情况下,我们才进行此活动。 这正是Apache Isis所适合的:给定域模型和映射注释,它将在运行时生成完整的用户界面。 从某种意义上说,Apache Isis是Java的OUIM(对象/用户界面映射)框架。


Apache Isis除了创建用户界面以外,还有很多其他功能,它是专注于域驱动设计的全栈快速应用程序开发框架。 但是,我们不讨论它,而是看一个使用Apache Isis创建的完整应用程序。

SEMAT精华内核

为了学习Apache Isis,我决定实现SEMAT模型并将其作为Docker容器部署到OpenShift Online。 简而言之,SEMAT(软件工程方法和理论)本质内核是OMG标准 ,它除其他外,还帮助定义了一个框架,用于从多个角度(称为alpha)描述软件项目的状态。

SEMAT阿尔帕州

想法是,可以使用以下七个字母以通用的方式描述每个项目:

利益相关者,机会,需求,软件系统,工作,团队,工作方式。 每个Alpha可以处于一个或多个状态,例如,
利益相关者可以是:认可,代表,参与,一致同意,满意等。此外,每个州在将Alpha过渡到该州之前,都需要满足某些条件。

利益相关者Alpha的州

如您所见,这是一个非常简单的域模型,带有状态机逻辑。

展示柜应用

够了,要查看我必须为此应用程序编写多少Java,请在github上检查项目的dom模块 。 所有其他框架代码都是通过maven插件生成的,不需要用户界面代码。 这是Project域实体屏幕渲染的屏幕截图:

作为Apache Wicket屏幕的项目视图

除了生成用户界面之外,Apache Isis还将使用相同的域模型生成REST API。 多么酷啊。

从域模型生成的SEMAT REST API

而这一切的好处在于,生成UI可以使您快速迭代域模型,将其显示给业务所有者以获取反馈并继续发展模型。

已实现/启用了一些SEMAT应用程序功能

  • 多租户
  • 每个租户管理多个项目
  • 管理项目Alpha状态
  • 每个租户的自定义Essence Alpha状态列表
  • 每个租户的自定义精华清单项目
  • Alpha状态蜘蛛/雷达图
  • 通过域模型自动生成基于Apache Wicket的UI
  • 从同一域模型自动生成REST API
  • 自我注册/注册
  • 审核用户操作
  • 会话记录
  • 国际化
  • 面包屑小径
  • 书签

生成并运行

检查自述文件以获取完整的详细信息,但是您可以在本地或在OpenShift上构建和运行该应用程序以进行尝试。

mvn clean install
cd webapp
mvn jetty:run
mvn clean install
docker build --rm -t bibryam/semat .
docker run -p 8080:8080 bibryam/semat

然后转到http:// localhost:8080 /并登录:user / user

部署到OpenShift

一旦您在本地或本地运行OpenShift
online并安装了oc客户端,然后可以使用以下命令部署已经构建的semat docker映像:

oc new-project semat
oc new-app bibryam/semat:latest -e CATALINA_OPTS=“-Xmx300m”
oc expose service semat

如果您不信任其他人构建的docker映像(您不应该这样做!),则可以使用选项2和3构建如上所示的自己的docker映像,并将其推入自己的docker注册表并从中运行应用程序:

oc new-app your_name/semat:latest -e CATALINA_OPTS=“-Xmx300m”

或者,您可以避免同时安装和运行docker,并在OpenShift上构建源代码和docker映像。 这就是所谓的OpenShift源到图像
方法 。 您可以通过使用例如“ Red Hat JBoss Web Server 3.1 Tomcat 8 1.0”模板并指向SEMAT github存储库从OpenShift UI进行操作。 或使用项目本身提供的模板:

oc create -f semat-openshift-template.json
oc process semat

使用源到映像的方法允许设置github Webhooks,具有Red Hat基本映像,添加jolokia,完成Java内存配置等。

OpenShift上的现场演示

请参阅试用该应用程序,检查在OpenShift Online上运行的实时演示
http://semat.ofbizian.com

总之,如果您拥有一个经常更改的域模型,并且更改域逻辑的敏捷性比用户用户界面的外观更为重要,请查看Apache Isis。 这是一个令人难以置信的高效且快速的业务应用程序开发框架。

翻译自: https://www.javacodegeeks.com/2017/12/rapid-semat-application-development-apache-isis.html

apache isis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacBook外接显示器及相关设置详解(分屏/多屏)

文章目录一、连接显示器和电脑二、打开显示器设置界面三、调整显示器图标位置四、设置主显示器五、移动 Dock六、镜像模式七、合盖模式八、扩展模式九、设置外接显示器竖屏显示十、外接显示器后,如何调出更多分辨率十一、关于程序坞显示的问题一、连接显示器和电脑 …

ibm liberty_使用Eclipse和Open Liberty的Java EE 8上的Java 9

ibm liberty几周前,我写了一篇文章,题目是哪个IDE和服务器支持Java EE 8和Java9 ,着眼于Java 9和Java EE 8之间的当前状态。您可以期望事情发展很快,现在我们有了一些alpha和支持Java 9和Java EE 8的开发版本。这些是– Payara 5…

inkscape生成g代码_三点二. 量子对抗生成网络 (Quantum GAN)

理论基础之前我们介绍了强化学习Leo:和Leo一起学量子计算:三点一. 微分线路和强化学习​zhuanlan.zhihu.com上面这篇博文告诉我们如何把量子线路类比为神经网络,并获取它的导数。在可微分线路的基础上,我们可以做一些更加酷的事情…

python用xpath爬取10页网站图片

#爬取网站图片 import requests from lxml import etree import osi0 #计数 #请求头 headers{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"} for x in range(…

MacBook外接显示器的显示模式介绍及设置说明(分屏/多屏)

文章目录一、显示模式的介绍(一)扩展模式(程序员开发模式)(二)合盖模式(三)镜像模式(四)混合模式二、显示模式的设置(一)扩展模式设置…

aws fargate_借助Fargate和EKS,AWS甚至可以实现Cloud-ier和Kuberneties-ier

aws fargate在本周的re:Invent大会上,AWS宣布了很多很棒的事情。 您应该检查一下他们的页面 ,以了解他们正在做的所有新工作的概况–内容很多,而且很多看起来立即有用。 如果您想了解更多信息,我的同事凯利安德鲁斯&am…

关键词分词工具_快图制作工具 | 如何制作词云图?

点击蓝字关注我们如何制作词云图?首先,我们需要对“词云”有个简单的概念。“词云”这个概念最先由美国西北大学新闻学副教授、新媒体专业主任里奇戈登(Rich Gordon)提出。“词云”(别名:文字云,外文名:wordle)即由词汇…

机器学习西瓜书各章详细目录定位

第一章 绪论 1.1 引言(P1) 1.2 基本术语(P2) 1.3 假设空间(P4) 1.4 归纳偏好(P6) 1.5 发展历程(P10) 1.6 应用现状(P13) 1.7 阅读材料(P16) 第二章 模型评估与选择 2.1 经验误差与过拟合(P23) 2.2 评估方法(P24) 2.2.1 留出法 2.2.2 交叉验证法 2.2.3 自助法 2.3 性能…

表达式中常用到的运算符

文章目录分组一元运算符算数运算符逻辑移位按位“与”按位“或”按位“异”赋值表达式分隔符分组 () 一元运算符 ! ~ - 算数运算符 * / % - 逻辑移位 << >> 按位“与” & 按位“或” | 按位“异” ^ 赋值 * / % - & ^ | << >>…

openhub_OpenHub框架–下一个有趣的功能

openhub这是有关OpenHub框架系列的第三篇文章-第一篇介绍OpenHub框架 &#xff0c;第二篇介绍异步消息传递模型 。 该系列的最后一篇文章将更详细地介绍其他一些有趣的功能&#xff0c;并说明为什么OpenHub可以成为您的集成项目的理想选择的原因。 节流 节流是一种功能&#…

Numpy常用基础

生成Numpy的一维数组 xnp.array([1.0,2.0,3.0]) #生成数组 print(x) xnp.array([1.1,2.2,3.3]) print(y.round(1)) #矩阵的结果保留一位小数#结果 [1. 2. 3.] #生成的数组默认省略小数点后面的0 [1.1 2.2 3.3]Numpy数组的算术运算 xnp.array([1,2,3]) ynp.array([4,5,6]) …

售票系统的组件图和部署图_识读配电箱系统图

配电箱确实有很多字母&#xff0c;要熟悉这些字母的基本含义&#xff0c;才能更准确地知道配电箱系统图的意思。网上查了一些资料&#xff0c;发现配电箱中的字母实在是太多了&#xff0c;先简单说几个需要基本认识的字母&#xff1a;GCK、GCS、MNS是低压抽出式开关柜&#xff…

Linux命令之 -- export 设置/显示系统环境变量

文章目录一、命令介绍二、export 的原理&#xff08;一&#xff09;什么是进程&#xff08;二&#xff09;父子进程关系&#xff08;三&#xff09;子 shell 如何访问父 shell 的变量&#xff08;export 实现原理&#xff09;&#xff08;四&#xff09;父 shell 如何访问子 sh…

packt_Packt和Java Code Geeks提供的$ 5 Java编程书籍!

packt你好&#xff0c;极客&#xff01; 今天&#xff0c;我们为您带来一些激动人心的消息&#xff01; Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说&#xff0c;Java仍然是最强大的选择之一&#xff0c;它是定义企业和移动设备的语言。 本…

Matplotlib常用库方法

模块pyplot常用方法 import matplotlib.pyplot as plt #pyplot模块包含很多用于生成图表的函数plt.plot(x,y,format_string) #x,y分别为x轴y轴的坐标值&#xff0c;第三个参数是风格&#xff0c;具体去查&#xff0c;这方法的参数很麻烦 plt.xlabel(x,fontsize14) #显示x轴的…

MacBook 如何一次性关闭所有程序的通知消息

特别反感应用程序经常弹出通知消息&#xff0c;挨个去关闭应用程序的通知消息又特别麻烦&#xff0c;可以打开『勿扰模式』&#xff0c;这就可以屏蔽掉所有的通知消息了。

反射获取list泛型_Android 从浅到懂使用反射机制

定义Java 反射机制是发生在运行状态中&#xff0c;对于任何一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任何一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。使用…

谷歌 recaptcha_在Spring Boot应用程序中使用Google reCaptcha

谷歌 recaptcha介绍 Google的reCaptcha是一个库&#xff0c;用于防止漫游器将数据提交到您的公共表单或访问您的公共数据。 在本文中&#xff0c;我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例…

数学建模python教材推荐_数模竞赛专攻python应该准备什么?

想起以前打开Matlab就不忍心关掉的阴影(无SSD打开及其慢)。没有什么非要二选一&#xff0c;喜欢哪个用哪个都行&#xff0c;两个都试试比一比也行&#xff0c;比赛更不会关心你的结果图哪儿来的(小孩才。。。大人全都。。。)。Matlab有Matlab的好处&#xff0c;非常成熟的软件包…

python中if __name__ == ‘__main__‘:的简单理解

举例说明&#xff0c;这里有两个模块 # ni模块 print("这是1.") if __name__ __main__:print("这是2.")输出结果: 这是1.这是2. #wo模块 import ni print("这是3.")输出结果: 这是1这是3 总结&#xff1a; 运行自己的模块时会运行if _…