Oracle ADF和Oracle Jet一起工作。 建筑模式

在本文中,我将考虑在Oracle ADF和Oracle Jet的组合之上实现应用程序的各种体系结构模式。 练习ADF的组织可能会考虑将Oracle Jet合并到现有项目中,以刷新外观并使其具有现代感和响应能力,并以新方式实施新功能。 它可能会考虑将Oracle Jet用于全新的项目,以及显然用于与移动设备的混合应用程序开发相关的项目。

Oracle Jet与UI有关,仅与客户端有关。 因此,无论如何,服务器端都必须实现一些东西。 显然,许多组织将决定使用ADF来重用其在ADF中的知识,经验,实施和投资。 这是很合理的。 因此,让我们看一下在将Oracle Jet与Oracle ADF相结合时我们有哪些选择。

第一个,最明显和最受欢迎的选择是将Oracle Jet置于ADF BC之上。 因此,Web或混合移动应用程序的客户端是通过Jet实现的,而服务器端是作为Rest服务公开的ADF BC。 借助JDeveloper 12.2.x,您只需单击几下鼠标便可以将ADF BC作为Rest服务公开。

oracle adf公开adf

这种方法的优点是非常简单的体系结构。 简单的东西就有机会工作更长的时间。 另一个非常有价值的好处是,我们将重用我们的资源,我们的知识和ADF经验,如果正确地实现了现有的ADF应用程序,那么我们将重用业务逻辑实现的最关键部分。

但是,我们必须了解,在ADF应用程序中完美运行的ADF BC商业服务对于Jet应用程序可能没有用。 这是为什么? 主要原因是我们更改了状态管理模型。 我们从经典的ADF有状态行为切换为REST无状态模型。 此外,在Jet Web和Hybrid应用程序中,UI设计更有可能会有所不同。

因此,我们需要创建新的ADF BC服务,以支持无状态模型并为新UI的方便提供服务。

好消息是,我们不必从头开始构建所有内容。 如果以正确的方式构建现有的ADF BC模型,则我们可以重用其核心部分,包括实体和在实体级别实现的业务逻辑。

因此,我们可以将整个ADF BC模型拆分为包含实体,实用程序和共享AM的核心部分,以及包含特定AM和VO并为ADF应用程序和Jet应用程序提供服务的外观部分。

重新考虑了我们的ADF BC并准备好为ADF和Jet应用程序提供服务后,我们现在可以将Jet功能集成到现有的ADF项目中。 常见的架构方法是

为了使用ADF来实现系统的某些页面,一些页面是使用Jet来实现的,还有一个移动混合应用程序也可以通过Oracle Jet来实现。

这种方法的优点是我们将事物分开保存。 看起来不同的应用程序在共同的业务模型之上运行。 每个应用程序都引入了自己的UI,适用于针对其实现的那些用例。 此外,它们为整个系统提供了不同的入口点。 我们可以通过常规ADF页面访问它,我们可以与移动设备一起使用,也可以从Jet网页访问它,而Jet网页又可以轻松地集成到任何父级网页中,例如门户网站应用程序。

但是这种优势可能会变成一种劣势,因为对于每个进入点,我们都应该考虑身份验证,内部化,本地化等。

这种方法将更多的运行组件带入整个系统结构,因此CI,CD,自动化测试和环境在这里变得更加复杂。

另一个明显的选择是将Jet内容集成到ADF页面中,以便从用户角度看它看起来像一个页面,但在幕后却是两个不同Web应用程序的混合。

这个选项不是我的最爱,我会避免。 因为基本上,您在这里要做的是在同一页面上混合两个Web应用程序。 这意味着将有两个具有不同事务的不同会话,因此会有独立的实体缓存和用户上下文。

Jet内容不参与JSF生命周期,因此整个页面以两种不同的方式提交。 ADF希望拥有整个页面,因此诸如响应式几何管理和“拖放”之类的出色功能将不适用于Jet内容。

在我看来,当我们需要在页面上显示一些外部内容形式时,这种方法在非常特殊的情况下是有意义的。 例如,如果我们的页面是门户或仪表板的一种,它在一个地方收集来自不同来源的数据。 在这种情况下,可以在类似的页面和常规Jet应用程序中使用相同的Jet组件。

当我们通过远程任务流调用将ADF内容集成到Jet页面时,同样的考虑也针对相反的方法。 该技术很有意义,但是当我们想重用Jet中未实现的现有ADF功能时,仅应在特定的用例中使用。 至少目前还没有。 这种方法不应用作构建我们的应用程序的标准工具。

最重要的是,Oracle ADF和Oracle JET可以完美地协同工作,这对于拥有扎实的ADF背景的组织来说是一个不错的选择。 唯一的选择就是明智地选择将这两个完全不同的工具结合在一起的体系结构方法。

而已

翻译自: https://www.javacodegeeks.com/2018/05/oracle-adf-jet-architecture-patterns.html

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

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

相关文章

基本指令的编程练习-PLC认识实验-定时器/计数器功能实验

微信公众号:创享日记 发送关键词:plc1 免费获取完整无水印实验报告 【PLC认识实验】 一、实验目的 1.了解PLC软硬件结构及系统组成; 2.掌握PLC外围直流控制及负载线路的接法及上位计算机与PLC通信参数的设置; 3.了解编程软件的编程环境,掌握软…

C语言实用算法系列之strtok字符串分割、strcat字符串拼接、strcpy、strcmp

