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

问题描述 投票:2回答:1

问题:在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 ecoding嵌入的示例:

 <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个回答
3
投票

如果这是不好的做法,那么你应该使用的更好的做法是什么呢?

我可以看到如何在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的SDLC相匹配?
  • 如果你不管它会发生什么坏事?

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

© www.soinside.com 2019 - 2024. All rights reserved.