Doubt in Finder methods

Hi,
Can a sub class of FinderException be included in the throws clause of a finder method in home interface of a bean.
Sathyakumar S.

The EJB containers will expect for a FinderException to be thrown. Since any class derived from FinderException will resolve to true with instanceof, I don't see how any vendor implementation would not accept it.
Yes, you can.

Similar Messages

  • Not able to reload the data from DB using finder methods

    Hi all,
    <p>
    I am facing a weird problem while using finder methods.
    I am using weblogic 8.1 SP3 and entity beans are CMP with DB concurrency.DB is oracle
    </p>
    <h4>Problem Description</h4>
    <p>
    I am having one session bean which internally interacts with my entity beans,
    Now say my transaction is getting initiated in one of the session bean and I use some finder in it.
    </p>
    <p>
    To make the problem more clear lets say my entity bean is loanBean with loanId as primary key.
    Now say method A of session bean initiates the transaction and I use something like
    <br>
    LoanLocal loanLocal =loanLocalHome.findByLoanId(loanId);
    <br>
    <b>Note that I am not using findByPrimaryKey method</b>
    <br>
    now this method A calls some other method B on some session bean which is having Required as its transaction attribute.
    <br>
    But before the call of B some other thread or background process updates the DB for this loanId and commits,
    <br>
    now when I fire the same finder in method B I am still getting the old data, ie I am not getting the data which has been modified in DB and committed by some other thread, I still get the old data and when I tried to generate the SQL queries which weblogic is firing, I see
    it fires the SQL for every finder other that findByPrimaryKey.
    <br>
    <b>
    Now my problem is I am getting the old data only and I need the new updated data of DB. isolation-level of DB and beans is READCOMMITTED.
    Note:: I cant use new transaction to read the data.
    </b>
    <br>
    And I couldn't understand that when weblogic is firing query for every finder then why it should not refresh the data in its cache. Is there any way to disable this kind of caching and say that everytime when i use finder just go to DB and get me the last committed data.
    </p>
    <br>
    Any help in this regard would be very helpful to me.
    <br>
    Thanks and Regards
    <br>
    Manish Garg.
    </p>

    Hi,
    In my understanding, cache is not involved in this scenario. As you
    observed, the container fires sql every time when you invoke this finder.
    So, it should just give the result that it got from the DB. Is there a
    possibility that the DB is using repeatable_read or serializable for
    isolation level?
    You can debug further by doing couple of things -
    1. Instrument the code in the generated RDBMS java file for the entity bean
    (if you use -keepgenerated option for weblogic.ejbc, u can get the source of
    this file). This class will have the implementation for ejbFindByLoanId. You
    can just print the result set data after the query is fired.
    2. Try the same scenario without the ejb container. Like, write a jsp which
    will start a user tx and fire the query twice such that there is an update
    between the two queries. Note that, you need to use a TxDataSource to get
    the JDBC connection so that it will be tx aware.
    --Sathish
    <Manish Garg> wrote in message news:[email protected]...
    Hi all,
    <p>
    I am facing a weird problem while using finder methods.
    I am using weblogic 8.1 SP3 and entity beans are CMP with DB
    concurrency.DB is oracle
    </p>
    <h4>Problem Description</h4>
    <p>
    I am having one session bean which internally interacts with my entity
    beans,
    Now say my transaction is getting initiated in one of the session bean and
    I use some finder in it.
    </p>
    <p>
    To make the problem more clear lets say my entity bean is loanBean with
    loanId as primary key.
    Now say method A of session bean initiates the transaction and I use
    something like
    <br>
    LoanLocal loanLocal =loanLocalHome.findByLoanId(loanId);
    <br>
    <b>Note that I am not using findByPrimaryKey method</b>
    <br>
    now this method A calls some other method B on some session bean which is
    having Required as its transaction attribute.
    <br>
    But before the call of B some other thread or background process updates
    the DB for this loanId and commits,
    <br>
    now when I fire the same finder in method B I am still getting the old
    data, ie I am not getting the data which has been modified in DB and
    committed by some other thread, I still get the old data and when I tried
    to generate the SQL queries which weblogic is firing, I see
    it fires the SQL for every finder other that findByPrimaryKey.
    <br>
    <b>
    Now my problem is I am getting the old data only and I need the new
    updated data of DB. isolation-level of DB and beans is READCOMMITTED.
    Note:: I cant use new transaction to read the data.
    </b>
    <br>
    And I couldn't understand that when weblogic is firing query for every
    finder then why it should not refresh the data in its cache. Is there any
    way to disable this kind of caching and say that everytime when i use
    finder just go to DB and get me the last committed data.
    </p>
    <br>
    Any help in this regard would be very helpful to me.
    <br>
    Thanks and Regards
    <br>
    Manish Garg.
    </p>

  • How do I use the find method to find multiple items in a single paragraph?

    I am desigining a script to find any instances where ctrl+b and ctrl+i are applied to body text and then replace those character format overrides with Italic or Bold chartag.  Here's what the script is supposed to do:
    put the find method in a while loop that searches for character format overrides.
    If a character format override is found, pass the text range returned by the find method and the CharPropsChange flag to the GetTextForRange method.
    Use a boolean compare between the idata of the text item to the character angle and character weight constants.
    Whichever boolean evaluates to true, then use the SetTextProp method to set properties of the text range to the properties of the italic or bold character tag.
    This script does work on the first character format override found however it ignores any other overrides in the same paragraph. The cause of this is that the while loop updates the text loc that the find method uses to the next paragraph in flow. I suspect that i need to add an inner loop that goes through all the text in a single paragraph, where at teach iteration the text loc used by the find method is based on the same paragraph but the offset is modified. I am just not sure how to do that.
    function removeOverrides (pDoc)
        var vDocStart = pDoc.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
        var vBoldFmt=getCharFmt (pDoc, 'Bold')
        var vItalicFmt=getCharFmt (pDoc, 'Italic')
        initFA_errno ();
        while (FA_errno==Constants.FE_Success)
            var vTextLoc = new TextLoc(vDocStart,0);
            var vFindParams=findOverrideParams (pDoc);
            var vTextRange=pDoc.Find(vTextLoc,vFindParams);
            if (vTextRange.beg.obj.ObjectValid())
                var vTextItems=pDoc.GetTextForRange (vTextRange, Constants.FTI_CharPropsChange)
                if (vTextItems.length==!0 )
                    if (vTextItems[0].idata==Constants.FTF_WEIGHT)
                       pDoc.SetTextProps (vTextRange, vBoldFmt.GetProps())
                    if (vTextItems[0].idata==Constants.FTF_ANGLE)
                       pDoc.SetTextProps (vTextRange, vItalicFmt.GetProps())
                    } else (Log (vLogFileName, '\nERROR: No items were found in the text format array but format override was found: '+pDoc.Name))
            vDocStart=vDocStart.NextPgfInFlow;
    function findOverrideParams (pDoc)
        var vFindParams = AllocatePropVals(1);
        vFindParams[0].propIdent.num = Constants.FS_FindObject;
        vFindParams[0].propVal.valType = Constants.FT_Integer;
        vFindParams[0].propVal.ival = Constants.FV_FindCharacterFormatOverride;
       return vFindParams;

    Hi Rick,
    Well, following up on the previous posting, I actually did figure out how to make it work but it seems rather inefficient. I can insert a new paragraph right after the paragraph that has the table anchor but when i cut the table, i also cut the paragraph i just created. So to get around that, I create two paragraphs, so that there will be one paragraph left after i do the cut and that is the paragraph that I paste the table into. Once the table is pasted into the new paragraph, I delete the other paragraph that I created.
    Here's the updated code from the for loop:
    var vTbl = vDoc.GetUniqueObject(Constants.FO_Tbl, vTextItems[i].obj.Unique);                 
    var vAnchorPgf=vDoc.NewSeriesPgf (vTbl.TextLoc.obj)      
    var vAnchorPgf2=vDoc.NewSeriesPgf (vAnchorPgf);        
    var vAnchorTextLoc=new TextLoc (vAnchorPgf2, 0);             
    var vTblTextRange=new TextRange ();        
    vTblTextRange.beg.obj=vTbl.TextLoc.obj;       
    vTblTextRange.beg.offset = vTbl.TextLoc.offset;        
    vTblTextRange.end.obj=vTbl.TextLoc.obj;        
    vTblTextRange.end.offset = Constants.FV_OBJ_END_OFFSET                 
    vDoc.TextSelection=vTblTextRange;        
    vDoc.Cut (0);                
    vTblTextRange.beg.obj=vAnchorTextLoc.obj;        
    vTblTextRange.beg.offset = 0;              
    vTblTextRange.end.obj=vAnchorTextLoc.obj;       
    vTblTextRange.end.offset =0;                 
    vDoc.TextSelection=vTblTextRange;       
    vDoc.Paste (0);                   
    vAnchorPgf2.Delete();        

  • How to add a finder method in the container manager Bean in the weblogic6.1

    in the environment jbuilder6 andweblogic6.1,use container manager entity Bean,it can automatic generate the findAll() method,I want to add a new method to find an element in the home interface,such as findByName(),name is a element of a table of the database.in the weblogic-cmp-rdbms-jar.xml,this is part of the fiile:
    <finder>
    <finder-name>findAll</finder-name>
    <finder-query><![CDATA[ (= 1 1) ]]></finder-query>
    </finder>
    <finder>
    <finder-name>findByName</finder-name>
    <finder-param>java.lang.String</finder-param>
    <finder-query><![CDATA[ (=name $name) ]]></finder-query>
    </finder>
    It can successfully compile the findAll(),but it is wrong when compile the findByName(),as follows
    "www.ejbgrpx": Method Name: findByName
    "www.ejbgrpx": Invalid specifications for a WebLogic RDBMS CMP EJB.
    "www.ejbgrpx": ERROR: Error from ejbc: weblogic.ejb20.cmp11.rdbms.finders.IllegalExpressionException:
    "www.ejbgrpx": While trying to process Finder
    "www.ejbgrpx": Parameter Types: (java.lang.String)
    "www.ejbgrpx": WebLogic Query: (= name $name)
    "www.ejbgrpx": Finder Expressions: ()
    "www.ejbgrpx": Could not parse WLQL expression: (= name $name) null
    "www.ejbgrpx": ERROR: ejbc found errors
    thank you

    The finder methods that you are referring to are only simple finder methods. If you would like to add specialized finder methods, you can make your entity bean with bean managed persistence and not container managed. If you are using EJB 2.0, your entity bean with container managed persistence can use EJB QL for finder methods. You can search for this topic and/or download the EJB 2.0 specifications
    Hope this helps

  • CMP Entity Bean with ejb-ql finder methods and INFORMIX database

    Hi,
    I have some CMP Entity Beans with finder methods defined in ejb-ql. In my ejb-jar, within <entity> definitions I have something like:
        <entity>
          <abstract-schema-name>BeanName</abstract-schema-name>
          <cmp-field><field-name>fieldOne</field-name></cmp-field>
          <cmp-field><field-name>fieldTwo</field-name></cmp-field>
          <query>
            <query-method>
              <method-name>findAll</method-name>
              <method-params></method-params>
            </query-method>
            <ejb-ql>SELECT OBJECT(o) FROM BeanName o</ejb-ql>
          </query>
        <entity>
    And in persistent.xml:
    <db-properties>
         <data-source-name>datasource_name</data-source-name>
    </db-properties>
    <entity-bean>
         <ejb-name>BeanName</ejb-name>
         <table-name>table_name</table-name>
         <field-map key-type="NoKey">
         <field-name>fieldOne</field-name>
         <column><column-name>column_one</column-name></column>
          </field-map>
         <field-map key-type="NoKey">
         <field-name>fieldTwo</field-name>
         <column><column-name>column_two</column-name></column>
          </field-map>
          <finder-descriptor>
              <method-name>findAll</method-name>
              <method-params/>
         </finder-descriptor>
    Once deployed, on server side, I can found a java source file (with corresponding compiled class file) in path:
    j2ee/cluster/server0/apps/companyName/MyEARApp/EJBContainer/temp/temp38837373733/route/to/package/
    with names:
    BeanName0_0pm.java
    BeanName0_0PM.class
    and the generated java file contains this code:
      public java.util.Enumeration ejbFindAll() throws javax.ejb.FinderException, javax.ejb.EJBException  {
        TransactionContext tc = pm.getTransactionContext();
        Connection conn = null;
        PreparedStatement pSt = null;
        ResultSet ejb_rs = null;
        int status = javax.transaction.xa.XAResource.TMSUCCESS;
        try {
          conn = pm.getConnectionForFindMethod();
          pSt = conn.prepareStatement("SELECT \"O\".\"COLUMN_ONE\",\"O\".\"COLUMN_TWO\", FROM \"TABLE_NAME\" \"O\"");
          ejb_rs = pSt.executeQuery();
    I'm trying to call this method but it throws a SQLException when preparing the statement.
    It seems that Informix does not like this SQL syntax because of upper case names, doble quotes on table alias, or something else.
    When editing persistent.xml in netweaver, I can define the element <datasource-vendor> as ORACLE, SAPDB, MS_SQL_SERVER, DB2_UDB_AS400 or DB2_UDB_OS390 but INFORMIX is not an accepted value.
    Is there any way to define how this SQL query is build?
    Thanks in advance.

    The return type of the finder method defined in the remote home interface is either the entity bean's remote interface or a collection of objects implementing the entity bean's remote interface. The return type of the finder method defined in the local home interface is either the entity bean's local interface or a collection of objects implementing the entity bean's local interface

  • More than one entity found for a single-object find method

    Hi everyone...
    I have this error when my webservice is running..I don't know what it means and what would be the best solution..
    <pns:message>More than one entity found for a single-object find method.</pns:message>
    it throws an Exception..
    Thanks!

    = More than one row found in a DB with the "unique" key supplied...
    Your method is returning an object where it should return a collection ?
    Enjoy

  • Finder method in container-managed entity bean

    Finder method of a container entity bean is taking the primary key class object of another entity bean. How to map this in the xml descriptor file weblogic-cmp-rdbms.xml for this type of beans.
    I am trying to deploy the jasmine computer store of Mastering EJB by EdRoman.
    I couldn't write the deployment file weblogic-cmp-rdbms.xml for Order Entity bean which uses CustomerPK as an argument in its finder method.
    Please tell me how to write this. I am trying on weblogic 5.1
    Thanx in advance
    Srivatsa

    hello,
    in container managed persistence, you specify on your xml file the name of your table. so the primary key you want to use have to be a foreign key in your table. otherwise i don't think that you can use a container managed persistence.
    Najib.

  • Using wildcards in custom find methods with CMP beans

    Hi,
    I'd like to create a custom find method called findByName which accepts a string. I'd typically want to use the string in a '%<name>%' scenario, where the user needn't type in the whole name. Does anybody know what the partial query should look like? I'm not sure how to concatenate the '%' symbol to the string taken in.
    Thanks in advance
    Gillian

    Gillian-
    Bind variables are of the form $1, $2, etc., so try using a query stmt like this:
    select * from YOURTABLE where name like '%$1%'
    Regards,
    -Jon

  • Problem when creating CAF Entity Service finder Methods

    Guys,
    Can any one please suggest me appropriatly to the below problem.
    I am using NWDS 7.06. I have no problem when creating CAF project, Application Service and Entity Service even.
    But in the Entity Service:
    1. Add a string or longtext attribute.
    2. try to create a custom finder method in operations tab, during that operation i am  not finding the attribute which i have created in step1.
    That means i am not able to create the my own finder methods with parameters.
    I was able to do that in some version long ago but i have forgotten that NWDS version.
    summary of Problem Is: " Cannot create custom methods with custom parameters in Entity Service"
    Can you please suggest me the right version or a solution to this problem on urgent basis please.
    I promise you that i will give you full points to you who ever gives me the right solution.
    Please mail your suggestions to [email protected]

    Guys,
    I have solved the problem successfully. Thanks for your attention.

  • Class cast exception using Finder method

    Hello. I'm new to J2EE. I have set up one entity bean but am having trouble
    with my current one.
    Basically, I have two finder methods:
    public ShareHistory findByPrimaryKey(Integer historyId)
            throws FinderException, RemoteException;
        public Collection findByShare(String shareId)
             throws FinderException, RemoteException; findByPrimaryKey works fine, but findByShare causes a class cast exception in java.lang.String.
    The stack trace in the server logs shows that it is my ejbActivate method in my entity bean causing the problem:
    public void ejbActivate() {
          //String numberString = (String) context.getPrimaryKey();
          //historyId = new Integer(numberString);
        historyId = (Integer) context.getPrimaryKey();
        }The stack trace from my client shows that the class cast exception occurs
    in the client at the System.out.println("shareid" + ": " + sh.getShareId());
    line:
    Collection c = sharesHistoryHome.findByShare("DCAN");
                     Iterator i = c.iterator();
                          while (i.hasNext()) {
                         ShareHistory sh = (ShareHistory) i.next();
                    System.out.println("shareid" + ": " + sh.getShareId());
                    System.out.println("value" + ": " + sh.getValue());
                     System.out.println("time" + ": " + sh.getTime());
                     System.out.println("date" + ": " + sh.getDate());
                     }//whileAs you can see I tried casting to a string in ejbactivate, but that simply causes an Integer class cast exception during findByprimaryKey instead. How do I allow both Integer and String objects to be used?
    Also I am a bit confused as to why the String passed to findByShare(String) is being used in context.getPrimaryKey() in the first place (if that is actually what's happening).

    Oops my FindByShare method was returning a collection of shareId's (strings) instead of a collection of Integer primary keys, which would explain the class cast exception.

  • Collection returned by finder methods

    Collection returned by finder methods are serialized to the clients or referenced?
    When a client access a EJB and invoke each finder method, the result back to the client is a collection (for every finder methods unless the findByPrimaryKey). This collection is serialized to the client o is accessed by the client from the container remotely?

    I guess it is serialized. The EJB works on the rmi logic.

  • SelectOneChoice value needed for find-method to refresh table

    I would like to implement a filter that will filter the dataset, resultset returned by my adf-table.
    The user has to select a value in the dropdown-list and after he has made a selection the table has to be refreshed using the value of the dropdown as a parameter-value for the find-method.
    I'm using a partialtrigger to raise the refresh-event on my table, autosubmit on my dropdown and partialtrigger-attribute on my table. Now I want to pass the value of the selectOneChoice to the key-value pair used for the find-method in my pageDefinition-file.
    What's the best practice to add this parameter-value?

    Frank,
    We tried the ValueChangeListener already on the selectOneChoice-component, but the listener doesn't get fired when you choose a new value in the selectOneChoice. Only the first time the method in our backing bean is accessed, and no other times.
    We are using datacontrols based on ejb 3.0 session beans as our persistence layer instead of BC and we would like to put the chosen value of the selectOneChoice-component in the parameter of our method binding. We should be able to it in the same manner as you've mentioned in the example, by accessing the paramMap.
    Thanks for the advise !

  • Custom finder methods

    I'm tring to deploy an Entity bean (CMP) with custom finder method that gets a parameter.
    I encountered two problems :
    1) defining the query in the deployment descriptor coased the app server to generate the a query without the where cloase - this was fixed by changing manualy the orion-ejb-jar.xml in the application-deployments directory.
    2)the second, and yet unresolved problem, is that OC4J doesn't bind the parameter that the query uses during runtime. I'm recieving an ORA msg that claims that not all the parameters are binded.

    see sample code
    http://otn.oracle.com/sample_code/tech/java/oc4j/htdocs/oc4jsamplecode/oc4j-demo-ejb.html
    also there should be a section in our documentation about cmp custom finder methods. oc4j attempts to generate custome finder methods based on home interface
    <finder-method query="$empNo = $1">
    <method>
                             <ejb-name>EmployeeBean</ejb-name>
                             <method-name>findByEmpNo</method-name>
                             <method-params>
                                  <method-param>java.lang.Integer</method-param>
                             </method-params>
                        </method>
                   </finder-method>

  • How to implement find methods in CMP?

    As OC4J does not support EJB-QL, we need to implement the find methods by ourselves. But how? Here is my thought.
    1) Still declare the find methods in EJB home, such as
    public Collection findBySponsor(String sponsorGuid);
    2) Do not add query part to ejb-jar.xml file;
    3) In the bean class, implement the find method using JDBC code.
    Does CMP allows explicit-implementation of finder methds?
    Does CMP allows explicit-call to JDBC code?
    Thanks,

    Henry -- Why go to that trouble? For the near term I would suggest that you just modify the generated
    orion-ejb-jar.xml descriptors which will include tags to allow you to either 1) enter a partial criteria or
    2) enter a complete SQL statement. This is much less work and when EJB-QL is available with the product,
    then you have to only add the EJB-QL to the ejb-jar.xml.
    Thanks -- Jeff

  • Finder methods for CMP beans

    We do not implement finder method in Bean class for CMP. As such, where do we implement finder methods such as findInRange() method? How does the container implement my custom "find" methods.
    Thanks

    Using CMP 2.x, your custom finder and select methods are implemented by the container based on the EJB QL query you provide in the ejb-jar.xml. In CMP 1.1, there was no portable way to express the semantics of the query, so most vendors had a vendor-specific syntax for describing the query.
    See chapter 27 of the J2EE 1.4 Tutorial for some examples of using EJB QL :
    http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
    --ken
    Kenneth Saks
    J2EE SDK Team
    SUN Microsystems

