OutOfMemoryError in UIX/BC4J Application

Hi there,
in have an application that runs fine in JDevelopers embedded OC4J and on IAS running on Linux.
When deployed to an IAS running in HP-UX it simply seems not to start, but if found in the application.log, that an OutOfMemoryError occurred.
What possible issues for HP-UX are known, that could cause this?
How can I track down the point, at which the error occurs exactly?
Thanks,
Sven Luedtke

Sven -- are there other applications running / deployed to the OC4J instance -- these may be contributing to consumption of a bit more memory. Offhand I don't have a figure, but the OC4J in 9iAS has a few additional class libraries installed as system libs, so it likely uses more memory than the OC4J standalone or JDev embedded installs.
What you can try doing is bumping up the heapsize of the OC4J instance you are using. This can be done using OEM and setting the Java Properties field of the instance to contain
-Xmx256m ....
where 256m indicates the the JVM has a max heap space allocation of 256m.
cheers
-steve-

Similar Messages

  • Are JDev9i UIX and BC4J application server dependent?

    Are UIX and BC4J application server dependent?
    If I use JDeveloper9i to build an application using UIX XML + BC4J + Java, then can this be deployed on IBM Websphere, Web Logic, Oracle 9iAS, etc...?

    BC4J and UIX are not tied to any application server. They are "just" a collection of jar files that you can deploy to any application server.
    Check out the how-to section to see the doc about deploying BC4J to other application servers at:
    http://otn.oracle.com/products/jdev/howtos/content.html
    (more info in the online help).
    Also check out otn's home page later today for a daily feature about BC4J openness.

  • Uix BC4J: create a link download to download my resultsets

    Greetings,
    The case:
    - i've created my flows using the amazing uix bc4j technology;
    - end users can manipulate their data (view and update)
    - Now i'd like to create a link which will point over the query result and download the data with csv or xls format.
    Could anyone help me on that issue ? 've checked in online doc, did not find a valuable info.
    Thks for your help
    Cheers
    lb

    Hm - good point, Riley. Hadn't tried Go to URL, though I realise now this is simply because I forgot to ignore the dire warnings about "not a FrameMaker file" :-}
    However, now I have made the experiment:
    * opening the .pdf directly in Acrobat and clicking on the link opens the .zip application immediately - still no "download/open" option
    * opening the .pdf through a browser puzzlingly netts me "The file ///C:/tempo/mup55lin.tgz cannot be found. Please check the location and try again." Needless to say, the file in question is right there where it should be ...

  • UIX BC4J Java

    How could I transfer the information from UIX site in my Java class and work it on.
    My Scenario:
    Each employee works in a departmebt.
    Now I want to change the department of a employee.
    I show all departments,that I have and I select the current one,
    I would like to select another department and display it by my employee.
    I call method of my class TestSel in UIX in handlers::
    <event name="find" >
    <bc4j:findRootAppModule name="ViewAppModule" >
    <bc4j:findViewObject name="View" >
    <ctrl:method class="bo.TestSel" method="doSel"/>
    </bc4j:findViewObject>
    </bc4j:findRootAppModule>
    </event>
    package bo;
    import...
    public class TestSel {   
    public static EventResult doSel(BajaContext bc, Page page, PageEvent event){   
    ViewObject res = (ViewObject)bc.getProperty("http://xmlns.oracle.com/uix/bc4j", "viewObject");
    Row cur=res.getCurrentRow();
    //Not the selected position, but the last of the site (in range)
    System.out.println("cur"+cur.getAttribute("Id1").toString()) ;
    System.out.println("cur"+cur.getAttribute("FmlyNam").toString()) ;
    if (res.getEstimatedRowCount() != 0)
    RowSetIterator secondRSI = res.createRowSetIterator("secondRSI");
    if (secondRSI.hasNext())
    Row firstRow = secondRSI.first(); //the first row
    System.out.println(firstRow.getAttribute("Id1").toString()) ;
    System.out.println(firstRow.getAttribute("FmlyNam").toString()) ;
    secondRSI.closeRowSetIterator();
    How could I get selected data record here?
    How could I change a value of attributes and apply it in UIX ?
    Help me please!!!
    Inna.

    Would it be easier to use a custom method on the bc4j Application module?
    Take this scenario...
    1. User opens UIX XML web page which opens a bc4j App Module..it has a VO based on all employees.
    2. User presses the add button and a new employee is created (using the bc4j App Module).
    (Notice: no commit yet!)
    3. User presses the submit button...fires event REVIEW_SALARY.
    4. This event is 'handled' in the event section of the UML XML...it calls:-
    public static EventResult handleREVIEW_SALARYEvent (BajaContext context, Page page, PageEvent event)...
    5. I now want to call a java class I wrote that computes an employees new salary and updates the employee record with this new salary. This update will fail unless it is part of the same transaction as the one used by the bc4j App Module (that inserted the new employee).
    How best to proceed from here?
    How about having a method on the bc4j App Mod's VO called 'reviewSalary'? Calling this would use the same transaction? I could then call my java class from within the VO's method? However do I still have the same problem in that my java class expects to be passed the connection object?
    The approach you suggested previously seems a touch dangerous....in that these are not 'publically exposed'...and a new release of JDev may break my code.
    Thanks,
    Paul.

  • Error running uix jsp application

    Hi All
    I have created a bc4j/UIX JSP application. When i try to run the main.jsp file on the local host the application doesn't launch. I see the following message
    in the OC4J window
    Please help
    Regards
    Preet y Agarwal
    [Starting OC4J using the following ports: HTTP=8988, RMI=23891, JMS=9227.]
    C:\oracle\ora91\jdk\bin\javaw.exe -ojvm -classpath C:\oracle\ora91\j2ee\home\oc4j.jar -Dhttp.proxyHost=proxy.monash.edu.au -Dhttp.proxyPort=8080 com.evermind.server.OC4JServer -config C:\oracle\ora91\jdev\system\oc4j-config\server.xml
    [waiting for the server to complete its initialization...]
    Auto-unpacking C:\oracle\ora91\jdev\system\oc4j-config\applications\bc4j.ear... done.
    Auto-unpacking C:\oracle\ora91\jdev\system\oc4j-config\applications\bc4j\webapp.war... done.
    Auto-unpacking C:\oracle\ora91\jdev\system\oc4j-config\applications\bc4j\cabo.war... done.
    Auto-deploying bc4j (New server version detected)...
    Auto-deploying file:/C:/oracle/ora91/jdev/system/oc4j-config/default-web-app/ (New server version detected)...
    Auto-deploying file:/C:/oracle/ora91/jdev/system/oc4j-config/applications/bc4j/cabo/ (New server version detected)...
    Auto-deploying file:/C:/oracle/ora91/jdev/system/oc4j-config/applications/bc4j/webapp/ (New server version detected)...
    Oracle9iAS (9.0.2.0.0) Containers for J2EE initialized
    ApplicationServer: appName = bc4j
    ApplicationServer: appName = current-workspace-app
    Process exited.
    C:\oracle\ora91\jdk\bin\javaw.exe -ojvm -classpath C:\oracle\ora91\j2ee\home\oc4j.jar -Dhttp.proxyHost=proxy.monash.edu.au -Dhttp.proxyPort=8080 com.evermind.server.OC4JServer -config C:\oracle\ora91\jdev\system\oc4j-config\server.xml
    [Starting OC4J using the following ports: HTTP=8988, RMI=23891, JMS=9227.]
    [waiting for the server to complete its initialization...]
    Oracle9iAS (9.0.2.0.0) Containers for J2EE initialized
    Process exited.
    C:\oracle\ora91\jdk\bin\javaw.exe -ojvm -classpath C:\oracle\ora91\j2ee\home\oc4j.jar -Dhttp.proxyHost=proxy.monash.edu.au -Dhttp.proxyPort=8080 com.evermind.server.OC4JServer -config C:\oracle\ora91\jdev\system\oc4j-config\server.xml
    [Starting OC4J using the following ports: HTTP=8988, RMI=23891, JMS=9227.]
    [waiting for the server to complete its initialization...]
    Oracle9iAS (9.0.2.0.0) Containers for J2EE initialized
    Process exited.
    C:\oracle\ora91\jdk\bin\javaw.exe -ojvm -classpath C:\oracle\ora91\j2ee\home\oc4j.jar -Dhttp.proxyHost=proxy.monash.edu.au -Dhttp.proxyPort=8080 com.evermind.server.OC4JServer -config C:\oracle\ora91\jdev\system\oc4j-config\server.xml
    [Starting OC4J using the following ports: HTTP=8988, RMI=23891, JMS=9227.]
    [waiting for the server to complete its initialization...]
    Oracle9iAS (9.0.2.0.0) Containers for J2EE initialized
    ApplicationServer: appName = bc4j
    ApplicationServer: appName = current-workspace-app
    Process exited.
    C:\oracle\ora91\jdk\bin\javaw.exe -ojvm -classpath C:\oracle\ora91\j2ee\home\oc4j.jar -Dhttp.proxyHost=proxy.monash.edu.au -Dhttp.proxyPort=8080 com.evermind.server.OC4JServer -config C:\oracle\ora91\jdev\system\oc4j-config\server.xml
    [Starting OC4J using the following ports: HTTP=8988, RMI=23891, JMS=9227.]
    [waiting for the server to complete its initialization...]
    Oracle9iAS (9.0.2.0.0) Containers for J2EE initialized
    Process exited.
    C:\oracle\ora91\jdk\bin\javaw.exe -ojvm -classpath C:\oracle\ora91\j2ee\home\oc4j.jar -Dhttp.proxyHost=proxy.monash.edu.au -Dhttp.proxyPort=8080 com.evermind.server.OC4JServer -config C:\oracle\ora91\jdev\system\oc4j-config\server.xml
    [Starting OC4J using the following ports: HTTP=8988, RMI=23891, JMS=9227.]
    [waiting for the server to complete its initialization...]
    Oracle9iAS (9.0.2.0.0) Containers for J2EE initialized

    It may be caused by that your browser lauched before the OC4J server initialized.
    You can wait a moment till the OC4J server initialized then lauch your browser again.
    James Li

  • 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?

  • UIX-BC4J Form Example

    Could anybody post an example of a simple UIX-BC4J Form with Insert, Update and Delete event handlers but NOT in automatic mode?
    TIA.
    Francisco

    I still consider myself a beginner in UIX/BC4J, but I presented a paper at June's ODTUG conference that included an example. Try www.odtug.com, look at the 2002 handouts, under JDeveloper. You should be able to download the Powerpoint. If you're interested, e-mail me and I'll send you the actual paper (as a Word document). Or just buy the conference proceedings from ODTUG. They papers should also be up soon in the "Members Only" section of the ODTUG site.
    -- jim

  • BC4J Application Module Pooling for JClient App

    Helo,
    i wonder why all documentation about bc4j application module pooling available is for Web app ? (jsp) . I'm creating swing JClient app and i need some doc about how the application module pooling works in this kind of application.
    anybody know where can i get those docs ?
    Need help and Thank you,
    Ricky H.P.

    Connection pooling can be achieved when a JVM instance manages the pool, in 3tiers the Java App. Server has that task.
    If you are 2tiers that means that you are communicating with the database through JDBC.
    When a user launches your JClient app in fact he lauches his own JVM instance so I don't how he could share a pool with other users.
    In your case you have at most 2 open transactions per user.
    You can achieve that by sharing a same binding context with n forms composed of m panels.
    Let's say:
    1 main form
    connection 1: forms a,b,c
    connection 2: forms x,y,z
    In your main form your open your 2 connections and share them.
    You can achieve that by:
    1) in our main form, initialize 2 binding containers
    Example of one:
    DCBindingContainer bc1 = this.createBindingContainer("package name","model name");
    private DCBindingContainer createBindingContainer(String packageName, String panelModelName)
    StringBuffer sb = new StringBuffer(packageName);
    sb.append(ViewConstants.STRING_DOT);
    sb.append(panelModelName);
    DCBindingContainerDef bcdef = DCBindingContainerDef.findDefObject(sb.toString()); //NOTE THE NAME.
    if (bcdef == null)
    throw new JboException("System error, "+getClass().getName()+".createBindingContainer, DCBindingContainerDef: "+sb.toString()+" not found");
    DCBindingContainer bc = bcdef.createBindingContainer(panelBinding.getBindingContext());
    bc.setName(panelModelName);
    panelBinding.getBindingContext().put(panelModelName, bc);
    return bc;
    2) Before that the jbInit method gets called in the called form, set the binding context:
    form1 = new Form1(...);
    form1.setBindingContainer(bc1) ;
    Example of methods in form 1 and form 2:
    public void setBindingContainer(DCBindingContainer ctr)
    this.panelBinding = (JUPanelBinding)ctr;
    setBindingContext(ctr.getBindingContext());
    public void setBindingContext(BindingContext bindCtx)
    if (panelBinding.getPanel() == null)
    panelBinding = panelBinding.setup(bindCtx, this);
    registerProjectGlobalVariables(bindCtx);
    panelBinding.refreshControl();
    try
    System.out.println("Form setBindingContext calling jbInit");
    jbInit();
    panelBinding.refreshControl();
    // FL added
    isBindingContextSet = true;
    System.out.println("Form isBindingContextSet true");
    catch(Exception ex)
    System.out.println("Form setBindingContext exception caught");
    panelBinding.reportException(ex);
    Regards
    Fred

  • Multiple Developers UIX/BC4J

    Hi,
    Could you describe the best way for multiple developers to work a UIX/BC4J project?
    For the actual work we have tried slicing the project horizontally, where someone did the modelling and others would do the UIX pages but, because of time and other constraints we will probably divide the project up vertically where one person will work a set of entities, vo's etc. all the way up to the UIX pages.
    My question is more along the development infrastructure.
    Given this mix:
    - 4 to 6 member team
    - a single shared database/instance for development
    - access to a shared network drive (kinda slow)
    - access to a CVS repository
    Should we start by using a repository approach immediately?
    How do you guys do it?
    thanks

    I don't have any good handle for what the best way to set up such a project is. Do any other customers have some experience they can share here?
    -brian
    UIX Team

  • Does portal porlet support BC4J application ?

    Does portal porlet support BC4J application ?
    please help ...

    The new version of Portal (6.0 I believe) will run on weblogic or websphere as well as iAS.
    Kent

  • BUG: Can't create BC4J Application Module Configurations

    Hello,
    I'm using JDev 9.0.3.1 with Win2K and WinXP. There seems to be a bug in the BC4J Application Module Configuration Manager:
    It seems to be impossible to create a new BC4J Application Module Configuration with the Configuration Manager of a BC4J Application Module. I can copy an existing AM configuration, but I can not rename it. Clicking on the OK Button in the Configuration Manager simply does nothing.
    A work around seems to be to open bc4j.xcfg in any text editor, copy an AppModuleConfig element, save xcfg, in JDev remove the project form the workspace, readd it to the workspace (some caching issue of jdev?). Then the new AM config is there and can be modified.
    In JDev 9.0.3 the Config Manager seems to work fine.
    Regards
    Stefan

    The bug is mentioned in metalink bug 2849146.

  • Bc4j application services

    Hi to all;
    Let's suppose this;
    webapp1 --> connection user db1
    webapp2 --> connection user db2
    where webapp1 (db1) is for development and webapp2 (db2) is real, for users;
    When i deployed this 2 applications at the same instance of server ( tomcat for now ), application server module pool is getting lost, i guess that is because of the service has the same signature ( webapp1.model.service.myService ).
    I'm facing that bc4j's application module pool is always delivering the same instance of application module, no meter what application is currently in the browser.
    If my tests are correct , it is aways delivering the same inital instance that was primary executed by the pool.
    There are some way to avoid this ? and have the two different instances one for each application , running at the same server ?
    Very Thanks
    Marcos Ortega
    Brazil

    here are ConnectionDefinition node from bc4j.cfg
    <ConnectionDefinition name="Dbccac">
    <ENTRY name="JDBC_PORT" value="1521"/>
    <ENTRY name="ConnectionType" value="JDBC"/>
    <ENTRY name="HOSTNAME" value="192.168.0.102"/>
    <ENTRY name="user" value="ccac"/>
    <ENTRY name="ConnectionName" value="Dbccac"/>
    <ENTRY name="SID" value="xe"/>
    <ENTRY name="JdbcDriver" value="oracle.jdbc.driver.OracleDriver"/>
    <ENTRY name="password">{904}0585F4CD119C5872705971F4F9AA4438E1</ENTRY>
    <ENTRY name="ORACLE_JDBC_TYPE" value="thin"/>
    <ENTRY name="DeployPassword" value="true"/>
    </ConnectionDefinition>
    At Oracle Business components configuration i have jdbc url connection type;
    I really do not think that it is an connection problem, because i do not set any external jdbc resource for it, i really think that at some point application pool, when he is queried about an instance of service, he just do not consider the application context where it's service is deployed.
    I suppose that for improving the pool avaliability
    Bc4j Application pool do not open a new "ccac.model.service.ccacServiceLocal" pool for this service class, because both application are querying the same class name.
    Even if one of the two application is some steps forwards and "ccac.model.service.ccacServiceLocal" is some versions newer.
    Perhaps it is an expected behavior, as the pool is cross web application context.
    My main question is,
    where are the application modules pool engine locate ? and how it delivers services instances to applications.
    Thank you Steve ;

  • Oracle Strategy for the UIX & BC4J in the new JDeveloper version

    What is Oracle Strategy for the UIX & BC4J in the new JDeveloper version:
    - Like DataBinding
    - BC4J Integration
    - UIX controller
    - Internationalization
    - Supporting for Palm,phone and pager.

    Hi,
    Are these questions all BC4J specific?
    General databinding info is discussed here:
    What's the developement direction of UIX?
    For BC4J/UIX integration, in 9.0.5 we will continue to support our existing api's, but you can also use uix as the view and bc4j as the model in adf, which is described here:
    http://otn.oracle.com/products/jdev/htdocs/905/sod_otn.html#adf
    Aside from bug fixes, I don't think there are major changes in the controller/internationization. Did you have specific questions about the controller and internationalization?
    We are planning to support Palm web browser 2.0, but due to the timing of the release of a platform that supports it and our own schedules, I don't think it will be officially supported in the 9.0.5 release. We won't have phone or pager support in 9.0.5.

  • Deploying BC4J application: the right choice

    We have developed three applications (A, B, C):
    - A is a BC4J application
    - B is a JSP application accessing A
    - C is a Java GUI client accessing A
    We want A and B to run in the same web server, so we would have chosen LOCAL deployment for application A.
    The problem is with application C that will run remotely on individual client machines.
    The questions are:
    1. Can application C access application A deployed on the server using BC4J LOCAL deployment?
    2. If not (as I think), what kind of deployment (EJB/Corba) and platform (Application Server/Oracle Database Server) should be chosen for my scenario to give better performance?
    Any help would be very appreciated.
    Thanks in advance.
    Michele
    null

    Hi Michele,
    the official solution for your problem would be:
    Deploy A as EJB session bean or Java CORBA object to an appropriate server.
    Let B and C connect to the common business logic tier.
    But:
    Currently (JDeveloper 3.2.3) an EJB deployment of BC4J apps to OC4J isn't supported, so: If you want to use Oracle9i AS, you have to deploy to the EJB/CORBA Server implemented in the Oracle Database. We tried to do this and had lots and lots of problems, mainly performance problems. If you ask me: Don't do that!
    We tested the deployment to Borland Visibroker and got it work after a while, and your little example worked quite good. So probably you could ask for experiences with other App Servers.
    If you can wait, try to test EJB Session Bean Deployment to OC4J. I saw some demos on the Oracle OpenWorld in Berlin/Germany and it seems to have a quite better performance and stability. But: This will be supported by JDeveloper9i, what should be available as beta release end of this month, and production at the end of this year. So probably you can't wait that long.
    Sorry, but that's the way it is...
    To Raghu/JDev Team: Any better advice?
    Regards
    Stefan
    null

  • UIX (BC4J)

    I try to indicate in a UIX (BC4J) site a selected line from a table. The key of this line is handed over thereby by the previous site. (this succeeds to me!) The details are to be indicated over a "ViewLink". Unfortunately the details are not correctly determined. In each case the first Row from the table is indicated. Can someone help me please?
    <?xml version="1.0" encoding="windows-1252" ?>
    <page xmlns="http://xmlns.oracle.com/uix/controller"
    xmlns:ctrl="http://xmlns.oracle.com/uix/controller"
    xmlns:ui="http://xmlns.oracle.com/uix/ui"
    xmlns:bc4j="http://xmlns.oracle.com/uix/bc4j" >
    <bc4j:registryDef>
    <bc4j:rootAppModuleDef name="AppointmentAppointmentReasonViewLinkAppModule"
    defFullName="com.hannover_re.vistra.bo.AppModule"
    configName="AppModuleLocal"
    releaseMode="stateful" >
    <bc4j:viewObjectDef name="AppointmentView" >
    <bc4j:rowDef name="UpdateAppointmentView" autoCreate="false" >
    <bc4j:propertyKey name="key" >
    </bc4j:propertyKey>
    </bc4j:rowDef>
    </bc4j:viewObjectDef>
    <bc4j:viewObjectDef name="AppointmentReasonViewLnk" rangeSize="3">
    </bc4j:viewObjectDef>
    </bc4j:rootAppModuleDef>
    </bc4j:registryDef>
    <content>
    <try xmlns="http://xmlns.oracle.com/uix/ui"
    xmlns:data="http://xmlns.oracle.com/uix/ui" >
    <catch>
    <header messageType="error">
    <boundAttribute name="text">
    <contextProperty select="ui:currentThrowable"/>
    </boundAttribute>
    </header>
    </catch>
    <contents>
    <pageLayout xmlns="http://xmlns.oracle.com/uix/ui"
    xmlns:data="http://xmlns.oracle.com/uix/ui"
    title="AppointmentAppointmentReasonViewLink View" >
    <contents>
    <messageBox automatic="true" />
    <bc4j:rootAppModuleScope name="AppointmentAppointmentReasonViewLinkAppModule" >
    <contents>
    <header text="Results" >
    <contents>
    <form name="viewForm" >
    <contents>
    <bc4j:viewObjectScope name="AppointmentView" >
    <contents>
    <bc4j:rowScope name="UpdateAppointmentView" >
    <contents>
    <tableLayout>
    <contents>
    <bc4j:region automatic="true" >
    <bc4j:attrStamp>
    <bc4j:messageInput readOnly="true" />
    </bc4j:attrStamp>
    </bc4j:region>
    <bc4j:viewObjectScope name="AppointmentReasonViewLnk" >
    <contents>
    <bc4j:table name="viewTable" automatic="true"
    width="80%" alternateText="No rows found">
    <bc4j:columnStamp>
    <bc4j:column>
    <contents>
    <bc4j:input readOnly="true"/>
    </contents>
    </bc4j:column>
    </bc4j:columnStamp>
    </bc4j:table>
    </contents>
    </bc4j:viewObjectScope>
    </contents>
    </tableLayout>
    </contents>
    </bc4j:rowScope>
    </contents>
    </bc4j:viewObjectScope>
    </contents>
    </form>
    </contents>
    </header>
    </contents>
    </bc4j:rootAppModuleScope>
    </contents>
    </pageLayout>
    </contents>
    </try>
    </content>
    </page>

    James is correct. You need to specify usesCurrency="true" in the <bc4j:rowDef> otherwise the current row for the master viewobject is not affected, so the viewlink is not triggered.
    John Fallows
    Oracle Corporation.

Maybe you are looking for

  • Webi query performance in SAP BO 4.0 sp6

    Hello, I'm facing an issue with the webi reports in our BI 4 SP6 environment. The webi reports data fetch time is ridiculously slow, where as when these queries are run on Oracle 10g the results are returned much faster as compared to WebI. The same

  • NAC Agent reporting never shows a failure

    I seem to only get reports for successful agent logins under Device MGMT>Clean Access>Clean Access Agent>Reports.  Am I missing a setting somewhere?  Even though I have had many failures (testing, etc) I never see a failed report.  Any ideas?

  • I cant verify my account. Cant find the mail on my yahoo

    i need help please

  • DHCP scope full, event ID 1020

    Hi, one of our Windows 2008 R2 Domain controllers is returning the following warning message on almost a daily basis: Log Name:      System Source:        Microsoft-Windows-DHCP-Server Date:          19/11/2014 11:32:41 AM Event ID:      1020 Task Ca

  • What should I reasonably be paying to repair an iPhone 5 screen that has shattered?

    Screen shattered on daughter's iPhone 5 after dropping on tile.  Have had quotes of $267 and $195 thus far.   Is this the best I can hope for?  Someone suggested going to the Apple Store and seeing what they might offer me for a trade?  Any suggestio