Гобелен @CommitAfter на методе за пределами страницы

Я пытаюсь выполнять транзакции с базой данных за пределами страницы в специальном классе DAO.

Этот ответ немного помог, однако после выполнения инструкций по официальный сайт транзакции все еще не совершаются. Я не получаю никаких ошибок - я вижу, что запросы вставки выполняются, но в базе данных нет записей.

Должны ли классы и интерфейсы DAO находиться в определенных пакетах, чтобы @Match() мог их найти? Это единственное, что может вызвать проблему, с которой я столкнулся ...

Вот весь (я надеюсь) соответствующий код:

AppModule

public static void bind(ServiceBinder binder) {
    binder.bind(MemberDAOInterface.class, MemberDAO.class);
}

@Match("*DAO*")
public static void adviseTransactions(HibernateTransactionAdvisor advisor,
        MethodAdviceReceiver receiver) {
    advisor.addTransactionCommitAdvice(receiver);
}

ЧленDAOInterface

public interface MemberDAOInterface {
    @CommitAfter
    public void addMember(MemberEntity memberEntity);

    @CommitAfter
    public void updateMember(MemberEntity memberEntity);

    @CommitAfter
    public void deleteMember(MemberEntity memberEntity);
}

ЧленDAO

public class MemberDAO implements MemberDAOInterface {
    @Inject
    private Session session;

    public void addMember(MemberEntity memberEntity) {
        this.session.persist(memberEntity);
    }

    public void updateMember(MemberEntity memberEntity) {
        this.session.update(memberEntity);
    }

    public void deleteMember(MemberEntity memberEntity) {
        this.session.delete(memberEntity);
    }
}

person Eleeist    schedule 24.02.2013    source источник
comment
Я не вижу ничего очевидного - сначала я бы попробовал поставить несколько точек регистрации / останова вокруг HibernateTransactionAdvisor, чтобы увидеть, вызывается ли он.   -  person Steve Eynon    schedule 25.02.2013


Ответы (1)


Отвечая на ваш вопрос:

Должны ли классы и интерфейсы DAO находиться в определенных пакетах, чтобы функция @Match () могла их найти?

Я нашел в вопросе, о котором вы упомянули:

Аннотация @CommitAfter по умолчанию работает только в классах страниц / компонентов. Чтобы добиться такого же поведения в служебных объектах, вам понадобится этот дополнительный фрагмент кода.

Итак, да, ваш DAO должен быть гобеленом. Вам не нужно ставить им пакет услуг.

надеюсь, это поможет.

person Nicolas Barrera    schedule 25.02.2013
comment
извините, моя беда ... очевидно, что у вас есть свои дао в качестве услуг, поскольку вы показываете, что связываете их. откажитесь от моего ответа, пожалуйста. - person Nicolas Barrera; 25.02.2013