如何从Java程序中获取Ofbiz中的DispatchContext

时间:2012-08-03 21:33:21

标签: java ofbiz

我花了最后几个小时试图在“Apache Ofbiz Cookbook”和“Apache Ofbiz开发:初学者教程”中找到答案如何从Java方法获取Ofbiz中的DispatchContext。 Ruth Hoffman的Cookbook不包括她刚刚说的“准备任何上下文参数”的代码p.43。我可以理解你在注册服务或事件时如何获得DispatchContext但是如何从Java中获取它?谢谢。

我正在尝试从Tomcat中的REST Web服务的服务器端填充我在Ofbiz中定义的Ofbiz实体/表。

    GenericDelegator delegator = ctx.getDelegator();
    GenericValue myTable = delegator.makeValue("MyTable");
    myTable.set("name", myTableAsJson.getString("name"));


    try {
        delegator.store(offering);
    } catch(Exception e) {

    }

2 个答案:

答案 0 :(得分:5)

在Java方法/事件中,可以使用以下代码片段获取调度上下文:

GenericDispatcher dispatcher = (GenericDispatcher) request.getAttribute("dispatcher");
DispatchContext dctx =  dispatcher.getDispatchContext();

在Java方法/事件中,可以使用以下代码片段调用任何服务:

GenericDispatcher dispatcher = (GenericDispatcher) request.getAttribute("dispatcher");
dispatcher.runSync("SERVICE_NAME", context);

其中context是所需的IN / IN-OUT参数到服务的映射。

要从Java方法/事件调用服务,不需要paas dispatch context。只需要服务名称和上下文。

答案 1 :(得分:0)

此方法不再起作用。来自控制器的HttpServletRequest仍将具有属性“ dispatcher”,但您现在必须将其强制转换为LocalDispatcher类,然后使用该类来获取DispatchContext。

这来自OFBiz服务引擎文档[1]: “服务框架的内部使用非常简单。在Web应用程序中,LocalDispatcher存储在ServletContext中,可以通过Event中的Session对象访问。”

这对我有用:

Delegator delegator = (Delegator) request.getAttribute("delegator");
LocalDispatcher ld = (LocalDispatcher) request.getAttribute("dispatcher");
DispatchContext dctx = ld.getDispatchContext();

[1] https://cwiki.apache.org/confluence/display/OFBIZ/Service+Engine+Guide