Phone Directory Example with Derby or Postgresql

Get help using Databinder, suggest new features, report bugs, and save the princess.

Phone Directory Example with Derby or Postgresql

Postby jklcom99 on Fri Mar 09, 2007 11:08 am

Hi,

Has anyone gotten the Phone Directory example to work with Derby or Postgresql?

Derby doesn't seem to understand sub tables

And for Postgresql I'm getting this:

SEVERE: ERROR: operator does not exist: integer = bytea
Mar 9, 2007 11:07:05 AM wicket.RequestCycle step
SEVERE: Error attaching this container for rendering: [MarkupContainer [Component id = contacts, page = example.ListAndEdit, path = 0:contactsWrap:contacts.ListAndEdit$5, isVisible = true, isVersioned = false]]
wicket.WicketRuntimeException: Error attaching this container for rendering: [MarkupContainer [Component id = contacts, page = example.ListAndEdit, path = 0:contactsWrap:contacts.ListAndEdit$5, isVisible = true, isVersioned = false]]

Thank you
jklcom99
 
Posts: 4
Joined: Thu Mar 08, 2007 2:17 pm

Postby Nathan on Fri Mar 09, 2007 2:43 pm

A couple of people have used Databinder with Derby; I'm not aware of any specific changes they had to make. For the Postgresql error, could you give me the full stack trace?
Nathan
Site Admin
 
Posts: 422
Joined: Thu Mar 30, 2006 12:58 am
Location: New York

Postby jklcom99 on Fri Mar 09, 2007 4:27 pm

I was able to run other examples with derby except for the phone directory example. it gives these error at start up for derby

INFO: building session factory
Mar 9, 2007 4:25:38 PM org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
Mar 9, 2007 4:25:38 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: Running hbm2ddl schema update
Mar 9, 2007 4:25:38 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: fetching database metadata
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: updating schema
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: table found: .DALI.CONTACT
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: columns: [id, phonenumber, name, category_id, version]
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: foreign keys: []
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: indexes: [sql070308020909000]
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: table not found: Contact$Category
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: table not found: Contact$Category
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: table found: .DALI.HIBERNATE_UNIQUE_KEY
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: columns: [next_hi]
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: foreign keys: []
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: indexes: []
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
SEVERE: Unsuccessful: create table Contact$Category (id integer not null, name varchar(255), primary key (id))
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
SEVERE: Lexical error at line 1, column 21. Encountered: "$" (36), after : "".
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
SEVERE: Unsuccessful: alter table Contact add constraint FK9BEFBC003C95C142 foreign key (category_id) references Contact$Category
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
SEVERE: Lexical error at line 1, column 99. Encountered: "$" (36), after : "".
Mar 9, 2007 4:25:39 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: schema update complete

***************************************************************************************************

FOR POSTGRESQL IT GIVES THIS ERROR when try to access the page


WicketMessage: Error attaching this container for rendering: [MarkupContainer [Component id = contacts, page = example.ListAndEdit, path = 0:contactsWrap:contacts.ListAndEdit$5, isVisible = true, isVersioned = false]]Root cause:org.postgresql.util.PSQLException: ERROR: operator does not exist: integer = bytea at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1525) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1309) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:354) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:258) at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) at org.hibernate.loader.Loader.getResultSet(Loader.java:1668) at org.hibernate.loader.Loader.doQuery(Loader.java:662) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224) at org.hibernate.loader.Loader.doList(Loader.java:2144) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028) at org.hibernate.loader.Loader.list(Loader.java:2023) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:393) at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338) at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) at net.databinder.models.HibernateListModel.load(HibernateListModel.java:97) at wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:113) at wicket.Component.getModelObject(Component.java:990) at wicket.markup.html.list.ListView.getViewSize(ListView.java:213) at wicket.markup.html.list.ListView.internalOnAttach(ListView.java:534) at wicket.Component.internalAttach(Component.java:2560) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:341) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:354) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:354) at wicket.Page.renderPage(Page.java:383) at wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:226) at wicket.request.compound.DefaultResponseStrategy.respond(DefaultResponseStrategy.java:49) at wicket.request.compound.AbstractCompoundRequestCycleProcessor.respond(AbstractCompoundRequestCycleProcessor.java:66) at wicket.RequestCycle.doProcessEventsAndRespond(RequestCycle.java:902) at wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:929) at wicket.RequestCycle.step(RequestCycle.java:1010) at wicket.RequestCycle.steps(RequestCycle.java:1084) at wicket.RequestCycle.request(RequestCycle.java:454) at wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:219) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:459) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:231) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:629) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:389) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141) at org.mortbay.jetty.Server.handle(Server.java:303) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:452) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:721) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:509) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:349) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:320) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)Complete stack:wicket.WicketRuntimeException: Error attaching this container for rendering: [MarkupContainer [Component id = contacts, page = example.ListAndEdit, path = 0:contactsWrap:contacts.ListAndEdit$5, isVisible = true, isVersioned = false]] at wicket.MarkupContainer.internalAttach(MarkupContainer.java:361) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:354) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:354) at wicket.Page.renderPage(Page.java:383) at wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:226) at wicket.request.compound.DefaultResponseStrategy.respond(DefaultResponseStrategy.java:49) at wicket.request.compound.AbstractCompoundRequestCycleProcessor.respond(AbstractCompoundRequestCycleProcessor.java:66) at wicket.RequestCycle.doProcessEventsAndRespond(RequestCycle.java:902) at wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:929) at wicket.RequestCycle.step(RequestCycle.java:1010) at wicket.RequestCycle.steps(RequestCycle.java:1084) at wicket.RequestCycle.request(RequestCycle.java:454) at wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:219)org.hibernate.exception.SQLGrammarException: could not execute query at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.loader.Loader.doList(Loader.java:2147) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028) at org.hibernate.loader.Loader.list(Loader.java:2023) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:393) at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338) at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) at net.databinder.models.HibernateListModel.load(HibernateListModel.java:97) at wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:113) at wicket.Component.getModelObject(Component.java:990) at wicket.markup.html.list.ListView.getViewSize(ListView.java:213) at wicket.markup.html.list.ListView.internalOnAttach(ListView.java:534) at wicket.Component.internalAttach(Component.java:2560) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:341) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:354) at wicket.MarkupContainer.internalAttach(MarkupContainer.java:354) at wicket.Page.renderPage(Page.java:383) at wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:226) at wicket.request.compound.DefaultResponseStrategy.respond(DefaultResponseStrategy.java:49) at wicket.request.compound.AbstractCompoundRequestCycleProcessor.respond(AbstractCompoundRequestCycleProcessor.java:66) at wicket.RequestCycle.doProcessEventsAndRespond(RequestCycle.java:902) at wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:929) at wicket.RequestCycle.step(RequestCycle.java:1010) at wicket.RequestCycle.steps(RequestCycle.java:1084) at wicket.RequestCycle.request(RequestCycle.java:454) at wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:219)


