JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);
Панель еще не добавлена в фрейм, поэтому вы не можете использовать описанный выше метод в конструкторе для доступа к родительскому фрейму.
Если вы действительно хотите добавить ComponentMover в класс пользовательской панели, вы можете переопределить метод addNotify ():
@Override
public void addNotify()
{
super.addNotify();
JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);
ComponentMover cm = new ComponentMover(frame, this);
}
Неверно, это просто заполнит ваш код кодом управления сеансом.
Во-первых, добавьте компонент управления транзакциями в свой контекст:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
Во-вторых, расширить AbstractTransactionalJUnit4SpringContextTests
public class BaseDALTest
extends AbstractTransactionalJUnit4SpringContextTests{
В-третьих вещь, аннотируйте свой тестовый класс с помощью
@TransactionConfiguration
@Transactional
Если разграничение вашей транзакции правильное (вокруг вашего dao или службы), вам следует закончить.
Нехорошо разбрасывать код обработки сеанса и транзакции вокруг вашего кода (даже внутри ваших тестов ).
Ага.
Сеанс сеанса =
sessionFactory.openSession ();
Session session = sessionFactory.getCurrentSession();
Ой.
(Отредактировано, так как это было неправильно, и получил голосование).
С приведенной выше конфигурацией Spring должно быть достаточно кода
Session session = sessionFactory.getCurrentSession();
в вашем методе и классе для тестирования. Управление сеансом осуществляется с помощью тестовой конфигурации Hibernate / Spring / JUnit, как это делается позже в конфигурации Hibernate / Spring в реальном приложении.
Вот как это работало для моих тестов. В окончательном веб-приложении автоматически будет сеанс Hibernate, связанный с текущим веб-запросом, поэтому при тестировании не должно быть вызова sessionFactory.openSession ()
.
Пожалуйста, обратитесь к документации по Spring. Там есть целая глава по тестированию, и раздел по управлению транзакциями:
У меня был успех в расширении AbstractTransactionalJUnit4SpringContextTests, но есть обходной путь:
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
// DAO has access to the session through sessionFactory.getCurrentSession()
myDao.findSomething(id);
}
});