【问题标题】:a spring bean to wrap salesforce web service calls用于包装 Salesforce Web 服务调用的 spring bean
【发布时间】:2011-04-17 21:38:23
【问题描述】:

我试图弄清楚如何创建一个无状态的 Spring bean,它包装了一组对 Salesforce Web 服务 API 的调用。我的理解是调用salesforce的流程是这样的:

  1. 调用登录服务登录salesforce
  2. 进行一系列服务调用
  3. 调用注销

要拥有一个无状态包装器,似乎正确的模式是让 bean 中的每个方法执行上述所有三个步骤。例如(伪代码)

binding.login();
binding.upsert(….);
binding.upsert(….);
binding.logout();

这是一个好习惯吗?保持 bean 无状态似乎是一种代价高昂的方法。在这种情况下,制作 bean request scope 会更好吗?

【问题讨论】:

  • 你不想在每次调用时都调用登录/注销,你会不必要地烧掉 api 调用,并增加延迟。您不能使用您计划用来存储用户名/密码的任何状态来存储 sessionId 吗?
  • 谢谢@superfell。是的,在 bean 内部保持状态很容易。我只是好奇我是否需要用请求范围实例化这个 spring bean。我认为答案是肯定的。那么问题是:请求范围是否会增加显着的可扩展性成本?我是 Spring 新手,所以我不知道请求范围的开销。
  • 正如@superfell 所提到的,可伸缩性的担忧不仅仅在于您可以使用 Spring 做什么。您是否了解 Salesforce 调控器限制?在为 Salesforce 设计包装器时,您需要确保进行尽可能少的 api 调用以避免达到这些限制。阅读salesforce.com/us/developer/docs/apexcode/Content/…了解更多信息。

标签: java spring salesforce


【解决方案1】:

我同意 Anup,你应该看看 sfdc wsc。

如果您想完全无状态,您需要了解以下有关 salesforce 连接的信息。

  1. 每个操作都必须有一个端点 URL,例如 na6.salesforce.com 或 na7.salesforce.com
  2. 每个操作都必须有一个有效的 SID(会话 ID)才能完成。

当您登录到 salesforce 时,原始端点是 login.salesforce.com,如果您成功,您将返回一个有效的端点 (na6.salesforce.com) 和一个 SID。

然后,您可以将该端点/sid 放入一个单例中,并与任意数量的 spring bean 共享它。在每个 bean 中,您需要创建一个新的 SoapBindingStub 并设置端点和 sid,然后再执行 insert/upsert/update/etc。行动。

该 sid 将在一段时间不活动后过期(根据设置,从 30 到 120 分钟不等),因此您应该捕获任何异常并使用单例对象重新登录。

不要担心两个 bean 同时导致单例重新登录,因为 salesforce 会返回相同的 sid 给两者。

【讨论】:

    【解决方案2】:

    您尝试过SFDC WSC 库吗?它易于使用,适合您尝试完成的用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多