Page
[Page class = example.ListAndEdit, id = 0]:

# Path Size Type Model Object
1 _<body> 425 bytes wicket.markup.html.internal.HtmlBodyContainer
2 categoryFilter 9.6K wicket.markup.html.form.DropDownChoice
3 contactsWrap 9.6K net.databinder.components.Wrapper
4 contactsWrap:contacts 9.6K wicket.markup.html.list.PropertyListView
5 dataStylesheet 1.4K net.databinder.components.StyleLink
6 editForm 9.6K net.databinder.components.DataForm example.Contact@17d16fe
7 editForm:category 1.3K wicket.markup.html.form.DropDownChoice
8 editForm:delete 9.6K wicket.markup.html.form.Button
9 editForm:editHeader 9.6K wicket.markup.html.WebMarkupContainer unable to get object, model: Model:classname=[wicket.model.BoundCompoundPropertyModel]:attached=true:nestedModel=[Model:classname=[net.databinder.models.HibernateObjectModel]:attached=true:tempModelObject=[example.Contact@17d16fe]]:bindings=[], called with component [MarkupContainer [Component id = editHeader, page = example.ListAndEdit, path = 0:editForm:editHeader.ListAndEdit$EditForm$1, isVisible = false, isVersioned = false]]
10 editForm:editHeader:name 331 bytes wicket.markup.html.basic.Label
11 editForm:editHeader:newLink 9.6K wicket.markup.html.link.Link unable to get object, model: Model:classname=[wicket.model.BoundCompoundPropertyModel]:attached=true:nestedModel=[Model:classname=[net.databinder.models.HibernateObjectModel]:attached=true:tempModelObject=[example.Contact@17d16fe]]:bindings=[], called with component [MarkupContainer [Component id = newLink, page = example.ListAndEdit, path = 0:editForm:editHeader:newLink.ListAndEdit$EditForm$2, isVisible = true, isVersioned = false]]
12 editForm:name 803 bytes wicket.markup.html.form.RequiredTextField
13 editForm:newHeader 9.6K wicket.markup.html.WebMarkupContainer unable to get object, model: Model:classname=[wicket.model.BoundCompoundPropertyModel]:attached=true:nestedModel=[Model:classname=[net.databinder.models.HibernateObjectModel]:attached=true:tempModelObject=[example.Contact@17d16fe]]:bindings=[], called with component [MarkupContainer [Component id = newHeader, page = example.ListAndEdit, path = 0:editForm:newHeader.ListAndEdit$EditForm$3, isVisible = true, isVersioned = false]]
14 editForm:phoneNumber 630 bytes wicket.markup.html.form.TextField
15 feedback 1.3K wicket.markup.html.panel.FeedbackPanel
16 feedback:feedbackul 9.6K wicket.markup.html.WebMarkupContainer
17 feedback:feedbackul:messages 9.6K wicket.markup.html.list.ListView []
18 pageTitle 9.6K wicket.markup.html.basic.Label Phone Directory
19 pageTitleHeader 9.6K wicket.markup.html.basic.Label Phone Directory
20 search 9.6K net.databinder.components.SearchPanel
21 search:searchForm 9.6K wicket.markup.html.form.Form
22 search:searchForm:clearWrap 9.6K net.databinder.components.Wrapper
23 search:searchForm:clearWrap:clearLink 9.6K wicket.ajax.markup.html.AjaxLink
24 search:searchForm:clearWrap:clearLink:clear 1.5K wicket.markup.html.image.Image
25 search:searchForm:searchWrap 9.6K net.databinder.components.Wrapper
26 search:searchForm:searchWrap:search 9.6K wicket.markup.html.form.TextField
27 search:searchStylesheet 1.3K net.databinder.components.StyleLink
28 stylesheet 1.7K net.databinder.components.StyleLink
jklcom99
 