Maybe you are looking for

  • Error while trying to synchronise audio and midi

    Hi Logic worked all day and suddenly start giving this message: error while trying to synchronise audio and midi. Nothing was changed and we also have no sound. We don't have any midi device, its just the G5 and Logic installed. Any idea how to solve

  • Web interaction in local HTML5 publish

    Hi, I have a bit of a hard time to get web interaction working in local html5 publish. We have embedded a web page interaction widget in our presentation. The interaction works fine in LMS, but we need to deliver the content on CD, so the presentatio

  • Panic! A Christmas gift doesn't w

    Hi all?The Zen Micro 6G for my daughter Christmas gift initially worked fine with firmware .xI've updated the firmware to 2.x to let it work with MediaPlayer . Initially seemed fine once plugged to USB MP could get it... I don't know what happened af

  • Smartform or BSP HTML Emails in Outlook 2007

    Hello, we create different HTML e-mails based on smartforms or BSP. Everything looks as it should with <b>Outlook 2003</b>. But if you send the same mails to user with <b>Outlook 2007</b>, no formats, boxes and colors are visible anymore. Does anyone

  • Pls help me ... I can't run my form on IE ?????

    That what appear when i click on icon of java : Loading http://mohammed:8889/forms90/java/f90all_jinit.jar from JAR cache java.io.FileNotFoundException: File not found: http://mohammed:8889/forms90/java/colorpicker.jar      at sun.plugin.protocol.jdk