Any other thoughts on this? _______________________________________ Stephen Walsh | http://connectwithawalsh.com
On Thu, Mar 14, 2013 at 10:30 AM, Stephen Walsh < step...@connectwithawalsh.com> wrote: > 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/> >> > >