|
Emerging Technology
Fall Semester, 2004 Database & Web |
|
|---|---|---|
|
© 2004, All Rights Reserved, SDSU & Roger Whitney San Diego State University -- This page last updated 07-Dec-04 |
CS 683 Emerging Technologies Fall Semester, 2004 Doc 33 Database & Web
Copyright ©, All rights reserved. 2004 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA. OpenContent ( http://www.opencontent.org/opl.shtml) license defines the copyright on this document
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 2 |
package cs683;
public class Address {
String street;
String city;
long id;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 3 |
package cs683;
public class Person {
String firstName;
String lastName;
Address address;
long id;
public Person () { }
public Person(String first, String last) {
firstName = first;
lastName = last;
}
public String getLastName() { return lastName; }
public String getFirstName() { return firstName; }
public void setFirstName( String name) { firstName = name; }
public void setLastName( String name) { lastName = name; }
public long getId() { return id; }
public void setId(long l) {id = l; }
public String toString() { return firstName + " " + lastName ; }
public Address getAddress() { return address; }
public void setAddress(Address address) { this.address = address; }
}
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 4 |
package cs683;
import java.util.List;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class DbAccessor
{
Session dbAccess;
public String hello() { return "hi there"; }
public void close() throws HibernateException { dbAccess.close(); }
public List performRead(String query) throws Exception
{
if (dbAccess == null)
dbAccess= getHibernateSession();
return dbAccess.createQuery(query).list();
}
public Session getHibernateSession() throws Exception
{
Configuration config = new Configuration();
config.addClass(cs683.Person.class);
config.addClass(cs683.Address.class);
SessionFactory sessions = config.buildSessionFactory();
Session session = sessions.openSession();
return session;
}
}
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 5 |
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping package="cs683"> <class name="Person" table="people"> <id name="id" type="long" column="id"> <generator class="increment"/> </id> <many-to-one name="address" class="cs683.Address" column="address_id" unique="true" cascade="all" /> <property name="lastName" column="last_name" type="string" not-null="false" length="50" /> <property name="firstName" column="first_name" type="string" not-null="false" length="50" /> </class> </hibernate-mapping>
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 6 |
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping package="cs683"> <class name="Address" table="addresses" > <id name="id" type="long" column="id" > <generator class="increment"/> </id> <property name="street" column="street" type="string" not-null="false" length="50" /> <property name="city" column="city" type="string" not-null="false" length="50" /> </class> </hibernate-mapping>
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 7 |
cocoon/ is the cocoon directory
Place them in
cocoon/WEB-INF/lib
The following jar files are already part of Cocoon
and the ant jar files are not needed.
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 8 |
Place them in
So we have
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 9 |
Directory for cocoon files:
Files
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 10 |
<?xml version="1.0" encoding="UTF-8"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators default="file"> <!-- in this example we use JXTemplateGenerator to insert Flow variables in page content --> <map:generator label="content,data" logger="sitemap.generator.jx" name="jx" src="org.apache.cocoon.generation.JXTemplateGenerator"/> </map:generators> <map:transformers default="xslt"/> <map:serializers default="html"/> <map:matchers default="wildcard"/> <map:selectors default="browser"> <map:selector name="exception" src="org.apache.cocoon.selection.XPathExceptionSelector"> <exception name="invalid-continuation" class="org.apache.cocoon.components.flow.InvalidContinuationException"/> <exception class="java.lang.Throwable" unroll="true"/> </map:selector> </map:selectors> <map:actions/> <map:pipes default="caching"/> </map:components> <map:views/> <map:resources/> <map:action-sets/> <map:flow language="javascript"> <map:script src="flow/example.js"/> </map:flow>
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 11 |
<map:pipelines>
<map:component-configurations>
<global-variables/>
</map:component-configurations>
<map:pipeline>
<map:match pattern="*.html">
<map:call function="{1}"/>
</map:match>
<map:match pattern="*.vm">
<map:generate type="velocity" src="documents/{1}.vm"/>
<map:serialize type="html"/>
</map:match>
<map:match pattern="*.kont">
<map:call continuation="{1}"/>
</map:match>
<map:handle-errors>
<map:select type="exception">
<map:when test="invalid-continuation">
<map:generate src="documents/invalidContinuation.html"/>
<map:serialize type="xhtml"/>
</map:when>
</map:select>
</map:handle-errors>
</map:pipeline>
</map:pipelines>
</map:sitemap>
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 12 |
importClass(Packages.cs683.DbAccessor);
function selection() {
var test = new DbAccessor();
var people = test.performRead("select p from Person p ");
cocoon.sendPage( "selection.vm", {list:people});
}
Don’t forget the Packages prefix in the import
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 13 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>Selection</title> </head> <body> Here is the data you requested. <ul> #foreach( $person in $list ) <li>$person.getFirstName() $person.lastName, $person.address.city</li> #end </ul> </body> </html>
$person.lastName calls the getter method
$person.address.city is same as $person.getAddress().getCity()
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 14 |
Changes to
Are dynamically updated
http://cocoon.apache.org/2.1/userdocs/flow/java.html#Dynamic+Compilation
I was not able to get Java code to compile dynamically
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 15 |
When you deploy put the java classes in a jar file
Place the following in a jar file
Place the jar file in cocoon/WEB-INF/lib
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 16 |
Seaside classes may need to import Glorp namespace
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 17 |
Smalltalk defineClass: #DatabaseSession
superclass: #{Seaside.WASession}
indexedType: #none
private: false
instanceVariableNames: 'dbSession '
classInstanceVariableNames: ''
imports: '
Glorp.*
Seaside.*
'
category: 'Cs683Assignment4'
new ^super new initialize
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 18 |
initialize | login accessor | login := (Login new) database: PostgreSQLPlatform new; username: 'cs683whitney'; password: 'secret'; connectString: 'bismarck.sdsu.edu_cs683whitney'. accessor := DatabaseAccessor forLogin: login. accessor logging: false; login. dbSession := GlorpSession new. dbSession system: (Assignment4Descriptor forPlatform: login database). dbSession accessor: accessor close dbSession accessor logout dbSession ^dbSession
| CS 683 Fall 04 | Doc 33, Database & Web Slide # 19 |
Smalltalk defineClass: #SimpleCourseDataDisplay
superclass: #{Seaside.WAComponent}
indexedType: #none
private: false
instanceVariableNames: 'instructor course '
classInstanceVariableNames: ''
imports: '
Seaside.*
'
category: 'Cs683Assignment4'
canBeRoot ^ true
renderContentOn: html | instructors | instructors := self fetchInstructors. html list: instructors do: [:each | html text: each name] fetchInstructors ^self session dbSession readManyOf: Instructor orderBy: [:each | each name]
Copyright ©, All rights reserved.
2004 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA.
OpenContent license defines the copyright on this document.