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 <[email protected]>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 <
> [email protected]> 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/>
>