BC4J Delete

I have a master view and a child view.
I call remove on all rows of the child view and then call remove on the row from the master view.
Everything works fine until now.
When I call commit the BC4J framework will issue the DML Statements to delete the rows in the database.
The problem is that it issues the delete order in the master table first which causes an error due to the dependent rows of the child table.
I have a set of master-child views that works like I said and I also have a set of master-child views that works good (DML on the child and the on the master). I looked at all the xmls of the views, associations, links, etc and found no difference.
Can anyone help me?
PS. I don´t want to use cascade delete.
Thank you
Daniel Vinagre

I believe that you might be able to check the "cascade delete" on the association. As stated in other threads, this will not actually PERFORM a cascade delete as you would expect. It appears to just SUPPORT a cascade delete from the database if it were setup to do one. However, I believe that it might order the delete statements as you want so that it will at least work as you need. I could be wrong, however, it might be worth a try.
Hope this helps.
Erik

Similar Messages

  • BC4J delete row in a different VO

    Hi,
    I have a UIX/BC4J browse form with an "expert SQL" VO which joins several tables together, with one of the tables being the primary or driving table (ie a list of agreements which also displays customer data and personnel data from different tables). I want to have a "delete" button to delete the selected row. I understand that I can't use my custom VO, I have to have another VO based on the base entity of the table I want to delete from. I just don't have the nouse right now to understand how to take the "key" of the selected row in my custom VO and then direct the entity-based VO to delete the selected row. Am I on the right track or should I be writing a Java class to achieve what I want? (I would prefer to have a UIXML solution).
    Thanks,
    Steve

    Hey, I think I am getting the hang of this now. I managed to fix it by adding the entity to my custom VO (it was originally based only on a query) then including the primary key attribute in the VO. The UIX form was then able to delete rows from the VO, no additional coding necessary. Nice!
    Steve

  • BC4J; Deleting Business Components not shown in tree

    How do you get these buggers out of here? I edit the application modules look at the tree there. The link is not in the tree.
    I try to delete the component and it tells me it is in the tree but visually I cannot see it.
    Is there any way to edit the XML to get these invisible links out of here?
    Thanks,
    Linda

    Here's what you do:
    [list=1]
    [*]Expand the node in the navigator for your application module
    This should show you the YourAppmoduleNameImpl.java file.
    [*]Select "Debug" from the right-mouse menu on this java file.
    [list]
    That's it. :-)
    This will start the BC4J tester in debug mode.

  • Bc4j delete operation persistes

    Hi
    I'm using JDeveloper 10g to make an application that uses bc4j. I have table with records from a database table and when i pressed the delete button for the desired record it deletes the record indeed, but when the browser is redirected to the table again and i press the refresh button on the browser, it deletes the next record and keeps on deleting as many records as the some number of refresh button events!!!
    Does someone have a clue?
    thanks in advanced
    Vitor

    Every time you refresh, the event parameter is being passed into the URL. This is executing the method every time you refresh. You have to think of URL access as a method execution with URL arguments as the parameters. If you dont want this to execute, make sure the paramaters that cuase the execution are not being passed in. Use the debugger to step through your application code.

  • JSP, BC4J, Row Tag: what is the best way to delete multiple rows?

    Hi all.
    I have a JSP Edit page with three datasources on it. The tables these VO's represent (A, B and C) have a Parent --> Child (1:1 between A and B) relationship and then another Parent --> Child (1:n between B and C) relationship. So the user retrieves one row for Table A, 1 matching row for table B and then between 0 and 6 matching rows for Table C (there cannot be more than 6 because the user can only add these rows from a finite list).
    In my EditSubmit page, I want to perform a RowTag Update action on Tables A and B and they both work no problem. They can't update any rows from Table C but they can add or delete from the list of 0 - 6 rows (the UI is actually a list of 6 checkboxes that they can turn on or off). I figure that the easiest way to handle this rather than keep a list of original values and compare them is simply to delete all existing rows and then add any that the user checked.
    This is causing a problem. I have added a hidden field to the form that picks up the RowKey for each existing row. I can get these RowKeys in the Submit page but cannot find a way of using them with the Delete Row Tag.
    In the end, the only way I could get it to work was the following code (which I stole from the RowTag.java file in jbohtmlsrc.zip):
    if (stakeMailRowKeys != null) {
    for (int counter = 0; counter < stakeMailRowKeys.length; counter++) {
    Key stakeMailKey = new Key(stakeMailRowKeys[counter], stakeMailingRS.getViewObject().getKeyAttributeDefs());
    stakeMailRows = stakeMailingRS.findByKey(stakeMailKey,1);
    stakeMailingRow = stakeMailRows[0];
    // Tell the row to delete itself from the database
    stakeMailingRow.remove();Is there a simpler way to do this (I figure there probably is)? I have another problem with updating the constrained View Objects but I will leave that out of this thread for now.
    TIA,
    Simon

    I don't know if this will help you, but this is what I do:
    I separate the logic into a delete.jsp page. If you can create a View Object that will represent the rows you want to delete and append a where clause to select only the rows you want to delete. Then loop through the view deleting each row. Lets just say you have department and employee tables. and you want to delete employees within a given department. Create a view object that brings back all employees.
    In your delete.jsp find out the department no. by request.getParameter("dept_id");
    then append this to the where clause of your view Object and execute the query:
    vo.setWhereClause(request.getParameter("dept_id");
    vo.executeQuery;
    now loop through and remove the rows:
    while(vo.next){
    vo.getCurrentRow().remove();
    and commit or post changes accordingly.
    There are many ways of doing this action. The easiest way I have found is to create the ViewObjects based on what actions you want to take on them. Make bc4j work for you.
    regards,
    aaron
    null

  • Cascading Delete in BC4J-UIXml application

    Morning all,
    I have a problem with a UIXml application that I was wondering somebody could help me with. Since I am new to this technology, please excuse the simplistic nature of the question.
    I have a BC4J application working through UIX pages. In this application I have a form that deletes a record from the table. However, I am unable to determine how to perform an automatic cascading delete on the record since it has child records in another table.
    Please advise. I shall update this thread after a successful workaround in order to provide a reference for others who may encounter this problem.
    Thanks in advance for reading this post.
    Adeel

    This was resolved in the entity's association properties.

  • BC4J- using Update/delete queries??

    How do I send a delete/update query using the BC4J without iterating over the viewObject ??? -
    I would like to execute the operation at the database side.
    null

    I'm not sure exactly what you mean by executing the operation at the database side, but I'll explain a bit about how updating a view object works.
    To delete or update rows in a view object, you update the row set, then commit your changes. As you're updating the row set, the entity cache is automatically being updated, and when you do a commit(), the correct database query is generated and executed. So in effect the operation does take place on the database side.
    You could get the JDBC connection and write the update statement directly in JDBC, bypassing the business components, but you lose the transaction handling, locking, and so on that business components are giving you, so that probably isn't a good idea.
    Thanks
    Blaise

  • Delete multiple rows with BC4J

    I can't find anything on multi-delete with ADF.
    Is it supported?
    ViewObjectImpl v = (ViewObjectImpl)am.findViewObject("X");
    ViewCriteria vc = v.getViewCriteria("Y");
    v.applyViewCriteria(vc);
    v.executeQuery();
    v.removeAllSelectedRows(); //Delete all rows selected by vc "Y"
    getDBTransaction().commit();
    Thanks

    Thanks Timo, I had figured that one out, that's how we did it in the first place but its not acceptable for my Use Case.
    The goal for me is to have something that can scale, I don't want to loop through my millions of records and remove them one by one, hence take a hit on performance.
    I assume there is somehow a way to do mass update/deletes with ADF/BC4J?
    Cheers
    JP

  • BC4J: Implementing cascade-delete

    Hi,
    I'm using BC4J (JDev 9.0.3.4) and I'd like my composite associations with cascade delete to realy behave like one would usualy expect... that is, when the master entity is deleted, the details are not only deleted from the database but from the view object and entity caches as well. Is there a way to accomplish that?
    I was thinking about extending EntityImpl and overiding the remove or doDML method to remove the detail entities from the vo and eo caches. Is this the correct approach? Any other options?
    Thanks,
    Leonardo

    If you use the JDev 9.0.3.5 or later, you could
    select "Implement cascade delete" option in the
    Association properties for your composition
    association. This flag enables the framework to
    remove all details for a master when the master is
    deleted.Hi, Thanks for your reply.
    We're using 9.0.3.4 and unfortunately upgrading is not an option for us at this time. What would be the correct way to implement it using 9.0.3.4?
    Thanks,
    Leonardo Bueno

  • BC4J: Problem deleting a row with clob field

    When I try to delete a row that contains a CLOB field.
    When I call the function removeCurrentRow in my View object I get this exception:
    JBO-25014: Another user has changed the row with primary key oracle.jbo.Key
    Could anyone tell me why I can't remove the row? Thanks in advance!
    null

    This looks like a bug in TreeBinding. Please file this as a bug/tar with OracleSupport with your reproducible testcase (or steps to reproduce). Thanks.

  • Error while opening BC4J objects in Jdev 10G

    I downloaded the jdev 10.1.3.3 version , copied the entire JAVA_TOP files to myclasses on my local machine. In the project content property i gave the path to myprojects.
    In the include section i included only oracle\apps\ego since these are the only files i need to modify.
    Now when I right click on one of the EOs in jdev, i get an error message that there are java errors in the underlying EOImpl.java and the wizard will open read only.
    I did not modify any files. These are all oracle shipped files. This happens with a few other objects. I am able to open some of the BC4J objects but some of them give me this error mesage.
    When I build the project , i do not see any errors, I am even able to run a page.
    What is wrong here. is it some missing library or do i need to include additional files/folders .. Please help
    thanks,

    I deleted the class files from myprojects and tried opening the EO but that din't help. I created a new project after deleting all the class files, even now i get the same error.
    I wonder if reinstalling jdev will solve the issue? I have only xml files in the myprojects folder but i keep getting the same message that there exist errors in the .java file under the myprojects folder.
    I'm not sure what's going on. Is there some cache that jdev is looking at.

  • Problem with BC4J and PostrgreSQL 7.2

    I successful configure connection to PostgreSQL DB.
    Then I create simple table on DB and create BC4J appmodule.
    In appmodule properties I change jbo.sql92.JdbcDriverClass = org.postgresql.Driver
    I run test appmodule in BC4J browser. I see my row in table but when I try to put something in table
    JBO-27123: SQL error during call statement preparation. Statement: INSERT INTO CITIES(name,last) VALUES (?,?)
    Callable Statements are not supported at this time.
    Same thing is happening on delete or update ???
    When I put some data into table from connection/sqlworksheet in Jdeveloper everething is ok.
    I use JDeveloper 9.0.2.829

    REPOST

  • Bc4j.xcfg file issues

    Hello,
    Maybe this question is solved, but i can't find it.
    I'm developing a very simple project wich consist in an AppModule that implements a custom
    method that accesses to a view, gets one field of one row in the view and returns it as string. This AppModule is accesed by a Launcher class with uses Configuration class methods (CreateRootApplicationModule and ReleaseRootApplicationModule) to checkout and checkin the AppModule from and to the pool. I'm using Jdeveloper 9.3.0.1035 and all the executions are taking place inside Jdeveloper.
    My first problem begin when i run the Launcher class and it throws a JBO-33001 exception, can't find the bc4j.xcfg file in path xxxx/yyyy/common/bc4j.xcgf. This is very courious because the package in wich the AppModule class where included was xxxx.yyyy.zzzz and in this path jdeveloper has created a common directory, including in it the bc4j.xcfj file, but in runtime, jdeveloper seems to be ignoring the last directory of the package and looks for the bc4j.xcfj file in a wrong path, using xxxx/yyyy/common instead xxxx/yyyy/zzzz/common.
    I've avoided this problem copying the common directory and its content to the path in wich jdeveloper is looking for it (xxxx/yyyy) .
    My second problem appears when i run again the Launcher class and it throws the JBO-33005 exception saying Configuration MyAppModule not found. The only way i found to avoid this problem is very extrange. I've modified the bc4j.xcfg file i copyied into the xxxx/yyyy/common directory changing the AppModuleConfig name attribute of my AppModule. It alwaws appears as "AppModuleLocal", well, i've deleted "Local" leaving it as "AppModule" and save the file. Finally it works, great, but my question is: Why????
    Thanks and greetings everyone
    Carlos

    Yes, you're right, i was getting the appmodule with:
    ApplicationModule am = Configuration.createRootApplicationModule("xxx.yyy.zzz", "AppModule");
    I'm goint to try it again using "AppModuleLocal".
    Thanks
    Carlos Well, i've try it and the problem about modifying the content of the AppModuleConfig name attribute of my AppModule in the bc4j.xcfg file has been solved, but still get the problem about the location of the common directory.
    Jdeveloper keeps on looking for the bc4j.xcfg file in a different path in wich it had created it. I still have to copy the common directory from xxxx/yyyy/zzzz/common to xxxx/yyyy/common to get it working, because if i don't do it, I get:
    oracle.jbo.JboException: JBO-33001: Cannot find the configuration file /xxxx/yyyy/common/bc4j.xcfg in the classpath
    Thanks again
    Carlos

  • HELP!: JBO-33001 bc4j.xcfg not found against oc4j 9.0.3

    I'm using JDev 9.0.2.
    Make BC4J project and BC4J JSP application.
    Then I deployed to remote OC4J server.
    BC4J JSP works on remote OC4J 9.0.2 but fails on remote OC4J 9.0.3
    by JBO-33001. Why??
    Of course, I set up the BC4J runtime on both version of OC4J, so
    I believe the same configuration has done for both OC4J server.
    Does anyone can deploy and execute 9.0.2's BC4J app on OC4J 9.0.3???

    I have found the solution...that worked for me anyway.
    When configuring a stand-alone OC4J 9.0.3 to work with BC4J (using %JDEV_HOME%\BC4J\bin\bc4j2oc4j.bat), JDEV_HOME must be pointing to a JDeveloper 9.0.3 installation.
    Before doing this however, I undid some of my earlier work:
    - undeployed the apps I deployed to the stand-alone OC4J
    - pointed JDEV_HOME to my 9.0.2 installation and ran: %JDEV_HOME%\BC4J\bin\bc4j2oc4j delete
    Now you can properly configure OC4J 9.0.3 by:
    - point JDEV_HOME to a 9.0.3 install (simply unzip it somewhere)
    - run: %JDEV_HOME%\BC4J\bin\bc4j2oc4j install
    After that, deployments of BC4J JSP pages (to my newly reconfigured stand-alone OC4J 9.0.3) ran and connected to my application module just fine, even though I developed and deployed them using JDEV 9.0.2
    I wish there had been a new set of instructions put out for configuring OC4J 9.0.3.

  • RowSetInfo; bc4j; how to get the View Object

    So I'm trying to get/update/insert/delete records in a database that contain an interMedia image in a blob.
    I've figured out that I can't simply set the ImmediateAccess attribute. It doesn't like that...
    So I'm trying to go after the view object, since the interMedia white paper uses a VO row setAttribute to accomplish the write.
    RowSetInfo extends ResultSetInfo which has a method getViewObject(). Cool.
    So I try it... and get an error that getViewObject() has protected access.
    Anyone know what I am doing wrong? Or should I be even taking this approach?!?!?!
    If I go exclusively with the VO layer... how do I preserve the navigationBar functionality? Or do I need to roll my own?
    ( NOTE: This hilights another example of the perception of 'friction' between rowsetinfos and the view objects/entity objects. An approach that makes "sense" to me as a naive novice didn't pan out. And oddly, most of the bc4j examples go against VOs when, if you are an application programmer, you may never see or use the VO methods ( although it looks like we should be)... we're working at the ResultSetInfo layer. )
    Is the the observation of other folk who are building Java Applications/Applets? Or do you all work directly with VOs instead of going through the ResultSetInfo "layer"?

    Here is some sample code that I am currently working on and will post on OTN when complete. The code shows how to access a BC4J Domain based on an Oracle type. Working with interMedia is similar since interMedia utilizes Oracle Object types. Please note that I have not tested this yet against interMedia, but I'm hoping that you may find the general process useful.
    // Copyright (c) 2000 Oracle Corporation
    package ObjectSampleDAC;
    import oracle.dacf.control.swing.*;
    import javax.swing.*;
    import oracle.dacf.dataset.*;
    import oracle.dacf.dataset.connections.*;
    import java.awt.*;
    import oracle.jdeveloper.layout.*;
    import java.awt.event.*;
    import javax.infobus.*;
    import oracle.jbo.domain.DomainInterface;
    import ObjectSampleBC4J.common.TAddress;
    import java.sql.SQLException;
    * A Frame class.
    * <P>
    * @author Scott Tiger
    public class Frame1 extends InfoFrame {
    * Constructs a new instance.
    public Frame1() {
    super();
    try {
    jbInit();
    sessionInfo1.publishSession();
    // call my initialization method
    bfInit();
    catch (Exception e) {
    e.printStackTrace();
    * Initializes the state of this instance.
    private void jbInit() throws Exception {
    /* All of the following code in this method was added by the designer except where noted below
    EmailrowSetInfo1.setName("Email");
    jPanel3.setLayout(gridBagLayout1);
    StatusrowSetInfo1.setName("Status");
    AddressrowSetInfo1.setName("Address");
    PasswordrowSetInfo1.setName("Password");
    UsernamerowSetInfo1.setName("Username");
    LastnamerowSetInfo1.setName("Lastname");
    FirstnamerowSetInfo1.setName("Firstname");
    IdrowSetInfo1.setName("Id");
    rowSetInfo1.setAttributeInfo( new AttributeInfo[] {
    IdrowSetInfo1,
    FirstnamerowSetInfo1,
    LastnamerowSetInfo1,
    UsernamerowSetInfo1,
    PasswordrowSetInfo1,
    AddressrowSetInfo1,
    StatusrowSetInfo1,
    EmailrowSetInfo1} );
    this.setDataItemName("infobus:/oracle/sessionInfo1");
    this.setTitle("Customer Information");
    this.getContentPane().setLayout(borderLayout1);
    this.setSize(new Dimension(536, 473));
    jPanel1.setLayout(borderLayout2);
    sessionInfo1.setAppModuleInfo(new ModuleInfo("ObjectSampleBC4J", "ObjectSampleBC4JModule"));
    sessionInfo1.setConnectionInfo(new LocalConnection("MyJdbcConn"));
    sessionInfo1.setName("sessionInfo1");
    rowSetInfo1.setQueryInfo(new QueryViewInfo(
    "CustomerView",
    rowSetInfo1.setSession(sessionInfo1);
    rowSetInfo1.setName("rowSetInfo1");
    /* The following listener was added using the event tab in the property inspector in design
    mode. The rowsetPopulated method is called when the rowset is queried/requeried.
    rowSetInfo1.addChangeListener(new oracle.dacf.dataset.ChangeAdapter() {
    public void rowsetPopulated(RowSetChangeEvent e) {
    rowSetInfo1_rowsetPopulated(e);
    textFieldControl1.setText("textFieldControl1");
    textFieldControl2.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1/Firstname");
    textFieldControl2.setText("textFieldControl2");
    textFieldControl3.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1/Lastname");
    textFieldControl3.setText("textFieldControl3");
    textFieldControl4.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1/Username");
    textFieldControl4.setText("textFieldControl4");
    textFieldControl5.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1/Password");
    textFieldControl5.setText("textFieldControl5");
    textFieldControl6.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1/Status");
    textFieldControl6.setText("textFieldControl6");
    textFieldControl7.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1/Email");
    textFieldControl7.setText("textFieldControl7");
    navigationBar1.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1");
    jLabel1.setText("ID:");
    jLabel2.setText("First Name:");
    jLabel3.setText("Last Name:");
    jLabel4.setText("User Name:");
    jLabel5.setText("Password:");
    jLabel6.setText("Status:");
    jLabel7.setText("Email:");
    jLabel8.setText("Address:");
    jPanel4.setLayout(      gridBagLayout2);
    textFieldStreet.setColumns(20);
    textFieldStreet.setText("textFieldStreet");
    /* The following listener (as well as the listeners on textFieldCity, textFieldState, and
    textFieldZipcode were added by the designer, but the focusGained and focusLost methods
    were modified in each case to call a common textField_focusGained method
    textFieldStreet.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(FocusEvent e) {
    textField_focusGained(e);
    public void focusLost(FocusEvent e) {
    textField_focusLost(e);
    textFieldCity.setColumns(20);
    textFieldCity.setText("textFieldCity");
    textFieldCity.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(FocusEvent e) {
    textField_focusGained(e);
    public void focusLost(FocusEvent e) {
    textField_focusLost(e);
    textFieldState.setColumns(20);
    textFieldState.setText("textFieldState");
    textFieldState.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(FocusEvent e) {
    textField_focusGained(e);
    public void focusLost(FocusEvent e) {
    textField_focusLost(e);
    textFieldZipcode.setColumns(20);
    textFieldZipcode.setText("textFieldZipcode");
    textFieldZipcode.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(FocusEvent e) {
    textField_focusGained(e);
    public void focusLost(FocusEvent e) {
    textField_focusLost(e);
    jLabel9.setText("Street:");
    jLabel10.setText("City:");
    jLabel11.setText("State:");
    jLabel12.setText("Zip Code:");
    textFieldControl1.setDataItemName("infobus:/oracle/sessionInfo1/rowSetInfo1/Id");
    this.getContentPane().add(jPanel1, BorderLayout.CENTER);
    jPanel1.add(jPanel2, BorderLayout.NORTH);
    jPanel2.add(navigationBar1, null);
    jPanel1.add(jPanel3, BorderLayout.CENTER);
    jPanel3.add(textFieldControl1, new GridBagConstraints2(1, 0, 1, 1, 1.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(37, 11, 0, 0), 0, 0));
    jPanel3.add(textFieldControl2, new GridBagConstraints2(1, 1, 1, 1, 1.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(7, 11, 0, 0), 0, 0));
    jPanel3.add(textFieldControl3, new GridBagConstraints2(1, 2, 1, 1, 1.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(7, 11, 0, 0), 0, 0));
    jPanel3.add(textFieldControl4, new GridBagConstraints2(1, 3, 1, 1, 1.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(6, 11, 0, 0), 0, 0));
    jPanel3.add(textFieldControl5, new GridBagConstraints2(1, 4, 1, 1, 1.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(6, 11, 0, 0), 0, 0));
    jPanel3.add(textFieldControl6, new GridBagConstraints2(1, 5, 1, 1, 1.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(7, 11, 0, 0), 0, 0));
    jPanel3.add(textFieldControl7, new GridBagConstraints2(1, 6, 1, 1, 1.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(6, 11, 0, 0), 0, 0));
    jPanel3.add(jLabel1, new GridBagConstraints2(0, 0, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(37, 106, 0, 0), 0, 0));
    jPanel3.add(jLabel2, new GridBagConstraints2(0, 1, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(8, 54, 0, 0), 0, 0));
    jPanel3.add(jLabel3, new GridBagConstraints2(0, 2, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(8, 54, 0, 0), 0, 0));
    jPanel3.add(jLabel4, new GridBagConstraints2(0, 3, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 54, 0, 0), 0, 0));
    jPanel3.add(jLabel5, new GridBagConstraints2(0, 4, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(8, 62, 0, 0), 0, 0));
    jPanel3.add(jLabel6, new GridBagConstraints2(0, 5, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(9, 83, 0, 0), 0, 0));
    jPanel3.add(jLabel7, new GridBagConstraints2(0, 6, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(9, 86, 0, 0), 0, 0));
    jPanel3.add(jLabel8, new GridBagConstraints2(0, 7, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(7, 72, 94, 0), 0, 0));
    jPanel3.add(jPanel4, new GridBagConstraints2(1, 7, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
    jPanel4.add(textFieldZipcode, new GridBagConstraints2(1, 3, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 0, 0), 0, 0));
    jPanel4.add(textFieldState, new GridBagConstraints2(1, 2, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 0, 0), 0, 0));
    jPanel4.add(jLabel9, new GridBagConstraints2(0, 0, 1, 1, 0.0, 0.0,
    GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 0, 0, 0), 0, 0));
    jPanel4.add(textFieldStreet, new GridBagConstraints2(1, 0, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 0, 0), 0, 0));
    jPanel4.add(jLabel10, new GridBagConstraints2(0, 1, 1, 1, 0.0, 0.0,
    GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 0, 0, 0), 0, 0));
    jPanel4.add(jLabel11, new GridBagConstraints2(0, 2, 1, 1, 0.0, 0.0,
    GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 0, 0, 0), 0, 0));
    jPanel4.add(jLabel12, new GridBagConstraints2(0, 3, 1, 1, 0.0, 0.0,
    GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 0, 0, 0), 0, 0));
    jPanel4.add(textFieldCity, new GridBagConstraints2(1, 1, 1, 1, 0.0, 0.0,
    GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 0, 0), 0, 0));
    /* The following vaiable declarations were made by the designer
    BorderLayout borderLayout1 = new BorderLayout();
    JPanel jPanel1 = new JPanel();
    SessionInfo sessionInfo1 = new SessionInfo();
    RowSetInfo rowSetInfo1 = new RowSetInfo();
    AttributeInfo IdrowSetInfo1 = new AttributeInfo(java.sql.Types.NUMERIC);
    AttributeInfo FirstnamerowSetInfo1 = new AttributeInfo(java.sql.Types.VARCHAR);
    AttributeInfo LastnamerowSetInfo1 = new AttributeInfo(java.sql.Types.VARCHAR);
    AttributeInfo UsernamerowSetInfo1 = new AttributeInfo(java.sql.Types.VARCHAR);
    AttributeInfo PasswordrowSetInfo1 = new AttributeInfo(java.sql.Types.VARCHAR);
    AttributeInfo AddressrowSetInfo1 = new AttributeInfo();
    AttributeInfo StatusrowSetInfo1 = new AttributeInfo(java.sql.Types.VARCHAR);
    AttributeInfo EmailrowSetInfo1 = new AttributeInfo(java.sql.Types.VARCHAR);
    JPanel jPanel2 = new JPanel();
    JPanel jPanel3 = new JPanel();
    TextFieldControl textFieldControl1 = new TextFieldControl();
    TextFieldControl textFieldControl2 = new TextFieldControl();
    TextFieldControl textFieldControl3 = new TextFieldControl();
    TextFieldControl textFieldControl4 = new TextFieldControl();
    TextFieldControl textFieldControl5 = new TextFieldControl();
    TextFieldControl textFieldControl6 = new TextFieldControl();
    TextFieldControl textFieldControl7 = new TextFieldControl();
    BorderLayout borderLayout2 = new BorderLayout();
    NavigationBar navigationBar1 = new NavigationBar();
    JLabel jLabel1 = new JLabel();
    JLabel jLabel2 = new JLabel();
    JLabel jLabel3 = new JLabel();
    JLabel jLabel4 = new JLabel();
    JLabel jLabel5 = new JLabel();
    JLabel jLabel6 = new JLabel();
    JLabel jLabel7 = new JLabel();
    JLabel jLabel8 = new JLabel();
    GridBagLayout gridBagLayout1 = new GridBagLayout();
    JPanel jPanel4 = new JPanel();
    JTextField textFieldStreet = new JTextField();
    JTextField textFieldCity = new JTextField();
    JTextField textFieldState = new JTextField();
    JTextField textFieldZipcode = new JTextField();
    JLabel jLabel9 = new JLabel();
    JLabel jLabel10 = new JLabel();
    JLabel jLabel11 = new JLabel();
    JLabel jLabel12 = new JLabel();
    GridBagLayout gridBagLayout2 = new GridBagLayout();
    /* The following declarations were made manually
    /* DomainAccess provides a means for getting and setting values of a column object as domain
    DomainAccess da = null;
    /* TAddress is the domain class
    TAddress addr = null;
    /* Declare variables for determining if JTextField values have been changed by user
    String oldVal = null;
    String newVal = null;
    /* The following method is generated by the wizard when the frame was created
    protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSED) {
    System.exit(0);
    public void bfInit () throws Exception {
    /* To add code to be invoked when the user moves from one row to another, get the
    DataItemChangeManager from the RowSetInfo (via RowsetAccess) and add a
    DataItemChangeListener. The specific method we want to use here is rowsetCursorMoved
    which is invoked when the user moves from one row to another; the other methods are
    defined simply because the interface requires them.
    RowsetAccess ra = rowSetInfo1.getRowsetAccess();
    DataItemChangeManager dcm = (DataItemChangeManager)ra;
    dcm.addDataItemChangeListener(new DataItemChangeListener() {
    public void rowsetCursorMoved(RowsetCursorMovedEvent e) {
    rowSetInfo1_rowsetCursorMoved(e);
    public void dataItemAdded(DataItemAddedEvent e) {
    public void dataItemDeleted(DataItemDeletedEvent e) {
    public void dataItemRevoked(DataItemRevokedEvent e) {
    public void dataItemValueChanged(DataItemValueChangedEvent e) {
    /* This method was generated by the designer. See rowSetInfo1.addChangeListener(...) in jbInit
    above.
    void rowSetInfo1_rowsetPopulated(RowSetChangeEvent e) {
    try {
    /* When the rowset is populated, set the JTextField values based on the domain. See
    updateFields() below.
    updateFields();
    catch (Exception ex) {
    System.out.println("Error occurred while retrieving values");
    ex.printStackTrace();
    /* This method was added manually to track row navigation. See dcm.addDataItemChangeListener(...)
    in jbInit above.
    void rowSetInfo1_rowsetCursorMoved(RowsetCursorMovedEvent e) {
    try {
    /* When the user moves from one row to another, set the JTextField values based on the
    domain. See updateFields() below.
    updateFields();
    catch (Exception ex) {
    System.out.println("Error occured while assigning values");
    ex.printStackTrace();
    /* This method finds the values from each field of the column object by using the domain, then
    sets the values of the JTextFields respectively. It is invoked when the rowset is initially
    populated, and each time the user moves from one row to another.
    public void updateFields () throws Exception {
    /* Get DataItem for the Address column object and cast to DomainAccess for to prepare for
    getting and setting column value as domain.
    da = (DomainAccess)AddressrowSetInfo1.getImmediateAccess();
    /* Get the value of the attribute as a Domain and cast to DomainInterface.
    DomainInterface di = da.getValueAsDomain();
    /* null out addr. Otherwise, if the address column is null for a particular record, when
    the user navigates to the record with the null values, addr will retain the previous record's
    values. This ensures a clean slate.
    addr = null;
    /* Using DomainInterface allows us to cast the domain object to the specific Domain class for
    that type. So, cast the address attribute's value to TAddress, the class that
    represents the T_ADDRESS type created in the database. This provides getters and setters
    for each of the fields of the Object Type.
    if ( di instanceof TAddress ) {
    addr = (TAddress) di;
    /* If the above statement resulted in some non-null object assigned to addr, it is because
    one or more of the fields of the domain contained non-null values. Therefore, if addr is
    not null, get the values from each field of the domain and assign them to their
    respective JTextFields. Otherwise, set each JTextField to an empty string.
    if (addr != null) {
    textFieldStreet.setText(addr.getStreet());
    textFieldCity.setText(addr.getCity());
    textFieldState.setText(addr.getState());
    textFieldZipcode.setText(addr.getZipcode());
    else {
    textFieldStreet.setText("");
    textFieldCity.setText("");
    textFieldState.setText("");
    textFieldZipcode.setText("");
    /* If addr is null, after making sure the JTextFields are cleared, create a new TAddress
    object so that we have something to assign values to if the user edits the JTextFields.
    try {
    addr = new TAddress();
    catch (SQLException ex) {
    System.out.println("Error creating domain TAddress");
    ex.printStackTrace();
    /* The method below is invoked when the user navigates to textFieldStreet, textFieldCity,
    textFieldState, or textFieldZipcode. It's used just to find the value of the field when
    the user enters the field (the "before" value).
    void textField_focusGained(FocusEvent e) {
    Object obj = e.getSource();
    if (obj instanceof JTextField) {
    JTextField field = (JTextField)obj;
    oldVal = field.getText();
    /* The method below is invoked when the user navigates away from textFieldStreet, textFieldCity,
    textFieldState, or textFieldZipcode. It checks to see if the user changes the value of the
    field, and if so, updates the value of the address attribute.
    void textField_focusLost(FocusEvent e) {
    /* Find out the value of the JTextField now that the user is attempting to leave the field.
    Object obj = e.getSource();
    if (obj instanceof JTextField) {
    JTextField field = (JTextField)obj;
    newVal = field.getText();
    /* Compare the new value of the field ("after" value) to the "before" value captured
    in textField_focusGained above. If they are equal, we do nothing. If they are not equal,
    then the user must have changes the value in the field, and we have some work to do.
    if (!oldVal.equals(newVal)) {
    /* Since this same method is called regardless of which JTextField has been left, we find
    out which text field the user is leaving, and then set the value of the appropriate
    element of the addr domain.
    if (obj.equals(textFieldStreet)) {
    addr.setStreet(newVal);
    if (obj.equals(textFieldCity)) {
    addr.setCity(newVal);
    if (obj.equals(textFieldState)) {
    addr.setState(newVal);
    if (obj.equals(textFieldZipcode)) {
    addr.setZipcode(newVal);
    /* So, we've set the value of the appropriate element of the addr domain, but we have not
    "posted" those changes to the BC4J (middle-tier), so if we were to commit at this point
    our changes would not get saved to the database (because BC4J is not aware of these
    changes). The next step is to notify BC4J of the changes.
    try {
    da.setValueAsDomain(addr);
    catch (InvalidDataException ex) {
    System.out.println("Invalid Data assigned to TAddress");
    ex.printStackTrace();
    /* Clear out the oldVal and newVal variable so we are ready to track more changes.
    oldVal = null;
    newVal = null;
    }-- Brian

Maybe you are looking for