代码 #define _CRT_SECURE_NO_WARNINGS#include <string.h> #include <stdio.h>char string[] "A string\tof ,,tokens\nand some more tokens"; char seps[] " ,\t\n"; char *token;int main(void) {printf("Tokens:\n");// Es…

电动机正反转继电器控制系统

微信公众号&#xff1a;创享日记 发送关键词&#xff1a;plc2 免费获取完整无水印实验报告 一、实验目的 1&#xff0e;学习和掌握电动机主回路的设计及接线&#xff1b; 2&#xff0e;学习和掌握电动机控制回路的设计及联锁保护方法&#xff1b; 3&#xff0e;加深对电气控制系…

电子技术课程设计-正弦波发生及频率显示电路-电子线路CAD原理图

微信公众号&#xff1a;创享日记 发送关键词&#xff1a;电子技术课设 免费获取完整无水印实验报告付费电子线路CAD原理图源文件及其导入教程 前些天发现了十分不错的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&a…

C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序

代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> void Save();struct SUser // 结构体定义 {int nNumb; // 学号char sName[20]; // 姓名float fMath; // 数学成绩 }g_user[100];void Print() // 打印子函数 {puts("\n学号\t姓…

PLC 控制三相异步电动机正反转实验

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送关键词&#xff1a;plc3…

功能Java示例 第4部分–首选不变性

这是称为“ Functional Java by Example”的系列文章的第4部分。 在上一部分中&#xff0c;我们讨论了一些副作用&#xff0c;并且我想进一步详细说明如何通过将不可变性引入代码中来防止以意外的方式操纵数据。 如果您是第一次来&#xff0c;最好是从头开始阅读。 它有助于…

C语言实用算法系列之学生管理系统_对整个结构体操作_选择排序_提取排序规则

代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <stdlib.h> void Save();struct SUser {int nNumb;char sName[20];float fMath; }g_user[100];void Print() {puts("\n学号\t姓名\t数学");int i 0;while…

Altium Designer19(AD19)

微信公众号&#xff1a;创享日记 发送关键词&#xff1a;Altium 免费获取Altium Designer19 1、解压文件 2、解压后打开安装文件&#xff08;AD19 setup.exe&#xff09; 3、点击next 4、选择中文并接受协议 5、选择功能&#xff0c;Next 6、选择文件保存路径与安装路径&…

仿真proteus8.7安装

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送关键词&#xff1a;prot…

C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序_提取排序规则

代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <stdlib.h> void Save();struct SUser {int nNumb;char sName[20];float fMath; }g_user[100];void Print() {puts("\n学号\t姓名\t数学");int i 0;while…

servlet 异常处理_Servlet异常和错误处理示例教程

servlet 异常处理有时候我写了一篇有关Java异常处理的文章&#xff0c;但是当涉及到Web应用程序时&#xff0c;我们需要的不仅仅是Java中的异常处理。 Servlet异常 如果您注意到&#xff0c;doGet&#xff08;&#xff09;和doPost&#xff08;&#xff09;方法将抛出ServletE…

基于51单片机直流电机PWM控制器设计

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 由STC89C52单片机、LCD1602液晶显示屏、霍尔测速传感器、3V直…

大林算法控制仿真实验(计控实验六simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送关键词&#xff1a;计控…

振铃的消除仿真实验(计控实验七simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送关键词&#xff1a;计控…

基于触摸屏PLC的温度采集及简单控制

微信公众号&#xff1a;创享日记 发送关键词&#xff1a;plc4 免费获取完整无水印实验报告及源文件 一、实验目的 1、掌握模拟量输入输出的编写方法&#xff1b; 2、了解触摸屏画面编辑及组态的方法。 二、实验设备 三、实验步骤 1、如图所示&#xff0c;编辑触摸屏画面并定义…

OSI模型七层

OSI将计算机网络体系结构(architecture&#xff09;划分为以下七层&#xff1a; 一、应用层&#xff08;快递物品本身&#xff09; 网络服务接口&#xff0c;定义程序间通信标准&#xff0c;应用层协议&#xff08;HTTP…&#xff09; 二、表示层&#xff08;打包&#xff09…

内存heap_哪个内存更快?Heap或ByteBuffer或Direct?

内存heapJava正在成为新的C / C &#xff0c;它被广泛用于开发高性能系统。 对像我这样的数百万Java开发人员来说非常好&#xff01; 在这个博客中&#xff0c;我将分享我可以用Java完成的不同类型的内存分配的实验&#xff0c;以及从中获得什么好处。 Java中的内存分配 Java…

Java EE 8的前5个新功能

备受期待的Java Enterprise Edition 8版本拥有两个激动人心的新API&#xff08;JSON绑定1.0和Java EE Security 1.0&#xff09;以及对当前API的改进&#xff08;JAX-RS 2.1&#xff0c;Bean Validation 2.0&#xff0c;JSF 2.3&#xff0c;CDI 2.0&#xff0c;JSON-P&#xff…

C语言实用算法系列之二级指针用法简介

一、几个知识点 内存四区&#xff1a;栈、全局&#xff08;静态&#xff09;&#xff0c;常量区&#xff0c;除此以外剩余的空间暂时不能随意使用&#xff1b;除此以外剩余的空间只要通过malloc函数申请一下&#xff0c;就可以使用了&#xff1b;申请一个堆上的单个int变量的方…