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.