8/15/2003System Specialists Corporation How to implement BC4J with the Struts Framework Eugene Sicat...
-
Upload
jayson-matthews -
Category
Documents
-
view
215 -
download
0
Transcript of 8/15/2003System Specialists Corporation How to implement BC4J with the Struts Framework Eugene Sicat...
8/15/2003 System Specialists Corporation
How to implement BC4J with the Struts Framework
Eugene SicatTechnical Architect/Project Manager
System Specialists Corporation
Session Id: 36702
8/15/2003 System Specialists Corporation
Next Steps …• Recommended sessions
– 40212 - “Take Control” of Your J2EE Applications with Apache Struts and Oracle JDeveloper 10g – Focus on the MVC Controller
– 37002 - Developing J2EE Applications with Oracle9i JDeveloper and Struts
• Recommended demos and/or hands-on labs– http://otn.oracle.com/products/jdev/htdocs/handson/Frameworks/bc4jh
andson.html– http://otn.oracle.com/sample_code/products/jdev/bc4jknowledgeBase/r
eadme.html#ID148
• See Your Business in Our Software– Visit the DEMOgrounds
• Relevant web sites to visit for more information– http://otn.oracle.com/products/jdev/htdocs/j2ee_bc4j.html– http://otn.oracle.com/products/jdev/howtos/jsp/StrutsHowTo.html
8/15/2003 System Specialists Corporation
Reminder
Please complete the OracleWorld online session survey
Thank you.
8/15/2003 System Specialists Corporation
Outline
• Sample App
• MVC, BC4J, Struts
• BC4J/Struts Integration
• Master/Detail code
8/15/2003 System Specialists Corporation
Approach
• Better approach to learning• Show the running application• Browse the code
– Start from the view– Drill to the controller – Drill to the model
8/15/2003 System Specialists Corporation
Sample App
8/15/2003 System Specialists Corporation
Sample App
8/15/2003 System Specialists Corporation
Sample App
8/15/2003 System Specialists Corporation
Sample App
8/15/2003 System Specialists Corporation
JSP (View)
<table>
<jbo:RowsetIterate …>
<tr> :
<td><jbo:ShowValue dataitem=“kbDesc"/></td>
<td><jbo:ShowValue dataitem=“repDate"/></td>
<td><jbo:ShowValue dataitem=“repBy"/></td>
</tr>
</jbo:RowsetIterate>
</table>
8/15/2003 System Specialists Corporation
XML Config (Controller)
<action path="/browsekb" type=“com.ssc.kb.controller.BrowseDataAction">
<set-property property="application" value="KnowledgeBaseAppModule"/>
<set-property property="viewobject" value="KnowledgeBaseDataView"/>
<forward name="success" path="/WEB-INF/jsp/browsekb.jsp"/>
</action>
8/15/2003 System Specialists Corporation
View Object (Model)<ViewObject
Name=“KnowledgeBaseDataView"
:
<SQLQuery><![CDATA[
SELECT KB_ID, KB_DESC, ENT_DATE, ENT_BY
FROM KNOWLEDGE_BASE
]]></SQLQuery>
:
8/15/2003 System Specialists Corporation
MVC
View(JSP)
Controller(User input / page flow handling logic)
Model(Business Service, Objects, Data)
8/15/2003 System Specialists Corporation
Struts Framework
• Consistent development approach
8/15/2003 System Specialists Corporation
Struts Framework
• Consistent development approach
View
Controller
Model
8/15/2003 System Specialists Corporation
Struts Framework
• Separate configuration from code
8/15/2003 System Specialists Corporation
Struts Framework
• Separate configuration from code– Java– XML
8/15/2003 System Specialists Corporation
Struts Framework• Separate configuration from code
– XML (struts-config.xml)
<action path="/browsekb"
type=“com.ssc.kb.controller.BrowseDataAction">
<set-property property="viewobject"
value="KnowledgeBaseDataView"/>
<forward name="success"
path="/WEB-INF/jsp/browsekb.jsp"/>
</action>
8/15/2003 System Specialists Corporation
Struts Framework
• Components– JSP using Struts Tag– Controller setup in struts-config.xml– ActionForm– Action
8/15/2003 System Specialists Corporation
Struts Framework
• Easy to test
8/15/2003 System Specialists Corporation
Struts Framework
• Easy to test– StrutsTestCase– MockObjects– Cactus
8/15/2003 System Specialists Corporation
Struts Framework
• Much simpler than Sun’s Java Pet Store Demo
8/15/2003 System Specialists Corporation
BC4J Framework
• Entity Objects and Associations
8/15/2003 System Specialists Corporation
BC4J Framework
• Entity Objects and Associations– business rules– persistence details – express the relationships
8/15/2003 System Specialists Corporation
BC4J Framework
• Entity Objects and Associations– business rules– persistence details – express the relationships
• Excellent Reference– http://otn.oracle.com/products/jdev/htdocs/han
dson/Frameworks/bc4jhandson.html
8/15/2003 System Specialists Corporation
BC4J Framework
8/15/2003 System Specialists Corporation
BC4J Framework
• View objects and links
8/15/2003 System Specialists Corporation
BC4J Framework
• View objects and links– Updateable data transfer objects – Based on SQL queries
8/15/2003 System Specialists Corporation
BC4J Framework
8/15/2003 System Specialists Corporation
BC4J Framework
8/15/2003 System Specialists Corporation
BC4J Framework
• Application Module– Transactional business services – “Business Delegate” J2EE Design Pattern
8/15/2003 System Specialists Corporation
BC4J Framework
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• BC4J complements the model layer of Struts
8/15/2003 System Specialists Corporation
BC4J/Struts Integration• automate interaction of Form Beans and BC4J's
objects
8/15/2003 System Specialists Corporation
BC4J/Struts Integration• automate interaction of Form Beans and BC4J's
objects <action path="/browsekb"
type=“com.ssc.kb.controller.BrowseDataAction">
<set-property property="application" value="KnowledgeBaseAppModule"/>
<set-property property="viewobject" value="KnowledgeBaseDataView"/>
<forward name="success" path="/WEB-INF/jsp/browsekb.jsp"/>
</action>
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• High-performance Business Delegate
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• High-performance Business Delegate– finds and pools business service components
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• High-performance Business Delegate– finds and pools business service components
am.findViewObject(“string-key-name”)
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• High-performance Business Delegate– finds and pools business service components
am.findViewObject(“string-key-name”)
:
am.createRecord(aRecord)
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• High-performance Business Delegate– finds and pools business service components
am.findViewObject(“string-key-name”)
:
am.createRecord(aRecord)
:
am.commitChanges()
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• Customized Struts Request Processor
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• Customized Struts Request Processor
<controller debug="0" locale="true"
processorClass=
“com.ssc.kb.controller.KnowledgeBaseRequestProcessor"
contentType="text/html"
/>
8/15/2003 System Specialists Corporation
BC4J/Struts Integration
• Customized Struts Request Processor- processRoles- processActionForward- processActionForm
8/15/2003 System Specialists Corporation
How to
• Options#1 Create from scratch
#2 Migrate old MVC
8/15/2003 System Specialists Corporation
Option #1: Create from scratch• Create entity objects and associations
• Create view objects
• Create view links
• Create application module
• Create complete struts-app using wizard
Reference:
http://otn.oracle.com/products/jdev/htdocs/handson/Frameworks/bc4jhandson.html
8/15/2003 System Specialists Corporation
Option #1: Create from scratch
8/15/2003 System Specialists Corporation
Option #1: Create from scratch
8/15/2003 System Specialists Corporation
Option #2: Migrate old MVC
1. inherit from struts.Action
8/15/2003 System Specialists Corporation
Option #2: Migrate old MVC
1. inherit from struts.Action
public class KnowledgeBaseAction extends Action {public ActionForward execute
( ActionMapping mapping
, ActionForm form
, HttpServletRequest request
, HttpServletResponse response)
8/15/2003 System Specialists Corporation
Option #2: Migrate old MVC
2. migrate action mappings to struts-config.xml
<action path="/browsekb“
type="org.apache.struts.action.ForwardAction“>
<forward name="success“
path="/browsekb.jsp"/>
</action>
8/15/2003 System Specialists Corporation
Option #2: Migrate old MVC
3. configure to use struts.ActionServlet
web.xml:
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
8/15/2003 System Specialists Corporation
Option #2: Migrate old MVC
4. migrate messages and labels to resources
ApplicationResources.properties:
DataTransaction.commit=Commit
DataQuery.search=Search
DataTable.edit=Edit
:
8/15/2003 System Specialists Corporation
Installation/Configuration
1.1. web.xml – action servlet
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
8/15/2003 System Specialists Corporation
Installation/Configuration
1.2. web.xml – Taglib<taglib> <taglib-uri>/webapp/DataTags.tld</taglib-uri> <taglib-location>/WEB-INF/lib/datatags.jar</taglib-
location></taglib><taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-
location></taglib>
8/15/2003 System Specialists Corporation
Installation/Configuration2.1. JAR files - BC4J jars - under <OC4J_HOME>/BC4J/lib
8/15/2003 System Specialists Corporation
Installation/Configuration2.2. JAR files - Struts jar - under <webroot>/WEB-INF/lib
8/15/2003 System Specialists Corporation
Installation/Configuration
3.1. struts-config.xml
install under <webroot>/WEB-INF/lib
3.2. TagLib definition files - *tld
install under <webroot>/WEB-INF/lib
8/15/2003 System Specialists Corporation
Challenge with Master/Detail
• What’s the common challenge?• What does a user normally want in their
application?• How does it affect your architecture?
8/15/2003 System Specialists Corporation
Browse
8/15/2003 System Specialists Corporation
Edit Master/Display Detail
8/15/2003 System Specialists Corporation
Edit Detail
8/15/2003 System Specialists Corporation
JBO Tag
• Java Business Object tag
8/15/2003 System Specialists Corporation
JBO Tag
• Java Business Object tag
<%@ taglib uri="/webapp/DataTags.tld"
prefix="jbo" %>
8/15/2003 System Specialists Corporation
JBO Tag
• Java Business Object tag
<%@ taglib uri="/webapp/DataTags.tld" prefix="jbo" %>
:<jbo:RowsetIterate …>
: <jbo:ShowValue dataitem=“KbDesc"/></td>
<jbo:ShowValue dataitem=“EntDate"/></td></jbo:RowsetIterate>
8/15/2003 System Specialists Corporation
Struts tag
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix=“nested" %>
8/15/2003 System Specialists Corporation
Struts tag
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix=“nested" %>
<nested:iterate property="details">
<nested:text property="entDate"/>
<nested:text property="details"/>
<nested:text property="ref"/>
</nested:iterate>
8/15/2003 System Specialists Corporation
JBO vs Struts tags
• JBO for RAD
8/15/2003 System Specialists Corporation
JBO vs Struts tags
• JBO for RAD• JBO integration with BC4J objects
8/15/2003 System Specialists Corporation
JBO vs Struts tags
• JBO for RAD• JBO integration with BC4J objects• JBO consistency
8/15/2003 System Specialists Corporation
JBO vs Struts tags
• Struts flexibility
8/15/2003 System Specialists Corporation
JBO vs Struts tags
• Struts flexibility• Struts richness
8/15/2003 System Specialists Corporation
JBO vs Struts tags
• Struts flexibility• Struts richness• Struts many contributors
8/15/2003 System Specialists Corporation
Where to use Struts tags
• Sophisticated browse with sort, display formats
8/15/2003 System Specialists Corporation
Where to use Struts tags
• Sophisticated browse with sort, display formats• Master/Detail CRUD
8/15/2003 System Specialists Corporation
Master/Detail
8/15/2003 System Specialists Corporation
Master/Detail
8/15/2003 System Specialists Corporation
Master/Detail
• BC4J– KnowledgeBase*– KnowledgeBaseDetail*– KnowledgeBaseDetailViewLink*– KnowledgeBaseAppModule
8/15/2003 System Specialists Corporation
Master/Detailpublic class KnowledgeBaseForm extends ActionForm {
String kbBaseId;String kbDesc;String repDate;String repBy;ArrayList kbFormDetails;
:public ArrayList getDetails(…) {…}public void setDetails(…) {…}publjc void setKnowledgeBaseFromViewObject
(KnowledgeBaseVIew kbView){…}public void setKnowledgeBaseFromViewObject
(KnowledgeBaseDetailVIew kbDetailView() {…}}
8/15/2003 System Specialists Corporation
Master/Detail
public class KnowledgeBaseDetail {String kbId;String entDate;String details;String ref;public void KnowledgeBaseDetail() {…}
:public String getEntDate() {…};
:public void setEntDate(…) {…};
}
8/15/2003 System Specialists Corporation
Master/Detailpublic class KnowledgeBaseAction extends Action {
public ActionForward execute(ActionForm newForm, .) {String id = request.getParameter(“id”);KnowledgeBaseForm form =
(KnowledgeBaseForm) newForm;KnowledgeBaseAccess access =
new KnowledgeBaseAccess();if (action.equals(“Edit”) {
access.getKnowledgeBase(id, form); return (mapping.findForward("success"));
} else if ( action.equals(“Save”) {if (access.saveKnowledgeBase(form) )
return (mapping.findForward("saved"));else return (mapping.findForward(“failure"));
}}}
8/15/2003 System Specialists Corporation
Master/Detailpublic class KnowledgeBaseAccess {
public void getKnowledgeBase(String id, … form) {KnowledgeBaseView kbView = (KnowledgeBaseView)
appModule.findKnowledgeBaseView(id);/* no need to find the dtl because the view link forced the
child to follow the parent so just get it */KnowledgeBaseDetailViewImpl kbDetailView =
appModule.getKnowledgeBaseDetailView();
form.setKnowledgeBaseFromViewObject(kbView);form.setKnowledgeBaseDetailFromViewObject
(kbDetailView);}
}
8/15/2003 System Specialists Corporation
Master/Detailpublic class KnowledgeBaseAccess {
public void saveKnowledgeBase(…kbForm) { Long id = kbForm.getKnowledgeBaseId(); Key key = new Key(new Object[] { id });
Row kbRow[] =appModule.findKnowledgeBaseView(key);
setKnowledgeBase(kbForm, kbRow[0]); KnowledgeBaseDetailViewImpl kbFormDetailView =
appModule.getKnowledgeBaseDetailView(); setKnowledgeBaseDetails(kbForm, kbFormDetailView); }
8/15/2003 System Specialists Corporation
Master/Detail
private void setKnowledgeBase(… kbForm
, Row row) { row.setAttribute(“KbId", kbForm.getMKbId());
row.setAttribute("RepDt", kbForm.getRepDt());
row.setAttribute("RepBy", kbForm.getRepBy());
row.setAttribute("KbDesc“, kbForm.getKbDesc());
}
8/15/2003 System Specialists Corporation
Master/Detail
private void setKnowledgeBaseDetails(… kbForm, … kbFormDetailView)) {
List kbFormDetails = kbForm.getDetails(); Iterator i = kbFormDetails.iterator(); while (i.hasNext()) { KnowledgeBaseDetail kbFormDetail =
(KnowledgeBaseDetail) i.next(); setOneKnowledgeBaseDetail
(kbFormDetail,kbFormDetailView); }}
8/15/2003 System Specialists Corporation
Master/Detail
private void setOneKnowledgeBaseDetail (…kbFormDetail, ... kbFormDetailView) {
Row row = getKbDetailViewRow
(kbFormDetailView, kbFormDetail);
row.setAttribute(“Detail", kbFormDetail.getDetail());
row.setAttribute(“EntDt", kbFormDetail.getEntDt());
row.setAttribute(“Ref", kbFormDetail.getRef());
}
}
8/15/2003 System Specialists Corporation
Master/DetailStruts-config.xml
<action path="/editKnowledgeBase"
type=“com.ssc.kb.model.KnowledgeBaseAction"
attribute="knowledgeBaseForm"…>
<forward name="success"
path="/editKnowledgeBase.jsp"/>
<forward name=“saved"
path="/browseKnowledgeBase.jsp"/>
<forward name=“failure"
path="/editKnowledgeBase.jsp"/>
</action>
8/15/2003 System Specialists Corporation
Master/Detail - JSP<tr>
<th>Knowledge Base Id:</th><td><bean:write property="kbId"/></td>
</tr><tr>
<th>Description:</th><td><html:text property="description"/></td>
</tr><tr> <th>Date Reported:</th>
<td><html:text property="repDate"/></td></tr>
8/15/2003 System Specialists Corporation
Master/Detail – JSP cont’n<table>
<th align="center">Date</th> <th align="center">Details</th> <th align="center">Reference</th> <nested:iterate property="details">
<tr> <td><nested:text property="entDate"/></td>
<td><nested:text property="details"/></td> <td><nested:text property="ref"/></td></tr>
</nested:iterate><table>
8/15/2003 System Specialists Corporation
Master/Detail
8/15/2003 System Specialists Corporation
Summary
• BC4J and Struts – great combination
8/15/2003 System Specialists Corporation
Summary
• BC4J and Struts – great combination• RAD
8/15/2003 System Specialists Corporation
Summary
• BC4J and Struts – great combination• RAD• Consistent
8/15/2003 System Specialists Corporation
Summary
• BC4J and Struts – great combination• RAD• Consistent• Industry standard
8/15/2003 System Specialists Corporation
Summary
• BC4J and Struts – great combination• RAD• Consistent• Industry standard• Becoming widely used
8/15/2003 System Specialists Corporation
Summary
• BC4J and Struts – great combination• RAD• Consistent• Industry standard• Becoming widely used• Easy to learn
8/15/2003 System Specialists Corporation
Q & A
• Questions and Answers