Posts: 4
Joined: Thu Mar 08, 2007 2:17 pm

Postby Nathan on Sun Mar 11, 2007 9:35 am

It looks like derby doesn't like table names having a $ in them, like Contacts$Category. I think if you do @Entity (name = "ContactsCategory") before that nested class it will work fine. The PostgreSQL error isn't so clear; maybe triggered by the dollar sign as well? It's worth a try.
Nathan
Site Admin
 
Posts: 422
Joined: Thu Mar 30, 2006 12:58 am
Location: New York

Postby jklcom99 on Mon Mar 12, 2007 5:20 pm

You're right, derby doesn't like $ in table name. It is working in derby now.

But I'm running into a couple of problems when I added another form(EditCategoryForm) to ListAndEdit.
When the page is loaded, EditCategoryForm will be hidden. There is a link(Add category) on EditForm, when click it will hide EditForm then show EditCategoryForm. But there is an exception saying:

WicketMessage: unable to get object, model: Model:classname=[wicket.model.BoundCompoundPropertyModel]:attached=true:nestedModel=[Model:classname=[net.databinder.models.HibernateObjectModel]:attached=true:tempModelObject=[example.Category@6d65fd]]:bindings=[], called with component [MarkupContainer [Component id = category, page = example.ListAndEdit, path = 1:categoryContainer:editCategoryForm:category.DropDownChoice, isVisible = true, isVersioned = false]]

Root cause:

wicket.WicketRuntimeException: No get method defined for class: class example.Category expression: category

*****************************************************************************

if commented out
/*
DropDownChoice category = new DropDownChoice("category", categoryListModel);
category.setNullValid(true);
add(category);
*/
the form loads ok, but when tried to add new category will get this error:
WicketMessage: Method onFormSubmitted of interface wicket.markup.html.form.IFormSubmitListener targeted at component [MarkupContainer [Component id = editCategoryForm, page = example.ListAndEdit, path = 2:categoryContainer:editCategoryForm.ListAndEdit$EditCategoryForm, isVisible = true, isVersioned = false]] threw an exception

Root cause:

org.hibernate.MappingException: Unknown entity: example.Category

********************************************************

EditCategoryForm which looks like this

public class EditCategoryForm extends DataForm {
public EditCategoryForm(String id) {
super(id, Category.class);
// use one of two headers depending on ID state
WebMarkupContainer editCategoryHeader = new WebMarkupContainer("editCategoryHeader") {
public boolean isVisible() {
return getCategory().getId() != null;
}
};
add(editCategoryHeader.add(new Label("name")));
editCategoryHeader.add(new Link("newCategoryLink") {
public void onClick() {
clearPersistentObject();
}
});
WebMarkupContainer newCategoryHeader = new WebMarkupContainer("newCategoryHeader") {
public boolean isVisible() {
return getCategory().getId() == null;
}
};
add(newCategoryHeader);
newCategoryHeader.add(new Link("contactLink") {
public void onClick() {
contactContainer.setVisible(true);
categoryContainer.setVisible(false);
}
});

// label appears in failed validation message
add(new RequiredTextField("name").setLabel(new Model("category name")));
/*
DropDownChoice category = new DropDownChoice("category", categoryListModel);
category.setNullValid(true);
add(category);
*/
add(new Button("delete"){
/** Perform Category delete. */
protected void onSubmit() {
deletePersistentObject();
// commit transaction
DataRequestCycle.getHibernateSession().getTransaction().commit();
clearPersistentObject();
}
/** Hide if not yet saved. */
public boolean isVisible() {
return getCategory().getId() != null;
}
}.setDefaultFormProcessing(false)); // default processing saves object
}

/** Convenience, retrieve and cast our model. */
protected Category getCategory() {
return (Category) getModelObject();
}
}


Category entity

@Entity (name="ContactsCategory")
public class Category implements Serializable {

private Integer id;
private String name;
private Integer version = 0;

@Id @GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/** Enable optimistic locking. */
@Version
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
}
jklcom99
 
Posts: 4
Joined: Thu Mar 08, 2007 2:17 pm

Postby Nathan on Tue Mar 13, 2007 2:38 pm

Are you adding the Category class to the Hibernate configuration in your application class? Usually, an unknown entity means you either haven't done that, or haven't used the javax.persistence.Entity annotation for the class (and it must be that one, not the org.hibernate...).
Nathan
Site Admin
 
Posts: 422
Joined: Thu Mar 30, 2006 12:58 am
Location: New York


Return to Databinder Questions

Who is online

Users browsing this forum: Google [Bot] and 0 guests

cron