EJB 2. ejbSelect example

Hello.
i have some entity beans (EJB 2) and those entityes have some find methods.
i want to implement some ejbSelectXXX methods but i dont know how.
can anybody send me url for reading ejbSelectXXX examples?, xml configuration files and java examples.
thanks

http://www.myhtg.com/examples.zip
or
http://www.myhtg.com

Similar Messages

  • New EJB 2.0 example is available for download

    A new EJB 2.0 example available for download (include the source code and database schema). This example is created with the EJBX Version 1.1, the EJB 2.0 Code Generator. It uses several proven design patterns such as session facade, value object, versioning, sequence key generator, service locator, and business delegate.

    http://www.myhtg.com/examples.zip
    or
    http://www.myhtg.com

  • EJB 3.0 example in JDeveloper 3

    Hi,
    I'm a brand new Java Developer carefully looking to the new EJB 3.0 standard as well as the new version of JDev (10.1.3.0.4.3673).
    I decided to test some examples and ended up with this one: http://www.oracle.com/technology/products/jdev/101/tutorials/ejb_30/ejb_30.htm
    When I'm creating the HRAppFacade session bean in this example JDev generates 2 files but only shows one in the Applications Navigator. The remote interface is generated but not shown.
    I only get to see the interface in JDev when I make a difference in the filename between the interface and the bean.
    Is this expected behavior?
    Best Regards,
    Kris

    The application navigator tries to abstract complexities by providing a more high-level view.
    If you actually stand on the bean in the application navigator and look at the structure pane you should see both your files.
    One more thing to check is the system navigator that gives a more "file system" like view of your code.

  • ejb-client-jar example from the core specification

    Hello all,
    the ejb3.0 specification says (chapter 60 page 241):
    the jar file that contains the client should contain one of the following: 
    • a reference to the ejb-client JAR file 
    • a reference to the ejb-jar file that contains the client view classes 
    • a copy of the client view classes  There is also an example on page 242:
    In this example, the Bean Provider has chosen to package the enterprise bean client view classes in a
    separate jar file and to reference that jar file from the other jar files that need those classes. Those classes
    are needed both by ejb2.jar, packaged in the same application as ejb1.jar, and by ejb3.jar,
    packaged in a different application. Those classes are also needed by ejb1.jar itself because they
    define the remote interface of the enterprise beans in ejb1.jar, and the Bean Provider has chosen the
    by reference approach to making these classes available.
    The deployment descriptor for ejb1.jar names the client view jar file in the ejb-client-jar
    element. Because ejb2.jar requires these client view classes, it includes a Class-Path reference to
    ejb1_client.jar.
    The Class-Path mechanism must be used by components in app2.ear to reference the client view jar
    file that corresponds to the enterprise beans packaged in ejb1.jar of app1.ear. Those enterprise
    beans are referenced by enterprise beans in ejb3.jar. Note that the client view jar file must be
    included directly in the app2.ear file.
        app1.ear:
            META-INF/application.xml
            ejb1.jar Class-Path: ejb1_client.jar
                deployment descriptor contains:
                    <ejb-client-jar>ejb1_client.jar</ejb-client-jar>
            ejb1_client.jar
            ejb2.jar Class-Path: ejb1_client.jar
        app2.ear:
            META-INF/application.xml
            ejb1_client.jar
            ejb3.jar Class-Path: ejb1_client.jarNow finally my questions are:
    1. Why did we need to include the ejb1_client.jar in app2.ear (or even in app1.ear), wasn't it enough to deploy the ejb1_client.jar separately then refer to it (using class-path in Manifest, or may be just by using <ejb-client-jar>) as the bullets quoted first suggest?
    2. How come we didn't need to use <ejb-client-jar> for ejb2.jar
    3. Since both of ejb1.jar and ejb2.jar are packaged in app1.ear couldn't we simply refer to the ejb1_client.jar in the Manifest file of app1.ear?
    Please, I appreciate your input on this

    I am guessing here and please correct me if I am wrong:
    ejb1.jar uses interfaces in ejb1_client.jar as the interface for some of the beans so we needed to use ejb-client-jar and we needed a reference in the manifest file.
    ejb2.jar uses some of the claess/interfaces as may be a return type but not as an interface for one of its beans so we didn't need to use ejb-client-jar but we needed an entry in the manifest file.
    regarding app1.ear, we can put the ejb1_client.jar in the META-INF/lib app1.ear without the need for any entries in the manifest files.
    Edited by: malrawi on Jun 14, 2009 11:59 PM

  • Plea for example - Many-to-Many CMP EJB

    I am attempting to create an EJB that uses Container Managed Persistence,
    but my situation seems to be an odd one. The EJB needs to have a
    Many-to-Many relationship to itself, because the object is Hierarchical.
    Because this is my first EJB I am having a hard time with all of the
    deployment descriptors.
    I am asking for an example of any Many-to-Many EJB relationship that uses
    Weblogic's built-in link table creation to make the relationship (that
    works). I realize that there are confidentiality issues with many people
    releasing code. I will make any promise (short of selling my soul) that the
    code will be safe and promply destroyed immediately after inspection.
    Thanks for any help,
    Tom
    [email protected]

    The following describes how to establish a self many-to-many relationship with regards to Product having many parent products and many children products. I have attached the example files as well. Most of these files were generated using EJBGen. I would highly recommend it...
    EJB
    v Navigating from a Product to its parent Products results in getParents() method in Product
    § Since a Product can have many parents the return type of getParents() method is
    java.util.Collection
    § Calling setParents() method results in establishing the new links between this Parent and
    parent Products
    § Adding a Product as Parent to the Product results in establishing a new link between this
    Product and other Product as parent
    · This product is made available in the collection of children in the other Product
    § Removing a Product as Parent to the Product results in breaking a link between this
    Product and the other Product as parent
    · This product is also removed from the collection of children in the other Product
    v Navigating from a Product to its children Products results in getChildren() method in Product
    § Since a Product can have many children the return type of getChildren() method is
    java.util.Collection
    § Calling setChildren() method results in breaking the old links between this Product and
    children Products
    § Adding a Product as child to the Product results in establishing a new link between this
    Product and other Product as child
    · This product is made available in the collection of parents in the other Product
    § Removing a Product as child from the Product results in breaking a link between this
    Product and the other Product as child
    · This Product is also removed from the collection of parents in the other Product.
    v Example: ProductBean
    Ø DataBase
    v For a many-to-many relationship define a new associative (join) table
    v Define a new Parent_Child_Product associative table
    v The Parent_Child_Product has compound primary keys: Parent_Product_ID and
    Child_Product_ID
    v Parent_Product_ID and Child_Product_ID are foreign keys to Product table
    v Example: Product, Parent_Child_Product
    Ø Deployment Descriptors
    v ejb-jar.xml
    § Within <ejb-jar>.<relationships>.<ejb-relation> define the following:
    · Name of the relationship
    o Example: <ejb-relation-name>Parent-Product-Children</ejb-relation-name>
    · Role from the parent Product side
    o Source
    § Example:
    <relationship-role-source>
    <ejb-name>Product</ejb-name>
    </relationship-role-source>
    o Role name
    § Example: <ejb-relationship-role-name>many-Product@children-Have-Product</
    ejb-relationship-role-name>
    o Multiplicity
    § Example: <multiplicity>many</multiplicity>
    o CMR field
    § Example:
    <cmr-field>
    <cmr-field-name>children</cmr-field-name>
    <cmr-field-type>java.util.Collection</cmr-field-type>
    </cmr-field>
    · Role from the child Product side
    o Source
    § Example:
    <relationship-role-source>
    <ejb-name>Product</ejb-name>
    </relationship-role-source>
    o Role name
    § Example: <ejb-relationship-role-name>many-Product@parents-Have-Product</
    ejb-relationship-role-name>
    o Multiplicity
    § Example: <multiplicity>many</multiplicity>
    o CMR field
    § Example:
    <cmr-field>
    <cmr-field-name>parents</cmr-field-name>
    <cmr-field-type>java.util.Collection</cmr-field-type>
    </cmr-field>
    v weblogic-ejb-jar.xml
    v weblogic-cmp-rdbms-jar.xml
    § Within <weblogic-rdbms-jar>.<weblogic-rdbms-relation> specify the following:.23
    · Name of the relationship matching the name in ejb-jar
    o Example: <ejb-relation-name> Parent-Product-Children</ejb-relation-name>
    · Specify the name of the joint table
    o Example: <table-name> Parent_Child_Product</table-name>
    · Specify the mapping using <weblogic-relationship-role>
    o Specify the role name matching the name in the ejb-jar
    § Example: <relationship-role-name>many-Product@children-Have-Product</
    relationship-role-name>
    o Define <relationship-role-map> that defines the mapping of the foreign key to
    the primary key mapping
    § Example:
    <relationship-role-map>
    <column-map>
    <foreign-key-column>Parent_Product_ID</foreign-key-column>
    <key-column>Product_ID</key-column>
    </column-map>
    </relationship-role-map>
    · Specify the mapping using <weblogic-relationship-role>
    o Specify the role name matching the name in the ejb-jar
    § Example: <relationship-role-name> many-Product@parents-Have-Product</
    relationship-role-name>
    o Define <relationship-role-map> that defines the mapping of the foreign key to
    the primary key mapping
    § Example:
    <relationship-role-map>
    <column-map>
    <foreign-key-column>Child_Product_ID</foreign-key-column>
    <key-column>Product_ID</key-column>
    </column-map>
    </relationship-role-map>
    "Thomas A. Valletta" <[email protected]> wrote in message news:[email protected]...
    I am attempting to create an EJB that uses Container Managed Persistence,
    but my situation seems to be an odd one. The EJB needs to have a
    Many-to-Many relationship to itself, because the object is Hierarchical.
    Because this is my first EJB I am having a hard time with all of the
    deployment descriptors.
    I am asking for an example of any Many-to-Many EJB relationship that uses
    Weblogic's built-in link table creation to make the relationship (that
    works). I realize that there are confidentiality issues with many people
    releasing code. I will make any promise (short of selling my soul) that the
    code will be safe and promply destroyed immediately after inspection.
    Thanks for any help,
    Tom
    [email protected]
    [att1.html]
    [ejb-jar.xml]
    [weblogic-cmp-rdbms-jar.xml]
    [weblogic-ejb-jar.xml]
    [ProductBean.java]
    [ProductLocal.java]
    [ProductLocalHome.java]

  • Can't run the cluster example

              I would appreciate if someone can explanation my long list of questions regarding
              the deployment of EJB in cluster environment.
              I can't run the cluster EJB example( Teller/Account) in a cluster(contains two
              server2). I always get
              java.rmi.RemoteException: Unable to
              resolve examples.cluster.ejb.Account
              Home. Resolved: 'examples.cluster.ejb'
              Unresolved:'AccountHome'
              Following is my setup:
              Machine A: exampleServer:7001 (admin server)
              Machine A: testServer1:8001 (Managed server)
              Machine B: testServer1_B:8001(Managed server)
              MyCluster : testServer1, testServer1_B
              Test Client:
              java examples.cluster.ejb.Client "t3://Machine A:8001"
              ======================
              Q1: Should I use 8001 or 7001 as cluster port number?
              Q2: What will happen when we click "apply" after select/unselect the server in
              the "target", "server" tab?
              Q3: And what will happen if we click deploy/undeploy check box in "configuration"
              tab of EJB item?
              Q4: I check the JNDI tree from all above three servers can't find out JNDI tree
              doesn't reflect the change I did in Q2 or Q3.
              Q5: What is the right way to deploy EJB components, should we select both cluster
              and server in the "target" tab?
              Q6: I got this message from one of the server when I try to undeploy/deploy ejb
              object.
              "examples.cluster.ejb.TellerHome_EO in the jndi tree is non clusterable
              and you have tried to bind more
              once? How could I make it clusterable?
              Q7: Undeploy and EJB doesn't work and sometime I still get " JNDI name in use"
              from the server.
              How could I fix it.
              Thanks
              

    First I can tell you that the ports have to be the same, be on the the
              same network , i.e. Telnet into the other m/c. Next which you probably
              have done is the properties files. Per-cluster ...
              >>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<
              On 6/7/01, 6:59:48 AM, "James Hsu" <[email protected]> wrote regarding
              Can't run the cluster example:
              > I would appreciate if someone can explanation my long list of
              questions regarding
              > the deployment of EJB in cluster environment.
              > I can't run the cluster EJB example( Teller/Account) in a
              cluster(contains two
              > server2). I always get
              > java.rmi.RemoteException: Unable to
              > resolve examples.cluster.ejb.Account
              > Home. Resolved: 'examples.cluster.ejb'
              > Unresolved:'AccountHome'
              > Following is my setup:
              > Machine A: exampleServer:7001 (admin server)
              > Machine A: testServer1:8001 (Managed server)
              > Machine B: testServer1_B:8001(Managed server)
              > MyCluster : testServer1, testServer1_B
              > Test Client:
              > java examples.cluster.ejb.Client "t3://Machine A:8001"
              > ======================
              > Q1: Should I use 8001 or 7001 as cluster port number?
              > Q2: What will happen when we click "apply" after select/unselect the
              server in
              > the "target", "server" tab?
              > Q3: And what will happen if we click deploy/undeploy check box in
              "configuration"
              > tab of EJB item?
              > Q4: I check the JNDI tree from all above three servers can't find out
              JNDI tree
              > doesn't reflect the change I did in Q2 or Q3.
              > Q5: What is the right way to deploy EJB components, should we select
              both cluster
              > and server in the "target" tab?
              > Q6: I got this message from one of the server when I try to
              undeploy/deploy ejb
              > object.
              > "examples.cluster.ejb.TellerHome_EO in the jndi tree is non
              clusterable
              > and you have tried to bind more
              > once? How could I make it clusterable?
              > Q7: Undeploy and EJB doesn't work and sometime I still get " JNDI
              name in use"
              > from the server.
              > How could I fix it.
              > Thanks
              [att1.html]
              

  • I can't lookup EJB (3.0) in WebLogic 12 using ENC

    I have a simple application divided in 2 modules:
    HolaMundo - Servlet component
    SimpleEJB - EJB Component
    The EJB Component use EJB 3.0. I created a local business interface with one method. A stateless EJB that implement that interface. And I use the ejb-jar.xml for declare it.
    And a Servlet that use the EJB.
    In Glassfish or Tomee this way for working with EJB works, but i don't understand why it doesn't work in WebLogic 12...
    When i try to access to the servlet, i get an error. this is the error:
    javax.naming.NameNotFoundException: While trying to look up /app/SimpleEJB/Example!com.edwin.ejb.ExampleLocal in /app/webapp/HolaMundo.war/1051995086.; remaining name '/app/SimpleEJB/Example!com/edwin/ejb/ExampleLocal'
      at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1180)
      at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:146)
    Servlet:
    package servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.edwin.ejb.ExampleLocal;
    public class EJB extends HttpServlet {
       private static final long serialVersionUID = 1L;
       @Override
       protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
       throws ServletException, IOException {
       PrintWriter out = arg1.getWriter();
       ExampleLocal el2;
       try {
      el2 = (ExampleLocal) new InitialContext()
       .lookup("java:app/SimpleEJB/Example!com.edwin.ejb.ExampleLocal");
       out.println("EJBBBB: " + el2.nombre());
       } catch (NamingException e) {
      e.printStackTrace();
    Local business interface:
    package com.edwin.ejb;
    public interface ExampleLocal {
        public String nombre();
    EJB Stateless:
    package com.edwin.ejb;
    public class Example implements ExampleLocal{
        @Override
        public String nombre() {
            return "Edwin";
    ejb-jar.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
      <display-name>SimpleEJB </display-name>
      <enterprise-beans>
        <session>
            <ejb-name>Example</ejb-name>
            <business-local>com.edwin.ejb.ExampleLocal</business-local>
            <ejb-class>com.edwin.ejb.Example</ejb-class>
            <session-type>Stateless</session-type>
        </session>
      </enterprise-beans>
    </ejb-jar>

    Both answers did not work. I do not understand why it did not work because in other Java EE Servers it works.
    My JNDI Tree (Screenshot):
    http://oi58.tinypic.com/vs1jjd.jpg
    However, i could get the EJB when i use the Global ENC, but i got a Casting Exception...
    Eg:
    try {
      ej = (EjLocal) new InitialContext().lookup("java:global.EjemploEJB.Ej!stateless.EjLocal");
      out.print("EJ: "+ej.ej());
    } catch (NamingException e) {
      e.printStackTrace();
    Output:
    java.lang.ClassCastException: stateless.Ej_1aafe_EjLocalImpl cannot be cast to stateless.EjLocal
    at servlet.Ejemplo.doGet(Ejemplo.java:33)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731).....
    There is a strange value in the EJB's JNDI Tree:
    Header 1
    Header 2
    Binding Name:
    java:global.EjemploEJB.Ej!stateless.EjLocal
    Class:
    stateless.Ej_1aafe_EjLocalImpl
    Hash Code:
    2021087981
    toString Results:
    stateless.Ej_1aafe_EjLocalImpl@78775aed

  • Problem with "package-info.java" using EJB 3.0 and OC4J

    Hi all.
    I already posted this question on JDeveloper forum, but didn't get any answer,
    so I'll try posting here.
    Anyway, I'm new both to JDeveloper and J2EE,
    so I'm trying out examples for EJB 3.0, and I got stuck at "Use Security Annotations with EJB 3.0"
    (http://www.oracle.com/technology/tech/java/oc4j/ejb3/howtos-ejb3/howtoejb30security/doc/how-to-ejb30-security-ejb.html).
    Example code is working perfectly, if one builds it using Ant, but I'm importing all examples into JDeveloper (or at least I'm trying to :))
    JDeveloper can't build file "package-info.java" containing following code:
    @javax.annotation.security.SecurityRoles(roleNames={"superuser", "user"})
    package oracle.ejb30;I'm getting following output in "Compiler - Log" window:
    Error(2,1): 'class', 'interface', or 'enum' expected.
    Help much appreciated...
    platform used:
    Windows XP SP2
    JDeveloper Studio (Version 10.1.3, Build 3412)
    JDK 1.5_06
    OC4J 10.1.3 developer preview 4 (standalone version)

    Since you're using EJBs, you can use JTA and can skip the getTransaction() calls. If you want to use getTransaction().begin() and commit(), then make sure that your EntityManager is resource-local. The configuration for this is in persistence.xml. Set a transaction-type of RESOURCE_LOCAL rather than JTA.

  • EJB 3.0 Bean name

    Is there a way that we can override the EJB 3.0 Bean name in the deployment descriptor? I know we can provide the name in the Annotation via @MessageDriven(name="bar").
    For example, if I have the following Bean,
    package com.example;
    @MessageDriven
    public class Foo implements MessageListener {
    When deployed, it always deploys as Foo, even if I have the following in my ejb-jar.xml and weblogic-ejb-jar.xml:
    <mesage-driven>
    <ejb-name>Bar</ejb-name>
    <ejb-class>com.example.Foo</ejb-class>
    <destination-type>javax.jms.Topic</destination-type>
    <subscription-durablility>Durable</subscription-durablity>
    </message-driven>
    <mesage-driven>
    <ejb-name>Baz<r</ejb-name>
    <ejb-class>com.example.Foo</ejb-class>
    <destination-type>javax.jms.Queue</destination-type>
    </message-driven>
    There seems no way I can re-use the Same bean class with EJB 3.0 if I needed to. If there is anyway, the ejb-name can be used please let me know.
    Thanks

    Hi,
    For a JEE5 EJB module, rather than using EJBGen, you can use WLS specific annotations for configuring common settings. If you follow the link below, you can see a list of supported EJB annotations. Disregard the fact that the documentation section title is WebLogic Kodo Annotations. That is incorrect and I've filed a bug for it.
    http://edocs.bea.com/wls/docs103/ejb30/annotations.html#wp1438036.
    Unfortunately, we don't yet support setting all weblogic-ejb-jar.xml configuration values via annoations so in some cases a weblogic-ejb-jar.xml is still required.
    You can hand edit your weblogic-ejb-jar.xml and the example you posted below should work fine.
    - Matt

  • HOWTO: Using a BC4J Application Module in an Stateless EJB Session Bean

    HOWTO: Using a BC4J Application Module in an Stateless EJB Session Bean
    by Steve Muench
    Overview
    BC4J provides automatic facilities for deploying any application module as a stateful EJB session bean. If you want to leverage the features of your BC4J application module from a stateless EJB session bean, it's not automatic but it is straightforward to implement. This howto article explains the details.
    For our example, we will create a stateless EJB session bean that uses a container-managed transaction. To keep things simple, let's assume the session bean has a single public method on its remote interface named createDepartment() with the following signature:
    public void createDepartment(int id, String name, String loc) throws AppException
    AppException is an example of an application-specific exception that our method will throw if any problems arise during its execution.The goal of this article is to illustrate how to use the BC4J application module named com.example.hr.HRApp as part of the implementation of this createDepartment method on our stateless enterprise bean. Let's assume that the HRApp application module has a view object member named Departments, based on the com.example.hr.DeptView view object, based on the familiar DEPT table and related to the com.example.hr.Dept entity object so our view can be updateable.
    Creating the Stateless Session Bean
    We can start by using the JDeveloper Enterprise Bean wizard to create a new stateless session bean called StatelessSampleEJB implemented by:[list][*]com.example.StatelessSampleEJBBean (Bean class)[*]com.example.StatelessSampleEJBHome (Home interface)[*]com.example.StatelessSampleEJB (Remote interface)[list]
    We then use the EJB Class Editor to add the createDepartment method to the remote interface of StatelessSampleEJB with the signature above. We edit the remote interface to make sure that it also reflects that the createDepartment method thows the AppException like this:
    package com.example;
    import javax.ejb.EJBObject;
    import java.rmi.RemoteException;
    public interface StatelessSampleEJB extends EJBObject {
      void createDepartment(int id, String name, String loc)
      throws RemoteException,AppException;
    }Before we start adding BC4J into the picture for our implementation, our StatelessSampleEJBBean class looks like this:
    package com.example;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    public class StatelessSampleEJBBean implements SessionBean {
      public void ejbCreate(){}
      public void ejbActivate(){}
      public void ejbPassivate(){}
      public void ejbRemove(){}
      public void setSessionContext(SessionContext ctx){
      public void createDepartment(int id, String name, String loc) 
      throws AppException {
        // TODO: Implement method here
    }We can double-click on the ejb-jar.xml file in our project to see the XML deployment descriptor for the bean we just created:
    <ejb-jar>
       <enterprise-beans>
          <session>
             <description>Session Bean ( Stateless )</description>
             <display-name>StatelessSampleEJB</display-name>
             <ejb-name>StatelessSampleEJB</ejb-name>
             <home>com.example.StatelessSampleEJBHome</home>
             <remote>com.example.StatelessSampleEJB</remote>
             <ejb-class>com.example.StatelessSampleEJBBean</ejb-class>
             <session-type>Stateless</session-type>
             <transaction-type>Container</transaction-type>
          </session>
       </enterprise-beans>
    </ejb-jar>We need to add the extra <assembly-descriptor> section in this file to indicate that the createDepartment method will require a transaction. After this edit, the ejb-jar.xml file looks like this:
    <ejb-jar>
       <enterprise-beans>
          <session>
             <description>Session Bean ( Stateless )</description>
             <display-name>StatelessSampleEJB</display-name>
             <ejb-name>StatelessSampleEJB</ejb-name>
             <home>com.example.StatelessSampleEJBHome</home>
             <remote>com.example.StatelessSampleEJB</remote>
             <ejb-class>com.example.StatelessSampleEJBBean</ejb-class>
             <session-type>Stateless</session-type>
             <transaction-type>Container</transaction-type>
          </session>
       </enterprise-beans>
       <assembly-descriptor>
          <container-transaction>
             <method>
                <ejb-name>StatelessSampleEJB</ejb-name>
                <method-name>createDepartment</method-name>
                <method-params>
                   <method-param>int</method-param>
                   <method-param>java.lang.String</method-param>
                   <method-param>java.lang.String</method-param>
                </method-params>
             </method>
             <trans-attribute>Required</trans-attribute>
          </container-transaction>
       </assembly-descriptor>
    </ejb-jar>
    Aggregating a BC4J Application Module
    With the EJB aspects of our bean setup, we can proceed to implementing the BC4J application module aggregation.
    The first thing we do is add private variables to hold the EJB SessionContext and the instance of the aggregated BC4J ApplicationModule, like this:
    // Place to hold onto the aggregated appmodule instance
    transient private ApplicationModule _am  = null;
    // Remember the SessionContext that the EJB container provides us
    private           SessionContext    _ctx = null;and we modify the default, empty implementation of the setSessionContext() method to remember the session context like this:
    public void setSessionContext(SessionContext ctx){ _ctx = ctx; }We add additional constants that hold the names of the J2EE datasource that we want BC4J to use, as well as the fully-qualified name of the BC4J application module that we'll be aggregating:
    // JNDI resource name for the J2EE datasource to use
    private static final String DATASOURCE = "jdbc/OracleCoreDS";
    // Fully-qualified BC4J application module name to aggregate
    private static final String APPMODNAME = "com.example.hr.HRApp";We expand the now-empty ejbCreate() and ejbRemove() methods to create and destory the aggregated instance of the BC4J application module that we'll use for the lifetime of the stateless session bean. When we're done, ejbCreate() it looks like this:
    public void ejbCreate() throws CreateException {
      try {
        // Setup a hashtable of environment parameters for JNDI initial context
        Hashtable env = new Hashtable();
        env.put(JboContext.INITIAL_CONTEXT_FACTORY,JboContext.JBO_CONTEXT_FACTORY);
        // NOTE: we want to use the BC4J app module in local mode as a simple Java class!
        env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
        env.put(PropertyConstants.INTERNAL_CONNECTION_PARAMS,DATASOURCE);
        // Create an initial context, using this hashtable of environment params
        InitialContext ic = new InitialContext(env);
        // Lookup a home interface for the application module
        ApplicationModuleHome home = (ApplicationModuleHome)ic.lookup(APPMODNAME);
        // Using the home, create the instance of the appmodule we'll use
        _am = home.create();
        // Register the BC4J factory to handle EJB container-managed transactions
        registerContainerManagedTransactionHandlerFactory();
      catch(Exception ex) {
         ex.printStackTrace();
        throw new CreateException(ex.getMessage());
    }and ejbRemove() looks like this:
    public void ejbRemove() {
      try {
        // Cleanup any appmodule resources before getting shutdown
        _am.remove();
      catch(JboException ex) { /* Ignore */ }
    }The helper method named reigsterContainerManagedTransactionHandlerFactory() looks like this:
    private void registerContainerManagedTransactionHandlerFactory() {
      SessionImpl session = (SessionImpl)_am.getSession();
      session.setTransactionHandlerFactory(
        new TransactionHandlerFactory() {
          public TransactionHandler  createTransactionHandler() {
            return new ContainerManagedTxnHandlerImpl();
          public JTATransactionHandler createJTATransactionHandler() {
            return new ContainerManagedTxnHandlerImpl();
    }The last detail is to use the BC4J appmodule to implement the createDepartment() method. It ends up looking like this:
    public void createDepartment(int id, String name, String loc)
    throws AppException {
      try {
        // Connect the AM to the datasource we want to use for the duration
        // of this single method call.
        _am.getTransaction().connectToDataSource(null,DATASOURCE,false);
        // Use the "Departments" view object member of this AM
        ViewObject departments = _am.findViewObject("Departments");
        // Create a new row in this view object.
        Row newDept = departments.createRow();
        // Populate the attributes from the parameter arguments.
        newDept.setAttribute("Deptno", new Number(id));
        newDept.setAttribute("Dname", name);
        newDept.setAttribute("Loc", loc);
        // Add the new row to the view object's default rowset
        departments.insertRow(newDept);
        // Post all changes in the AM, but we don't commit them. The EJB
        // container managed transaction handles the commit.
        _am.getTransaction().postChanges();
      catch(JboException ex) {
        // To be good EJB Container-Managed Transaction "citizens" we have
        // to mark the transaction as needing a rollback if there are problems
        _ctx.setRollbackOnly();
        throw new AppException("Error creating dept "+ id +"\n"+ex.getMessage());
      finally {
        try {
          // Disconnect the AM from the datasource we're using
          _am.getTransaction().disconnect();
        catch(Exception ex) { /* Ignore */ }
    Building a Test Client
    With the EJB-Tier work done, we can build a sample client program to test this new stateless EJB Session Bean by selecting the bean in the Oracle9i JDeveloper IDE and choosing "Create Sample Java Client" from the right-mouse menu.
    When the "Sample EJB Client Details" dialog appears, we take the defaults of connecting to embedded OC4J container. Clicking the (OK) button generates the following test class:
    import java.util.Hashtable;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import com.example.StatelessSampleEJB;
    import com.example.StatelessSampleEJBHome;
    public class SampleStatelessSampleEJBClient {
      public static void main(String [] args) {
        SampleStatelessSampleEJBClient sampleStatelessSampleEJBClient =
           new SampleStatelessSampleEJBClient();
        try {
          Hashtable env = new Hashtable();
          env.put(Context.INITIAL_CONTEXT_FACTORY,
                  "com.evermind.server.rmi.RMIInitialContextFactory");
          env.put(Context.SECURITY_PRINCIPAL, "admin");
          env.put(Context.SECURITY_CREDENTIALS, "welcome");
          env.put(Context.PROVIDER_URL,
                  "ormi://localhost:23891/current-workspace-app");
          Context ctx = new InitialContext(env);
          StatelessSampleEJBHome statelessSampleEJBHome =
               (StatelessSampleEJBHome)ctx.lookup("StatelessSampleEJB");
          StatelessSampleEJB statelessSampleEJB;
          // Use one of the create() methods below to create a new instance
          // statelessSampleEJB = statelessSampleEJBHome.create();
          // Call any of the Remote methods below to access the EJB
          // statelessSampleEJB.createDepartment( int id, java.lang.String name, java.lang.String loc );
        catch(Throwable ex) {
          ex.printStackTrace();
    }We uncomment the call to the create() method and add a few calls to the createDepartment() method so that the body of the test program now looks like this:
    // Use one of the create() methods below to create a new instance
    statelessSampleEJB = statelessSampleEJBHome.create();
    // Call any of the Remote methods below to access the EJB
    statelessSampleEJB.createDepartment( 13, "Test1","Loc1");
    System.out.println("Created department 13");
    statelessSampleEJB.createDepartment( 14, "Test2","Loc2");
    System.out.println("Created department 14");
    try {
      // Try setting a department id that is too large!
      statelessSampleEJB.createDepartment( 23456, "Test3","Loc3");
    catch (AppException ax) {
      System.err.println("AppException: "+ax.getMessage());
    }Before we can successfully run our SampleStatelessSampleEJBClient we need to first run the EJB bean that the client will try to connect to. Since Oracle9i JDeveloper supports local running and debugging of the EJB-Tier without doing through a full J2EE deployment step, to accomplish this prerequisite step we just need to right-mouse on the StatelessSampleEJB node in the System Navigator and select "Run". This starts up the embedded OC4J instance and runs the EJB right out of the current out path.Finally, we can run the SampleStatelessSampleEJBClient, and see the output of the test program in the JDeveloper log window:
    Created department 13
    Created department 14
    AppException: Error creating dept 23456
    JBO-27010: Attribute set with value 23456 for Deptno in Dept has invalid precision/scale
    Troubleshooting
    One error that might arise while running the example is that the database connection information in your data-sources.xml for the jdbc/OracleCoreDS datasource does not correspond to the database you are trying to test against. If this happens, then double-check the file .\jdev\system\oc4j-config\data-sources.xml under the JDeveloper installation home directory to make sure that the url value provided is what you expect. For example, to work against a local Oracle database running on your current machine, listening on port 1521, with SID of ORCL, you would edit this file to have an entry like this for jdbc/OracleCoreDS :
    <data-source
        class="com.evermind.sql.DriverManagerDataSource"
        name="OracleDS"
        location="jdbc/OracleCoreDS"
        xa-location="jdbc/xa/OracleXADS"
        ejb-location="jdbc/OracleDS"
        connection-driver="oracle.jdbc.driver.OracleDriver"
        username="scott"
        password="tiger"
        url="jdbc:oracle:thin:@localhost:1521:ORCL"
        inactivity-timeout="30"
    />This is the data-sources.xml file that gets used by the embedded OC4J instance running in JDeveloper.
    Conclusion
    Hopefully this article has illustrated that it is straightforward to utilize the full power of BC4J in local mode as part of your EJB Stateless Session Beans using container-managed transaction. This example illustrated a single createDepartment method in the enterprise bean, but by replicating the application module interaction code that we've illustrated in createDepartment, any number of methods in your stateless session bean can use the aggregated application module instance created in the ejbCreate() method.
    Code Listing
    The full code listing for the SampleStatelessEJB bean implementation class looks like this:
    * StatelessSampleEJB
    * Illustrates how to use an aggregated BC4J application module
    * in local mode as part of the implementation of a stateless
    * EJB session bean using container-managed transaction.
    * HISTORY
    * smuench/dmutreja 14-FEB-2002 Created
    package com.example;
    import oracle.jbo.*;
    import oracle.jbo.server.*;
    import javax.ejb.*;
    import oracle.jbo.domain.Number;
    import oracle.jbo.common.PropertyConstants;
    import java.util.Hashtable;
    import javax.naming.InitialContext;
    import oracle.jbo.server.ejb.ContainerManagedTxnHandlerImpl;
    public class StatelessSampleEJBBean implements SessionBean {
      // JNDI resource name for the J2EE datasource to use
      private static final String DATASOURCE = "jdbc/OracleCoreDS";
      // Fully-qualified BC4J application module name to aggregate
      private static final String APPMODNAME = "com.example.hr.HRApp";
      // Place to hold onto the aggregated appmodule instance
      transient private ApplicationModule _am  = null;
      // Remember the SessionContext that the EJB container provides us
      private           SessionContext    _ctx = null;
      public void ejbCreate() throws CreateException {
        try {
          // Setup a hashtable of environment parameters for JNDI initial context
          Hashtable env = new Hashtable();
          env.put(JboContext.INITIAL_CONTEXT_FACTORY,JboContext.JBO_CONTEXT_FACTORY);
          env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
          env.put(PropertyConstants.INTERNAL_CONNECTION_PARAMS,DATASOURCE);
          // Create an initial context, using this hashtable of environment params
          InitialContext ic = new InitialContext(env);
          // Lookup a home interface for the application module
          ApplicationModuleHome home = (ApplicationModuleHome)ic.lookup(APPMODNAME);
          // Using the home, create the instance of the appmodule we'll use
          _am = home.create();
          // Register the BC4J factory to handle EJB container-managed transactions
          registerContainerManagedTransactionHandlerFactory();
        catch(Exception ex) {
           ex.printStackTrace();
          throw new CreateException(ex.getMessage());
      public void ejbActivate(){}
      public void ejbPassivate(){}
      public void ejbRemove(){}
      public void setSessionContext(SessionContext ctx){ _ctx = ctx; }
      public void createDepartment(int id, String name, String loc)
      throws AppException {
        try {
          // Connect the AM to the datasource we want to use for the duration
          // of this single method call.
          _am.getTransaction().connectToDataSource(null,DATASOURCE,false);
          // Use the "Departments" view object member of this AM
          ViewObject departments = _am.findViewObject("Departments");
          // Create a new row in this view object.
          Row newDept = departments.createRow();
          // Populate the attributes from the parameter arguments.
          newDept.setAttribute("Deptno", new Number(id));
          newDept.setAttribute("Dname", name);
          newDept.setAttribute("Loc", loc);
          // Add the new row to the view object's default rowset
          departments.insertRow(newDept);
          // Post all changes in the AM, but we don't commit them. The EJB
          // container managed transaction handles the commit.
          _am.getTransaction().postChanges();
        catch(JboException ex) {
          // To be good EJB Container-Managed Transaction "citizens" we have
          // to mark the transaction as needing a rollback if there are problems
          _ctx.setRollbackOnly();
          throw new AppException("Error creating dept "+ id +\n"+ex.getMessage());
        finally {
          try {
            // Disconnect the AM from the datasource we're using
            _am.getTransaction().disconnect();
          catch(Exception ex) { /* Ignore */ }
      private void registerContainerManagedTransactionHandlerFactory() {
        SessionImpl session = (SessionImpl)_am.getSession();
        session.setTransactionHandlerFactory(
          new TransactionHandlerFactory() {
            public TransactionHandler createTransactionHandler() {
              return new ContainerManagedTxnHandlerImpl();
            public JTATransactionHandler createJTATransactionHandler() {
              return new ContainerManagedTxnHandlerImpl();

    Hi Steve, It4s me again;
    About the question I made, I tried with a single assembly-descriptor tag and a single container-transaction tag in the deployment descriptor of the session bean and these were the results.
    java.lang.NullPointerException
         void com.evermind.server.rmi.RMIConnection.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(java.lang.Throwable)
         java.lang.Object com.evermind.server.rmi.RMIConnection.invokeMethod(com.evermind.server.rmi.RMIContext, long, long, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.rmi.RemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.ejb.StatelessSessionRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         void __Proxy1.modificaEnvoltura(java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String)
         void SamplemdeController.envolturaControlEJBClient.main(java.lang.String[])
    Then I tried with multiple assembly-descriptor tags each with a single container-transaction tag and the results were:
    java.lang.NullPointerException
         void com.evermind.server.rmi.RMIConnection.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(java.lang.Throwable)
         java.lang.Object com.evermind.server.rmi.RMIConnection.invokeMethod(com.evermind.server.rmi.RMIContext, long, long, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.rmi.RemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.ejb.StatelessSessionRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         void __Proxy1.modificaEnvoltura(java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String)
         void SamplemdeController.envolturaControlEJBClient.main(java.lang.String[])
    Finally I tried with a single assembly-descriptor and multiple container tags and the results were:
    java.lang.NullPointerException
         void com.evermind.server.rmi.RMIConnection.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(java.lang.Throwable)
         java.lang.Object com.evermind.server.rmi.RMIConnection.invokeMethod(com.evermind.server.rmi.RMIContext, long, long, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.rmi.RemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         java.lang.Object com.evermind.server.ejb.StatelessSessionRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         void __Proxy1.modificaEnvoltura(java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String)
         void SamplemdeController.envolturaControlEJBClient.main(java.lang.String[])
    How can I make my Stateless Session bean work out?

  • Can not get ejb20\basic\beanManaged example work with Oracle?

    This is the problem I encount when switch DB from Pointbase to Oracle. Most of the examples work when I with necessary change of configuration, DD and redeployment of applications except this one:
    I follow all the steps for Oracle 9i DB. But keep getting the following errors. I don't understand why the system still lookups jdbc/demoPool even I modified DD and system configuration to jdbc/oraclePool (I validate it after successfully deployed to exampleServer).
    The server is WLS 8.1 running on Windows XP professional.
    ant runBuildfile: build.xml
    run:
    [java] Beginning beanManaged.Client...
    [java] Creating account ID: 0 with a balance of 0.0...
    [java] java.rmi.RemoteException: EJB Exception:; nested exception is:
    [java] There was an exception while creating and using the Accounts.
    [java] This indicates that there was a problem communicating with the serve
    r: java.rmi.RemoteException: EJB Exception:; nested exception is:
    [java] javax.ejb.EJBException: nested exception is: javax.naming.NameNo
    tFoundException: While trying to look up comp/env/jdbc/demoPool in /app/ejb/ejb2
    0_basic_beanManaged.jar#beanManaged.; remaining name 'comp/env/jdbc/demoPool'
    [java] at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundR
    equest.java:108)
    [java] javax.ejb.EJBException: nested exception is: javax.naming.NameNo
    tFoundException: While trying to look up comp/env/jdbc/demoPool in /app/ejb/ejb2
    0_basic_beanManaged.jar#beanManaged.; remaining name 'comp/env/jdbc/demoPool'
    [java] at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwar
    eRemoteRef.java:284)
    [java] at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwar
    eRemoteRef.java:244)
    [java] at examples.ejb20.basic.beanManaged.beanManaged_biy1g2_HomeImpl_
    813_WLStub.create(Unknown Source)
    [java] at examples.ejb20.basic.beanManaged.Client.createAccount(Client.
    java:157)
    [java] at examples.ejb20.basic.beanManaged.Client.example(Client.java:8
    6)
    [java] at examples.ejb20.basic.beanManaged.Client.main(Client.java:57)
    [java] Caused by: javax.ejb.EJBException: nested exception is: javax.naming
    .NameNotFoundException: While trying to look up comp/env/jdbc/demoPool in /app/e
    jb/ejb20_basic_beanManaged.jar#beanManaged.; remaining name 'comp/env/jdbc/demoP
    ool'
    [java] at examples.ejb20.basic.beanManaged.AccountBean.getConnection(Ac
    countBean.java:396)
    [java] at examples.ejb20.basic.beanManaged.AccountBean.ejbCreate(Accoun
    tBean.java:177)
    [java] at examples.ejb20.basic.beanManaged.beanManaged_biy1g2_Impl.ejbC
    reate(beanManaged_biy1g2_Impl.java:195)
    [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces
    sorImpl.java:39)
    [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet
    hodAccessorImpl.java:25)
    [java] at java.lang.reflect.Method.invoke(Method.java:324)
    [java] at weblogic.ejb20.manager.DBManager.create(DBManager.java:1180)
    [java] at weblogic.ejb20.manager.DBManager.remoteCreate(DBManager.java:
    1129)
    [java] at weblogic.ejb20.internal.EntityEJBHome.create(EntityEJBHome.ja
    va:246)
    [java] at examples.ejb20.basic.beanManaged.beanManaged_biy1g2_HomeImpl.
    create(beanManaged_biy1g2_HomeImpl.java:76)
    [java] at examples.ejb20.basic.beanManaged.beanManaged_biy1g2_HomeImpl_
    WLSkel.invoke(Unknown Source)
    [java] at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.ja
    va:477)
    [java] at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwar
    eServerRef.java:108)
    [java] at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.jav
    a:420)
    [java] at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Auth
    enticatedSubject.java:363)
    [java] at weblogic.security.service.SecurityManager.runAs(SecurityManag
    er.java:144)
    [java] at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServe
    rRef.java:415)
    [java] at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecut
    eRequest.java:30)
    [java] at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
    [java] at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
    [java] Exception in thread "main"
    BUILD FAILED
    attached are modified DD:
    <?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>
    <enterprise-beans>
    <entity>
    <ejb-name>beanManaged</ejb-name>
    <home>examples.ejb20.basic.beanManaged.AccountHome</home>
    <remote>examples.ejb20.basic.beanManaged.Account</remote>
    <ejb-class>examples.ejb20.basic.beanManaged.AccountBean</ejb-class>
    <persistence-type>Bean</persistence-type>
    <prim-key-class>java.lang.String</prim-key-class>
    <reentrant>False</reentrant>
    <resource-ref>
    <res-ref-name>jdbc/oraclePool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    </entity>
    </enterprise-beans>
    <assembly-descriptor>
    <container-transaction>
    <method>
    <ejb-name>beanManaged</ejb-name>
    <method-name>*</method-name>
    </method>
    <trans-attribute>Required</trans-attribute>
    </container-transaction>
    </assembly-descriptor>
    <ejb-client-jar>ejb20_basic_beanManaged_client.jar</ejb-client-jar>
    </ejb-jar>
    and
    <?xml version="1.0"?>
    <!DOCTYPE weblogic-ejb-jar PUBLIC
    '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN'
    'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'>
    <weblogic-ejb-jar>
    <weblogic-enterprise-bean>
    <ejb-name>beanManaged</ejb-name>
    <reference-descriptor>
    <resource-description>
    <res-ref-name>jdbc/oraclePool</res-ref-name>
    <jndi-name>examples-dataSource-oracleXAPool</jndi-name>
    </resource-description>
    </reference-descriptor>
    <jndi-name>ejb20-beanManaged-AccountHome</jndi-name>
    </weblogic-enterprise-bean>
    </weblogic-ejb-jar>
    ----------------------------------------------------

    There must be a reference to demoPool lurking around somewhere, I normally do a search inside all the files in the project to solve things like this.
    Also clean up all temporary files and deployments before trying a redeploy.
    If this does not work you can always try configuring the demoPool to use your oracle database, ugly, I know but it may help if your in a hurry to get your code working.

  • Using an EJB as a source for a Model

    Hi,
    Before starting with this post content it might be helpful to give you the desired output of what I am trying to do. Basically I need to have an HTML table that is populated from an EJB.
    The current proposed solution is as follows: the Model that is associated with a TiledView will be used as client for the EJB. The Model will make use of the methods in the EJB to get different java.util.Collection objects for different Helper classes based on the find criteria.
    For example, if the EJB represent a book and there is a home method to retrieve a list of books based of the book category. In this case the Model will act as a client of the EJB, retrieve the list of books and use the different methods in the Model, such as insert and retrieve, to get the list of books and to add a book up on request.
    I know that my post might not be clear. But as I said, all that is needed is to have a TiledView that displays books information, which are retrieved from an EJB, and allow a user to select a book to display its information.
    My suggested solution could be completely wrong, not visible and reflect a bad design. Please if any one went through such a situation give me a hint.
    Regards,
    Basil Mahdi

    Basil,
    This is some material I snipped from an internal Sun forum I posted to regarding a simple EJB Jato integration example.
    I hate to give just any EJB JATO example because frankly there are so many different use cases with EJBs that no one example will match up against your needs. You can use an EJB
    - in a Custom Model Operation you can encapsulate an EJB Method invocation
    - in a Custom Command you can encapsulate any arbitrary code include calling an EJB
    - as the backingstore for a CustomModel
    - use a BeanAdapterModel to adapt to the value/transfer beans which are uses as parameters or return values of EJB methods
    - use an ObjectAdapterModel to adapt an EJB directly by assigning the EJB reference in setObject() in the constructor of the OAM
    As you can see, an EJB is just another business object API...its just that you acquire the reference with a few lines of ugly JDNI and Home interface APIs.
    Nevertheless, here is some guidance. I would like to reinforce that there is no direct solution for adapting an EJB from BAM; EJBs are not JavaBeans. What is a solution is to have the parameters or return values of your EJBs use value/transfer object patterns in the form of JavaBeans. The BAM may be used to adapt to these parameters or return value of the EJB.
    In short, when using BAM in a tileview to work with an EJB, there is little difference than using BAM at any other time, you the developer, must manage/code the placement of the EJB parameters directly into the BAM or in a scoped attribute to be used by the BAM.
    In another example, you may have a SLSB which models an employee called EmployeeSupport. You may have a transfer object (JavaBean) of type EmployeeRecord. You may have operations on the EJB including:
    public EmployeeRecord findEmployee(String employeeID);
    public EmployeeRecord[] findEmployees(String location);
    public void updateEmployee(EmployeeRecord);
    One could create a BAM in the studio called EmployeeModel
    You would set the JavaBean class to EmployeeRecord
    You would run the Design Action to bootstrap the properties of EmployeeRecord as fields on the model
    Now you have a model which is ready to adapt to EmployeeRecord bean.
    Feel free to add material to the EmployeeModel to make a richer API; for instance you could encapsulate some EJB'ish code in their to act as a service locator for a EmployeeSupprt SLSB.
    protected static EmployeeSupport support;
    static {
    javax.naming.Context context = new javax.naming.InitialContext();
    Object objref = context.lookup("ejb/EmployeeSupport");
    EmployeeSupportHome home = (EmployeeSupportHome)
    javax.rmi.PortableRemoteObject.narrow(objref,EmployeeSupportHome .class);
    support = home.create();
    public static EmployeeSupport getEmployeeSupport() {
    return support;
    If you really wanted to hide the EJB'ishness of the EmployeeSupport you could even wrap the behavior and handle exceptions, etc.
    public static EmployeeRecord findEmployee(String employeeID) {
    return getEmployeeSupport().findEmployee(employeeID);
    public static EmployeeRecord[] findEmployees(String location) {
    return getEmployeeSupport().findEmployees(location);
    public static void updateEmployee(EmployeeRecord record) {
    return getEmployeeSupport().updateEmployee(record);
    You could even help the view developer latch EJB transfer objects into the model for adaption; saving them from the effort
    public void adaptEmployee(String employeeID) {
    setBean(findEmployee(employeeID));
    public void adaptLocation(String location) {
    setBean(findEmployees(location));
    public void save() {
    updateEmployee((EmployeeRecord)getBean());
    Create a search ViewBean, place a text field on it for an EmployeeID and button labeled Find. Leave the EmployeeID model binding default (to use a DefaultModel memory model). Open the handle request event method on the viewbean for the Find button.
    public void handleFindRequest....{
    EmployeeModel model = .....;
    model.adaptEmployee(getEmployeeIDChild().getValue());
    // display Edit page which has fields for editing the employee record
    Create an edit ViewBean, with editable fields bound to the EmployeeModel; add an button labeled update
    public void handleUdpateRequest....{
    EmployeeModel model = .....;
    model.save();
    // do whatever is next ....
    Notice that the we are jumping across request boundaries in this example. Using just default model reference configurations, the EmployeeModel will be created brand new during the Update request and there will be no bean currently adapted. Most likely, you would want to have the model (and hence its adapted bean) stored in HttpSession across at least these related requests. In this case the model reference used by the search ViewBean would have "store in session" true. and the model reference in the edit ViewBean would have "look in session" true.
    What we recommend is that someone who understands the business tier design take the responsibility to create a set of "business delegates" as JATO models. An advanced technique would be to encapsulate these models in a component library JAR which multiple web applications can reuse. As you can imagine, there are so many ways to do the same thing. You could just as easily make a CustomModel or SimpleCustomModel to adapt to your EJB. You can also, if your EJB uses primitives or JavaBeans (or graphs of JavaBeans) for all parameters, use the ObjectAdapterModel to directly connect to an EJB.

  • Difference between narrow() method usage and simple class cast for EJB

    Hi,
    I have a very simple question:
    what is the difference between PortableRemoteObject.narrow(fromObj,
    toClass) method usage and simple class cast for EJB.
    For example,
    1)
    EJBObject ejbObj;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)PortableRemoteObject.narrow(ejbObj,ABean.class);
    OR
    2)
    EJBObject bean;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)ejbObj;
    Which one is better?
    P.S. I'm working with WL 6.1 sp2
    Any help would be appreciated.
    Thanks in advance,
    Orly

    [email protected] (Orly) writes:
    Hi,
    I have a very simple question:
    what is the difference between PortableRemoteObject.narrow(fromObj,
    toClass) method usage and simple class cast for EJB.
    For example,
    1)
    EJBObject ejbObj;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)PortableRemoteObject.narrow(ejbObj,ABean.class);
    OR
    2)
    EJBObject bean;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)ejbObj;
    Which one is better?(1) is mandated by the spec. It is required because CORBA systems may
    not have sufficient type information available to do a simple case.
    P.S. I'm working with WL 6.1 sp2 You should always use PRO.narrow()
    andy

  • Getting started with EJB

    I am trying to run my first EJB program without having to use JBoss or Sun's app server. I want to write a program and understand various jar files, and be able to deploy it in app server of my choice. I looked at example in Java EE tutorial but development and deployment is very specific to Net Beans and Sun's App Server. I am just trying to understand the concept. I understand the code and basic Annotations but not really understanding various .xml files that are required.
    I downloaded the tutorial but it has myriad number of .xml files, I just want to know what's standard and their use, so that It could be used in various app servers.
    I am also trying to understand example "coverter" that comes in Java EE tutorial. My question is how does Client looks up the remote client with just the help of @EJB.

    You might want to take a look at some simple "hello, world" EJB 3.0 examples we have here :
    https://glassfish.dev.java.net/javaee5/ejb/EJB30.html
    They just use ant to package up the applications. There are no deployment descriptors needed.
    A client application that wants to use @EJB is coded as an Application Client component. It runs
    within an application client container and it's the container that injects the Remote EJB reference
    at runtime. You can find more information on this in our EJB FAQ :
    https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html

  • Problem while generating stub and skeleton in ejb

    Hi All,
    I am learning Ejb,i developed a simple hello world application .And i am trying to generate stub and skeleton for that using weblogic.ejbc.I am getting the following error
    C:\nkmb\ejb\HelloEjb>java weblogic.ejbc slb.jar
    <Jun 22, 2006 9:55:35 AM EDT> <Warning> <EJB> <BEA-010212> <The EJB 'HelloBean(J
    ar: slb.jar)' contains at least one method without an explicit transaction attri
    bute setting. The default transaction attribute of Supports will be used for the
    following methods: remote[hello()] >
    C:\nkmb\ejb\HelloEjb\ejbcgen\examples\HelloBean_gbyfgg_Impl.java:11: cannot a
    ccess java.io.Serializable
    bad class file: C:\Program Files\Java\jre1.5.0_06\lib\rt.jar(java/io/Serializabl
    e.class)
    class file has wrong version 49.0, should be 48.0
    Please remove or make sure it appears in the correct subdirectory of the classpa
    th.
    public final class HelloBean_gbyfgg_Impl
    ^
    1 error
    Exec failed .. exiting
    can anybody help me to getting out of this problem.
    thanks inadvance,
    nkmb

    Try the following forum (about EJB technology)
    http://forum.java.sun.com/forum.jspa?forumID=13

Maybe you are looking for

  • Dropping a table in WEBDB2.0

    Hi. Could anybody kindly tell me how to drop a table owned by myself? I only see how to build, but couldn't find how to drop a table... Thank you very much!! Hester

  • Multi monitor hardware options?

    Hi, I'm looking for new hardware for a 6 monitor setup. Currently I have 4 monitors, I have manage to get triple screen running with 2x nvidia gt240 on nvidia drivers. Three monitors across 2 cards is the maximum nvidia allows on a consumer card. Wha

  • Browser checking issues

    Hi guys! I am in desperate need for some help here. My browsers do not display the pictures. I only get the text from the alt attribute. Also the p tag settings from my CSS do not display either. Could anyone help me please?

  • Exported JPEGs from LR2.7 are too orange

    I am using LR 2.7 and a color calibrated EIZO Color Edge 222W monitor.  When I export images as JPEGs and view the images using Windows Picture and Fax viewer the images ae significantly color shifted to the orange.  It doesn't matter which color spa

  • FTP thru ABAP program

    Hello ABAP Gurus, Kindly attached an example program for FTP process in ABAP... i have this project wherein i need to gather data from SAP and transfer it to an another server box for another applicaiton.... Thank you in advance.