Tutorial for CMP2.0 entity bean mapping?

Hi folks,
I've found some decent resources on the web for most of EJB 2.0 bean creation, BUT I'm having a hard time figuring out how to map bean fields to table columns, beans to tables, and the overall bean to a particular database.
The latter I believe is still app server specific but the former two I believe are now supposed to be standard. The only thing I've found on the java site basically said 'use a deploy tool to create the xml' - I'd rather find a tutorial that explains what the xml is so I understand it better.
Thanks,
mike

actually all three things are parts of the same process, and the process is app.server/deployment tool specific
all of such mapping information is usually placed into application server specific deployment descriptors (or dd extensions as they are sometimes called)
look at the documentation of you app. server

Similar Messages

  • Entity bean mapping to multiple tables.

    Hello,
    Is it possible to map several tables with only one BMP?
    if so please send me an example (class bean)
    Thanks in advance

    hi,
    yes, entity bean can be mapped to multiple tables provided it is bean managed entity bean.
    since, container cannot prepare complex quries so that we need to rely on bean managed persistance.
    Ex : Assume you have two table like X, Y
    where X table having fields (int x primarykey, varchar str) and Y table having fields (varchar name primarykey, int y).
    Now you should design a primary key class of your own as shown below:
    public class BeanPriamkey implements java.io.Serializable
    protected int x;
    protected String name;
    public BeanPramkey()
    //initialzation part
    public BeanPramkey(int x,String str)
    //initialzation part
    public String toString()
    //return object value as string
    public int hashCode()
    //return an int value
    public boolean equals(BeanPramkey)
    public int getX()
    return x;
    public String getStr()
    return str;
    now your entity bean would be like this
    public class Mybean implements EntityBean
    int x,y;
    String str,name;
    BeanPriamkey primekey;
    public BeanPrrmkey ejbCreate(int x,String name)
    //fetch the rows from the tables X and Y ;
    //if the rows exists int the tables create beanprimkey object with x and name and return refernce of the Beanprimkey class object
    public BeanPrimkey findByPrimarykey(BeanPrimkey )
    //first extract values of x and str from BeanPrimkey
    and chek X and Y table for corresponding rows if exists return the reference of BeanPrimkey else return null
    public void ejbStore()
    BeanPrimkey prikey = (BeanPrimkey) entityContext.getPrimarykey();
    int x = prikey.getX();
    String st = prikey.getStr();
    update X and Y tables using x and str;
    public void ejbLoad()
    BeanPrimkey prikey = (BeanPrimkey) entityContext.getPrimarykey();
    int x = prikey.getX();
    String st = prikey.getStr();
    fetch the rows from X and Y tables using x and str;
    and assing the row values to bean instance variables.
    public void ejbPassivate()
    //code for release the resources
    public void ejbActivate()
    //code for aquiring the resource
    public void setEntityContext(EntityContext ec)
    this.ec = ec;
    protected EntityContext ec;

  • Load balancing not happending but fail over is for Read only Entity beans

              The following are the configuration.
              Two NT servers with WL5.1 sp9 having only EJBs(Read only entity beans)
              One Client with WL5.1 sp9 having servlet/java application as
              EJB client.
              I am trying to make a call like findbyprimarykey in one of the
              entity bean. I could see the request is being directed only to the one of the
              server always. When I bring that server, fail over is happening to the other server.
              Here are the settings I have in the ejb-jar.xml :
                        <entity>
                             <ejb-name>device.StartHome</ejb-name>
                             <home>com.wl.api.device.StartHome</home>
                             <remote>com.wl.api.device.StartRemote</remote>
                             <ejb-class>com.wl.server.device.StartImpl</ejb-class>
                             <persistence-type>Bean</persistence-type>
                             <prim-key-class>java.lang.Long</prim-key-class>
                             <reentrant>False</reentrant>
                             <resource-ref>
                                  <res-ref-name>jdbc/wlPool</res-ref-name>
                                  <res-type>javax.sql.DataSource</res-type>
                                  <res-auth>Container</res-auth>
                             </resource-ref>
                        </entity>
              Here are the settings I have in the weblogic-ejb-jar.xml.
              <weblogic-enterprise-bean>
                        <ejb-name>device.StartHome</ejb-name>
                        <caching-descriptor>
                             <max-beans-in-cache>50</max-beans-in-cache>
                             <cache-strategy>Read-Only</cache-strategy>
                             <read-timeout-seconds>900</read-timeout-seconds>
                        </caching-descriptor>
                        <reference-descriptor>
                             <resource-description>
                                  <res-ref-name>jdbc/wlPool</res-ref-name>
                                  <jndi-name>weblogic.jdbc.pool.wlPool</jndi-name>
                             </resource-description>
                        </reference-descriptor>
                        <enable-call-by-reference>False</enable-call-by-reference>
                        <jndi-name>device.StartHome</jndi-name>
                   </weblogic-enterprise-bean>
              Am I doin any mistake in this?
              Any one's help is appreciated.
              Thanks
              Suresh
              

    we are using 5.1
              "Gene Chuang" <[email protected]> wrote in message
              news:[email protected]...
              > Colocation optimization occurs if your client resides in the same
              container (and also in the same
              > EAR for 6.0) as your ejbs.
              >
              > Gene
              >
              > "Suresh" <[email protected]> wrote in message
              news:[email protected]...
              > > Ok....the ejb-call-by-reference set to true is making the call to one
              server
              > > only. i am not sure why it is. I removed the property name and it
              works.
              > > Also I have one question, in our prduct environment, when i cache the
              ejb
              > > home it is not doing the load balancing. can any one help me for that.
              > > thanks
              > >
              > > Mike,
              > > From the sample pgm I sent, even from single client calls get load
              > > balanced.
              > >
              > > Suresh
              > >
              > >
              > > "Gene Chuang" <[email protected]> wrote in message
              > > news:[email protected]...
              > > > In WL, LoadBalancing will ONLY WORK if you reuse your EJBHome! Take
              your
              > > StartEndPointHome lookup
              > > > out of your for loop and see if this fixes your problem.
              > > >
              > > > I've seen this discussion in ejb-interest, and some other vendor
              (Borland,
              > > I believe it is), brings
              > > > up an interesting point: Clustering and LoadBalance is not in the
              J2EE
              > > specs, hence implementation
              > > > is totally up to the vendor. Weblogic loadbalances from the remote
              > > interfaces (EJBObject, EJBHome,
              > > > etc..), while Borland loadbalances from JNDI Context lookup.
              > > >
              > > > Let me suggest a third implmentation: loadbalance from BOTH Context
              > > lookup as well as stub method
              > > > invocation! Or create a smart replica-aware list manager which
              persists
              > > on the client thread
              > > > (ThreadLocal) and is aware of lookup/evocation history. Hence if I do
              the
              > > following in a client
              > > > hitting a 3 node cluster, I'll still get perfect round-robining
              regardless
              > > of what I do on the
              > > > client side:
              > > >
              > > > InitialContext ctxt = new InitialContext();
              > > > EJBHome myHome = ctxt.lookup(MY_BEAN);
              > > > myHome.findByPrimaryKey(pk); <== hits Node #1
              > > > myHome = ctxt.lookup(MY_BEAN);
              > > > myHome.findByPrimaryKey(pk); <== hits Node #2
              > > > myHome.findByPrimaryKey(pk); <== hits Node #3
              > > > myHome = ctxt.lookup(MY_BEAN);
              > > > myHome.findByPrimaryKey(pk); <== hits Node #1
              > > > ...
              > > >
              > > >
              > > > Gene
              > > >
              > > > "Suresh" <[email protected]> wrote in message
              > > news:[email protected]...
              > > > > Mike ,
              > > > >
              > > > > Do you have any reasons for the total number of machines to be 10.
              > > > >
              > > > > I tried with 7 machines.
              > > > >
              > > > >
              > > > > Here is my sample client java application running individual in the
              > > seven
              > > > > machines.
              > > > >
              > > > > StartEndPointHome =
              > > > > (StartEndPointHome)ctx.lookup("dev.StartEndPointHome");
              > > > > for(;;)
              > > > > {
              > > > > // logMsg(" --in loop "+currentTime);
              > > > > if (currentTime > nextRefereshTime)
              > > > > {
              > > > > logMsg("****- going to call");
              > > > > currentTime=getSystemTime();
              > > > > nextRefereshTime=currentTime+timeInterval;
              > > > > StartEndPointHome =
              > > > > (StartEndPointHome)ctx.lookup("dev.StartEndPointHome");
              > > > > long rndno=(long)(Math.random()*10)+range;
              > > > > logMsg(" going to call remotestub"+rndno);
              > > > > retVal =
              > > > >
              > >
              ((StartEndPointHome)getStartHome()).findByNumber("pe"+rndno+"_mportal_dsk36.
              > > > > mportal.com");
              > > > >
              > > > > logMsg("**++- called stub");
              > > > > }
              > > > >
              > > > >
              > > > >
              > > > > The range value is different for each of the machines in the
              cluster.
              > > > >
              > > > > If the first request starts at srv1, all request starts hitting the
              same
              > > > > server.
              > > > > If the first request starts at srv2, all request starts hitting the
              same
              > > > > server.
              > > > >
              > > > > I have the following for the url , user and pwd values for the
              context
              > > .
              > > > >
              > > > > public static String url="t3://10.11.12.14,10.11.12.117:8000";
              > > > > public static String user="guest";
              > > > > public static String password="guest";
              > > > >
              > > > >
              > > > >
              > > > > It would be great if you could help me.
              > > > >
              > > > > Thanks
              > > > > suresh
              > > > >
              > > > >
              > > > > "Mike Reiche" <[email protected]> wrote in message
              > > > > news:[email protected]...
              > > > > >
              > > > > > If you have only one client don't be surprised if you only hit one
              > > server.
              > > > > Try
              > > > > > running ten different clients and see if the hit the same server.
              > > > > >
              > > > > > Mike
              > > > > >
              > > > > >
              > > > > > "suresh" <[email protected]> wrote:
              > > > > > >
              > > > > > >The following are the configuration.
              > > > > > >
              > > > > > > Two NT servers with WL5.1 sp9 having only EJBs(Read only entity
              > > beans)
              > > > > > >
              > > > > > > One Client with WL5.1 sp9 having servlet/java application as
              > > > > > > EJB client.
              > > > > > >
              > > > > > >
              > > > > > >I am trying to make a call like findbyprimarykey in one of the
              > > > > > >entity bean. I could see the request is being directed only to
              the
              > > one
              > > > > > >of the
              > > > > > >server always. When I bring that server, fail over is happening
              to
              > > the
              > > > > > >other server.
              > > > > > >
              > > > > > >
              > > > > > >Here are the settings I have in the ejb-jar.xml :
              > > > > > > <entity>
              > > > > > > <ejb-name>device.StartHome</ejb-name>
              > > > > > > <home>com.wl.api.device.StartHome</home>
              > > > > > > <remote>com.wl.api.device.StartRemote</remote>
              > > > > > > <ejb-class>com.wl.server.device.StartImpl</ejb-class>
              > > > > > > <persistence-type>Bean</persistence-type>
              > > > > > > <prim-key-class>java.lang.Long</prim-key-class>
              > > > > > > <reentrant>False</reentrant>
              > > > > > > <resource-ref>
              > > > > > > <res-ref-name>jdbc/wlPool</res-ref-name>
              > > > > > > <res-type>javax.sql.DataSource</res-type>
              > > > > > > <res-auth>Container</res-auth>
              > > > > > > </resource-ref>
              > > > > > > </entity>
              > > > > > >
              > > > > > >
              > > > > > >Here are the settings I have in the weblogic-ejb-jar.xml.
              > > > > > >
              > > > > > ><weblogic-enterprise-bean>
              > > > > > > <ejb-name>device.StartHome</ejb-name>
              > > > > > >
              > > > > > > <caching-descriptor>
              > > > > > > <max-beans-in-cache>50</max-beans-in-cache>
              > > > > > > <cache-strategy>Read-Only</cache-strategy>
              > > > > > > <read-timeout-seconds>900</read-timeout-seconds>
              > > > > > > </caching-descriptor>
              > > > > > >
              > > > > > > <reference-descriptor>
              > > > > > > <resource-description>
              > > > > > > <res-ref-name>jdbc/wlPool</res-ref-name>
              > > > > > > <jndi-name>weblogic.jdbc.pool.wlPool</jndi-name>
              > > > > > > </resource-description>
              > > > > > > </reference-descriptor>
              > > > > > > <enable-call-by-reference>False</enable-call-by-reference>
              > > > > > > <jndi-name>device.StartHome</jndi-name>
              > > > > > > </weblogic-enterprise-bean>
              > > > > > >
              > > > > > >
              > > > > > >Am I doin any mistake in this?
              > > > > > >
              > > > > > >Any one's help is appreciated.
              > > > > > >Thanks
              > > > > > >Suresh
              > > > > >
              > > > >
              > > > >
              > > >
              > > >
              > >
              > >
              >
              >
              

  • Primary Key for Read Only Entity Beans In EJB 3.0

    Hi,
    I have checked the spec for ejb 3.0 which mentions that, there is no common standard for the vendor to implement the Read only Entity Beans.
    My question over here is how it is implemented in OC4J??
    Do we need to specify a primary key attribute in the read-only entity bean?
    w.r.t BC4J(ADF) i remember, we used to create a read-only View Object with out specifying a primary key.
    Just want to check is that the way it works in EJB 3.0 (Implemented by OC4J).
    Thanks for your help in advance.
    Shiva

    Hi,
    Try using the JBoss embedded container:
    http://docs.codehaus.org/display/MAVENUSER/How+to+use+the+JBoss+Embedded+EJB3+Container+for+Unit+testing
    /klejs

  • Finder error in WL generated Stub code for a BMP Entity Bean

    Hi,
    I have a group finder error in a BMP I am writing in WL 6.1 sp3.... The
    group finder is...
    public Collection ejbFindByDocumentKey(DocumentPK docKey) {.....
    .... // get a record set of all the interesting keys....
    ArrayList retVal = new ArrayList();
    while(rs.next()) {
    int subDocNum = rs.getInt(1);
    SubDocPK subDocPK = new SubDocPK(subDocNum);
    retVal.add(subDocPK);
    return retVal;
    ..... // Exception handling
    Which works fine in the debugger, but in the session facade when I get an
    Iterator on the Collection and cast the result to a SubDocPK I get a
    ClassCastException. When I look at the type of the class in the Collection
    returned by the container it is SubDocBean_mjdk3_EOimpl (I cannot remember
    the exact name as it was at work and I am now at home)
    Has anyone else found this problem or a way around, or should I just write a
    DAO and get the collection myself?
    Yours
    Paul Brennan

    Right, this is how finders work in BMP.
    The ejbFindXXX implementation returns a collection of primary keys. The
    container then takes this and returns a collection of remote or local
    references.
    -- Rob
    Paul Brennan wrote:
    Hi all,
    Just got into work and I want to add that the class inside the collection is a
    cdcp.ejb.cdcp.SubDocPK
    as below; and when I look in the session bean I get a type
    cdcp.ejb.cdcp.SubDocBean_jktqi5_ELOImpl
    I have an EAR file I am willing to share....
    Any comments or suggestions are welcom
    "Paul Brennan" <[email protected]> wrote:
    Hi,
    I have a group finder error in a BMP I am writing in WL 6.1 sp3....
    The
    group finder is...
    public Collection ejbFindByDocumentKey(DocumentPK docKey) {.....
    .... // get a record set of all the interesting keys....
    ArrayList retVal = new ArrayList();
    while(rs.next()) {
    int subDocNum = rs.getInt(1);
    SubDocPK subDocPK = new SubDocPK(subDocNum);
    retVal.add(subDocPK);
    return retVal;
    ..... // Exception handling
    Which works fine in the debugger, but in the session facade when I get
    an
    Iterator on the Collection and cast the result to a SubDocPK I get a
    ClassCastException. When I look at the type of the class in the Collection
    returned by the container it is SubDocBean_mjdk3_EOimpl (I cannot remember
    the exact name as it was at work and I am now at home)
    Has anyone else found this problem or a way around, or should I just
    write a
    DAO and get the collection myself?
    Yours
    Paul Brennan

  • Is it possible to map the cmp fields of the entity bean with out dictionary

    Dear sirs,
    I have created the EJB project module and WEB Module. Now i have to map the CMP fields of the entity bean to the underlying table. Is it possible to map the cmp fields of the entity bean with out java dictionary? If yes how can we do that.
    I have got some error while mapping an EJB's CMP fields to the table through dictionary. I was actually intended to map 79 fields but it gives an error that more than 64 fields are not allowed while building the dictionary.
    1. Can you tell me what could be the possible reason?
    2. Is it possible to map the cmp fields of the entity bean with out java dictionary? If yes how can we do that.
    Kindly helo me,
    Sudheesh K S

    Hi,
    Sudheesh please check up if the below link helps,there are other ways of writing the persistent.xml for container managed entity bean.
    http://help.sap.com/saphelp_nw04s/helpdata/en/9b/f695f0c84acf46a4e0b31f69d8a9b7/frameset.htm, probably in the studio you cannot browse through tables not in  the java dictionary,but manually editing it may still solve the problem.
    Also here is another link that specifies the databases supported by J2EE Engine.
    http://help.sap.com/saphelp_nw04s/helpdata/en/66/a5283eeb47b40be10000000a114084/frameset.htm
    The below link shows how to specify the database vendor and datasource
    http://help.sap.com/saphelp_nw04s/helpdata/en/e1/67fc3ee241ba28e10000000a114084/frameset.htm
    Hope you are able to solve the problem.
    Do let us know if you come up with the solution.
    Regards,
    Harish
    Message was edited by: HARISH SUBRAMANIAN

  • Re: junit test for entity beans ... ejb 3.0

    I'm confused. I'm trying to test my entity bean.
    I have:
    - an entity bean
    - a stateless session bean for accessing the entity bean (facade)
    - an interface for accessing the the stateless bean
    And I'm trying to write a JUnit test class to test this bean. However, I am uncertain as to how to test this (I'm new to EJB 3.0, JBoss and Eclipse).
    What would the JUnit test look like? I'm confused as to whether or not I should be injecting the interface/bean/what???
    I've tried several variations. I either get "NameNotFound" - not bound exceptions or Null pointer exceptions.
    What would the @EJB syntax look like or how would I do it through the context?
    For Example:
    @EJB private TestFacade myTest; //interface to stateless bean ?
    OR
    InitialContext ctx = new InitialContext();
    TestResultFacadeBean myTest = (TestResultFacadeBean) ctx.lookup("localTest");
    I'm confused at to which method I should be using and what object I should be accessing. If I could get either one to work, I'd be happy. :)
    How do I ensure my bean is deployed to the container? What do I need to do?
    If anyone has a simple example or explanation as to which method I should use and how to use it, I'd be very grateful.
    Thanks very much,
    LisaD

    OK, you need to have several layers of testing.
    Layer 0. Test the entity beans are deployable (more on this later). Basically, you need to know that all your annotations work. Things to watch out for are multiple @Id fields in one class or @EmbeddedID or @IdClass in conjuction with @ManyToOne, @ManyToMany, @OneToMany, @OneToOne and fun with @JoinTable, @JoinColumn and @JoinColumns. Once you know how these are supposed to work with the spec, it's not too bad to write it correctly each time. But there are some gotchas that will break things later on.
    Layer 1. Do the functions in the classes that don't depend on annotations work as expected. Typically, this is just going to be the getters and setters in your entity classes. Of course JUnit best practice says we don't bother testing functions that look like:
    public T getX() {
    return this.x;
    or
    public void setX(T x) {
    this.x = x;
    as there is nothing that can go wrong with them. So in that case, your level 1 tests will just be initial values specified from constructors and verifying that the non-get/set pairs work, and that the getters you have tagged @Transient work (because you've likely put some logic in them)
    Layer 2. Test the session bean methods that don't require injection to work.
    Layer 3. Test the session bean methods that require injection (Mock Objects). Simulate the injection for yourself, injecting Mock Objects for the entity manager. Then you can confirm that the correct methods are being called in the correct sequences, etc.
    [Note this may require some skill in designing the mock.  I'm working on developing my own entitymanager mock, and if it looks usefull I'll release it to the world.
    Layer 4. Test the session bean methods that require injection (Real entity manager) (See Layer 0)
    For this you will need an out of container persistence implementation.  Currently Hibernate and Glassfish provide beta versions.  You will need a different persistence.xml file that lists all the entities.  You will have to use reflection to inject the entity manager(s) that you create from an entity manager factory unless you provide a constructor that takes an EntityManager as a parameter.  You may need to use reflection to call any @PostConstruct method if you made it private.
    Layer 5. Navigate the relationships in the objects returned from Layer 4 using a database that has been loaded with test data.
    I am currently using Layers 0, 1, 2 & 4 to test my session beans and entity beans.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • Using oracle db sequence for auto generating of PKs for CMP entity beans

    Hi,
    I have read quite a number of threads about (auto) generation of keys for primary keys for the CMP entity beans.
    My requirement is I am migrating an application deployed on Weblogic to oc4j. The application is using cmp entity beans with auto key generation using a sequence in the Oracle db. This is specified in weblogic-cmp-rdbms-jar.xml file like below:
    <automatic-key-generation>
    <generator-type>Oracle</generator-type>
    <generator-name>REPUSER.DEPT_REPORT_SEQ</generator-name>
    <key-cache-size>1</key-cache-size>
    </automatic-key-generation>
    In the ejb-jar.xml, it is specified as:
    <prim-key-class>java.lang.Integer</prim-key-class>
    <primkey-field>id</primkey-field>
    Now, I need to migrate this to oc4j. Can somebody suggest me options and clarify my questions kindly?
    1) I have read articles that say that in the ejb-jar.xml, we need to specify <prim-key-class>java.lang.Object</prim-key-class> and this will create a column called 'autoid' in the respective entity table in the Oracle db.
    - How can I use this to assign the value to my primary field, say, id?
    2) Now, with the latest oc4j, can I use Oracle database sequence as the key generator for the values of the PKs just by specifying in the xml descriptor ejb-jar.xml?
    2.a) If yes, is there any article that explains with the code?
    2.b) If no, what are the alternatives I have?
    I have read many discussions that say that we can create a stateless session bean that can lookup the database sequence using simple JDBC call to return the nextval of the sequence. The SSB should be called in the ejbCreate() of the entity bean.
    My related question is, what is recommended for oc4j? What are limitations of the various options for the latest oc4j available?
    How should I go about deploying this kind of ejbs in oc4j?
    Any help and pointers are welcome. Please help.
    Thanks a lot.
    Vadi

    Hello ,
    Instead of exposing a get/set method for each arribute of your bean (corresponding to database table) expose only one object.
    For example
    public class CustomerBean implements javax.ejb.EntityBean{
    private CustomerVO objCustomer;
    private String customerName;
    private String customerMail;
    private String customerType;
    public CustomerVO getCustomer(){
    return this.objCustomer;
    public void setCustomer(CustomerVO objCustomer){
    this.objCustomer = objCustomer;
    public void ejbStore(){
    customerName = objCustomer.getName();
    customerMail = objCustomer.getMail();
    customerType = objCustomer.getType();
    HTH
    VJ

  • Cmp entity beans tools

    Hi:
    I am using Weblogic 8.1 and also weblogic 9.2.
    Can anybody tells me if there is a tool that map the database to the ejb-jar.xml,weblogic-cmp-rdbms-jar.xml and weblogic-ejb-jar.xml files.
    In other words, given a particular database, is there a tool that generates the ejb-jar.xml, weblogic-cmp-rdbms-jar.xml and weblogic-ejb-jar.xml files.
    Yours,
    Frustrated.

    "Local interfaces provide the foundation for container-managed relationships among entity beans and session beans. The bean uses the local interface to maintain its references to other beans. For example, an entity bean uses its local interfaces to maintain relationships to other entity beans. Using local interfaces, beans can also expose their state and use pass-by-reference to pass their state between related bean instances. "
    http://java.sun.com/developer/technicalArticles/ebeans/EJB20CMP/

  • Entity Beans deployed on JBOSS

    We have a Web application in our project that includes 6 Entity Beans with CMP fields1.1
    The application was developed in WSAD 5.1
    The WSAD generates Access Beans for each Entity Bean as well as stubs in default package com.ibm.ejs.container and com.ibm.websphere.csi.
    E.g. The Entity Bean �Organization.java� has Access Bean �OrganizationAccessBean.java�.
    Similarly for other 5 Entity Beans there are Access Beans created in WSAD.
    But now we are migrating the application to JBOSS 4.0.3SP1 server.
    The EAR of the application exported from the WSAD contains all the deployed code (stubs) and Access Beans.
    When this EAR was imported in Eclipse 3.2, it gave us error as it does not support the IBM specific files.
    We have replaced the IBM specific �.xmi� files by JBOSS compatible files like ejb-jar.xml, jboss.xml.
    Then a mapping file was created with the name jbosscmp-jdbc.xml which has all the mapping between the beans and the tables in the database.
    Also this file contains the relationship between the beans.
    After this we tried deploying the code on JBOSS but got some errors as mentioned below:
    Error:
    12:42:53,141 INFO [EARDeployer] Init J2EE application: file:/D:/jboss-4.0.3SP1/server/default/deploy/pmt.ear
    12:42:53,797 WARN [verifier] EJB spec violation:
    Bean : Organization
    Method : public void ejbCreate(String, int, int) throws Create Exception, Remote Exception
    Section: 9.2.3
    Warning: The return type of an ejbCreate (...) method must be the entity bean's primary key type.
    What we analyzed was that in ejb-jar.xml there were some entries.
    Here in <ejb-class> the Bean class was given, but there was no information about the AccessBean class.
    In WSAD the AcessBean classes were generated by the tool, but we actually did not know how to refer the AccessBean.
    Can anyone help us in successfully deploying the application to JBOSS server or provide some pointers/ steps to proceed.
    Also need help regarding generation of Access Beans, stubs (IBM specific files) in Eclipse 3.2
    Thanks
    Regards,
    dcpmt

    So if I understand correctly you wish to use IBM specific classes in support of entity beans running on JBoss?
    That won't be necessary on JBoss because JBoss has its own means of supporting entity beans on its server.

  • 4 specific entity beans or 1 general entity bean?

    Hi All,
    My question is for example for design a history concept,
    I have 4 tables with same size PK and I'm going to design history table, now my question is which way is better to do:
    1. create 4 history tables with having FK to original tables , create 4 entity beans
    2. create 1 history table without any FK, create just 1 entity bean.
    please let me know what's your suggestion?
    Thanks so much
    Mina

    Good question minag ! ...
    I suggest this model:
    If your like flexibility on your system I recommend use Entity EJB 3 inheritance strategy with discriminator value. It implies 5 entity beans mapped on 5 tables.
    A. Abstract Entity Bean: History
    B. Implementations of History: HistoryTypeA, HistoryTypeB, HistoryTypeC, HistoryTypeD.
    Your can get more info on EJB 3 Persistence Specification item 2.1.9. (ejb-3_0-fr-spec-persistence.pdf).

  • Entity Bean Pool

    Weblogic(6.1) deployment descriptor allows configuration of entity bean pool size
    and cache size. Since calls from multiple clients to the same entity bean are
    serialized what is the benefit of having multiple instances in an entity bean
    pool?
    Thanks,
    Stefan

    Anand,
    Of course I don't talk about an extreme case of a table with one row!?, but the
    same (logical) entity bean with same primary key accessed by multiple clients.
    Each client will use findByPrimaryKey method and will get a reference to same
    entity bean mapped to the same "row" in database . My surprise was that even for
    this case there are multiple entity instances created in the pool for one row
    in the database. For multiple instances mapped to multiple rows we concluded all
    makes sense.
    thanks again,
    Stefan
    "Anand Byrappagari" <[email protected]> wrote:
    Stefan,
    I am not sure I understand your question but if you are asking why
    have
    pooling, pool of instances is a feature for all types of entity beans.
    In
    the specific case that you have where the table has only one row it has
    limited application but the general case is that you lave multiple rows
    in a
    table. For example, an Address table will in all probability have hundereds
    of addresses of customers. An application accessing this table will be
    accessing multiple address instances at any given time. So each of this
    instances should be accessable independently hence the pool makes sense
    in
    this case. I point I am trying to make is that when you define a pool
    for a
    bean (AddressBean) you are not defining the pool for one instance of
    the
    bean type(like address_1). The pool specifies the number of instances
    (address_1, address_2, ...., address_n) that can exist at any given time.
    Are you asking if the pool size is for each row? That is if pool
    size is
    set to 10, are you asking if you can have atmost 10 instances of address_1
    as opposed to 10 instances of any address? The pool and cache sizes refer
    to
    the limit on any instances and not on 1 instance.
    Even in the extreme case like the one you mention where the table
    has
    only one row, there is some utility in having multiple instances as this
    would not require serializing access to the bean - in exclusive strategy,
    once a client has locked an EJB instance, other clients are blocked from
    the
    EJB's data even if they intend only to read the persistent fields. If
    you
    set the strategy to database then multiple instances can access the data
    depending on the isolation levels you have set. Read Chapter 4 of
    "Programming Weblogic Enterprise JavaBeans" for more information.
    Hope this helps.
    -- Anand
    "Stefan" <[email protected]> wrote in message
    news:[email protected]...
    Anand,
    If we established that same databse row can be mapped to multiple entitybeans
    instances we are back to my original question: Assuming "database"concurrency
    strategy, how do you see this model useful if calls from multiple clientsare
    serialized across all these instances? I cannot point out the benefitof
    the pool
    of entity bean instances for same row since they all wait for a clientcall to
    finish before replying to another client. Where is the benefit of havingmultiple
    instances if one instance would do the same job?
    thanks,
    Stefan
    "Anand Byrappagari" <[email protected]> wrote:
    The default concurrency-strategy in weblogic 6.1 is database which
    means
    that concurrency is taken care of at the database, this model allows
    you to
    have multiple ejb object instances for the same row in the database.
    If you
    want a single instance then you can set <concurrency-strategy> element
    in
    the deployment descriptor for the ejb to Exclusive.
    -- Anand
    "Stefan" <[email protected]> wrote in message
    news:[email protected]...
    Thanks Anand,
    Sure this way it makes total sense. However I used an example whereI was
    referencing
    only one row from multiple clients. For this case using the WeblogicConsole I
    saw the number of bean instances growing. This would indicate thatsame
    row is
    mapped to multiple bean instances in the pool, which prompted my
    question.
    Stefan
    "Anand Byrappagari" <[email protected]> wrote:
    Think of entity beans as mapping to a row in a database. Access
    to
    a
    single
    row is synchronized not to all the rows. So it still makes sense
    to
    have
    multiple instances possibly mapping to multiple rows in the database.
    -- Anand
    "stefan" <[email protected]> wrote in message
    news:[email protected]...
    Weblogic(6.1) deployment descriptor allows configuration of entitybean
    pool size
    and cache size. Since calls from multiple clients to the same
    entity
    bean
    are
    serialized what is the benefit of having multiple instances in
    an
    entity
    bean
    pool?
    Thanks,
    Stefan

  • Composite Primary Key in M:N CMP Entity Bean Relationship

    Dear Sir/Madam,
         We are creating an Enterprise Application for our institute using EJB 2.0 specifiactions. In the course of developement, we are facing a problem in writing the CMP Entity Beans with EJB Relationships.
         We are having many to many relationship between two beans such that the primary key of one Entity Bean (let's call it A), serves as the foreign key of another Entity Bean (let's call it B). Further, this primary key of A as foreign key in B, participates in the composite key of B.
         The EJB Specifications require that the primary key field(s) of any bean (B, in our case) declared in the Primary Key class should be the subset of the 'cmp-field' declared in the deployment descriptor for that bean. As I said earlier, we have many to many relationship at play. Hence, we require to keep the foerign key in the 'cmr-field' in lieu of 'cmp-field'. In short, the component of primary key is in 'cmr-field' while, it is needed in both 'cmp-field' and 'cmr-field'. That's perfect from Database point of view but illogical from CMP Entity Bean's view.
         How can we write the deployment descriptor for such a CMP (BMP is working fine for above scenario) Entity Bean? Also, how can we write the Primary Key class? The problem is not just to find the solution, but find under the hood of EJB 2.0 specifications.
         Please help.

    I think you should realise that it would not be convenient to use CMP for everything. It is difficult to define complex relations using CMP. Mostly BMP os preferd since it gives the flexibility for the bean developer.
    Regards
    xH4x0r

  • Bad Performance/OutOfMemory Error in CMP Entity Bean with Large DB

    Hello:
    I have an CMP Entity deployed on WLS 7.0
    The entity bean maps to a table that has 97,480 records.
    It has a finder: findAll() -- SELECT OBJECT(e) FROM Equipment e
    I have a JSP client that invokes the findALL()
    The performance is very poor ~ 150 seconds just to perform the findAll() - (Benchmark
    from within the JSP code)
    If more than one simultaneous call is made then I get outOfMemory Error.
    WLS is started with max memory of 512MB
    EJB is deployed with <max-beans-in-cache>100000</max-beans-in-cache>
    (without max-beans-in-cache directive the performance is worse)
    Is there any documentation available to help us in deploying CMP Entity Beans
    with very large number of records (instances) ?
    Any help is greatly appreciated.
    Regards
    Rajan

    Hi
    You should use a Select Method, it does support cursors.
    Or a Home Select Method combination.
    Regards
    Thomas
    WLS is started with max memory of 512MB
    EJB is deployed with <max-beans-in-cache>100000</max-beans-in-cache>>
    (without max-beans-in-cache directive the performance is worse)>
    Is there any documentation available to help us in deploying CMP
    Entity Beans with very large number of records (instances) ? Any help
    is greatly appreciated.>
    Regards>
    Rajan>
    >
    "Rajan Jena" <[email protected]> schrieb im Newsbeitrag
    news:3dadd7d1$[email protected]..
    >
    Hello:
    I have an CMP Entity deployed on WLS 7.0
    The entity bean maps to a table that has 97,480 records.
    It has a finder: findAll() -- SELECT OBJECT(e) FROM Equipment e
    I have a JSP client that invokes the findALL()
    The performance is very poor ~ 150 seconds just to perform the findAll() -(Benchmark
    from within the JSP code)
    If more than one simultaneous call is made then I get outOfMemory Error.
    WLS is started with max memory of 512MB
    EJB is deployed with <max-beans-in-cache>100000</max-beans-in-cache>
    (without max-beans-in-cache directive the performance is worse)
    Is there any documentation available to help us in deploying CMP EntityBeans
    with very large number of records (instances) ?
    Any help is greatly appreciated.
    Regards
    Rajan

  • Byte[] Arrays in CMP Entity bean

    Hello
    One of my fields for a CMP Entity beans is a byte[] Array. When i do a
    home.create(primarykey, byteData)
    i get an exception saying - "Trying to insert a null in a non-nullable column"
    My data is not a null at that point. If i change the byte[] array to a string, it works fine. Does anybody have any suggestions. I am using JBOSS appserver.
    thanks
    Dash

    thanks for you reply. i was using cmp with ejb2.0, wherein i do not have to do anything under postcreate(), implementation is handled by the container i guess. But, coming to my problem: I figured out why i got that error. i had a table by the same name with a differnt data type. JBOSS did not report to me saying that the TABLE already exists.
    thanks

Maybe you are looking for