From the wicket-user list
to use, you do something like the following...
1. create DatabaseWebApplication subclass, set database and create custom session factory (which you probably need to do anyway)
Code Block |
---|
public class VoiceTribeWebApplication extends DatabaseWebApplication { {panel} public VoiceTribeWebApplication() { setDatabase(new VoiceTribeDatabase()); } {panel} {panel} protected ISessionFactory getSessionFactory() { return new ISessionFactory() { public Session newSession() { return new VoiceTribeWebSession(VoiceTribeWebApplication.this); } }; } {panel} {panel} ... {panel} } |
2. create trivial DatabaseWebSession subclass returned by custom session factory. again, you probably need to do this anyway for a real application that has something like a user that signs in... so no extra work here.
Code Block |
---|
public class VoiceTribeWebSession extends DatabaseWebSession { {panel} // Any session data here (like signed-in user) {panel} {panel} public VoiceTribeWebSession(VoiceTribeWebApplication application) { super(application); } {panel} {panel} ... {panel} } |
3. create database subclass. call any subclass-specific configuration methods. then call formatTables() to set up a fresh database (or don't if you don't want to start over each time)
Code Block |
---|
public class VoiceTribeDatabase extends MySqlHibernateDatabase { {panel} public VoiceTribeDatabase() { final Configuration configuration = newAnnotationConfiguration(); configuration.addClass(User.class); configuration.addClass(Commentary.class); configure(configuration); formatTables(); populateTables(); } {panel} {panel} private void populateTables() { final User jonathan = new User(); jonathan.setFirstName("Jonathan"); jonathan.setLastName("Locke"); {panel} {panel} final DatabaseSession session = newDatabaseSession(); session.save(jonathan); session.close(); } {panel} } |
4. create base web page to hold DAOs.
Code Block |
---|
public class VoiceTribeWebPage extends DatabaseWebPage { {panel} ... {panel} {panel} protected final UserDao getUserDao() { return (UserDao)newDao(UserDao.class); } {panel} } |
5. create DAOA impl. for your particular database subtype (note, only find methods are required since save/update/etc are generic to any Database/DatabaseSession subclass)
Code Block |
---|
public final class UserDao extends HibernateDao { {panel} public User findUser(String email) { try { Query query = getHibernateSession().createQuery( "from " + User.class.getName() + " as u where u.email = :email"); query.setString("email", email); return (User)query.uniqueResult(); } catch (Exception e) { throw new DatabaseException(e); } } {panel} {panel} public List findUsers() { return super.findAll(User.class); } {panel} } |
6. subclass your new base page with the DAOs in it and use them... when you're ready to save/update/etc, there are generic methods in DatabaseWebPage.
Code Block |
---|
public class UserEditPage extends VoiceTribeWebPage { {panel} public UserEditPage() { final User user = getUserDao().findUser(...); if (user != null) { add(new UserEditForm(user)); } } {panel} {panel} public class UserEditForm extends UploadForm { ... {panel} {panel} @Override protected void onSubmit() { User user = (User)getModelObject(); {panel} {panel} // Update using database associated with // application that created this web page update(user); } } {panel} } |