Difficulty abstracting EJB - JavaBean mapping

We are implementing a java based MVC architecture. The Model portion is really two seperate tiers, one being JavaBeans with which the View communicates and the second being EJBs as a buffer to the data store. In between these two is a very thin layer whose sole responsibility it is to map the data between the JavaBean and the EJB based on a C-like-struct structure utilized by both. For example, in a "get" request, this mapper layer instantiates the appropriate JavaBean, looks up the appropriate EJBHome, gets the remote of the specified primary key, gets the "struct" from the EJB and loads it into the JavaBean. However, I have run into all kinds of problems with doing this because of the J2EE/EJB restriction prohibiting the home from returning super-types of the remote.
Temporarily, I have gotten around this limitation by simply reflecting on the objects returned from the EJB calls. However, this is less than ideal because of the "compiles-but-doesn't-run" issue. I have also thought about having the JavaBeans talk directly with its corelated EJB, but this seems to make the coupling between these two too tight.
Has anyone else found a good way around this strangely extremely non-OO issue?
Thanks.

Moving back towards top...

Similar Messages

  • Physical table name - abstract table name mapping in CMP Bean

    Hello,
    I am using a EJB 2.x bean deployed on a SJSAS 9 server. EJB has problem associating the EJB to the actual table
    Details are as follows:
    EJB name: AccountCMP
    Actual tablename : account
    Error
    ejb store called
    IM: postInvokeentity3.AccountBean145996470_ConcreteImpl@d6be89
    EJB5071: Some remote or transactional roll back exception occurred
    com.sun.jdo.api.persistence.support.JDODataStoreException: JDO76400: Got a JDBC SQLException while executing the SQL statement:
    insert into "ACCOUNTCMP"("DESCRIPTION", "ACCOUNTNAME", "BALANCE", "ACCID") values ( ?, ?, ?, ?).
    Please examine the SQLException for more information.
    NestedException: java.sql.SQLException: ORA-00942: table or view does not exist
    FailedObjectArray: [entity3.AccountBean145996470_JDOState@5332ca]
    Please note that the insert statement has the ejb-name (I think so, as my CMP EJB is called ACCOUNTCMP) instead of the actual tablename (account).
    I do have the account.dbschema file and sun-cmp-mappings.xml in the NB 5.5 project, but the mappings.xml file is not included in the jar by NB. Is that expected, or an problem.
    sun-cmp-mappings.xml
    <sun-cmp-mappings>
      <sun-cmp-mapping>
        <schema>account</schema>   
        <entity-mapping>
          <ejb-name>AccountCMP</ejb-name>
          <table-name>account</table-name>
          <cmp-field-mapping>
    ejb-jar.xml
    <enterprise-beans>
            <entity>
                <ejb-name>AccountCMP</ejb-name>
                <local-home>entity3.AccountLocalHome</local-home>
                <local>entity3.AccountLocal</local>
                <ejb-class>entity3.AccountBean</ejb-class>           
                <persistence-type>Container</persistence-type>
                <prim-key-class>entity3.AccountPK</prim-key-class>
                <reentrant>false</reentrant>
                <cmp-version>2.x</cmp-version>           
                <abstract-schema-name>account</abstract-schema-name>  Thank you for your help.

    Hello,
    I found out the issue. sun-cmp-mappings.xml file is mandatory, and dont know why, netbeans excludes this file from the jar. I had to edit project.properties file to negate this exclusion.
    Another problem was that my table did not have a primary key (and hence by schema file did not have it also). CMP bean code generator did not like this.
    Once I fixed these two problems, my CMP started working fine.
    Thank you all

  • EJB-JAVABEANS

    Detailed differences between javabeans and ejb2.0?

    Any reusable java classes could be a javabean. EJB is special javabean that can be managed by EJB container which will be able to manage, saying EJB fields to map to database fields. Ofcaurse you can manage this just like regular javabeans. In EJB, it is called bean managed, instead of container managed.
    You can find a short tutorial on sun site.

  • Complex JavaBean Mapping in iBatis [Please help!]

    hi,
    i m new to IBatis, i got some mapping problems, and there are not too many tutorials out there, please help me, thanks.
    For example, i have 2 beans:
    // This is the Company bean public class Company {   private long pkId;   private String name;   private List employees;   ...... } // The Employee bean public class Employee {   private long pkId;   private String firstname;   private Company parentCompany; }
    In the Employee class, 'parentCompany' is of type 'Company', but in the Database, the corresponding column 'parent_company' stores a 'long' value, which is the company's pkId.
    In the mapping file, i am ok with 'Select' to either get 'Company' from an 'Employee', or get a list of employees from a 'Company'
    But there are problems when i m trying to save/update the 'Employee' object, i don't know how to write the Mapping for this, there's always a TypeHandler exception. Here's my mapping file for the employee:
    <update id="update_employee_by_pkid" parameterClass="java.util.HashMap"> UPDATE ido_user SET <isPropertyAvailable property="firstname"> firstname = #firstname# </isPropertyAvailable> <isPropertyAvailable property="lastname"> lastname = #lastname# </isPropertyAvailable> <isPropertyAvailable property="email"> email = #email# </isPropertyAvailable> <isPropertyAvailable property="role"> role = #role# </isPropertyAvailable> <isPropertyAvailable property="parent_company"> parent_company=#parent_company# </isPropertyAvailable> WHERE pk_user_id = #pkid# </update>
    when i call this query, i pass in a Map, in the map, there might be one or more entries, e.g.
        map.put("pkid", 20);     map.put("firstname", "John");     map.put("lastname", "Smith");     map.put("parent_company", parentCompany);  // in here, the 'parentCompany is an instance of Object Company, which is retrieved from the DB
    As the map contains a 'parentCompany', but the DB actually needs a long, so in the DAO class, i grab the id of the 'parentCompany', put it into the map, and replace the parentCompany like this:
        map.put("parent_company", new Long(parentCompany.getPkId()));
    But this gives me a NullPointerException, it happens at the point that i call: sqlMap.update("update_employee", map);
    Another question is about mapping design between JavaBean, like those 2 classes i gave above, do you think the design is good? By doing so, i can get the company from a given Employee, on the other hand, i can get a list of Employees of a given company. How would you do for such requirements?
    Anyone has idea about it?
    Thanks for your help!
    Best regards

    I'll give this one more shot to see if anyone can help me.
    I'm also willing to pay for this. I would do all the Flash design
    work, provide the database, and all the graphics. I just need the
    coding done. I'll write out in English what I need it to do, and
    hopefully someone might be willing to translate into actionscript.
    1. A user selects what category of connector they want to add
    by clicking a button.
    2. When the button is clicked, a list of connector names
    appears. This list is populated from an Access database using ASP.
    3. A user selects a connector by clicking on it's name. The
    draggable movie clip associated with that connector appears and is
    ready to drag.
    4. If the user drops it in the wall plate "drop zone," the
    connector stays there, and the price of the connector (also
    specified in the database) is added to the cost form.
    5. If the user drops it outside the "drop zone," it snaps
    back into original position.
    6. Once dropped in the "drop zone," the user can click and
    drag the connector around any way they want within the drop zone
    without the price being added again. If the user drags the
    connector outside the drop zone to a "trash can," the connector
    disappears and the price is reduced from the total.
    7. Once the user is finished building their plate, they can
    click a "finished" button and be taken to a form to submit their
    email address and comments. The details of the wall plate order,
    the cost, and the user submitted form are then emailed to our sales
    team.
    That's the project in a nutshell. I have drag functionality
    working, and the price adding up, but I don't know how to tie in
    the database. Once again, I'm willing to pay someone who might be
    able to do the coding on this. If you're interested, please send me
    an email at [email protected] and I can provide the most current
    FLA and additional details. Thanks!

  • Ejb-ref-mapping in orion-ejb.jar missing location attribute after deployment

    I have noticed that on several of my entity beans that after deployment the <ebj-ref-mapping location="JNDIName" name="LocalName"/> is missing the location attribute. This causes any attempts to lookup the EJBHome for that EJB to fail because the path to the EJBHome in JNDI cannot be found (obviously!). The problem is that this causes me to manually edit the application-deployment/<app>/<ejb.jar>/orion-ejb.zml after each deployment via the admin.jar. This seems like a bug with OC4J and I am wondering if Oracle is aware/doing something to fix this?
    I have noticed that the same problem exists for session beans, however, for some strange reason the EJBHomes can still be resolved in JNDI. In all cases the location in JNDI is different then the <ejb-ref-name> I used in the client EJB.
    Example being I have an entity bean at com.foo.Foo and the session bean uses lookup("java:comp/env/ejb/Foo") it is still able to find the EJB even though the orion-ejb.xml looses the location attribute. If the case is an entity bean referencing another entity bean in the same fashion I get an error because the location attribute is missing.

    If the 'location' value is same as the 'name' value, then even though the location attribute is missing, it is ok and should work. If they are not the same, then you should have defined the ejb-link element in your ejb-jar.xml when defining this ejb-ref and that would make the location attribute appear in the generated orion-ejb-jar.xml.
    If the referenced bean is from a different application (EAR), then you should have used the -parent option when deploying the application.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">quote:</font><HR>Originally posted by Kris Trujillo ([email protected]):
    I have noticed that on several of my entity beans that after deployment the <ebj-ref-mapping location="JNDIName" name="LocalName"/> is missing the location attribute. This causes any attempts to lookup the EJBHome for that EJB to fail because the path to the EJBHome in JNDI cannot be found (obviously!). The problem is that this causes me to manually edit the application-deployment/<app>/<ejb.jar>/orion-ejb.zml after each deployment via the admin.jar. This seems like a bug with OC4J and I am wondering if Oracle is aware/doing something to fix this?
    I have noticed that the same problem exists for session beans, however, for some strange reason the EJBHomes can still be resolved in JNDI. In all cases the location in JNDI is different then the <ejb-ref-name> I used in the client EJB.
    Example being I have an entity bean at com.foo.Foo and the session bean uses lookup("java:comp/env/ejb/Foo") it is still able to find the EJB even though the orion-ejb.xml looses the location attribute. If the case is an entity bean referencing another entity bean in the same fashion I get an error because the location attribute is missing.<HR></BLOCKQUOTE>
    null

  • JavaBean/Mapping or Serializer not specified

    Hello!
    I use as Deployment Platform: Oracle J2EE Web Services.
    I get the following errormessage:
    "The following JavaBean parameters have property descriptors using types that do not have an XML Schema mapping and / or serializer specified".
    My class looks like:
    public myclass implements serializable {
    private String name;
    private Vector list;//list of xyobj
    What should i do with my vector-property?
    thank you!
    Harald.

    This article will give you a sense of the steps required using a Hashmap as an exmaple:
    http://otn.oracle.com/tech/webservices/htdocs/samples/serialize/content.html
    Mike.

  • Problems with EJB relationship mapping (annotations)

    So, I'm part of a group working on a web-based project management system, and we're having some trouble with the relationship mapping between the entity beans.
    I've been mainly working on a class called WorkPackage. So the mappings I've got:
    Within the WorkPackage class
    (A work package is one "module" of work within a project)
            @Entity
            @Table(name="WorkPackage")
            @IdClass(WorkPackagePK.class)
            public class WorkPackage implements java.io.Serializable
            @Id
            @Column(name="wpID")
            public String getWpID() { return wpID; }
         public void setWpID(String id) { this.wpID = id; }
         @Id
            @Column(name="projID")
            public String getProjId() { return projId; }
         public void setProjId(String projId) { this.projId = projId; }
            @ManyToOne // bidirectional - owner side
         @JoinColumn(name="projID")
         public Project getProject() { return project; }
         public void setProject(Project project) { this.project = project; }      And on the Project side
            @Entity
            @Table(name="Project")
            public class Project implements java.io.Serializable
            @Id
            @Column(name="projID")
            public String getId() { return id; }
         public void setId(String id) { this.id = id; }
           @OneToMany(mappedBy="project") // biderctional - target side
         public Set<WorkPackage> getWorkPackages() { return workPackages; }
         public void setWorkPackages(Set<WorkPackage> workPackages) { this.workPackages = workPackages; } The problem here is that its apparently seeing 'projID' as attempting to be mapped to 2 columns within the 'workpackage' table in the database instead of using the @Id one as the id, and the other as the foreign key to the 'project' table.
    So, when I try to add a workpackage to the database via a JSF page, it gives me the error 'java.sql.BatchUpdateException: Column 'projID' specified twice'.
    Maybe its something to do with variable in the project class being called 'id' even though its mapped to the database column 'projID'
    Edited by: wormdundee on Mar 1, 2008 2:26 PM

    I think the trouble is that you overrode the column names for the projID and project properties to the same value. Try
    @Entity
            @Table(name="WorkPackage")
            @IdClass(WorkPackagePK.class)
            public class WorkPackage implements java.io.Serializable
            @Id
            @Column(name="WP_WP_ID")
            public String getWpID() { return wpID; }
         public void setWpID(String id) { this.wpID = id; }
         @Id
            @Column(name="WP_PROJ_ID")
            public String getProjId() { return projId; }
         public void setProjId(String projId) { this.projId = projId; }
            @ManyToOne // bidirectional - owner side
         @JoinColumn(name="WP_PROJECT_PROJ_ID")
         public Project getProject() { return project; }
         public void setProject(Project project) { this.project = project; }

  • Does mapping to JNDI for ejb-refs have a performance impact?

    Does mapping to JNDI names for ejb-refs have a performance impact for
    WLS6.1?
    In the ejb-jar.xml deployment descriptor, you can define an ejb reference as
    follows:
    <ejb-ref>
    <ejb-ref-name>ejb/AccountHomeRemote</ejb-ref-name>
    <ejb-ref-type>Entity</ejb-ref-type>
    <home>com.package structure.AccountHomeRemote</home>
    <remote>com.package structure.AccountRemote</remote>
    <!-- <ejb-link>AccountBean</ejb-link>-->
    </ejb-ref>
    Now, optionally, you can use the ejb-link element - or - you can, in the
    weblogic DD, specify a JNDI name that the ejb-ref maps to.
    Using a JNDI name buys you some flexibility. If, for some reason, the jar is
    divided, you dont have to convert ejb-link's to JNDI names. The question is:
    Is there a performance cost in doing this?
    Cheers

    Hi Aashish,
    Thanks for your quick reply. it was helpful, but i am not using RFC's. Correct me if i am wrong, but i have explained the scenarios in detail below.
    Scenario 1. Synchronous
    1) PI Picks file from a common folder.
    2) PI does a data mapping and sends the data to ECC.
    3) ECC contains an inbound interface which receives the data and in which abap proxy code is written.
    4) The abap proxy code executes a function module and sends the response as an internal table back to PI.
    5) PI receives the response and places it in a text/csv file and places it back to another folder.
    I assume that the above would be possible only using BPM. What i understand is that in order for an interface to receive and send data, abstract mappings are to be used, and for this BPM is required. We do not have any conversions etc. its just a simple matter of receiving an internal table from ECC and creating a file to place in the folder.
    I also understand that BPM could have bottlenecks due to queue and cache issues, messages might be pending, or lost etc.
    Scenario 2. Asynchronous
    1) PI Picks file from a common folder.
    2) PI does a data mapping and sends the data to ECC.
    3) ECC contains an inbound interface which receives the data and in which abap proxy code is written.
    4) ABAP Proxy code executes the same function module and calls a seperate outbound interface and passes the values to it. This would be used in sending the response back.
    5)  PI receives the response from the second interface and places it in a text/csv file and places it back to another folder.
    I would like to know which would be the better approach. Documentation/references to support your claims would be much appreciated.
    Cheers,
    Mz

  • Mapping of an entity EJB to multiple database tables using CMP?

    Can one entity EJB have attributes split between (mapped to) multiple databse tables?
    Would CMR work properly between two such entity EJBs (both mapped to multiple database
    tables).

    Hi Milos.
    Can one entity EJB have attributes split between (mapped to) >>multiple databasetables?
    A CMP Entity should be always mapped a record in a single DB table.
    Thanks.
    Ji Zhang
    Developer Relations Engineer
    BEA Support

  • EJB-QL (foreign key)- error

    hi everyone. i am stuck, cheked everything and don't know where to look. i hope someone will help me. i use websphere 5.0
    i have 2 cmp entity ejb with one-many relationship between them. I wrote QL query using foriegn key. when i generate EJB-RDB mapping the error appears in TASK saying " myTable o does not have a field myforeignkey". when i click on tast it opens ejb dep...descriptor. i check descriptor and foreign key is there.
    where should i look? when i run validation before mapping generation it doesn't produce any error.

    i am new to J2ee and i let websphere to generate all description code. I spend 4 hours looking for this error and i just can'f fix it. it looks fine to me. can you have a look? i know the code is big. if you get extra time then help me. i cut it down. there is two entity beans each with one attribute. order id has second attribute as foreign key -generatorhome_id.
    the full error is like this:
    WQRY0036E:OrderId o does not have a field generatorhome_id. when i click on it takes me to my created <query-method> findByFor
    please help if have time. the code should be straight forward. if you want me to simplify code so you can better understand then let me know.
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar id="ejb-jar_ID">
         <display-name>EJB</display-name>
         <enterprise-beans>
              <entity id="OrderId">
                   <ejb-name>OrderId</ejb-name>
                   <local-home>com.ibm.pbw.ejb.OrderIdLocalHome</local-home>
                   <local>com.ibm.pbw.ejb.OrderIdLocal</local>
                   <ejb-class>com.ibm.pbw.ejb.OrderIdBean</ejb-class>
                   <persistence-type>Container</persistence-type>
                   <prim-key-class>com.ibm.pbw.ejb.OrderIdKey</prim-key-class>
                   <reentrant>False</reentrant>
                   <cmp-version>2.x</cmp-version>
                   <abstract-schema-name>OrderId</abstract-schema-name>
                   <cmp-field id="CMPAttribute_1088406971782">
                        <field-name>ind</field-name>
                   </cmp-field>
                   <cmp-field>
                        <description>Generated to support relationships. Do NOT delete.</description>
                        <field-name>generatorhome_id</field-name>
                   </cmp-field>
                   <ejb-local-ref id="EJBLocalRef_1088406284143">
                        <ejb-ref-name>ejb/GeneratorHome</ejb-ref-name>
                        <ejb-ref-type>Entity</ejb-ref-type>
                        <local-home>com.ibm.pbw.ejb.GeneratorHomeLocalHome</local-home>
                        <local>com.ibm.pbw.ejb.GeneratorHomeLocal</local>
                        <ejb-link>GeneratorHome</ejb-link>
                   </ejb-local-ref>
                   <query>
                        <description></description>
                        <query-method>
                             <method-name>findByFor</method-name>
                             <method-params>
                                  <method-param>int</method-param>
                             </method-params>
                        </query-method>
                        <ejb-ql>select object(o) from OrderId o where o.generatorhome_id = ?1</ejb-ql>
                   </query>
              </entity>
              <entity id="GeneratorHome">
                   <ejb-name>GeneratorHome</ejb-name>
                   <local-home>com.ibm.pbw.ejb.GeneratorHomeLocalHome</local-home>
                   <local>com.ibm.pbw.ejb.GeneratorHomeLocal</local>
                   <ejb-class>com.ibm.pbw.ejb.GeneratorHomeBean</ejb-class>
                   <persistence-type>Container</persistence-type>
                   <prim-key-class>com.ibm.pbw.ejb.GeneratorHomeKey</prim-key-class>
                   <reentrant>False</reentrant>
                   <cmp-version>2.x</cmp-version>
                   <abstract-schema-name>GeneratorHome</abstract-schema-name>
                   <cmp-field id="CMPAttribute_1088406971792">
                        <field-name>id</field-name>
                   </cmp-field>
                   <ejb-local-ref id="EJBLocalRef_1088406284153">
                        <ejb-ref-name>ejb/OrderId</ejb-ref-name>
                        <ejb-ref-type>Entity</ejb-ref-type>
                        <local-home>com.ibm.pbw.ejb.OrderIdLocalHome</local-home>
                        <local>com.ibm.pbw.ejb.OrderIdLocal</local>
                        <ejb-link>OrderId</ejb-link>
                   </ejb-local-ref>
              </entity>
         </enterprise-beans>
         <relationships>
              <ejb-relation>
                   <description></description>
                   <ejb-relation-name>GeneratorHome-OrderId</ejb-relation-name>
                   <ejb-relationship-role id="EJBRelationshipRole_1088406971782">
                        <ejb-relationship-role-name>generatorhome</ejb-relationship-role-name>
                        <multiplicity>Many</multiplicity>
                        <relationship-role-source>
                             <ejb-name>OrderId</ejb-name>
                        </relationship-role-source>
                        <cmr-field>
                             <cmr-field-name>generatorhome</cmr-field-name>
                        </cmr-field>
                   </ejb-relationship-role>
                   <ejb-relationship-role id="EJBRelationshipRole_1088406971783">
                        <ejb-relationship-role-name>orderid</ejb-relationship-role-name>
                        <multiplicity>One</multiplicity>
                        <relationship-role-source>
                             <ejb-name>GeneratorHome</ejb-name>
                        </relationship-role-source>
                        <cmr-field>
                             <cmr-field-name>orderid</cmr-field-name>
                             <cmr-field-type>java.util.Collection</cmr-field-type>
                        </cmr-field>
                   </ejb-relationship-role>
              </ejb-relation>
         </relationships>
    </ejb-jar>

  • Can not find my EJB's from my Servlet

    Hi
    I am new to EJB and am trying to get a Servlet to call some sessionless EJB beans. I have got it working in JDeveloper but when I deploy it to orion application server I keep getting a javax.naming.NameNotFoundException exception throw from the Servlet when it tries to find the first EJB.
    The code in the Servlet is:
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory");
    env.put(Context.SECURITY_PRINCIPAL, "admin");
    env.put(Context.SECURITY_CREDENTIALS, "jewels");
    // env.put(Context.PROVIDER_URL, "ormi://localhost:23891/current-workspace-app");
    env.put(Context.PROVIDER_URL, "ormi://localhost:23791/dev");
    Context ctx = new InitialContext(env);
    System.out.println("Getting mapping class ejb");
    //mapping
    ExponentMappingServiceHome mappingHome = (ExponentMappingServiceHome)ctx.lookup("ExponentMappingServiceHome");
    ExponentMappingService mapping = mappingHome.create();
    My EJB xml looks like this:
    <?xml version = '1.0' encoding = 'windows-1252'?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
    <ejb-jar>
    <enterprise-beans>
    <session>
    <description>Session Bean ( Stateless )</description>
    <display-name>ExponentMappingService</display-name>
    <ejb-name>ExponentMappingService</ejb-name>
    <home>com.exponent.ejb.service.map.ExponentMappingServiceHome</home>
    <remote>com.exponent.ejb.service.map.ExponentMappingService</remote>
    <ejb-class>com.exponent.ejb.service.map.ExponentMappingServiceBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    </session>
    <session>
    <description>Session Bean ( Stateless )</description>
    <display-name>ExponentMappingViewsService</display-name>
    <ejb-name>ExponentMappingViewsService</ejb-name>
    <home>com.exponent.ejb.service.map.ExponentMappingViewsServiceHome</home>
    <remote>com.exponent.ejb.service.map.ExponentMappingViewsService</remote>
    <ejb-class>com.exponent.ejb.service.map.ExponentMappingViewsServiceBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    </session>
    <session>
    <description>Session Bean ( Stateless )</description>
    <display-name>FalconService</display-name>
    <ejb-name>FalconService</ejb-name>
    <home>com.exponent.ejb.service.FalconServiceHome</home>
    <remote>com.exponent.ejb.service.FalconService</remote>
    <ejb-class>com.exponent.ejb.service.FalconServiceBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    </session>
    </enterprise-beans>
    </ejb-jar>
    I have been trying for a while to get the JNDI naming right but everything I try gets the above error. Any help would be great.
    Thanks
    Andre

    You have to lookup for "ExponentMappingService", and not "ExponentMappingServiceHome"
    The name you give in the <ejb-name> tag in ejb-jar.xml is the JNDI name of the EJB. This is the name u have to look up.

  • Client EJB JNDI lookup broken in OC4J 9.0.2?

    I have a client program that connects to an EJB in the application server and invokes methods on it. If it look up the EJB using the actual JNDI binding, it works fine. If I look it up in java:comp/env (and use the ejb-ref in application-client.xml and ejb-ref-mapping in orion-application-client.xml) the client program catches the following exception:
    caught : javax.naming.NameNotFoundException: No object bound for java:comp/env/ejb/logging/Logger
    javax.naming.NameNotFoundException: No object bound for java:comp/env/ejb/logging/Logger
    at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:116)
    at javax.naming.InitialContext.lookup(InitialContext.java:347)
    at com.mycompany.common.logging.ejb.test.LoggerEJBTest.main(LoggerEJBTest.java:37)
    Now, assuming I don't have any typos (and I'd be thrilled if someone pointed it out if that were the case), then it looks like this is a bug in OC4J 9.0.2: the ejb-ref and ejb-ref-mapping elements do not work. For the record, I am using the same ejb-ref and ejb-ref-mapping elements for a servlet's web.xml and orion-web.xml, respectively, without problems.
    Here are relevant file excerpts:
    LoggerEJBTest.java:
    String hostName = "localhost";
    String hostPort = "23791";
    String userName = "abc";
    String password = "def";
    String providerURL = "ormi://" + hostName + ":" + hostPort + "/ghi";
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.ApplicationClientInitialContextFactory");
    env.put(Context.PROVIDER_URL, providerURL);
    env.put(Context.SECURITY_PRINCIPAL, userName);
    env.put(Context.SECURITY_CREDENTIALS, password);
    System.out.println("create initial context");
    Context context = new InitialContext(env);
    System.out.println("get home object");
    //works when uncommented
    //Object homeObject = context.lookup("logging/Logger");
    //broken:
    Object homeObject = context.lookup("java:comp/env/ejb/logging/Logger");
    ejb-jar.xml:
    <?xml version="1.0"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar>
    <description>abc</description>
    <display-name>abc</display-name>
    <enterprise-beans>
    <session>
    <description>Logger Bean</description>
    <display-name>Logger</display-name>
    <ejb-name>Logger</ejb-name>
    <home>com.mycompany.common.logging.ejb.LoggerHome</home>
    <remote>com.mycompany.common.logging.ejb.Logger</remote>
    <ejb-class>com.mycompany.common.logging.ejb.LoggerBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    </session>
    </enterprise-beans>
    </ejb-jar>
    orion-ejb-jar.xml:
    <?xml version="1.0"?>
    <!DOCTYPE orion-ejb-jar PUBLIC "-//Evermind//DTD Enterprise JavaBeans 2.0 runtime//EN" "http://xmlns.oracle.com/ias/dtds/orion-ejb-jar.dtd">
    <orion-ejb-jar>
         <enterprise-beans>
              <session-deployment name="Logger" location="logging/Logger">
         </enterprise-beans>
    </orion-ejb-jar>
    application-client.xml:
    <?xml version="1.0"?>
    <!DOCTYPE application-client PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN" "http://java.sun.com/dtd/application-client_1_3.dtd">
    <application-client>
         <display-name>logging test</display-name>
    <ejb-ref>
    <ejb-ref-name>ejb/logging/Logger</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <home>com.mycompany.common.logging.ejb.LoggerHome</home>
    <remote>com.mycompany.common.logging.ejb.Logger</remote>
    <ejb-link>Logger</ejb-link>
    </ejb-ref>
    </application-client>
    orion-application-client.xml:
    <?xml version="1.0"?>
    <!DOCTYPE orion-application-client PUBLIC "-//Evermind//DTD J2EE Application-client runtime 1.2//EN" "http://xmlns.oracle.com/ias/dtds/orion-application-client.dtd">
    <orion-application-client>
    <ejb-ref-mapping location="logging/Logger" name="ejb/logging/Logger" />
    </orion-application-client>

    As far as I know, the only way to lookup an EJB (deployed to
    OC4J) from a regular java class using the "ApplicationClientInitialContextFactory"
    class and the logical JNDI name is to include your regular java
    class (i.e. the client) in your application's EAR file (the file
    you use to deploy your application to OC4J).OK, but that sounds like a pretty silly constraint. Shouldn't the ApplicationClientInitialContextFactory know how to do the mapping using the application-client.xml and orion-application-client.xml settings? What does the OC4J server provide that makes this magically work?
    From the information you have supplied, it appears that you may
    not want to include your client (java) class in your EAR file.That is correct. It is an integration test program, not meant to be deployed into the application server.
    So now the question is, "Do you want to make your client part
    of your J2EE application, and include it in the application
    EAR file?"
    If you do, then you have made several mistakes which prevent
    you from doing that, but I don't want to explain further, since
    you may not want to do that, anyway!Not applicable. But on that topic, aside from being able to auto-start a client application within the OC4J JVM, are there any other reasons why I might want to deploy a client in that manner? I mean, honestly, these things are called "clients" and "servers" for a reason.
    Now if you have been reading other postings to this forum,
    and if you have read the documentation for OC4J, you would
    know that it requires J2SDK 1.3.1 only (not 1.4.0).I am well aware of the other postings on that topic. I am, however, counting on Oracle to live up to their promise to certify 1.4 with with the next update to OC4J:
    Limits of 10g
    That aside, I already consider OC4J 9.0.2 to be a broken product at this point anyway, so hacking it to use Java 1.4 doesn't bother me that much. OC4J 9.0.2 works about as well with Java 1.4 as with Java 1.3, assuming one replaces the tools.jar. The other major incompatibility is that Oracle SOAP breaks if a web service EJB home&remote interface is compiled with Java 1.4:
    http://forums.oracle.com/forums/message.jsp?id=936894
    Alas, we're using Apache SOAP 2.3 rather than the ass-backwards stuff in OC4J, anyways, so there's no problem.

  • JDeveloper / OC4J rewriting my orion-ejb-jar.xml

    Hi All.
    Im having a play around with OC4J and CMP entity beans and struts at the moment learning some stuff for a new job, so ive started to write a little test app to get used to things.
    Ive created a CMP entity - CustomerEntityEJB, manually defined the tables etc wrote and built it using JDeveloper 10.
    Ive created all the necessary classes and descriptors in JDeveloper and the bean compiles and deploys fine, however no matter what i do, the table attribute of the <entity-deployment> elemnt is ALWAYS removed from the orion-ejb-jar.xml file before its deployed and i have no idea why.
    Here are some snippets form the xml config files im using....
    ejb-jar.xml :
    <entity>
    <description>Entity Bean ( CMP )</description>
    <display-name>CustomerEntityEJB</display-name>
    <ejb-name>CustomerEntityEJB</ejb-name>
    <local-home>com.gb.ejb.entity.customer.CustomerEntityEJBLocalHome</local-home>
    <local>com.gb.ejb.entity.customer.CustomerEntityEJBLocal</local>
    <ejb-class>com.gb.ejb.entity.customer.CustomerEntityEJBBean</ejb-class>
    <persistence-type>Container</persistence-type>
    <prim-key-class>java.lang.Long</prim-key-class>
    <reentrant>false</reentrant>
    <cmp-version>2.x</cmp-version>
    <abstract-schema-name>CustomerEntityEJB</abstract-schema-name>
    <cmp-field>
    <field-name>id</field-name>
    </cmp-field>
    <cmp-field>
    <field-name>title</field-name>
    </cmp-field>
    <cmp-field>
    <field-name>forename</field-name>
    </cmp-field>
    <cmp-field>
    <field-name>surname</field-name>
    </cmp-field>
    <cmp-field>
    <field-name>email</field-name>
    </cmp-field>
    <cmp-field>
    <field-name>password</field-name>
    </cmp-field>
    <cmp-field>
    <field-name>active</field-name>
    </cmp-field>
    <primkey-field>id</primkey-field>
    <query>
    <query-method>
    <method-name>findAll</method-name>
    <method-params/>
    </query-method>
    <ejb-ql>SELECT OBJECT(c) FROM CustomerEntityEJB c</ejb-ql>
    </query>
    </entity>
    orion-ejb-jar.xml as in JDeveloper:
    <?xml version = '1.0' encoding = 'windows-1252'?>
    <orion-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-ejb-jar-10_0.xsd" schema-major-version="10" schema-minor-version="0">
    <enterprise-beans>
    <persistence-manager name="toplink"/>
    <session-deployment name="CustomerSessionEJB" local-location="CustomerSessionEJB" />
    <entity-deployment name="CustomerEntityEJB" data-source="jdbc/PostgresDS" table="Customer" local-location="CustomerEntityEJB">
    <primkey-mapping>
    <cmp-field-mapping name="id"/>
    </primkey-mapping>
    <cmp-field-mapping name="active"/>
    <cmp-field-mapping name="email"/>
    <cmp-field-mapping name="forename"/>
    <cmp-field-mapping name="id"/>
    <cmp-field-mapping name="password"/>
    <cmp-field-mapping name="surname"/>
    <cmp-field-mapping name="title"/>
    </entity-deployment>
    </enterprise-beans>
    </orion-ejb-jar>
    orion-ejb-jar.xml as viewed in the OC4J enterprise manager.     
    <?xml version="1.0" encoding="utf-8"?>
    <orion-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-ejb-jar-10_0.xsd" deployment-version="10.1.3.3.0" deployment-time="1151415a0e3" schema-major-version="10" schema-minor-version="0" >
    <enterprise-beans>
    <persistence-manager name="toplink" class="oracle.toplink.internal.ejb.cmp.oc4j.Oc4jPersistenceManager" descriptor="toplink-ejb-jar.xml">
    </persistence-manager>
    <session-deployment name="CustomerSessionEJB" location="CustomerSessionEJB" local-location="CustomerSessionEJB" persistence-filename="CustomerSessionEJB">
    <ejb-ref-mapping name="ejb/local/CustomerEntityEJB" location="TWA-EJB_CustomerEntityEJBLocal" />
    </session-deployment>
    <entity-deployment name="CustomerEntityEJB" location="CustomerEntityEJB" local-location="CustomerEntityEJB" concrete-bean-class="CustomerEntityEJB_ConcreteSubClass3" data-source="jdbc/PostgresDS" local-wrapper="CustomerEntityEJBLocalHome_LocalEntityHomeWrapper5">
    </entity-deployment>
    </enterprise-beans>
    <assembly-descriptor>
    <default-method-access>
    <security-role-mapping name="<default-ejb-caller-role>" impliesAll="true" />
    </default-method-access>
    </assembly-descriptor>
    </orion-ejb-jar>
    As you can see, the orion-ejb-jar.xml that been deployed on the server has had extra attributes defined in it (like concrete-bean-class) which makessense - its adding in the bits i didnt to get th bean to deploy - however the table attribue is just removed, meaning my bean cant find the table - hence my app not working.
    i just dont know how to stop this and would be extremely grateful if someone could give me a clue how to get my bean up and working properly as this is driving me insane.
    Thanks in advance..
    Gareth.

    sorted - the <persistence-manager name="toplink"/> element was automatically generated by JDeveloper and put in my orion-ejb-jar.xml appears to be un necessary and seemed to be breaking eveything - as soon as i removed it, the bean seemed to deploy ok and pick up the table name =]
    as a bit of an aside does anyone know why it was automatically put there in the first place if it breaks things?

  • Abstract data types??

    I am just learning about data structures and am having some difficulty. Can someone please define what an abstract data type means and what it is. A simple example would be great
    Thanks

    The concept of an Abstract Data Type maps nicely to the concept of a Class in Java.

  • EJB 3.0, BC4J and weblogic managed server

    Hi, I've got a problem using EJB 3.0 with a BC4J Application module in a weblogic managed server.
    My bean is a stateless session bean that use BC4J for database transaction.
    When I call the bean the first time, It returns de values I need, without problem. If I do the same call again, I always get "null". I deployed the same bean on the AdminServer, linking to the same DataSource, It works fine and I never got a null result.
    My application module is created insid my EJB abstract class by :
    _am = (BaseServiceImpl)Configuration.createRootApplicationModule(adfModel, adfConfiguration);*
    Where adfModel and adfConfiguration are configured through annotations in my EJB Implementation.
    In my abstract EJB, I have a methode with a +@PreDestroy+ method like that :
    +@PreDestroy+
    *protected void releaseModele() {*
    *if (_am != null) {*
    Configuration.releaseRootApplicationModule(_am, false);
    _am = null;*
    My Data Source on the server is defined as Supporting Global Transaction, one-phase commit. I activated the BC4J Logs on the server to see what was going on and I see that the JDBC seems to close after the first call :
    *** closing jdbc connection now **** (weblogic.jdbc.wrapper.JTSConnection_oracle_jdbc_driver_T4CConnection@0)
    And that is when I've got the error on the server :
    oracle.jbo.InvalidObjAccessException: JBO-25036: An invalid object operation was invoked on type View Object with name AppModAD
    So, my JDBC connection seems to close somewhere beetween the first and the second call, but only on a managed server... Someone has ever encountered a problem like that?
    Maybe there is something with the configuration of a datasource on a managed server? Or with the lifecycle of an

    The solution was to NOT have glabal transaction checked in the configuration of the data-source and "Failover Transaction State Upon Managed Release" uncked in the configuration of the Business component configuration.

Maybe you are looking for

  • MacMini running my TV has been compromised, tried to download winbackup.exe

    I have a MacMini running Elgatos EyeTV software as my permanent HD TV setup. It's permanently hooked up to the internet and is always on. I have a Universal remote for controlling EyeTV, FrontRow and the rest of my Home Theater system. Until today I

  • Error while running Tutorial.jpr from Jdevloper

    Dear Members, I have just downloaded the patch p4573517_11i_GENERIC and installed Oracle Jdev 9i on my PC. We are using Oracle Applications 11.5.10.2 version. I have successfully created the connection to apps and when I tried to run HomePG.xml from

  • Connecting iPad to older Mac

    I just bought a new iPad and tried unsuccessfully to connect to my iMac - OS X 10.4.11 It has powerPC chip. The icon says i need OS X 10.5 or above to work, but I understand OS X 10.5 only works with Intel. I dont really want to replace the iMac yet

  • Re-name worksheet tabs from cell contents?

    Is is possible to re-name worksheet tabs automatically from cell contents in another sheet within the same workbook? I have a workbook with 30 sheets all feeding data into sheet 31 - the Master Worksheet where all the data is collated etc. There are

  • Role conflict in release procedure

    Dear All, We have one scenario, we want to create two release procedures for different value of po i.e. >1 Lac and <= 1 Lac, we have one group and three person with these codes 01 engineer 02 manager 03 general manager. Now for first release strat (<