Exzilla.net
Contact
Home -> Articles -> How To: Simple Java Application Client for BC4J Framework
 
Features
Forums
Files
Blogs
How To: Simple Java Application Client for BC4J Framework
Jan 28, 2002
Spidix
Author's Bio | E-Mail
Copyright (C) 2002 exzilla.net



Prerequisites:
Jdeveloper version 3.2.3 ( Build 1018 )
- JBO 3.2.3.995
- COMMON 3.2.3.323
- OJVM 1.2.351
- Oracle Database 8.17  

Assumption:
Installed oracle database and configured oracle network.  

Attendees:
Java developer, BC4J developer (beginner)  

Purpose:
To create simple java client program for learning and testing application module

Step-by-Step Example:
This article we will show you a simple java application program that interact with Oracle BC4J in local mode. We will describe by the following details.

0. Creating connection with local mode by am.getTransaction().connect()

1. Retrieve Data

1.1. Retrieve all data by getAllRowsInRange()

1.2. Retrieve a row by findByKey

2. DML and control transaction

2.1 Insert a new record by createRow()

2.2 Update current row by setAttribute()

2.3 Remove current row by remove()

2.4 Commit transaction by am_Member.getTransaction().commit()

3. Setting WHERE condition

3.1 Setting  static WHERE cause and condition by setWhereClause("MEM_ID = " + somevalue)

3.2 Unsetting WHERE cause  by setWhereClause("")

3.3 Setting WHERE cause, condition and parameter online by setWhereClauseParam() or setWhereClauseParams()

4. Disconnect by am.getTransaction().disconnect()

0. Creating connection with local mode by am.getTransaction().connect()

Hashtable env = new Hashtable(2);

String  jdbcURL = "jdbc:oracle:thin:skull/vertigo@localhost:1521:fuju";
env.put(Context.INITIAL_CONTEXT_FACTORY, JboContext.JBO_CONTEXT_FACTORY);
env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
// Create an JNDI initial context
Context ic = new InitialContext(env);
// Lookup a home interface (factory) for the AppModule by name
ApplicationModuleHome home =(ApplicationModuleHome)ic.lookup(amDefName);
// Create an instance of the AppModule using the home/factory
am = home.create();
// Connect the application module to the database
am.getTransaction().connect(jdbcConnStr);


1. Retrieve Data

1.1 Retrieve all data by getAllRowsInRange()

vo_Member.setRangeSize(-1);
vo_Member.first();
rows = vo_Member.getAllRowsInRange();
show(" MemberView Data ");
for(int i=0; i< rows.length;i++)
{

// MemID,MemFirstname,MemLastname,MemEmail,MemTimestamp
show("--->MemberVeiw Data");
show("=================");
show("MemberView:MemID: " + rows[i].getAttribute("MemId"));
show("MemberView:MemFirstname: " + rows[i].getAttribute("MemFirstname") );
show("MemberView:MemLastname: " + rows[i].getAttribute("MemLastname") );
show("MemberView:MemEmail: " + rows[i].getAttribute("MemEmail") );
show("MemberView:MemTimestamp: " + rows[i].getAttribute("MemTimestamp") );

}

1.2 Retrieve a row by findByKey

// We'll try to find Member id 13
String keyValue = "13";
// Construct a Key object for Customer 205
Key k = new Key(new Object[] { keyValue });
// Find a Row by its Key
rows = vo_Member.findByKey(k,1);

if(rows.length == 0 ){
     show("Member  Key not found. ");
 }else{
     show("--->Member details for : ");

show("=================");
show("MemberView:MemID: " + rows[0].getAttribute("MemId"));

show("MemberView:MemFirstname: " + rows[0].getAttribute("MemFirstname") );

show("MemberView:MemLastname: " + rows[0].getAttribute("MemLastname") );

show("MemberView:MemEmail: " + rows[0].getAttribute("MemEmail") );

show("MemberView:MemTimestamp: " + rows[0].getAttribute("MemTimestamp") );

}

2. DML and control transaction

2.1 Insert a new record by createRow()

Row r = vo_MemberDml.createRow();
// MemID,MemFirstname,MemLastname,MemEmail,MemTimestamp
// MemID is created in create method of Entity objcet
// and get number from sequence

r.setAttribute("MemFirstname","Bruce");
r.setAttribute("MemLastname","Archer");
r.setAttribute("MemEmail","archer@exzilla.net");

