java - Q : Is embedding Java bad practice in BPEL?

标签 java oracle12c soa bpel

问题:在 BPEL 中使用 java 嵌入被认为是不好的做法,如果是这样,为什么?

在我的工作中,我经常使用 Java 嵌入作为 BPEL 组件来完成某些工作。它可以是非常简单的事情,我在 Java 中感觉很舒服,也可以是(据我所知)不可能用 BPEL 中的其他组件完成的事情。

在 12c BPEL 源代码中嵌入简单 java 的示例:

<bpelx:exec name="TruncateBlankNamespace" language="java" version="1.5">
  <![CDATA[String origHeader = (String)getVariableData("randomHeader"); try { String replacedvalue = origHeader.replaceAll(" xmlns=\"\"", ""); setVariableData("randomHeader_something", replacedvalue) ;} catch (Exception exception) { exception.printStackTrace(); }]]>
</bpelx:exec>

我使用它的另一个例子是将有效载荷编码和解码为 base64 并返回,

11c BPEL 源中嵌入 base64 编码的示例:

 <bpelx:exec import="oracle.soa.common.util.Base64Encoder"/>
 <variables> 
      <variable name="DecodedMessage" type="xsd:string"/>
      <variable name="EncodedMessage" type="xsd:base64Binary"/>
 <variables/>
 <bpelx:exec name="EncodePayload" language="java" version="1.5">String decodedMessage = (String)getVariableData("DecodedMessage"); try { String encodedMessage = Base64Encoder.encode(decodedMessage.getBytes()); setVariableData("EncodedMessage", encodedMessage);} catch (Exception exception) { exception.printStackTrace(); }</bpelx:exec>

现在我发现嵌入是解决某些问题和快速解决问题的非常有用的工具,而无需在您使用的工具中做额外的作业。但是,我注意到在 Oracle Soa 套件/BPEL 中使用 java 嵌入是一种不好的做法。

我是一名初学者中间件开发人员,也是堆栈溢出的新手,所以如果我不够全面,请原谅,请指出这篇文章的所有错误,并随时编辑 :D!

非常感谢!

杰斯珀

最佳答案

如果这是不好的做法,那么您应该改用什么更好的做法?

我可以看出在 XML 中嵌入实际的 Java 代码可能看起来很丑陋。但是,将这种语言嵌入那种语言是开发人员一直在做的事情。

  • 我们都熟悉将 JavaScript 嵌入到 HTML 属性值中,因为我们一直在这样做,例如 <button onclick="getElementById('date').innerHTML = Date()"> .
  • ReactJS JSX 语言可让您在 JavaScript 中的任何位置嵌入 HTML。
  • 在 Java 字符串中嵌入 SQL 命令是完全正常和可接受的。
  • Elasticsearch 查询可以嵌入以“无痛”语言编写的脚本。
  • 每个正则表达式都是一个用正则表达式语言编写的小程序,嵌入到一个更大的程序中。
  • Shell 脚本和构建系统尤其倾向于混合多种语言。

这些能力的存在是因为它们是必要的。在某些时候,他们使某人能够完成某事。把事情做好很重要。

我会问自己几个问题:

  • 在您的 BPEL 中嵌入 Java 是不是最简单可行的事情?反对您的嵌入式 Java 的人可能希望您改为调用服务。但是,如果逻辑微不足道并且您只在一两个地方使用它,那么仅仅为了提供此逻辑而构建和维护一个单独的服务器的成本可能不会使其成为一个实用的替代方案。
  • 嵌入 Java 是否会使您的应用程序更难(或更容易)维护?
  • 有哪些选择?他们需要更少的努力还是更多?如果备选方案需要更多的努力,那么你必须质疑它们是否真的更好。额外努力的返回是什么?
  • 在 BPEL 中嵌入 Java 是否会使您失去 SDLC 流程的一些好处?例如,嵌入式 Java 是否在源代码控制之外? Java 逻辑的 SDLC 是否与其嵌入的 BPEL 匹配?
  • 如果你不管它,会发生什么坏事?

引用最佳实践(或不良实践或“反模式”)的人应该能够解释他们的推理。毕竟这是工程学。

关于java - Q : Is embedding Java bad practice in BPEL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54532975/

相关文章:

java - 对 ArrayList 中的对象进行排序会产生意想不到的结果

oracle - ORA-01461 : Does SUBSTR() return a LONG if the input string is > 4000 characters?

google-app-engine - PaaS 中的 SOA 云可能吗?

.net - 在 ASP.net 物理层之间移动数据的最佳策略

oracle-sqldeveloper - 可插拔数据库不存在

asp.net - 如何在工作流程的不同 git 分支中保留不同版本的 WSDL

java - 使用 CipherOutputStream + AES 将字符串写入文件

java - 使用java在文件中查找没有行时遇到困难?

连接到 rfcomm0 的 Java rxtx 代码不起作用

sql - Oracle SQL : ANY + IS NULL