问:在BPEL中嵌入Java不好的做法吗?

时间:2019-02-05 11:03:07

标签: 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!

非常感谢您!

Jesper

1 个答案:

答案 0 :(得分:3)

如果这是不好的做法,那么您应该使用哪种更好的做法呢?

我可以看到在XML中嵌入实际的Java代码似乎很难看。但是,将这种语言嵌入该语言是开发人员一直在做的事情。

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

存在这些功能是因为它们是必需的。在某些时候,他们使某人可以完成某项工作。完成任务非常重要。

我会问自己几个问题:

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

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