302
APPENDIX C
EJBG
EN
CODE
AND
TEMPLATES
begin
templateFile = File.new( templateName )                       
erbScript = templateFile.read                                 
templateFile.close                                             
rescue
print "Could not open #{templateName}\n"
exit
end
erb = ERb.new(erbScript)                                         
erbResult = erb.result                                           
begin
outfile = File.open( outfileName, "w" )                        
outfile.write( erbResult )                                     
outfile.close                                                  
rescue
print "Could not write to #{outfileName}\n"
exit
end
end
readSchema()
processTemplate(SQL_TEMPLATE, SQL_OUT_FILE)
readExtensions()
readSamples()
$tables.values.each { |table|                                        
$table = table
processTemplate(ENTITY_TEMPLATE, JAVA_OUT_DIR + table.name + 
"Entity.java")
processTemplate(ENTITY_HOME_TEMPLATE, JAVA_OUT_DIR + table.name 
+"EntityHome.java")
processTemplate(ENTITY_BEAN_TEMPLATE, JAVA_OUT_DIR + table.name 
+"EntityBean.java") 
table.valueObjs.values.each{ |valueObj|                            
$valueObj = valueObj
processTemplate(VALUE_TEMPLATE, JAVA_OUT_DIR + valueObj.name + ".java")
processTemplate(LIST_JSP_TEMPLATE, JSP_OUT_DIR + valueObj.name + 
"List.jsp")
}
processTemplate(SS_TEMPLATE, JAVA_OUT_DIR + table.name + "SS.java")
processTemplate(SS_HOME_TEMPLATE, JAVA_OUT_DIR + table.name 
+"SSHome.java")
processTemplate(SS_BEAN_TEMPLATE, JAVA_OUT_DIR + table.name 
+"SSBean.java") 
processTemplate(ADD_JSP_TEMPLATE, JSP_OUT_DIR + table.name + "Add.jsp")
processTemplate(UPDATE_JSP_TEMPLATE, JSP_OUT_DIR + table.name + 
"Update.jsp")
processTemplate(DELETE_JSP_TEMPLATE, JSP_OUT_DIR + table.name + 
"Delete.jsp")
Reads the 
template
Runs the 
template ERb
Outputs the 
result of the 
template
Iterates through tables
w
Iterates through value objects
e
Pdf font size change - Compress reduce PDF size in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
C# Code & .NET API to Compress & Decompress PDF Document
best pdf compressor; change font size in fillable pdf form
Pdf font size change - VB.NET PDF File Compress Library: Compress reduce PDF size in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Compression and Decompression Control SDK
change page size pdf acrobat; change file size of pdf document
T
HE
ENTITY
TEMPLATES
303
table.fmethodsArray.each{ |fmethod|                               
next if !fmethod.body 
$fmethod = fmethod
processTemplate(CUSTOM_JSP_TEMPLATE, 
JSP_OUT_DIR + table.name + fmethod.name + "Custom.jsp")
}
}
processTemplate(INDEX_JSP_TEMPLATE, JSP_OUT_DIR + "index.jsp")    
processTemplate(SS_FACTORY_TEMPLATE, JAVA_OUT_DIR + "SSFactory.java")
processTemplate(EJB_JAR_TEMPLATE, XML_OUT_DIR + "ejb-jar.xml")
processTemplate(JBOSS_XML_TEMPLATE, XML_OUT_DIR + "jboss.xml")
processTemplate(JBOSS_CMP_TEMPLATE, XML_OUT_DIR + "jbosscmp-jdbc.xml")
processTemplate(TESTS_TEMPLATE, TESTS_OUT_DIR + "Tests.java")
q
processTemplate takes the filename of a template and the filename of the output
file. It first reads the template, then it runs the template and writes the output to the
output filename.
w
The first loop goes over all of the tables and builds the entity and stateless session files.
e
Next the code loops over the value objects within each table and builds all of the value
object files.
r
The last step of processing each table is to iterate over the stateless session facade meth-
ods and build JSPs for them.
t
At the end of the process, we build the index of all the pages, the stateless session fac-
tory, the deployment descriptors, and the sample data loader.
C.2
T
HE
ENTITY
TEMPLATES
We use three entity templates. These templates create the interface, bean, and home
files. The template for the home file is available on the book’s web site.
C.2.1
The Entity.java.template
The template in listing C.4 is used to build the Entity objects for each table.
// <%= $table.name %>.java
package <%= $package %>;
import javax.ejb.EJBLocalObject;
import javax.ejb.EJBException;
import <%= $package %>.*;
public interface <%= $table.name %> extends EJBLocalObject {
Iterates through 
facade methods
r
Builds the single
item deliverables
t
Listing C.4 4 Entity.java.template
C# PDF insert text Library: insert text into PDF content in C#.net
Powerful .NET PDF edit control allows modify existing scanned PDF text. Ability to change text font, color, size and location and output a new PDF document.
change pdf page size; pdf page size may not be reduced
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
Able to edit and change PDF annotation properties such as font size or color. Abilities to draw markups on PDF document or stamp on PDF file.
best way to compress pdf files; can a pdf be compressed
304
APPENDIX C
EJBG
EN
CODE
AND
TEMPLATES
<%  $table.columnsArray.each{ |column|
%>  public <%= column.javaType %> get<%= column.upfirstName %>() throws EJ
BException;
public void set<%= column.upfirstName %>(<%= column.javaType %> <%= colu
mn.name %>) throws EJBException;
<%  } 
%>
}
This is the template’s output for the Book table:
// BookEntity.java
package gen;
import javax.ejb.EJBLocalObject;
import javax.ejb.EJBException;
import gen.*;
public interface BookEntity extends EJBLocalObject {
public Integer getBookID() throws EJBException;
public void setBookID(Integer bookID) throws EJBException;
public String getTitle() throws EJBException;
public void setTitle(String title) throws EJBException;
public String getISBN() throws EJBException;
public void setISBN(String ISBN) throws EJBException;
public Integer getAuthorID() throws EJBException;
public void setAuthorID(Integer authorID) throws EJBException;
public Integer getPublisherID() throws EJBException;
public void setPublisherID(Integer publisherID) throws EJBException;
public Integer getStatus() throws EJBException;
public void setStatus(Integer status) throws EJBException;
public Integer getNumCopies() throws EJBException;
public void setNumCopies(Integer numCopies) throws EJBException;
}
C.2.2
The EntityBean.java.template
The template in listing C.5 is used to build the beans for each of the tables.
// <%= $table.name %> EntityBean.java
package <%= $package %>;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.EJBException;
import jutil.Sequence;
import javax.naming.InitialContext;
public abstract class <%= $table.name %> implements EntityBean {
Listing C.5 5 EntityBean.java.template
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
PDF document, keeps the elements (like images, tables and chats) of original PDF file and maintains the original text style (including font, size, color, links
change paper size in pdf; change font size fillable pdf
Generate Barcodes in Web Image Viewer| Online Tutorials
Select "Font" to choose human-readable text font style, color, size and effects; RasterEdge OCR Engine; PDF Reading; Encode & Decode JBIG 2 Files; Compress &
pdf file size limit; can a pdf file be compressed
T
HE
ENTITY
TEMPLATES
305
transient private EntityContext ctx;
public static <%= $table.name %> getHome(){
try {
InitialContext jndiContext = new InitialContext();
Object ref = 
jndiContext.lookup("<%= $package %>/<%= $table.name %>");
<%= $table.name %> home = (<%= $table.name %>)ref;
return home;
}catch (Exception e){
throw new EJBException("<%= $table.name %>.getHome() failed: " + e.g
etMessage());
}
}
//===================================================================
public Integer ejbCreate(
<%  first = TRUE
$table.columnsArray.each{ |column|
%>    <% if !first %>,<% end %><%= column.javaType %> <%= column.name %>
<%    first = FALSE
}
%>    )
{
<%  $table.columnsArray.each{ |column|
if column.isPrimaryKey && !column.references && column.javaType==JAVA_
INTEGER
%>    set<%= column.upfirstName %>(Sequence.next("<%= $table.getSequenceNa
me %>"));
<%    else
%>    set<%= column.upfirstName %>(<%= column.name %>); 
<%    end
}
%>
return null;
}
//===================================================================
public void ejbPostCreate(
<%  first = TRUE
$table.columnsArray.each{ |column|
%>    <% if !first %>,<% end %><%= column.javaType %> <%= column.name %>
<%    first = FALSE
}
%>    )
{
// set CMR fields here
}
VB.NET Image: Visual Basic .NET Guide to Draw Text on Image in .
you can adjust the text font, font size, font type (regular LoadImage) Dim DrawFont As New Font("Arial", 16 & profession imaging controls, PDF document, image to
pdf file compression; adjust size of pdf
C# Image: Use C# Class to Insert Callout Annotation on Images
GIF, PNG, BMP, JPEG, TIFF, PDF & Word Easy to set annotation filled font property individually Support adjusting callout annotation size parameter in an easy
adjust size of pdf in preview; pdf markup text size
306
APPENDIX C
EJBG
EN
CODE
AND
TEMPLATES
//===================================================================
<%  $table.columnsArray.each{ |column|
%>  public abstract <%= column.javaType %> get<%= column.upfirstName %>();
public abstract void set<%= column.upfirstName %>(<%= column.javaType %>
<%= column.name %>);
<%  } 
%>
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setEntityContext(EntityContext ctx) { this.ctx = ctx; }
public void unsetEntityContext() { this.ctx = null; }
public void ejbLoad() {}
public void ejbStore() {}
}
This is the bean created by the template for the Book table:
// BookEntityBean.java
package gen;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.EJBException;
import jutil.Sequence;
import javax.naming.InitialContext;
public abstract class BookEntityBean implements EntityBean {
transient private EntityContext ctx;
public static BookEntityHome getHome(){
try {
InitialContext jndiContext = new InitialContext();
Object ref = 
jndiContext.lookup("gen/BookEntity");
BookEntityHome home = (BookEntityHome)ref;
return home;
}catch (Exception e){
throw new EJBException("BookEntityBean.getHome() failed: " + 
e.getMessage());
}
}
//===================================================================
public Integer ejbCreate(
Integer bookID
,String title
,String ISBN
,Integer authorID
,Integer publisherID
,Integer status
,Integer numCopies
Generate Image in .NET Winforms Imaging Viewer| Online Tutorials
Click "Font" to choose human-readable text font style, color, size and effects Multi-page Tiff Processing; RasterEdge OCR Engine; PDF Reading; Encode & Decode
pdf page size dimensions; change paper size in pdf document
C# PDF: Use C# Code to Add Watermark to PDF Document
into your C#.NET class application, developers can easily add a transparent watermark with desired font color, size and position onto target PDF document page.
change font size pdf comment box; pdf reduce file size
T
HE
ENTITY
TEMPLATES
307
)
{
setBookID(Sequence.next("Book_bookID_seq"));
setTitle(title); 
setISBN(ISBN); 
setAuthorID(authorID); 
setPublisherID(publisherID); 
setStatus(status); 
setNumCopies(numCopies); 
return null;
}
//===================================================================
public void ejbPostCreate(
Integer bookID
,String title
,String ISBN
,Integer authorID
,Integer publisherID
,Integer status
,Integer numCopies
)
{
// set CMR fields here
}
//===================================================================
public abstract Integer getBookID();
public abstract void setBookID(Integer bookID);
public abstract String getTitle();
public abstract void setTitle(String title);
public abstract String getISBN();
public abstract void setISBN(String ISBN);
public abstract Integer getAuthorID();
public abstract void setAuthorID(Integer authorID);
public abstract Integer getPublisherID();
public abstract void setPublisherID(Integer publisherID);
public abstract Integer getStatus();
public abstract void setStatus(Integer status);
public abstract Integer getNumCopies();
public abstract void setNumCopies(Integer numCopies);
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setEntityContext(EntityContext ctx) { this.ctx = ctx; }
public void unsetEntityContext() { this.ctx = null; }
public void ejbLoad() {}
public void ejbStore() {}
}
308
APPENDIX C
EJBG
EN
CODE
AND
TEMPLATES
C.3
T
HE
JSP 
TEMPLATES
The EJB generator also builds JSP files to test the generated classes. This section shows
examples of only one of the JSP templates; the full collection is available on www.code-
generationinaction.com.
C.3.1
The Add.jsp.template
The Add template (listing C.6) builds JSP pages that use the beans to add new records
to the database.
<%%@ page language="java" %%>
<%%@ page import="<%= $package %>.*" %%>
<%%@ page import="java.util.*" %%>
<%%
<%= $table.name %> ssb =
SSFactory.create<%= $table.name %>();
if(request.getParameter("doSubmit") != null){
<%= $table.name %> val = new <%= $table.name %>();
<%  $table.columnsArray.each{ |column|
next if column.isPrimaryKey
%>    val.set<%= column.upfirstName %>(request.getParameter("<%= column.na
me %>").equals("") ? null : <%= column.stringConverter %>(request.getParam
eter("<%= column.name %>")));
<%  }
%>
ssb.add(val);
ssb.remove();
%%>
<jsp:forward page="<%= $table.name %>.jsp" />
<%%
}
%%>
<head>
<title>Add <%= $table.name %></title>
</head>
<body>
<h1>Add <%= $table.name %></h1>
<form>
<table border=0>
<%  $table.columnsArray.each{ |column|
%><tr>
<td><%= column.name %></td>
<td>
<%    if column.isPrimaryKey
%>  &nbsp;
Listing C.6 6 Add.jsp.template 
T
HE
JSP 
TEMPLATES
309
<%    else
%>  <input type=text name=<%= column.name %>>
<%    end
%>
<td>
<%= column.sqlType %> 
<% if column.charLength %>(<%= column.charLength %>)<% end %>
<% if column.isUnique %><% end %>
<% if column.isNotNull %> null<% end %>
<% if column.references %> <a href="<%= column.references.table.name %>.
jsp"><%= column.references.table.name %></a><% end %>
</td>
</tr>
<%  }
%>
</table>
<input type="submit" name="doSubmit">
</form>
</body>
</html>
<%%
ssb.remove();
%%>
Figure C.1 shows the output of the Add template for the Book table. We kept the
HTML simple so that the example would be short, but keep in mind that these are just
test pages. The production pages are built by a different mechanism, with different
mappings between pages and database entities.
Figure C.1
The generated Add 
Book test page
310
APPENDIX C
EJBG
EN
CODE
AND
TEMPLATES
C.4
T
HE
DEPLOYMENT
DESCRIPTOR
TEMPLATES
To actually run the beans on the application server, you need several deployment
descriptors. In this section, we show one of the templates for the deployment descrip-
tors. The others are in the complete code package available on the www.codegenera-
tioninaction.com web site.
C.4.1
jboss.xml.template
Listing C.7 contains the template for the JBoss descriptor file. The descriptor contains
references to each of the session and entity classes in the compiled JAR file.
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<%  $tables.values.each { |table|
%>
<entity>
<ejb-name><%= table.name %></ejb-name>
<local-jndi-name><%= $package %>/<%= table.name %></local-jndi-name>
</entity>
<session>
<ejb-name><%= table.name %></ejb-name>
<jndi-name><%= $package %>/<%= table.name %></jndi-name>
</session>    
<%  }
%>
</enterprise-beans>
</jboss>
The output of the template JBoss deployment descriptor template is shown here:
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<entity>
<ejb-name>BookEntityEJB</ejb-name>
<local-jndi-name>gen/BookEntity</local-jndi-name>
</entity>
<session>                   
<ejb-name>BookSS</ejb-name>       
<jndi-name>gen/BookSS</jndi-name>  
</session>    
<entity>
<ejb-name>AuthorEntityEJB</ejb-name>
<local-jndi-name>gen/AuthorEntity</local-jndi-name>
</entity>
<session>                   
Listing C.7 7 jboss.xml.template
T
HE
SQL 
TEMPLATE
311
<ejb-name>AuthorSS</ejb-name>       
<jndi-name>gen/AuthorSS</jndi-name>  
</session>    
<entity>
<ejb-name>PublisherEntityEJB</ejb-name>
<local-jndi-name>gen/PublisherEntity</local-jndi-name>
</entity>
<session>                   
<ejb-name>PublisherSS</ejb-name>       
<jndi-name>gen/PublisherSS</jndi-name>  
</session>    
</enterprise-beans>
</jboss>
C.5
T
HE
SQL 
TEMPLATE
The generator creates SQL for the tables, sequence generators, and relationships within
the database. The template in the case study generator is designed to build SQL for the
Postgres database. Other database engines require slightly altered syntax.
C.5.1
The tables.sql.template
The template for building PostgreSQL code is shown in listing C.8.
<% 
$tables.values.each{ |table| 
%>
drop table <%= table.name %>;
create table <%= table.name %> 
<%    first = TRUE
table.columnsArray.each{ |column|
%>    <% if !first %>,<% end %><%= column.name %> <%= column.sqlType %><% 
if column.charLength %>(<%= column.charLength %>)<% end %> <% if column.is
NotNull %> null <% end %><% if column.isPrimaryKey %> key <% end %><% if c
olumn.isUnique %> <% end %>
<%      first = FALSE
}
%>  );
grant all on <%= table.name %> to public;
<%    if table.hasSequence
%>
drop sequence <%= table.getSequenceName %>;
create sequence <%= table.getSequenceName %> start 100;
Listing C.8 8 tables.sql.template
Documents you may be interested
Documents you may be interested