【问题标题】:Q: Is embedding Java bad practice in BPEL?问:在 BPEL 中嵌入 Java 是不好的做法吗?
【发布时间】:2019-06-29 04:29:40
【问题描述】:

问题:在 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 并返回,

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

 <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!

非常感谢!

杰斯帕

【问题讨论】:

    标签: java oracle12c soa bpel


    【解决方案1】:

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

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

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

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

    我想问自己几个问题:

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

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

    【讨论】:

    • 您的回答很好地解释了嵌入以及它们在编码中的普遍性。我可以明白为什么我的一些嵌入式 Java 现在是不好的做法,而有些则不是。例如,我们确实有一个能够进行 base64 编码/解码的服务。有人告诉我,它可以更好地测试并且更容易维护,我只需要阅读如何使用它:)。我认为在我的情况下,最佳实践与具有更好的可测试性相吻合,并且考虑到您的答案,执行嵌入式软件可以做的事情的现有服务可能更容易测试。非常感谢威利斯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多