Sorry email prematurely sent. Exception with some output showing where the code is breaking. The first query using sessionManager in the test class runs, the second query in the service using the genericDAO fails.
[TestNG] Running: Command line suite [WARN ] (ConfigContext.java:257) - HSEARCH000075: Configuration setting hibernate.search.lucene_version was not specified, using LUCENE_CURRENT. [WARN ] (Config.java:360) - You should not use LUCENE_CURRENT as luceneMatchVersion property: if you use this setting, and then Solr upgrades to a newer release of Lucene, sizable changes may happen. If precise back compatibility is important then you should instead explicitly specify an actual Lucene version. testSendEmailReport size 1 sendSupervisorReminderEmail start genericDAO query [ERROR] (OperationTrackerImpl.java:192) - Service interface org.hibernate.Session is matched by 2 services: FullTextSession, Session. Automatic dependency resolution requires that exactly one service implement the interface. [ERROR] (OperationTrackerImpl.java:193) - Operations trace: [ERROR] (OperationTrackerImpl.java:202) - [ 1] Reloading class org.domain.etss.dao.impl.GenericDAOImpl. [ERROR] (OperationTrackerImpl.java:202) - [ 2] Creating plan to instantiate org.domain.etss.dao.impl.GenericDAOImpl via public org.healthresearch.etss.dao.impl.GenericDAOImpl(org.hibernate.Session) [ERROR] (OperationTrackerImpl.java:202) - [ 3] Determining injection value for parameter #1 (org.hibernate.Session) [ERROR] (OperationTrackerImpl.java:202) - [ 4] Resolving object of type org.hibernate.Session using MasterObjectProvider =============================================== Command line suite Total tests run: 1, Failures: 1, Skips: 0 =============================================== Java Result: 1 ***** AppModuleTest ***** public class AppModuleTest { public static void bind(ServiceBinder binder) { try { ClassLoader contextClassLoader = Thread.currentThread(). getContextClassLoader(); List<Class<?>> daos = PackageEnumerator.getClassesForPackage("org.healthresearch.etss.dao"); for (Class<?> dao : daos) { String pkg = dao.getPackage().getName(); String cls = dao.getSimpleName(); try { Class impl = contextClassLoader.loadClass(pkg + ".impl." + cls + "Impl"); binder.bind(dao, impl); } catch (ClassNotFoundException e) { // Ignore, we just won't bind that class. } } } catch (ClassNotFoundException e) { } // binder.bind(MyServiceInterface.class, MyServiceImpl.class); binder.bind(UserInfoService.class, UserInfoServiceImpl.class); binder.bind(TimeSheetService.class, TimeSheetServiceImpl.class); binder.bind(TsLogService.class, TsLogServiceImpl.class); binder.bind(ApplicationStateService.class, ApplicationStateServiceImpl.class); binder.bind(PropertyAccessService.class, PropertyAccessServiceImpl.class); binder.bind(ListModelFactory.class, ListModelFactoryImpl.class); //Search services binder.bind(SearchService.class, SearchServiceImpl.class); binder.bind(TimeSheetSearchService.class, TimeSheetSearchServiceImpl.class); binder.bind(EmployeeProfileSearchService.class, EmployeeProfileSearchServiceImpl.class); binder.bind(UserProfileSearchService.class, UserProfileSearchServiceImpl.class); binder.bind(HrPersonnelMasterSearch.class, HrPersonnelMasterSearchImpl.class); binder.bind(AccrualSearchService.class, AccrualSearchServiceImpl.class); binder.bind(LDAPQueue.class, LDAPQueueImpl.class); binder.bind(ScheduleJobs.class, ScheduleJobsImpl.class); binder.bind(EmployeeProfileService.class, EmployeeProfileServiceImpl.class); binder.bind(AccrualBalanceService.class, AccrualBalanceServiceImpl.class); binder.bind(HolidayService.class, HolidayServiceImpl.class); binder.bind(OfficeLocationService.class, OfficeLocationServiceImpl.class); binder.bind(CompOTService.class, CompOTServiceImpl.class); binder.bind(DateCheckingService.class, DateCheckingServiceImpl.class); binder.bind(TimeSheetValidationService.class, TimeSheetValidationServiceImpl.class); // MailServices binder.bind(EmailService.class, EmailServiceImpl.class); binder.bind(JavaxMailService.class, JavaxMailServiceImpl.class); binder.bind(EmailHelper.class, EmailHelperImpl.class); binder.bind(ProfileValidationService.class, ProfileValidationServiceImpl.class); binder.bind(GenericValidationService.class, GenericValidationServiceImpl.class); binder.bind(WarningService.class, WarningServiceImpl.class); binder.bind(Indexer.class, IndexerImpl.class); binder.bind(ImportJob.class, ImportJobImpl.class); binder.bind(PDFService.class, PDFServiceImpl.class).scope(ScopeConstants.PERTHREAD); } public static void contributeApplicationDefaults(MappedConfiguration<String, Object> configuration, Logger logger) throws IOException { configuration.add(SymbolConstants.PRODUCTION_MODE, "false"); configuration.add(HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED, "true"); } public static void contributeHibernateSessionSource(OrderedConfiguration<HibernateConfigurer> configuration) { configuration.add("trecstest1", new TestHibernateConfigurer()); } public static void contributeHibernateEntityPackageManager(org.apache.tapestry5.ioc.Configuration<String> config) { config.add("org.healthresearch.etss.entities"); } @Scope(ScopeConstants.PERTHREAD) public static FullTextSession buildFullTextSession(HibernateSessionManager sessionManager) { return Search.getFullTextSession(sessionManager.getSession()); } /** * This is a service definition, the service will be named "TimingFilter". * The interface, RequestFilter, is used within the RequestHandler service * pipeline, which is built from the RequestHandler service configuration. * Tapestry IoC is responsible for passing in an appropriate Logger * instance. Requests for static resources are handled at a higher level, so * this filter will only be invoked for Tapestry related requests. * <p/> * < * p/> * Service builder methods are useful when the implementation is inline as * an inner class (as here) or require some other kind of special * initialization. In most cases, use the static bind() method instead. * <p/> * < * p/> * If this method was named "build", then the service id would be taken from * the service interface and would be "RequestFilter". Since Tapestry * already defines a service named "RequestFilter" we use an explicit * service id that we can reference inside the contribution method. */ public RequestFilter buildTimingFilter(final Logger log) { return new RequestFilter() { public boolean service(Request request, Response response, RequestHandler handler) throws IOException { long startTime = System.currentTimeMillis(); try { // The responsibility of a filter is to invoke the corresponding method // in the handler. When you chain multiple filters together, each filter // received a handler that is a bridge to the next filter. return handler.service(request, response); } finally { long elapsed = System.currentTimeMillis() - startTime; log.info(String.format("Request time: %d ms", elapsed)); } } }; } public static void contributeApplicationDefaults(MappedConfiguration<String, Object> config) { config.add(HibernateSymbols.DEFAULT_CONFIGURATION, false); } @Match("*DAO") public static void adviseTransactions(HibernateTransactionAdvisor advisor, MethodAdviceReceiver receiver) { advisor.addTransactionCommitAdvice(receiver); } } ***** RegisteryBuilderTest ***** public abstract class RegisteryBuilderTest { protected final Registry buildRegistry(Class... moduleClasses) { RegistryBuilder builder = new RegistryBuilder(); builder.add(moduleClasses); return builder.build(); } protected abstract void cleanup(); } ***** EmailServiceImplTest ***** public class EmailServiceImplTest extends RegisteryBuilderTest { private Registry registry; private HibernateSessionManager sessionManager; private EmailService emailService; @BeforeClass protected void before() { registry = buildRegistry(AppModuleTest.class, HibernateCoreModule.class); emailService = registry.getService(EmailService.class); sessionManager = registry.getService(HibernateSessionManager.class); buildData(); } /** * Test of sendEmailReport method, of class EmailServiceImpl. */ @Test public void testSendEmailReport() { List<TimeSheetEntity> timeSheets = getCurrentSession().createCriteria(TimeSheetEntity.class) .createAlias("formState", "formState") .add(Restrictions.eq("formState.stateCode", ETSSEnum.STATE_SUPERVISOR_REVIEW)).list(); System.out.println("testSendEmailReport size " + timeSheets.size()); emailService.sendSupervisorReminderEmail(timeSheets); //assertEquals(timeSheets.size(), 1); } public Session getCurrentSession() { return sessionManager.getSession(); } public void buildData() { FormStateEntity state1 = getFormState("draft"); FormStateEntity state2 = getFormState(ETSSEnum.STATE_SUPERVISOR_REVIEW); FormStateEntity state3 = getFormState("final"); WorksiteEntity worksite = getWorksite("menands"); UserProfile userProfileTest1 = getUserProfile(1L, "xxx07", "First1", "Last1", "M", "xx...@domain.org"); UserProfile userProfileTest2 = getUserProfile(2L, "xxx02", "First2", "Last2", "A", "xx...@domain.org"); UserProfile userProfileTest3 = getUserProfile(3L, "xxx07", "First3", "Last3", "B", "x...@domain.org"); UserProfile userProfileTest4 = getUserProfile(4L, "xxx06", "First4", "Last4", "C", "xx...@domain.org"); UserProfile userProfileTest5 = getUserProfile(5L, "xxx01", "First5", "Last5", "D", "xx...@domain.org"); EmployeeProfile employeeTest1 = getEmployeeProfile(1L, userProfileTest1, userProfileTest2, userProfileTest3, "emp12222"); EmployeeProfile employeeTest2 = getEmployeeProfile(2L, userProfileTest2, userProfileTest2, userProfileTest3, "emp23333"); EmployeeProfile employeeTest3 = getEmployeeProfile(3L, userProfileTest3, userProfileTest2, userProfileTest3, "emp34444"); EmployeeProfile employeeTest4 = getEmployeeProfile(4L, userProfileTest4, userProfileTest5, userProfileTest3, "emp45555"); EmployeeProfile employeeTest5 = getEmployeeProfile(5L, userProfileTest5, null, userProfileTest5, "emp56666"); getTimeSheet(1L, employeeTest1, userProfileTest2, userProfileTest3, "emp12222", state1, "xxx07", worksite); getTimeSheet(2L, employeeTest2, userProfileTest2, userProfileTest3, "emp23333", state1, "xxx02", worksite); getTimeSheet(3L, employeeTest3, userProfileTest2, userProfileTest3, "emp34444", state3, "xxx07", worksite); getTimeSheet(4L, employeeTest4, null, userProfileTest5, "emp45555", state3, "xxx06", worksite); getTimeSheet(5L, employeeTest5, null, userProfileTest5, "emp56666", state2, "xxx01", worksite); sessionManager.commit(); } public FormStateEntity getFormState(String value) { FormStateEntity formState = new FormStateEntity(); formState.setName(value); formState.setStateCode(value); getCurrentSession().save(formState); return formState; } public EmployeeProfile getEmployeeProfile(Long id, UserProfile userProfile, UserProfile manager, UserProfile supervisor, String empId) { EmployeeProfile employeeProfile = new EmployeeProfile(); employeeProfile.setId(id); employeeProfile.setUserProfile(userProfile); employeeProfile.setSupervisor(supervisor); employeeProfile.setManager(manager); employeeProfile.setEmpId(empId); getCurrentSession().save(employeeProfile); return employeeProfile; } public UserProfile getUserProfile(Long id, String shortname, String firstName, String lastName, String middleInitial, String email) { UserProfile userProfile = new UserProfile(); userProfile.setId(id); userProfile.setShortname(shortname); userProfile.setFirstName(firstName); userProfile.setLastName(lastName); userProfile.setMiddleInitial(middleInitial); userProfile.setEmail(email); getCurrentSession().save(userProfile); return userProfile; } public TimeSheetEntity getTimeSheet(Long id, EmployeeProfile employee, UserProfile manager, UserProfile supervisor, String empId, FormStateEntity formState, String shortName, WorksiteEntity worksite) { TimeSheetEntity timeSheetEntity = new TimeSheetEntity(); timeSheetEntity.setId(id); timeSheetEntity.setEmpId(empId); timeSheetEntity.setEmployeeProfile(employee); timeSheetEntity.setSupervisor(supervisor); timeSheetEntity.setSupervisorOriginal(supervisor); timeSheetEntity.setManager(manager); timeSheetEntity.setEndDate(new Date()); timeSheetEntity.setFormState(formState); timeSheetEntity.setShortname(shortName); timeSheetEntity.setWorksite(worksite); getCurrentSession().save(timeSheetEntity); return timeSheetEntity; } public WorksiteEntity getWorksite(String worksite) { WorksiteEntity worksiteEntity = new WorksiteEntity(); worksiteEntity.setLocation(worksite); getCurrentSession().save(worksiteEntity); return worksiteEntity; } @Override @AfterClass protected void cleanup() { registry.cleanupThread(); registry.shutdown(); } } ***** EmailServiceImpl ***** public class EmailServiceImpl implements EmailService { private final GenericDAO genericDAO; public EmailServiceImpl() {GenericDAO genericDAO) { this.genericDAO = genericDAO; } public void sendSupervisorReminderEmail(List<TimeSheetEntity> timeSheets) { System.out.println("start genericDAO query"); List<TimeSheetEntity> results = genericDAO.getAll(TimeSheetEntity.class); System.out.println("result size " + results.size()); } ***** GenericDAOImpl ***** public class GenericDAOImpl implements GenericDAO { private final Session session; public GenericDAOImpl(Session session) { this.session = session; } @Override public <T> List<T> getFind(final Class<T> type) { return session.createCriteria(type).list(); } } On Wed, Sep 10, 2014 at 8:47 AM, George Christman <gchrist...@cardaddy.com> wrote: > Hi Lance, I hear ya, same here. > > Okay I'm going to provide all the code and the full exception. > > > ***** AppModuleTest ***** > > > public class AppModuleTest { > > public static void bind(ServiceBinder binder) { > try { > ClassLoader contextClassLoader = > Thread.currentThread().getContextClassLoader(); > List<Class<?>> daos = > PackageEnumerator.getClassesForPackage("org.healthresearch.etss.dao"); > > for (Class<?> dao : daos) { > String pkg = dao.getPackage().getName(); > String cls = dao.getSimpleName(); > > try { > Class impl = contextClassLoader.loadClass(pkg + > ".impl." + cls + "Impl"); > binder.bind(dao, impl); > } catch (ClassNotFoundException e) { > // Ignore, we just won't bind that class. > } > } > } catch (ClassNotFoundException e) { > } > > // binder.bind(MyServiceInterface.class, MyServiceImpl.class); > binder.bind(UserInfoService.class, UserInfoServiceImpl.class); > binder.bind(TimeSheetService.class, TimeSheetServiceImpl.class); > binder.bind(TsLogService.class, TsLogServiceImpl.class); > binder.bind(ApplicationStateService.class, > ApplicationStateServiceImpl.class); > binder.bind(PropertyAccessService.class, > PropertyAccessServiceImpl.class); > binder.bind(ListModelFactory.class, ListModelFactoryImpl.class); > > //Search services > binder.bind(SearchService.class, SearchServiceImpl.class); > binder.bind(TimeSheetSearchService.class, > TimeSheetSearchServiceImpl.class); > binder.bind(EmployeeProfileSearchService.class, > EmployeeProfileSearchServiceImpl.class); > binder.bind(UserProfileSearchService.class, > UserProfileSearchServiceImpl.class); > binder.bind(HrPersonnelMasterSearch.class, > HrPersonnelMasterSearchImpl.class); > binder.bind(AccrualSearchService.class, > AccrualSearchServiceImpl.class); > > binder.bind(LDAPQueue.class, LDAPQueueImpl.class); > binder.bind(ScheduleJobs.class, ScheduleJobsImpl.class); > binder.bind(EmployeeProfileService.class, > EmployeeProfileServiceImpl.class); > binder.bind(AccrualBalanceService.class, > AccrualBalanceServiceImpl.class); > binder.bind(HolidayService.class, HolidayServiceImpl.class); > binder.bind(OfficeLocationService.class, > OfficeLocationServiceImpl.class); > binder.bind(CompOTService.class, CompOTServiceImpl.class); > binder.bind(DateCheckingService.class, > DateCheckingServiceImpl.class); > binder.bind(TimeSheetValidationService.class, > TimeSheetValidationServiceImpl.class); > > // MailServices > binder.bind(EmailService.class, EmailServiceImpl.class); > binder.bind(JavaxMailService.class, JavaxMailServiceImpl.class); > binder.bind(EmailHelper.class, EmailHelperImpl.class); > binder.bind(ProfileValidationService.class, > ProfileValidationServiceImpl.class); > binder.bind(GenericValidationService.class, > GenericValidationServiceImpl.class); > binder.bind(WarningService.class, WarningServiceImpl.class); > binder.bind(Indexer.class, IndexerImpl.class); > > binder.bind(ImportJob.class, ImportJobImpl.class); > binder.bind(PDFService.class, > PDFServiceImpl.class).scope(ScopeConstants.PERTHREAD); > > } > > public static void > contributeApplicationDefaults(MappedConfiguration<String, Object> > configuration, Logger logger) throws IOException { > configuration.add(SymbolConstants.PRODUCTION_MODE, "false"); > > configuration.add(HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED, > "true"); > } > > public static void > contributeHibernateSessionSource(OrderedConfiguration<HibernateConfigurer> > configuration) { > configuration.add("trecstest1", new TestHibernateConfigurer()); > } > > public static void > contributeHibernateEntityPackageManager(org.apache.tapestry5.ioc.Configuration<String> > config) { > config.add("org.healthresearch.etss.entities"); > } > > @Scope(ScopeConstants.PERTHREAD) > public static FullTextSession > buildFullTextSession(HibernateSessionManager sessionManager) { > return Search.getFullTextSession(sessionManager.getSession()); > } > > /** > * This is a service definition, the service will be named > "TimingFilter". > * The interface, RequestFilter, is used within the RequestHandler > service > * pipeline, which is built from the RequestHandler service > configuration. > * Tapestry IoC is responsible for passing in an appropriate Logger > * instance. Requests for static resources are handled at a higher > level, so > * this filter will only be invoked for Tapestry related requests. > * <p/> > * < > * p/> > * Service builder methods are useful when the implementation is > inline as > * an inner class (as here) or require some other kind of special > * initialization. In most cases, use the static bind() method instead. > * <p/> > * < > * p/> > * If this method was named "build", then the service id would be > taken from > * the service interface and would be "RequestFilter". Since Tapestry > * already defines a service named "RequestFilter" we use an explicit > * service id that we can reference inside the contribution method. > */ > public RequestFilter buildTimingFilter(final Logger log) { > return new RequestFilter() { > public boolean service(Request request, Response response, > RequestHandler handler) > throws IOException { > long startTime = System.currentTimeMillis(); > try { > // The responsibility of a filter is to invoke the corresponding method > // in the handler. When you chain multiple filters together, each filter > // received a handler that is a bridge to the next filter. > return handler.service(request, response); > } finally { > long elapsed = System.currentTimeMillis() - startTime; > log.info(String.format("Request time: %d ms", > elapsed)); > } > } > }; > } > > public static void > contributeApplicationDefaults(MappedConfiguration<String, Object> config) { > config.add(HibernateSymbols.DEFAULT_CONFIGURATION, false); > } > > @Match("*DAO") > public static void adviseTransactions(HibernateTransactionAdvisor > advisor, MethodAdviceReceiver receiver) { > advisor.addTransactionCommitAdvice(receiver); > } > } > > > ***** RegisteryBuilderTest ***** > > public abstract class RegisteryBuilderTest { > > protected final Registry buildRegistry(Class... moduleClasses) { > RegistryBuilder builder = new RegistryBuilder(); > builder.add(moduleClasses); > return builder.build(); > } > > protected abstract void cleanup(); > } > > > ***** EmailServiceImplTest ***** > > > public class EmailServiceImplTest extends RegisteryBuilderTest { > > private Registry registry; > private HibernateSessionManager sessionManager; > private EmailService emailService; > > > @BeforeClass > protected void before() { > registry = buildRegistry(AppModuleTest.class, > HibernateCoreModule.class); > emailService = registry.getService(EmailService.class); > sessionManager = > registry.getService(HibernateSessionManager.class); > > buildData(); > } > > /** > * Test of sendEmailReport method, of class EmailServiceImpl. > */ > @Test > public void testSendEmailReport() { > List<TimeSheetEntity> timeSheets = > getCurrentSession().createCriteria(TimeSheetEntity.class) > .createAlias("formState", "formState") > .add(Restrictions.eq("formState.stateCode", > ETSSEnum.STATE_SUPERVISOR_REVIEW)).list(); > > emailService.sendSupervisorReminderEmail(timeSheets); > > //assertEquals(timeSheets.size(), 1); > } > > public Session getCurrentSession() { > return sessionManager.getSession(); > } > > public void buildData() { > FormStateEntity state1 = getFormState("draft"); > FormStateEntity state2 = > getFormState(ETSSEnum.STATE_SUPERVISOR_REVIEW); > FormStateEntity state3 = getFormState("final"); > > WorksiteEntity worksite = getWorksite("menands"); > > UserProfile userProfileTest1 = getUserProfile(1L, "xxx07", > "First1", "Last1", "M", "xx...@domain.org"); > UserProfile userProfileTest2 = getUserProfile(2L, "xxx02", > "First2", "Last2", "A", "xx...@domain.org"); > UserProfile userProfileTest3 = getUserProfile(3L, "xxx07", > "First3", "Last3", "B", "x...@domain.org"); > UserProfile userProfileTest4 = getUserProfile(4L, "xxx06", > "First4", "Last4", "C", "xx...@domain.org"); > UserProfile userProfileTest5 = getUserProfile(5L, "xxx01", > "First5", "Last5", "D", "xx...@domain.org"); > > EmployeeProfile employeeTest1 = getEmployeeProfile(1L, > userProfileTest1, userProfileTest2, userProfileTest3, "emp12222"); > EmployeeProfile employeeTest2 = getEmployeeProfile(2L, > userProfileTest2, userProfileTest2, userProfileTest3, "emp23333"); > EmployeeProfile employeeTest3 = getEmployeeProfile(3L, > userProfileTest3, userProfileTest2, userProfileTest3, "emp34444"); > EmployeeProfile employeeTest4 = getEmployeeProfile(4L, > userProfileTest4, userProfileTest5, userProfileTest3, "emp45555"); > EmployeeProfile employeeTest5 = getEmployeeProfile(5L, > userProfileTest5, null, userProfileTest5, "emp56666"); > > getTimeSheet(1L, employeeTest1, userProfileTest2, > userProfileTest3, "emp12222", state1, "xxx07", worksite); > getTimeSheet(2L, employeeTest2, userProfileTest2, > userProfileTest3, "emp23333", state1, "xxx02", worksite); > getTimeSheet(3L, employeeTest3, userProfileTest2, > userProfileTest3, "emp34444", state3, "xxx07", worksite); > getTimeSheet(4L, employeeTest4, null, userProfileTest5, > "emp45555", state3, "xxx06", worksite); > getTimeSheet(5L, employeeTest5, null, userProfileTest5, > "emp56666", state2, "xxx01", worksite); > > sessionManager.commit(); > } > > > public FormStateEntity getFormState(String value) { > FormStateEntity formState = new FormStateEntity(); > formState.setName(value); > formState.setStateCode(value); > getCurrentSession().save(formState); > return formState; > } > > public EmployeeProfile getEmployeeProfile(Long id, UserProfile > userProfile, UserProfile manager, UserProfile supervisor, String empId) { > EmployeeProfile employeeProfile = new EmployeeProfile(); > employeeProfile.setId(id); > employeeProfile.setUserProfile(userProfile); > employeeProfile.setSupervisor(supervisor); > employeeProfile.setManager(manager); > employeeProfile.setEmpId(empId); > getCurrentSession().save(employeeProfile); > return employeeProfile; > } > > public UserProfile getUserProfile(Long id, String shortname, String > firstName, String lastName, String middleInitial, String email) { > UserProfile userProfile = new UserProfile(); > userProfile.setId(id); > userProfile.setShortname(shortname); > userProfile.setFirstName(firstName); > userProfile.setLastName(lastName); > userProfile.setMiddleInitial(middleInitial); > userProfile.setEmail(email); > getCurrentSession().save(userProfile); > return userProfile; > } > > public TimeSheetEntity getTimeSheet(Long id, EmployeeProfile employee, > UserProfile manager, > UserProfile supervisor, String > empId, FormStateEntity formState, String shortName, WorksiteEntity > worksite) { > TimeSheetEntity timeSheetEntity = new TimeSheetEntity(); > timeSheetEntity.setId(id); > timeSheetEntity.setEmpId(empId); > timeSheetEntity.setEmployeeProfile(employee); > timeSheetEntity.setSupervisor(supervisor); > timeSheetEntity.setSupervisorOriginal(supervisor); > timeSheetEntity.setManager(manager); > timeSheetEntity.setEndDate(new Date()); > timeSheetEntity.setFormState(formState); > timeSheetEntity.setShortname(shortName); > timeSheetEntity.setWorksite(worksite); > getCurrentSession().save(timeSheetEntity); > return timeSheetEntity; > } > > public WorksiteEntity getWorksite(String worksite) { > WorksiteEntity worksiteEntity = new WorksiteEntity(); > worksiteEntity.setLocation(worksite); > getCurrentSession().save(worksiteEntity); > return worksiteEntity; > } > > @Override > @AfterClass > protected void cleanup() { > registry.cleanupThread(); > registry.shutdown(); > } > } > > > public class EmailServiceImpl implements EmailService { > > private final GenericDAO genericDAO; > > public EmailServiceImpl() { > > > } > > On Wed, Sep 10, 2014 at 2:35 AM, Lance Java <lance.j...@googlemail.com> > wrote: > >> Hmm, very strange. Are you calling registry.shutdown() ever? >> >> Is this perhaps an issue with registry.cleanupThread()? >> >> How many @Test annotations in the class? Does the first @Test work and the >> second fail? >> >> Just grasping at straws here! >> On 10 Sep 2014 02:05, "George Christman" <gchrist...@cardaddy.com> wrote: >> >> > Hi lance, I'm just using constructor injection. I have a DAO that uses >> > >> > public class GenericDAO { >> > private final Session session; >> > >> > public GenericDAOImpl(Session session) { >> > this.session = session; >> > } >> > >> > } >> > >> > in my Module I have >> > >> > @Scope(ScopeConstants. >> > PERTHREAD) >> > public static FullTextSession >> > buildFullTextSession(HibernateSessionManager sessionManager) { >> > return Search.getFullTextSession(sessionManager.getSession()); >> > } >> > >> > In my test class >> > >> > private Registry registry; >> > private GenericDAO genericDAO; >> > private EmailService emailService; >> > >> > @BeforeClass >> > protected void before() { >> > registry = buildRegistry(AppModuleTest. >> > class, HibernateCoreModule.class); >> > emailService = registry.getService(EmailService.class); >> > genericDAO = registry.getService(GenericDAO.class); >> > buildData(); >> > } >> > >> > @Test >> > public void SomeTest() { >> > genericDAO.get(...) >> > } >> > >> > When I run the test I get that exception. >> > >> > If I remove FullTextSession from the module or the genericDAO, problem >> goes >> > away. The strange part is this is not an issue with the rest of the app, >> > only the test. >> > >> > >> > On Tue, Sep 9, 2014 at 2:31 PM, Lance Java <lance.j...@googlemail.com> >> > wrote: >> > >> > > From my understanding of the tapestry registry, these are two distinct >> > > services (even though one extends the other). >> > > >> > > Where is this exception occurring? Are you using tapestry's @Inject >> > > annotation? Is spring ioc in the mix somewhere? >> > > >> > >> > >> > >> > -- >> > George Christman >> > www.CarDaddy.com >> > P.O. Box 735 >> > Johnstown, New York >> > >> > > > > -- > George Christman > www.CarDaddy.com > P.O. Box 735 > Johnstown, New York > > -- George Christman www.CarDaddy.com P.O. Box 735 Johnstown, New York