0

我创建了一个类并将其发布为 Web 服务。我创建了一个这样的网络方法:

    public void addNewRow(MyObject cob) {
    MyAppModule myAppModule = new MyAppModule();
    try {
        ViewObjectImpl vo = myAppModule.getMyVewObject1();
    ================> vo object is now null
        Row r = vo.createRow();
        r.setAttribute("Param1", cob.getParam1());
        r.setAttribute("Param2", cob.getParam2());
        vo.executeQuery();
        getTransaction().commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

正如我在代码中所写,myAppModule.getMyVewObject1() 返回一个空对象。我不明白为什么!据我所知,当我调用“getMyVewObject1()”时,AppModule 必须自行初始化对象,但也许我错了,或者这不是 Web 方法应该采用的方式。有没有人遇到过这个问题?任何帮助将不胜感激。

4

2 回答 2

2

您可以查看很好的教程:使用 JDeveloper 构建和使用 Web 服务 它让您大致了解应该如何使用 ADF 构建 Web 服务。

另一种方法是当您需要从某个不需要环境(servlet 等)的 bean 调用现有应用程序模块时,您可以像这样初始化它:

String appModuleName = "org.my.package.name.model.AppModule";
String appModuleConfig = "AppModuleLocal";
ApplicationModule am = Configuration.createRootApplicationModule(appModuleName, appModuleConfig);

不要忘记释放它:

Configuration.releaseRootApplicationModule(am, true);

为什么你不应该真的这样做。
甚至更多...

更好的方法是访问绑定层并从那里调用。
这是一篇不错的文章。

于 2013-10-31T20:46:47.807 回答
1

根据我们的 PM:如果您不在 ADF 应用程序的上下文中使用它,则应使用以下代码(示例代码来自我参与的项目)。请注意在请求结束时释放 AM

@WebService(serviceName = "LightViewerSoapService") 公共类 LightViewerSoapService {

private final String amDef = " oracle.demo.lightbox.model.viewer.soap.services.LightBoxViewerService";
private final String config = "LightBoxViewerServiceLocal";

LightBoxViewerServiceImpl service;

public LightViewerSoapService() {
    super();
}


@WebMethod
public List<Presentations> getAllUserPresentations(@WebParam(name = "userId")       Long userId){

  ArrayList<Presentations> al = new ArrayList<Presentations>();

  service =   (LightBoxViewerServiceImpl)getApplicationModule(amDef,config);
  ViewObject vo = service.findViewObject("UserOwnedPresentations");

  VariableValueManager vm = vo.ensureVariableManager();
  vm.setVariableValue("userIdVariable", userId.toString());

  vo.applyViewCriteria(vo.getViewCriteriaManager().getViewCriteria("byUserIdViewCriteria"));
  Row rw = vo.first();

    if(rw != null){

        Presentations p = createPresentationFromRow(rw);           
        al.add(p);

        while(vo.hasNext()){
            rw = vo.next();
            p = createPresentationFromRow(rw);           
            al.add(p);
        }      
    }

    releaseAm((ApplicationModule)service);
    return al;
  }

也看看这里:

http://www.youtube.com/watch?v=jDBd3JuroMQ

于 2013-11-04T17:54:05.247 回答