// MemTimestamp is created in create method
vo_MemberDml.insertRow(r);

am_Member.getTransaction().commit();

2.2 Update current row by setAttribute()

In this sample I use findByKey function for pointing  that record that I just added in last step.

String bannerKeyValue=r.getAttribute("MemId").toString();
Key memberK = new Key(new Object[] { bannerKeyValue } );
Row[] memberFound = vo_MemberDml.findByKey(memberK,1);

if(memberFound.length == 0 ){
show(" No! Member found ");
}else{

show("Hi member " + memberFound[0].getAttribute("MemEmail").toString() );

memberFound[0].setAttribute("MemEmail","archer@khwai.com");

 }

2.3 Remove current row by remove()

Delete last current record that we updated.We can do that because the pointer still point that record.

memberFound[0].remove();

2.4 Commit transaction by am_Member.getTransaction().commit()

am_Member.getTransaction().commit();

 

3. Setting WHERE condition

3.1 Setting static WHERE cause  and condition by setWhereClause("MEM_ID = " + somevalue)

String memberRowindex="12";
// we must use column name in where condition.

vo_Member.getViewObject().setWhereClause("MEM_ID = " + memberRowindex );

vo_Member.executeQuery();
vo_Member.first();

rows = vo_Member.getAllRowsInRange();

show("--->MemberView Data  with where MEM_ID ");

for(int i=0; i< rows.length;i++)
{
show("Member email " + rows[i].getAttribute("MemEmail"));
}


3.2 Unsetting WHERE cause  by setWhereClause("")

vo_Member.getViewObject().setWhereClause("");
vo_Member.executeQuery();
vo_Member.first();
rows = vo_Member.getAllRowsInRange();
// For testing we can get all data.
show("--->MemberView Data  with where MEM_ID ");
for(int i=0; i< rows.length;i++)
{
     show("Member email :: " + rows[i].getAttribute("MemEmail"));
}


3.3 Setting WHERE cause, condition and parameter online by setWhereClauseParam() or setWhereClauseParams()

First way using setWhereClauseParam()

memberRowindex="14";
// We must use column name in where condition with oracle style
vo_Member.setWhereClause("MEM_ID = :1 ");

try{
//3.3.1 First way using setWhereClauseParam
vo_Member.setWhereClauseParam(0,new oracle.jbo.domain.Number(memberRowindex));

 } catch(java.sql.SQLException ex)    {
throw new RuntimeException(ex.getMessage());
}

vo_Member.executeQuery();
vo_Member.first();
rows = vo_Member.getAllRowsInRange();

show("--->MemberView Data  with where MEM_ID ");

for(int i=0; i< rows.length;i++)
{
show("Member email " + rows[i].getAttribute("MemEmail"));
}


Second way using setWhereClauseParams()

memberRowindex="14";

// we must use column name in where condition with oracle style

vo_Member.setWhereClause("MEM_ID = :1 ");

try{
// 3.3.2 Second way using setWhereClauseParams
Object[] params =

new Object[] { new oracle.jbo.domain.Number(memberRowindex) };

vo_Member.setWhereClauseParams(params);

  } catch(java.sql.SQLException ex){
throw new RuntimeException(ex.getMessage());
}

vo_Member.executeQuery();
vo_Member.first();
rows = vo_Member.getAllRowsInRange();

show("--->MemberView Data  with where MEM_ID ");

for(int i=0; i< rows.length;i++)
{
show("Member email " + rows[i].getAttribute("MemEmail"));
}


4. Disconnect by am.getTransaction().disconnect()

// Disconnect the application module
am_Member.getTransaction().disconnect();

 

Note:  
After set WHERE condition and parameter for VO. I've still got problems , I could't unset the WHERE condition.They still ask me bind variable.

If anyone know, please let me know :)  

Complete Sample code:
- Database objects creation script
- Completed source code project (Jdev323)
- Completed source code project (Jdev903)

References:
- http://otn.oracle.com/products/jdev/content.html  

More Information:
- http://otn.oracle.com/products/jdev/content.html  

Keywords:

bc4j findByKey setWhereClause getAllRowsInRange getAttribute setAttribute setWhereClauseParam getTransaction

 
 
{exzilla.net -- e-development QuickStart --}



Copyright (c) 2001-2009 - Exzilla.net -  All Rights Reserved.
Contact Us | Privacy Policy | Terms & Conditions