Comparing Collections of EJBs

If i have a Collection of EJB Objects, is it possible to use myCollection.contains(MyEJBObj)?
This method uses Object.equals, but ejb's compare with EJBObject.isIdentical.
If i cant use contains(obj), do i have to write my own search algorithm or is there already one in the jdk?
Thanks,
toby

you can use it
from ejb spec:
Note that the Enterprise JavaBeans architecture does not specify �object equality� (i.e. use of the ==
operator) for entity object references. The result of comparing two object references using the Java programming
language Object.equals(Object obj) method is unspecified. Performing the
Object.hashCode() method on two object references that represent the entity object is not guaranteed
to yield the same result. Therefore, a client should always use the isIdentical method to determine
if two entity object references refer to the same entity object.
Note that the use of isIdentical for the comparison of object references applies to the
implementation of the methods of the java.util.Collection API as well.

Similar Messages

  • How to sort collections with EJB 2.0?

    As you know there is no ORDER BY statement in EJB QL; so I receive unsorted collection of objects from finder-methods. The process of Collections.sort() is very slow... Any ideas how to make a quick sort?

    Order by is a EJBQL 2.1 feature. It can be found in coming release of s1AS8.
    In JDK 1.4, merge sort is used in Collections.sort. It has a O(nlogn) algorithm. While quick sort only has an average O(nlogn) algorithm. If you are using custom Comparator, then you may to check about its implementation.

  • Compare collection with list of values

    Hi
    oracle 10.2.0.1.0
    I need to compare a collection (Record ) vriable with a list of values from a table .
    pseudo code is
    if gpid_rec.item_type in ('a','b','c') then
    end if ; Now this should be replaced by values retrieved from a table
    if gpid_rec.item_type in ( select item_type from dbom_items ) then
    end if ;But the query is not allowed in if statement .
    please help me in achieving it.

    Hi,
    Something like this
    declare
      type t_values is table of varchar2(1) index by dbom_items.item_type%type;
      v_values  t_values;
    begin
      -- init once
      for cur in (select item_type from dbom_items)
      loop
        v_values(cur.item_type) := '1';
      end loop;
      -- then use many times
      if v_values.exists(gpid_rec.item_type)
      then
      end if;   
    end;
    /

  • Comparing collections

    i have a query result bulk collected into a record type it contains 2 columns
    say columna columnb
    11 2
    22 3
    i want to check this result with a abc.csv file
    now i can read this file through utl_file.open with read option
    it contains values like
    columna columnb
    11 2
    22 3
    how i can check whether the two entries are same or different
    suggestions welcome
    thanks in advance

    The simplest option would be to set up the abc.csv as an external table and then just do a SQL query to compare that to the oracle table.

  • Comparing Collection object with a string

    Hi everyone,
    There is my problem: I have a program that generate all possible combinations of a certain number of letters for example: -ABC- will gives A, B, C, AB, AC, BC, ABC. Everything is fine at this point. But then the user can input a string like "AB" and I have to tell him if this string is contained in the generated set. My set is in a Collection, but when I used : LetterCombination.Contains(TextString), it returns always false. Even if I know that the string is contained in the set.
    Here is the code to generate the set:
    public class Recursion
         Collection LetterCombination;
    /*String Letters is the letters which I have to generate the combination, and
    the LetterNumber is the number of letters contained in my string.*/
         public Recursion(Set ItemLetters, String Letters, int LetterNumbers)
              ItemLetters = new TreeSet();
    String[] Token = Letters.split(" ");
    /*Adding the letters in the TreeSet*/
    for (int i = 0; i < LetterNumbers; i++)
         ItemLetters.add(Token);
    LetterCombination = BuildLetterSet(ItemLetters);
    private Collection BuildLetterSet(Set ItemLetters)
    Set NotUsedYet = new TreeSet();
    Set thisPowerSet = new TreeSet();
    Collection Letterresult = new ArrayList();
    NotUsedYet.addAll(ItemLetters);
    BuildByRecursion(NotUsedYet, thisPowerSet, Letterresult);
    return Letterresult;
    private void BuildByRecursion(Set notUsedYet, Set thisPowerSet, Collection result)
    if(notUsedYet.isEmpty())
    if(!thisPowerSet.isEmpty())
    Set copy = new TreeSet();
    copy.addAll(thisPowerSet);
    result.add(copy);
    return;
    Object item = notUsedYet.iterator().next();
    notUsedYet.remove(item);
    BuildByRecursion(notUsedYet, thisPowerSet, result);
    thisPowerSet.add(item);
    BuildByRecursion(notUsedYet, thisPowerSet, result);
    thisPowerSet.remove(item);
    notUsedYet.add(item);
    And if I print out the LetterCombination collection, it gives me:
    [C]
    [B, C]
    [A]
    [A, C]
    [A, B]
    [A, B, C]
    Which are the good combination needed. But I really don't understand how to compare this collection with the string entered by the user.
    I'm really lost. can somebody help me! Thanks in advance...

    You don't show where you call this constructor, or what your arguments are:
    public Recursion(Set ItemLetters, String Letters, int LetterNumbers)
       ItemLetters = new TreeSet();
       String[] Token = Letters.split(" ");
       /*Adding the letters in the TreeSet*/
       for (int i = 0; i < LetterNumbers; i++)
          ItemLetters.add(Token[ i ]);
       LetterCombination = BuildLetterSet(ItemLetters);
    }But, the constructor doesn't make sense, anyway. itemLetters is immediately set to a new TreeSet, so whatever you passed in (if anything) for the first argument is unchanged by the constructor (and the new TreeSet is lost when you finish the constructor). Also, you split your input Letters on space, but rely on LetterNumbers for the length of the split array (which may or may not be accurate). Why not do a 'for' loop testing for "i < Token.length", and eliminate LetterNumbers parameter? Your input for the second parameter to this constructor would have to be "A B C D" (some letters delimited by spaces). Your constructor only needs one parameter--that String.
    The capitalization of your variables doesn't follow standard coding conventions. Your code is hard to read without the "code" formatting tags (see "Formatting Tips"/ [ code ] button above message posting box).

  • Cant compare collections

    hi, i cant solve one problem:
    SELECT
    be.Name, cardinality(be.Project) As project_count, cardinality(be.DoneProjects) As DoneProject_count
    FROM bureau be
    Order BY be.Name;
    Is it possible to compare project_count with done_project, for example: project_count=4 and done_project_count=2 I want to get undone_projects=2..how can i do it?

    SELECT Name, project_count, doneproject_count, project_count-doneproject_count as undoneproject_count
    from (
        SELECT be.Name, cardinality(be.Project) As project_count, cardinality(be.DoneProjects) As DoneProject_count
        FROM bureau be
        Order BY be.Name
        );

  • How can I compare two collections at the same time? (View two grid views)

    I have two collections containing some of the same images. (My Nikon D70 did not put an end-of-file on some images. I recovered them into a different collection.) Now I want to display both collections side-by-side in grid view. I will select those images in the "recovered" collection that correspond to the bad images in the "main" collection, add the ratings etc, and move just these to another collection.
    It is extremely frustrating to have to bounce back and forth between collections, remembering each image one by one and selecting it in the "recovered" collection. (The image names are not preserved in the "recovered" collection -- I have to go by what the image looks like.)
    LightRoom allows me to compare photos in the compare view. I want to compare collections in two grid views.

    CaptureTheLight,
    you have ran into a situation when you have to compare two sets of images and now you're wondering how come Lightroom doesn't have such "obviously necessary" functionality? But you have to admit it, this is not such a common situation in a photographer's workflow recovers broken files and tries to compare them against themselves. I think it's a pretty specific feature you need. Still, Lightroom has enough powerful tools for editing and sorting images.
    For example...
    You could just put them all - "main" and "recovered" - into a single collection or into the Quick Collection. Label the entire "recovered" collection with, say, red and sort by capture time. Now you'll have everything side by side, ordered chronologically. The "recovered" images will stay next to the "main" images since their capture time will be the same, and they will also stand out since they have the red label.
    Make the thumbnails bigger and set up the grid view so it tints the thumbnail cell are tinted with the label color. Now, you can go quickly through them visually checking labeled vs unlabeled.

  • How to compare a collection of objects?

    Basically I am checking answers to security questions.
    So I have an id, a question no and the answer_text stored in a table.
    What I intend to do is retrieve this into a collection and compare that to the collection passed in.
    If they match , I return true else I return false.
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE 11.2.0.1.0 Production
    TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    referencing this thread on collections
    Re: Compare Collections   - PL-00306
    I based my example on TUBBY's example.
    create or replace
    type answer_array_obj
    as
    object(id number,
              question_no number,
              answer_text varchar2(100)
    create or replace type answer_array as table of answer_array_obj;
    DECLARE
    first_list  answer_array_type := answer_array_type(answer_array_obj(1,1,'ONE'),
                                                                             answer_array_obj(1,2,'TWO'),
                                                                             answer_array_obj(1,3,'THREE')
    second_list  answer_array_type := answer_array_type(answer_array_obj(1,1,'ONE'),
                                                                             answer_array_obj(1,2,'TWO'),
                                                                             answer_array_obj(1,3,'THREE')
    compare_list answer_array_type := answer_array_type(NULL);
    BEGIN
    compare_list := first_list  MULTISET EXCEPT second_list;
    IF compare_list.COUNT = 0
    THEN
        compare_list := second_list MULTISET EXCEPT first_list;
    END IF;
    IF compare_list.COUNT = 0
    THEN
        DBMS_OUTPUT.PUT_LINE('EQUAL');
    ELSE
       DBMS_OUTPUT.PUT_LINE('THE ABSENCE OF EQUALITY');
    END IF;
    END;
    /When I looked at the example , by user 933207, he appeared to be using two different objects.
    18 BEGIN
    19 load1( nt_copy1);
    20 load2( nt_copy2);

    Hi,
    what is the question? I doesnt work? So you have to provide a map method
    CREATE OR REPLACE TYPE  "ANSWER_ARRAY_OBJ"
    as
    object(id number,
              question_no number,
              answer_text varchar2(100),
              MAP MEMBER FUNCTION match RETURN VARCHAR2);
    CREATE OR REPLACE TYPE BODY  "ANSWER_ARRAY_OBJ"
    as
              MAP MEMBER FUNCTION match RETURN VARCHAR2 is
              begin
                return to_char(id)||to_char(question_no)||answer_text;
              end;
    end;
    create or replace type answer_array_type as table of answer_array_obj;
    DECLARE
    first_list  answer_array_type := answer_array_type(answer_array_obj(1,1,'ONE'),
                                                                             answer_array_obj(1,2,'TWO'),
                                                                             answer_array_obj(1,3,'THREE')
    second_list  answer_array_type := answer_array_type(answer_array_obj(1,1,'ONE'),
                                                                             answer_array_obj(1,2,'TWO'),
                                                                             answer_array_obj(1,3,'FOUR')
    compare_list answer_array_type := answer_array_type(NULL);
    BEGIN
    compare_list := first_list  MULTISET EXCEPT second_list;
    IF compare_list.COUNT = 0
    THEN
        compare_list := second_list MULTISET EXCEPT first_list;
    END IF;
    IF compare_list.COUNT = 0
    THEN
        DBMS_OUTPUT.PUT_LINE('EQUAL');
    ELSE
       DBMS_OUTPUT.PUT_LINE('THE ABSENCE OF EQUALITY');
    END IF;
    END;
    THE ABSENCE OF EQUALITY
    Statement processed.
    0.02 secondsregards

  • (261705413) Q RPCC-21 Can you compare a performance of "usual" RPC from EJB and RPC from Web Services?

    Q<RPCC-21> Can you compare a performance of "usual" RPC from EJB and RPC from Web
    Services?
    A<RPCC-21> There are additional performance overheads for invoking a web service
    when compared to straight EJB invocation. However, you should not think of web
    services as a way to replace your EJBs instead you should be willing to accept
    some performance decline for the massive gains in platform interoperability and
    the ability to exposure your services outside of you firewall.
    Additionally, performance decreases will be dependent on several factors. The
    most significant of which is the XML-Java and Java-XML translation of the SOAP
    message. This can be very fast if the XML structure is simple but if you web services
    requires a parameter that has a complex XML format you may see a more significant
    slow down.
    Adam

    Sorry if this sounds like I am new to this but I am.
    So, the extended version is the format that would be used if you were not utilizing the files that the wsdl2java function creates?
    And this is done to when you want more flexibiility for the user to call your service?
    So, you would push to have the stub files used when you want to control how the web service is used?
    thanks for the feedback.

  • Error in proposed Collections.sort signature

    (A very long time ago I've send a note on this to the jsr comment list, but unfortunately I never got a reply nor did I notice a bug report. Therefore I propose the change again here).
    The signature of the Collections.sort method is very limiting:
      static <T> void sort(List<T> list, Comparator<T> c);This signature requires you to pass a Comparator that is parameterized with exactly the same type as the items in the List. However, often Comparators can be implemented more generic. The signature doesn't allow this. The only requirement for the sort algorithm is however to pass a Comparator that is able to compare the items in the List.
    This requirement is expressed by the following signature:
      static <T, E extends T> void sort(List<E> list, Comparator<T> comparator) The items in the List are now allowed to be more specific. Because I don't want to cast in Generic Java code I've implemented a tiny workaround:
      public static <T, E extends T> void sort(List<E> list, Comparator<T> comparator) {
        Collections.sort(list, new ComparatorWrapper<T, E>(comparator));
      private static class ComparatorWrapper<T, E extends T> implements Comparator<E> {
        private Comparator<T> _comparator;
        public ComparatorWrapper(Comparator<T> comparator) {
          super();
          _comparator = comparator;
        public int compare(E o1, E o2) {
          return _comparator.compare(o1, o2);
      }This proves the correctness of the new signature. This also proves that you have to be very careful in chosing a signature. I've been working with Generic Java for some years now, but I'm still making the same mistake now and then ...

    This will be fixed in a novel and interesting way in the new spec for GJ -- stay tuned! (I think mid-May/late-May is the expected timeframe for this.)

  • Poor perfomance CORBA and EJB in Oracle 8i

    Here are the perfomance results of methods invocations
    (1000 invocations of empty method in an loop)
    Oracle 8i CORBA ~100ms per method
    Oracle 8i EJB ~100ms per method
    Jonas EJB server ~5ms per method
    Java RMI ~3ms per method
    Why Oracle 8i is so slow, even compared with noncommercial
    EJB server Jonas? Is there any way to speed this up? Source codes of perfomance testing programs available upon request.

    Oracle Jserver is quite fast and scalable. Nevertheless, there exists an important overhead in calling a CORBA or EJB method, so you should desing "heavy" functions in your EJB/CORBA objects. Instead of calling 10 times little methods, call one time a hevay one, and you'll find that JServer perforns very fast and reliably.
    Best regards

  • Get row id after EJB create method.

    Hi,
    does any one know how to get an id of new created by CMP ejb row? When I create new object it's id is 0, when i call ejb create it creates new row in DB and crates new ID by increasing the old one, but how can I get this new ID after create has finished?
    Now I have to look equals by some fields object in DB after creation, looks ugly.

    So here is my CMP :
    * @ejb.bean name="Dividend"
    * type="CMP"
    * view-type="local"
    * primkey-field="id"
    * schema="dividends"
    * cmp-version="2.x"
    * @ejb.value-object name="Dividend"
    * match="*"
    * @ejb.transaction type="Required"
    * @ejb.persistence table-name="dividends"
    * @ejb.finder signature="Collection findAll()"
    * query="SELECT OBJECT(d) FROM dividends d"
    * @jboss.query signature="Collection findAll()"
    * @ejb.finder signature="Dividend findByActivityId(java.lang.Integer activityId)"
    * query="SELECT OBJECT(d) FROM dividends d WHERE d.activityId = ?1"
    * @jboss.query signature="Dividend findByActivityId(java.lang.Integer activityId)"
    * strategy="on-load"
    * @jboss.persistence create-table="false"
    * remove-table="false"
    * datasource="java:/ChronimDS"
    * datasource-mapping="mySQL"
    public abstract class DividendBean implements EntityBean {
    //~ Methods ----------------------------------------------------------------
    //==========================================
    // Business methods
    //==========================================
    * @ejb.interface-method
    public Dividend getDividend() {
    Dividend dividend = new Dividend();
    dividend.setId(this.getId());
    dividend.setActivityId(this.getActivityId());
    dividend.setLower(this.getIsLower());
    dividend.setLowerAmount(this.getLowerAmount());
    return dividend;
    * @ejb.interface-method
    public void setDividend(Dividend dividend) {
    this.setActivityId(dividend.getActivityId());
    this.setIsLower(dividend.isLower());
    this.setLowerAmount(dividend.getLowerAmount());
    //==========================================
    // CMP fields
    //==========================================
    * @ejb.pk-field
    * @ejb.persistence column-name="id"
    * jdbc-type="INTEGER"
    * sql-type="INTEGER"
    * @ejb.interface-method
    * @ejb.transaction type="NotSupported"
    public abstract Integer getId();
    public abstract void setId(Integer id);
    * @ejb.persistence column-name="activityId"
    * jdbc-type="INTEGER"
    * sql-type="INTEGER"
    public abstract Integer getActivityId();
    public abstract void setActivityId(Integer activityId);
    * @ejb.persistence column-name="isLower"
    * jdbc-type="TINYINT"
    * sql-type="TINYINT"
    public abstract boolean getIsLower();
    public abstract void setIsLower(boolean isLower);
    * @ejb.persistence column-name="lowerAmount"
    * jdbc-type="INTEGER"
    * sql-type="INTEGER"
    public abstract Integer getLowerAmount();
    public abstract void setLowerAmount(Integer lowerAmount);
    //==========================================
    // EJB callbacks
    //==========================================
    * @ejb.create-method
    public Integer ejbCreate(Dividend dividend)
    throws CreateException {
    this.setId(dividend.getId());
    this.setIsLower(dividend.isLower());
    this.setLowerAmount(dividend.getLowerAmount());
    this.setActivityId(dividend.getActivityId());
    return null;
    public void ejbPostCreate(Dividend dividend)
    throws CreateException {
    // EntityBean (empty) implementation
    public void setEntityContext(javax.ejb.EntityContext ec) {
    public void unsetEntityContext() {
    public void ejbLoad() {
    public void ejbStore() {
    public void ejbActivate() {
    public void ejbPassivate() {
    public void ejbRemove() {
    As you can see I'm using xdoclets.
    Suppose I need to create new row of this object :
    Dividend d = new Dividend();
    // fill dividend by values here but do not set it's id it is 0 before creation
    // SQL server will set it automaticly
    Object ref = context.lookup("DividendLocal");
    DividendLocalHome dividendLocal = (DividendLocalHome) ref;
    dividendLocal.create(dividend)
    I create new row of dividend in my DB and want to get an ID of the new created row, I thought that dividend object will get this ID after creation automaticly, but no, his id is 0.
    so here id will be 0 :
    dividendLocal.create(dividend);
    int id = dividend.getId(); // 0
    and if I write this
    dividendLocal.create(dividend).getId();
    I get :
    2007-06-25 14:44:02,384 ERROR [org.jboss.ejb.plugins.LogInterceptor]
    EJBException in method: public abstract java.lang.Integer
    com.xxx.xxx.ejb.SessionFacade.createDividend(
    xxx.xxx.model.Contract) throws java.rmi.RemoteException:
    javax.ejb.NoSuchObjectLocalException: Entity not found: primaryKey=0

  • Some questions on EJBs

    hi, i am an intermediate javaee developer but i have some questions on EJBs. sometimes i wonder why do i want to use EJBs in an application. if possible please use some illustrations.
    1) What problems do EJBs both session bean and message driven bean solve respectively. like what was the motivation behind creating ejbs.
    for ex, someone complained to me once that an app his company wrote took time to load large sets of data, and he asked if he should use EJBs, and i am like, does an EJB load data faster? though i think i said it could help, not because i was sure, but because u know the "Biig EJB", it has to solve it.
    2) why do people compare spring and ejbs, and sometimes prefer spring over ejbs.
    3) in what situations could an EJB be neccessary/advantageous, and what are the disadvantages if any.
    thanks.

    java_everywhere wrote:
    1) What problems do EJBs both session bean and message driven bean solve respectively. like what was the motivation behind creating ejbs.
    for ex, someone complained to me once that an app his company wrote took time to load large sets of data, and he asked if he should use EJBs, and i am like, does an EJB load data faster? though i think i said it could help, not because i was sure, but because u know the "Biig EJB", it has to solve it.It doesn't solve any problems, it is a framework that you can use to make your development (and maintenance) cycle easier IF you use it properly. For example, you get integrated JMS support through message driven beans, no extra work needed there. You get container managed transactions, which made my life a whole lot easier once I got over that phase of thinking the server is responsible for everything (it is not, you are still in the driver seat when it comes to transaction management). As part of that transaction management you get out of the box ORM support through the JPA specification. You can take advantage of the load balancing features of the server for heavy weight applications. etc. etc.
    In essence you shouldn't think in terms of what EJB technology gives you; what does the entire JEE platform give you, of which EJB technology is only a component?
    >
    2) why do people compare spring and ejbs, and sometimes prefer spring over ejbs.A real world example: when putting together Ikea furniture you can usually get very far with only using those little tools they give you in the package. However, sometimes you are forced to use a screwdriver, a hammer or a drill. And sometimes you use a screwdriver to keep something in place while using the little Ikea tool to put in a screw. Combining the screwdriver and the Ikea tool usually stems from experience where using only one of them took so much longer and was so much more frustrating to get the things done.
    Interesting how real world examples usually translate to software development as well. Why would you limit yourself to using only one tool when combining tools could give you more flexibility and could solve a problem easier because you use the strengths of both to compliment each other?
    3) in what situations could an EJB be neccessary/advantageous, and what are the disadvantages if any.All technology exists because there was some need for it. Need rises from requirements, so this question is not answered right here and now - it should be asked on a per project basis. I have this project with these requirements, how could EJB technology help here? How could Spring help? How could Struts 2.0 help? etc. etc.

  • Creating CSV ETL from ValueObject collection

    Hey all,
    Suprisingly, I can not find a lot of information regarding direct ETL/export from a javabean collection (i.e. a ValueObject collection from EJB) into a CSV for export. Part of the ETL is to map specific javabean properties to the CSV in a particular order.
    I know it's possible to write something along the lines of:
    myVO.getMyfield1() + "," + myVO.getMyfield5 + "," + myVO.getMyfield3;But, looking for something a little more elegant and easier to maintain.
    I know using some reporting tools (i.e. JasperReport) you can do something like that, but that seems like more maintance than one would want for simple data extraction process.
    Anyone have any experience in this they would like to share?
    Thanky,
    -D

    anybody? Is this that hard?

  • EJB finder query with ORDER BY clause

    Hi,
    How to query the data in ordered list using Order By clause in the entity Bean.
    Here is the part of My code in which i am interrested.
    /* @ejbgen:finder
    * signature = "Collection findAllData()"
    * ejb-ql = "SELECT OBJECT(z) FROM DataProfileBean AS z"
    abstract public class DataProfileBean extends EntityAdapter {
    * @ejbgen:cmp-field column = DATA_PREFIX
    * @ejbgen:primkey-field
    * @ejbgen:local-method transaction-attribute = Required
    public abstract Integer getDataPrefix();
    public abstract void setDataPrefix(Integer DataPrefix);
    Now what modification needs to be done in the ejb-ql query to find the DataPrefix in the sorted list.
    Regards,
    Dilip

    I don't think the current spec for EJBs support ORDER BY. But Weblogic has an extension that you can use (that is, if you're using it). Here's the info: http://e-docs.bea.com/wls/docs61/ejb/cmp.html#1076421

Maybe you are looking for

  • I get this error

    I get this error :"The name 'A' does not exist in the current context." And gere's the code. What I want to do: I want to check if my matrix.i file exists,and if it does I want to read the text from it.And if that file does not exist I want the user

  • XSI Raw files not supported

    I have a new MacBook Pro and Aperture 2.14. None of my raw files from my XSI are supported in Aperture. I've tried reimporting the images, but nothing seems to work. I can see thumbnails of the images but get the red screen at full view.

  • Nav bar problems; please help.

    Home Birthday Anniversary For Her For Him For Mom For Dad Just Because Making Up Can anyone help?  This is the html for my nav bar, but when I "view in browser" I get a cannot display page message.

  • How to erase an icon of an erased program from  status bar ?

    I installed WD Anyhere backup to my intel base imac after I erases it with application cleaner program. But the icon of this program sticked to my status bar at the right side near time machine icon. I can not make it desappear. when you click this i

  • How to calculate number of working days in current month?

    hi gurus, In a customer exit I am trying to check if the system date is the 3rd business day of the current month.  Is there any FM module that i can use? thanks in advance...