Generated getter in Application Module impl overrides superclass getter

Hi,
I today came across this issue:
* Created an application module where the data model contains a view object named "Parent" (resulting form a parent-child relationship)
=> Application runs perfectly.
* Created an application module implementation class (just created it, no further code added)
=> Application throws java.lang.NullPointerException at oracle.adf.model.binding.DCIteratorBinding.executeQueryIfNeeded(DCIteratorBinding.java:2164)
After some debugging, it turned out that the issue is that JDeveloper created the following getter in the application module impl class:
public ViewObjectImpl getParent() {
return (ViewObjectImpl)findViewObject("Parent");
which overrides public NamedObjectImpl getParent() from NamedObjectImpl, which is a superclass of ApplicationModuleImpl, due to the method's covariant return type.
JDeveloper does not give me any warning or error, not while creating the impl class nor highlighted in the source code.
Actually this would mean that I must manually assure that I never ever name a view object the same as any getter method in any of the ApplicationModuleImpl super classes which have a return type which is covariant to ViewObjectImpl. getParent() is one example, another is getProperty(). Even if it might be unlikely, this adds a potential source for some subtle issues.
Is this known behavior of JDeveloper? Did I miss anything?
Thanks,
Andreas

Hi Frank,
I agree that naming conventions can avoid this type of issue. Nevertheless, as a matter of usability and reliability, I think it would be good if JDeveloper at least gives a warning during code generation when it generates methods which would override a method from a superclass.
In any case, I have logged a bug, lets see how it evolves...
Thanks,
Andreas

Similar Messages

  • How to call a method in bean from application module Impl?

    i have to call a method which is in a bean from AppmoduleImpl class. Is it possible ?

    The model layer should never depend on a specific view layer - this breaks reusability.
    What you need to do is expose a service method on your AM. Then your view can call this method and pass a parameter into the model layer.

  • BC4J: How get Connection from Application Module

    I've written a custom method for my Application Module for using by the client tier. In this method I call a JPUblisher created class, that accesses a PL/SQL procedure. For this JPublisher created class I need a connection context. The class calls DefaultContext.getDefaultContext() but that seems to be null.
    How can I get the current Connection of the Application Module, so that I can create a DefaultContext?
    Unfortunately Transaction has no getConnection method.
    Thanks,
    Robert

    We don't make the Connection directly available because in some sense it's a rope on which you can hang yourself if you are not careful. Since BC4J AppModules are most often used from a pool, and you might be using connection pooling in addition to application module pooling, in general it is not safe to get hold of the raw JDBC connection and "hang onto it".
    If you make careful use to always get the current JDBC connection before you use it, and not try to cache it, then you should be ok. Often, you can avoid the need to get the raw JDBC connection by calling getDBTransaction().createPreparedStatement(...) or the analogous createCallableStatement() or createStatement() that are also on the DBTransaction interface.
    Here is a little function you can add to your application module impl class to retrieve the Connection:
      private Connection getCurrentConnection() {
        Statement st = null;
        try {
          st = getDBTransaction().createStatement(0);
          return st.getConnection();
        catch (SQLException s) {
          s.printStackTrace();
          return null;
        finally {
          if (st != null) try { st.close(); } catch (SQLException s2) {}
      }It basically creates a (dummy) statement, gets the current connection from the statement, then closes the statement.
    I tried using this in a custom method in an AppModuleImpl class that invoked a JPublisher-create package-wrapper class like this:
      public void callStoredProc() {
        try {
          // Empservice is package wrapper class created by JPublisher
          Empservice e = new Empservice(getCurrentConnection());
          BigDecimal sal = e.lookupsalary(new BigDecimal(7369));
          System.out.println(sal);
        catch (SQLException s) {
          s.printStackTrace();
      }and it works for me.

  • Application module creation for (web) services

    Hello,
    We are running into stack overflows from ADF BC (BC4J) with oracle.jbo.client.Configuration.createRootApplicationModule. We want to make sure we're doing this right.
    If you have data bound services (e.g. product lookup) and you don't want to put your operation/exposed method in the application module Impl class for clear seperation (unlike ADF toy store sample), is it appropriate to:
    1. Create a Java service class that you will expose as J2EE web service
    2. The method to be exposed will call Configuration.createRootApplicationModule to checkout an app module from pool.
    3. Find the view object, run the query, get the row.
    4. Configuration.releaseRootApplicationModule to check it back in.
    Please share your best practices and recommended approach with us.
    Thanks,
    - Zak

    I'd recommend using our built-in feature for exposing an application module class as a J2EE web service. This will code-generate a class for you that does the AM access correctly.

  • Calling stored procedures from entity object and application module

    Hello
    I've put in place an EntiyImpl base class containg helper methods to call stored procedures.
    I now need to call stored procedures from the application module.
    Apart from creating an application module base class and duplicating the helper method code is there a way
    to share the helper methods for calling stored procedures between the entity impl and application module impl ?
    Regards
    Paul

    Does the helper code depend on features of a particular entity object instance, beyond its database transaction?
    If so, I'm not sure I see how it could be used from an application module class.
    If not, here's what you do:
    Step 1:
    Parametrize the database transaction--you might even want to. So instead of
    protected myHelperMethod(Object someParam) {
    DBTransaction trans = getDBTransaction();
    change this to
    protected myHelperMethod(DBTransaction trans, Object someParam) {
    Step 2: make the method public and static--once you parameterize the DBTransaction, you should be able to do this.
    public static myHelperMethod(DBTransaction trans, Object someParam) {
    Step 3: Remove the method from your EntityImpl base class into a utility class:
    public abstract class PlSqlUtils {
    private PlSqlUtils() {}
    public static myHelperMethod(DBTransaction trans, Object someParam) {
    When you want to call the method from an application module, entity object, or even view object class, call
    PlSqlUtils.myHelperMethod(getDBTransaction(), paramValue);
    Unlike Transaction.executeCommand(), this lets you provide functionality like setting procedure parameter values, retrieving OUT parameter values, etc.
    Hope this helps,
    Avrom

  • Error when generating Web Services Proxy for SCA Application Module

    Hello,
    I'm trying to create Web Services for a simple Application Module with JDeveloper 11g (11.1.1.3.0).
    I start a new ADF Project, I create an Application Module as simple as possible : it contains only a simple View Object on the DEPT Entity.
    On my Application Module, I choose "Service Interface" and I add my View Object in the service interface.
    I test my Web Service in the Embedded Weblogic Server, it works well. (I succeed in using the Get operation, for example).
    But when I try to generate a Web Service proxy (right-click on the WSDL File -> Generate Web Service Proxy), It always fail with such errors :
    oracle.jdeveloper.webservices.tools.WsdlValidationException: Error creating model from wsdl "file:/C:/JDeveloper/mywork/ApplicationAppelServiceSCA/Model/src/model/common/AppModuleService.wsdl": 'unset' is already defined'Bytes' is already defined'ref' is already defined'Duration' is already defined'Types' is already defined'Character' is already defined'type' is already defined'Day' is already defined'nestedInterfaces' is already defined'Date' is already defined'datagraph' is already defined'Type' is already defined'Integer' is already defined'ModelsType' is already defined'ChangeSummaryType' is already defined'instanceClass' is already defined'Month' is already defined'DataObject' is already defined'javaClass' is already defined'LongObject' is already defined'DateTime' is already defined'dataObject' is already defined'YearMonth' is already defined'ShortObject' is already defined'Long' is already defined'types' is already defined'JavaInfo' is already defined'IntObject' is already defined'Boolean' is already defined'DoubleObject' is already defi...
    Can someone help me to understand this error ?
    i never manually edited the WSDL File, so I don't understand why the generated WSDL or XSD files might contain errors.
    Thanks for your Help,
    Laurent

    We have the same problem, and the problem was in the xsd import:
    The wdsl import a schema that import other schema, the second import use a relative path, that was wrong.
    So check the xsd import sequence....

  • How to get application module instance from java bundle?

    Hi!
    I would like to build an application that would get all translations from a database table.
    So I created application module for translations that contains a view object which is selecting translations for specific language from a database table. I exposed a method in application module as client interface which returns HashMap<String, String> for all translations for specific language. When I test my view and client interface method call they work fine.
    Then I created java bundle classes to get translations for specific language. Then I tried to override public Object[][] getContents() method.
    I tried to get my translations application module like this:
    SharedTranslationsAppModuleImpl am = new SharedTranslationsAppModuleImpl();
    Map<String, String> translationsMap = am.getTranslations(this.getLocaleCode); // Client interface method call
    In getTranslations(String LocaleCode) I try to get that view (which would select translations from database) but it returns NULL and I get NPE error message.
    So what is the right way to get application module from java bundle file? Now everytime application wants to get translations, application stops and displays NPE message.
    Regards, Marko
    I use JDeveloper 11.1.2.1.0

    Marko,
    you can't just instantiate an application module. An application module has to be set up, db connections and memory pools have to be initialized and ....
    Can you describe why and when you try to read the resource bundle from the db and where the resource bundle is used?
    This blog may be what you are looking for http://technology.amis.nl/2012/08/10/implement-resource-bundles-for-adf-applications-in-a-database-table/
    Timo

  • Getting JNDI name from application module configuration

    How to programmatically get JNDI name of the data source, specified in the bc4j.xcfg, using application module object or oracle.jbo.client.Configuration, or whatever?

    im sorry for interupting this thread. i have a question for Vinay. Actually im watching this thread bcoz i too have the same question.
    Vinay, what imports is to be added for this.None, if you are using ADFbc.
    The method is available in your ApplicationModuleImpl (i.e. the Java Impl for your AM).
    Here's the 11.1.1.5 javadoc:
    http://docs.oracle.com/cd/E24001_01/apirefs.1111/e10653/oracle/jbo/client/remote/ApplicationModuleImpl.html#getSession__
    im using Jdev 11.1.1.5.0 the statement is : System.out.println("Data Source Name"+getSession().getEnvironment().get("JDBCDataSource"));
    Its showing getSession() method not found.
    Any help???Where did you write that statement? It should work in the AMImpl as the javadoc shows....

  • How to get HTTP session in Applcation Module IMPL file

    Hi Guys,
    Can any one tell me how to get HTTP session in Applcation Module IMPL file ?
    thnks

    You can, but that's not a best practice.
    Re: How to reach HttpContext from model Project

  • How to get value in backing bean from application module

    Hi all.. I'm new in jdeveloper and adf..
    I need to use value from backing bean and use that value in application module.
    But I don't know how to get it.
    Do you a have any solution?

    suppose you have myMethod(String argumentName1,String argumentName2) in your Application Module
    then to access a method binding from a managed bean, use the following code,
      BindingContext bctx = BindingContext.getCurrent();
      BindingContainer bindings = bctx.getCurrentBindingsEntry();
      OperationBinding operationBinding =
           bindings.getOperationBinding("name_of_method_binding");
      //Here you can pass the parameters value to the AM method
      operationBinding.getParamsMap().put("argumentName1",value1);
      operationBinding.getParamsMap().put("argumentName2",value2);
      //invoke method
      operationBinding.execute();
      if (!operationBinding.getErrors().isEmpty()) {
         //check errors
         List errors = operationBinding.getErrors();
      //optional
      Object methodReturnValue = operationBinding.getResult();

  • [SOLVED]overriding VO's SQL query in an application module

    Hi, can anybody help me in searching examples of everriding some aspects of VO in an application module.
    As i learned we can override, for example the "WHERE" clause of an VO's SQL query in different application modules, using as i supply the addWhereClause method on SomeViewObjImpl object.
    ... but are there any examples of using this possibility? Should i create a custom method in application module java class?
    Thanks in advance. Best Regards.Alex.
    Message was edited by:
    Timin
    Message was edited by:
    Timin

    Hi, can anybody help me in searching examples of everriding some aspects of VO in an application module.
    As i learned we can override, for example the "WHERE" clause of an VO's SQL query in different application modules, using as i supply the addWhereClause method on SomeViewObjImpl object.
    ... but are there any examples of using this possibility? Should i create a custom method in application module java class?
    Thanks in advance. Best Regards.Alex.
    Message was edited by:
    Timin
    Message was edited by:
    Timin

  • How to get the application module instance in backing bean.

    This is Ramesh, I am new to JDeveloper world.
    In my current application I have change password screen which allows user to change there password.
    Here this is a pop-up page. Here I don't have the view object and pagadef for this changepassword.jspx file.
    My aim is to call the Application Module method which takes the user name, old password and new password.
    In backing bean I am trying to call this method by using
    MyProjAM obj = _binding.getDataControl().getApplicationModule();  //throw null pointer exception.
    _binding is the object of DCBindingContainer. 
    ( I have created the parameter called "binding" as my managed bean property and values as #{binding})
    But the above line is throwing the NullPointerException.
    Could you please help me to come out of this problem.
    Thanks and Regards,
    Ramesh Biradar.

    If your page has no page definition, then #{bindings} will be null during the request for that page.
    If you need your page to invoke a data control method when you press a button, the simplest (and declarative) way is publish your AM method on the AM's client interface, then drop the method as a button from the data control palette onto your page. You don't even need a backing bean to accomplish this.
    That said, you can refer to a data control in a backing bean using the expression #{data.[i]YourAppModuleNameDataControl.dataProvider}
    So, assuming you have a helper method like this:
      public static Object EL(String expression) {
        FacesContext ctx = getFacesContext();
        Application app = ctx.getApplication();
        ValueBinding bind = app.createValueBinding(expression);
        return bind.getValue(ctx);
      }and assuming that your application module is named SRService
    and assuming that you have correctly nominated any Application Module custom methods as being available to clients by selecting them on the "Client Interface" panel of the application module editor, then in a backing bean you can acquire an instance.
    Then, the ADF design time will have automatically generated you a custom AM client interface named SRService and you can reference that service interface in your backing bean by using code like this:
            SRService svc = (SRService)EL("#{data.SRService.dataProvider}");
            svc.yourCustomMethod(your,args);

  • Application Module getting and using.

    Hello all,
    I am currently using this code:
    DCDataControl dc = daContext.getBindingContext().findDataControl("AppModuleDataControl");
    if (dc instanceof DCJboDataControl) {
    ApplicationModule appModule = (ApplicationModule) dc.getDataProvider();
    ApplicationModuleImpl myAm = (ApplicationModuleImpl)appModule;
    It compiles well, but the problem is that the App Module that is returned is of type : WSApplicationModuleImpl.
    I need to use the getDBTransaction() method from ApplicationModuleImpl, since when I cast my appModule, i get an error, I was wondering if there was something I was doing wrong.
    I have searched high and low, and still haven't found what WSApplicationModuleImpl is for (i know that if I try to use some of the methods of ApplicationModuleImpl I get a moethod 'methodname' is not a working set Application Module method...)

    Steve,
    I followed the instructions in your article, which gave me a better understanding of the situation but did not resolve my particular issue. I was confused by all the statements and insinuations in both JDev and various articles that configuring application modules to use interfaces is really to support a client that is not colocated with the business services. I did not see the relevance of the interfaces to getting the appropriate data type back from the data control (MyAppModule rather than WSApplicationModuleImpl, for example). Anyway, I followed the steps from that article that related to the application module. I did not create interfaces for the other business components (views, entities, etc). I continued to get back the wrong data type when retreiving the application module from the data control in an action. So I kept looking for other clues and finally came across the article about when to use batch mode (http://www.oracle.com/technology/products/jdev/tips/muench/batchmode/index.html). Reading that one of the benefits of batch mode is better enforcement of programming business calls to interfaces I thought I'd try changing the sync to immediate rather (from the default, batch). This did exactly what I was originally trying to do. It caused the data control to return a MyAppModuleImpl rather than a generic WSApplicationModuleImpl. Finally I could call methods on the business service from actions.
    After learning about batch mode, I understand that my change is not advisable in the grand scheme of clean design. Unfortunately, even though I believe that I have all the components in place to support a clean design, the batch mode seems to be preventing me from getting data type back.
    So I write this for the next person to run into ClassCastExceptions when attempting to retrieve their application module, since I haven't seen it suggested before: look into batch vs. immediate mode - at the very least it will help you diagnose the problem.
    Jeff

  • Client interface methods in application module editor get unselected

    Hello everybody,
    I have a problem with my application module client interface.
    Every time I edit source of application module methods that are exposed as a client interface, they get unselected in application module editor (they are not exposed anymore).
    Then I have to shift them from left (available) to the right (selected) manually.
    Has anyone experienced such problem?
    I'm using JDev 10.1.2.

    Strange, the same question here {thread:id=2187487}
    Timo
    Edited by: Timo Hahn on 08.03.2011 12:02
    @john You beat me agian

  • JAG BUG ? "Set Application Module Superclass to JhsApplicationModuleImpl"

    Is it just me ? or ...
    Whenever I set "Set Application Module Superclass to JhsApplicationModuleImpl" to false and run the Application Generation ... the base class of our ApplicationModuleImpl is set to JhsApplicationModuleImpl anyway (which it is not supposed to do !).
    Our workaround is to go to our ApplicationModuleImpl and set the base class manually.
    Is this a JHS bug ?

    Hi Sandra,
    I just made a testcase and tried to reproduce the "anomoly" I encountered. And ... whatever I try, I cannot reproduce it anymore.
    My testcase:
    ==========
    JHS 10.1.2.1 (build 27)
    Jdev 10.1.2.1.0 (build 1913)
    - created ADF baseclasses in new project : BaseJhsApplicationModuleImpl extends JhsApplicationModuleImpl
    - created standard Emp business components
    - open ApplicationModuleImpl : extend from BaseJhsApplicationModuleImpl
    - enabled JHS on ViewController
    - created new ApplicationStructure (view=JSP ; Set AppModImpl = false)
    - run JAG
    -- open ApplicationModuleImpl : class still extends BaseJhsApplicationModule iso JhsApplicationModuleImpl (--> which is the correct behaviour)
    Whatever change I made to the ApplicationStructure ; the 'anomaly' did not return (fortunately).
    There must have been a glitch in Jdev ... always easy to blame the IDE ; )
    Thanks for your time,
    Pascal Prins

Maybe you are looking for

  • Airport Express shows green, no signal.

    So after finally moving into my new apartment, I decided to finally go wireless with my iMac G5 and my girlfriend's eMac G4. We practically skipped into the Apple store, purchased an Airport Express card and two airport extreme cards. And then it all

  • My macbook froze up when I put in Mountain Lion disk

    My sister just put in the Mountain Lion disk to upgrade her MacBook.  It froze up so she shut down and when she turned it back on she's stuck at the Apple start screen and it won't go anywhere.  Any ideas.....?????

  • Copy html source

    how can I, from a given URL, copy the content from tag <body> to tag </body> of the html resul page in a JTextArea?

  • Solved: Using two different Cameras

    I have a question about using cameras in Flash. I have 3 cameras connected to my computer and I want to say flash put this camera's image to this movie clip and that one's to that movie clip. I was using following method, activeCamera.setQuality(0,10

  • Problem playing selected music with slideshow

    Hi I am having trouble playing music with slideshows since updating to iphoto 6. I can see all my playlists and I am able to select the playlist I want and this will play in the 'play music during slideshow' window. However, when I play the slideshow