General
On What is Jaffa Based?
JAFFA is based on the need to rapidly build business applications on Java Technologies,
without paying for expensive architecture and development tools, and the desire to avoid re-inventing
the wheel by harnessing any existing open source projects that provide aspects of this final
architecture. To read more on this, see our Motivation Statement
For more information on the related open source projects see our
acknowledgements page.
Do I Have To Use All Layers Of The Architecture?
Simply No, use as much or as little as you need. There are some dependencies between specific
parts of the application, like application security needs the component architecture, but things like the widgets,
the presentation layer as a whole, the middleware, the persistence engine, etc can be used independently, or
replaced by an alternative.
If you do find better alternatives, please e-mail us, as it might be worth
us using your alternative as well!
What about Netscape Support?
As of Jaffa v1.2.0 all widgets now support IE 5.5/6.0 and Netscape 7.0 and Mozilla 1.3. All previous versions of
Jaffa (v1.1, 1.0) only has IE support. In addition we have the new 'Tag Library User Guide' where we indicate per widget
its browser compatability as well an pointing out and browser specific behaviour.
In general we have noted that the Netscape and Mozilla browsers render pages faster (on complex finder screens),
but IE is much faster and javascript processing (ie columen sorting in several times faster). The choice is now yours!
What Databases Are Supported?
Although internally we have been using this against an Oracle 8i/9i database, our JDBCEngine implementation
can use any JDBC 2.0 compliant driver. Although for a robust high performance system we recommend sticking
with Drivers that have a Type 3 or 4 JDBC implementation.
We have now done some more detailed testing with other databases. Click here for details
If you are successfully using this with a different database, let us know and well keep a list of what
databases people have tested JAFFA against.
For more information on the tested databases and the supported features, check the comments at the start
of init.xml in UnitTests.
Is JAFFA J2EE Compliant?
Jaffa v1.2.0 has now be retested under the latest Servlet 2.3 and JSP 1.2 reference container (Tomcat). We have also
upgraded to all the current releases of the related java and open source projects, and refactored accordingly
(more details of this are in the release notes).
Can I just use bits of JAFFA?
Of course, we have engineered this to provide as much plug and play as we can. For example, the widget architecture can be
used without all of the component framework if you want to. If you don't want to use the middleware because your building a
web server only application, you can. If you want to use a different persistence layer, you can. The only part of the architecture
that are difficult to de-couple is the integrated component and application security architecture. The data security
architecture is completely independent as well, if you choose to use it.
Note: One thing to keep in mind, is that our 'out-the-box' patterns for rapidly building your application
are based on the full architecture, so you'll probably need to re-factor them to cope with any
architecture changes you make.
Widgets
Why are my widgets not getting updated in the Grid (or Table/UserGrid)?
On cause of this is that you have used an '_' (underscore) in on of the widget names.
Internally we give each widget an explicit ID in the HTML DOM, for example user_userDetailMaintForm_rolesGrid_0_Column1_checkbox1, where
user_userDetailMaintForm is the form name,
rolesGrid is the name of the grid widget,
0 is the row,
Column1 is the column name and checkbox1 is the actual widget field name.
The field name is set when you call GridModelRow.addElement(widget name, widget model).
If you were to use the name checkbox_1 instead, when the name is parsed internally
in the Java script it gets the field name from the last '_' onwards, it therefore assumes the
column name is Column1_checkbox and the field name is 1.
Example of what is posted back from the form to update the model |
<widget row="0" column="Column0_checkbox" field="0">true</widget>
<widget row="0" column="Column1_checkbox" field="1">true</widget>
<widget row="0" column="Column2_checkbox" field="2">false</widget>
<widget row="1" column="Column0_checkbox" field="0">false</widget>
<widget row="1" column="Column1_checkbox" field="1">true</widget>
|
Conclusion: Don't use '_' (underscores) in your inner widget field names!
Persistence
When does the preUpdate() trigger get fired?
The preUpdate() trigger on a domain object gets fired when the UOW.update(..) method is called
on that domain object. The one exception to this is that if nothing on the domain object has actually been updated
(ie object.isModified() == false), then the domain object won't be updated, and hence the preUpdate() trigger will not be
fired.
Note : If you are using the latest domain object pattern, then when the updateXxx() method is called on a
field, it only flags the object as modified if the value passed in, differs to that already in the object. So you really
have to change a value to cause the preUpdate() trigger to be fired.
SQL
Oracle
Where do i get the oracle12.jar from?
These should be included as part fo your oracle install. Try looking at
$ORACLE_HOME/jdbc/lib/classes12.jar (you may find classes12.zip instead).
In either case just rename it to oracle12.jar for use in JAFFA
If that fails try downloading them from http://www.oracle.com
MS SQL Server 2000
Where do i get the driver JARs from?
If you want the microsoft ones, try this link
http://www.microsoft.com/downloads/details.aspx?FamilyID=4f8f2f01-1ed7-4c4d-8f7b-3d47969e66ae&DisplayLang=en
Note: This is the one we have tested JAFFA against
There are other versions available from 3rd parties.
- iNet Software - http://www.inetsoftware.de/English/Produkte/JDBC_Overview/ms.htm
- Data Direct - http://www.datadirect-technologies.com/products/jdbc/compare/jdbcbenchintro-.asp
- JSQLConnect from NetDirect - http://www.j-netdirect.com/JSQLConnect/JSQLFeatures.html
- jTSD Open Source Project - http://jtds.sourceforge.net/
Why do i need to prefix all tables with the owner name
(select * from myowner.customers)?
This seems to be needed if the owner is not 'dbo'. So the simple fix is to make 'dbo' the owner
of all your tables. This can be done with the following statement
SQL Source |
sp_MSForEachTable 'sp_changeobjectowner ''?'',''dbo'''
|
(Ref: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=398&lngWId=5)
Otherwise just include the owner name as part of the table name in the XML mapping files.
In the store procedure pattern you have the example code for Oracle,
what about SQLSever?
In the stored procedure pattern you are left to implement the prepareCall() .
Generated Domain Object with Stored Procedure Pattern |
/** Returns a String having the call to the StoredProcedure.
* @return a String having the call to the StoredProcedure.
*/
public String prepareCall() {
// Add the call to the Stored Procedure
// @todo : Return the String of the type "{call ke_vcpkg1.getvoucher(?,?,?)}";
return null;
}
|
The example return string "{call ke_vcpkg1.getvoucher(?,?,?)}" is an example for oracle, an equivelent for
SQLServer would be "execute getVoucher ?,?,?"
|