Thanks, Martin. I intialize here, (which I just realized is not the best spot):
private void setUpMongo() { mongo = MongoUtil.getMongo(); morphia = new Morphia().map(Blog.class).map(Person.class); blogDAO = new BlogDAO(mongo, morphia); } I am using the Wicket Guice module, and I think your second point is what I was getting at. From learning about Guice ( http://www.youtube.com/watch?feature=player_embedded&v=hBVJbzAagfs), I thought the point was to initialize once and then reuse wherever needed. I figured initialization would happen in the application class. Maybe I'm misunderstanding. If it's supposed to happen in the application class, then I don't really have need for a module because I don't have an interface in this case, right? Thanks for the help on this. _______________________________________ Stephen Walsh | http://connectwithawalsh.com On Thu, Mar 14, 2013 at 3:20 AM, Martin Grigorov <mgrigo...@apache.org>wrote: > Hi, > > I don't see how you initialize blogDAO. If you don't use wicket-ioc module > then you will need to lookup the DAO from the application whenever you need > it: > > public void onSubmit() { > > BlogDAO blogDao = MyApplication.get().getBlogDAO(); > blogDao.save(blog); > } > This way you wont keep reference to it in the page/component and it wont be > serialized. > > If you use wicket-guice module then you can do: > > @Inject > private BlogDAO blogDao; > > and use it anywhere. > Wicket will use Guice to lookup the bean at component creation but the bean > will be wrapped in a serializable proxy. That is a lightweight proxy will > be (de)serialized with the page. > This is the recommended way. > wicket-string works the same way. > wicket-cdi leaves the proxy creation to the CDI implementation. > > > > On Thu, Mar 14, 2013 at 5:19 AM, Stephen Walsh < > step...@connectwithawalsh.com> wrote: > > > I'm attempting to implement Guice for my DAO connections as my JBoss > server > > keeps running out of memory. Not entirely sure why that is, but I'm > hoping > > this is at least part of it. I read through > > http://markmail.org/message/sz64l4eytzc3ctkh and understand why the DAO > > needs to be serialized, and I also followed > > > > > https://cwiki.apache.org/confluence/display/WICKET/Wicket%2C+Guice+and+Ibatis+exampleto > > try and figure out where and how exactly to inject my DAO. > > > > My DAO already extends a basic DAO class that has all of the basics for > > getting stuff from the database. Neither of these are interfaces (not > sure > > if this is a problem or not). My DAO works just fine in panels, but as > > soon as it's on a page, it throws the not seralizable exception. > > Regardless it doesn't really solve the problem of really only needing > one > > DAO for the whole application instead of creating one whenever it's > needed > > in every place that it's needed. If I understand dependency injection, > > then this is the whole point. > > > > Here's my class. Hopefully someone can point me in the right direction > for > > this page and my application class: > > > > public class EditBlogEntry extends BasePage { > > > > private Logger logger = LoggerFactory.getLogger(EditBlogEntry.class); > > > > private Mongo mongo; > > private Morphia morphia; > > private BlogDAO blogDAO; > > > > public EditBlogEntry(final Blog blogEntry) { > > // Add edit blogPost form to page > > Form<?> form = new Form("form"); > > form.add(new Button("postIt") { > > @Override > > public void onSubmit() { > > // This merely gets a new mongo instance that has my blog > > entry mapped by morphia for saving the whole POJO to mongo > > setUpMongo(); > > blogDAO.save(blogEntry); > > BlogEntryDetails details = new BlogEntryDetails(new > > PageParameters().add("id", blogEntry.getObjectId().toString())); > > setResponsePage(details); > > } > > }); > > > > LoadableDetachableModel ldm = new LoadableDetachableModel() { > > @Override > > protected Object load() { > > // TODO need to set athr only on new blogEntry > > blogEntry.setAthr(CampingAwaitsSession.get().getUser()); > > return blogEntry; > > } > > }; > > > > form.add(new BlogEntryPanel("blogEntry", new > > CompoundPropertyModel<Blog>(ldm))); > > add(form); > > > > } > > > > Any thoughts? I feel like I understand the concept but the > implementation > > is throwing me. > > > > _______________________________________ > > Stephen Walsh | http://connectwithawalsh.com > > > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com <http://jweekend.com/> >