Noah Martin
Noah Martin

Reputation: 1809

How to create new record from web service in ADF?

I have created a class and published it as web service. I have created a web method like this:

    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();
    }
}

As I have written in code, myAppModule.getMyVewObject1() returns a null object. I do not understand why! As far as I know AppModule has to initialize the object by itself when I call "getMyVewObject1()" but maybe I am wrong, or maybe this is not the way it should be for web methods. Has anyone ever faced this issue? Any help would be very appreciated.

Upvotes: 0

Views: 1195

Answers (2)

Joe
Joe

Reputation: 3347

Per Our PM : If you don't use it in the context of an ADF application then the following code should be used (sample code is from a project I am involved in). Note the release of the AM at the end of the request

@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;
  }

Have a look here too:

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

Upvotes: 1

Nagh
Nagh

Reputation: 1804

You can check nice tutorial: Building and Using Web Services with JDeveloper It gives you general idea about how you should build your webservices with ADF.

Another approach is when you need to call existing Application Module from some bean that doesn't have needed environment (servlet, etc), then you can initialize it like this:

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

Don't forget to release it:

Configuration.releaseRootApplicationModule(am, true);

And why you shouldn't really do it like this.
And even more...

Better aproach is to get access to binding layer and do call from there.
Here is a nice article.

Upvotes: 2

Related Questions