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/>