0

クラスを作成し、Web サービスとして公開しました。次のような 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() は null オブジェクトを返します。私はなぜなのか理解していない!私が知る限り、「getMyVewObject1()」を呼び出すと、AppModule はオブジェクト自体を初期化する必要がありますが、間違っているか、これが Web メソッドの場合の方法ではない可能性があります。誰もこの問題に直面したことがありますか? どんな助けでも大歓迎です。

4

2 に答える 2

2

素晴らしいチュートリアルを確認できます: Building and Using Web Services with JDeveloper これは、ADF を使用して Web サービスを構築する方法についての一般的なアイデアを提供します。

もう 1 つの方法は、環境 (サーブレットなど) を必要としない 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") public class 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 に答える