[JBoss jBPM] - Re: jbpm 3.2 Session Is Closed exception in JobSession
by zibi101
Hi,
I encountered the same problem in spring-managed transactions environment (on jboss 4.2.2)
Here is the solution:
I register DeleteJobsSynchronization within TransactionSynchronizationManager and extend
DeleteJobsSynchronization to support Ordered interface. It allows TransactionSynchronizationManager
to execute DeleteJobsSynchronization before SpringSessionSynchronization which closes hibernate session.
| public class SpringJobSession extends JobSession {
|
| Log log = LogFactory.getLog(SpringJobSession.class);
|
| protected Session session;
|
| public SpringJobSession(Session pSession) {
| super(pSession);
| // super.session is private...
| session = pSession;
| }
|
| public void deleteJobsForProcessInstance(ProcessInstance processInstance) {
| try {
| // we register synchronization within TransactionSynchronizationManager!
| TransactionSynchronizationManager.registerSynchronization(
| new DeleteJobsSynchronization(processInstance));
| } catch (Exception e) {
| log.error(e);
| throw new JbpmException("couldn't delete jobs for '"+processInstance+"'", e);
| }
| }
|
| // The very important issue here is that TransactionSynchronizationManager,
| // within DeleteJobsSynchronization is registered, uses particular order
| // while performing registered synchronizations. The order is specified by
| // 'Ordered' interface. We have to set lower value than is specified for
| // SpringSessionSynchronization to force execution of this synchronization
| // before SpringSessionSynchronization will close the hibernate session.
| private class DeleteJobsSynchronization extends TransactionSynchronizationAdapter implements Serializable {
| private static final long serialVersionUID = 1L;
| ProcessInstance processInstance;
| public DeleteJobsSynchronization(ProcessInstance processInstance) {
| this.processInstance = processInstance;
| }
| public void beforeCompletion() {
| log.debug("deleting timers for process instance "+processInstance);
| Query query = session.getNamedQuery("JobSession.deleteTimersForProcessInstance");
| query.setParameter("processInstance", processInstance);
| int result = query.executeUpdate();
| log.debug(Integer.toString(result)+" remaining timers for '"+processInstance+"' are deleted");
| System.out.println(" -> 2 < ------");
| log.debug("deleting execute-node-jobs for process instance "+processInstance);
| query = session.getNamedQuery("JobSession.deleteExecuteNodeJobsForProcessInstance");
| query.setParameter("processInstance", processInstance);
| result = query.executeUpdate();
| log.debug(Integer.toString(result)+" remaining execute-node-jobs for '"+processInstance+"' are deleted");
| System.out.println(" -> 3 < ------");
| }
|
| @Override
| public int getOrder() {
| // SpringSessionSynchronization.getOrder() returns SessionFactoryUtils.SESSION_SYNCHRONIZATION_ORDER.
| return SessionFactoryUtils.SESSION_SYNCHRONIZATION_ORDER - 50;
| }
| }
| }
|
| public class SpringPersistenceService extends DbPersistenceService {
|
| public SpringPersistenceService(SpringPersistenceServiceFactory pPersistentServiceFactory) {
| super(pPersistentServiceFactory);
| }
|
| public JobSession getJobSession() {
| if (jobSession==null) {
| Session session = getSession();
| if (session!=null) {
| jobSession = new SpringJobSession(session);
| }
| }
| return jobSession;
| }
|
| }
|
| <jbpm-configuration>
| ....
| <jbpm-context>
| <service name="persistence"
| factory="xxxx.workflow.jbpm.service.SpringPersistenceServiceFactory"/>
| ....
| </jbpm-context>
|
Should I create a jira bug for it or rather inform spring guys about this issue ?
regards
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4117325#4117325
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4117325
18 years, 3 months
[JBoss Seam] - Uni testing and datasource problem
by jagin
Hi to all,
I generate simple application with seam-gen. I didn't touch any existing code. I add simple UserDaoSeam class wich I want to test.
I have some problem with simple unit testing. I want to do something like in the Seam Reference book on page 293-294.
The code of the test is like this:
| public class UserDaoTest extends SeamTest {
|
| private EntityManagerFactory emf;
|
| public EntityManagerFactory getEntityManagerFactory() {
| return emf;
| }
|
| @BeforeClass
| public void init() {
| emf = Persistence.createEntityManagerFactory("ezapp");
| }
|
| @AfterClass
| public void destroy() {
| emf.close();
| }
|
| @Test
| public void testFindByUsername() {
| EntityManager em = emf.createEntityManager();
| em.getTransaction().begin();
|
| UserDaoSeam userDao = new UserDaoSeam();
| userDao.setEntityManager(em);
|
| User user = userDao.findByUsername("jkowalski");
|
| assert user != null;
|
| em.getTransaction().rollback();
| em.close();
| }
| }
|
after ant test i get
| D:\dev\ezapp>ant test
| Buildfile: build.xml
|
| compiletest:
|
| copytestclasses:
|
| buildtest:
| [copy] Copying 1 file to D:\dev\ezapp\test-build\META-INF
| [copy] Copying 1 file to D:\dev\ezapp\test-build
|
| test:
| [testng] [Parser] Running:
| [testng] D:\dev\ezapp\test-build\PersistenceTest.xml
| [testng]
| [testng] FATAL [org.hibernate.connection.DatasourceConnectionProvider] Could not find datasource: java:/DefaultDS
| [testng] java.lang.RuntimeException: PROVIDER_URL not provided in jndi.properties. Automatic discovery not implemented yet.
| [testng] at org.jboss.naming.JBossRemotingContextFactory.getInitialContext(JBossRemotingContextFactory.java:158)
| [testng] at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
| [testng] at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
| [testng] at javax.naming.InitialContext.init(InitialContext.java:223)
| [testng] at javax.naming.InitialContext.<init>(InitialContext.java:175)
| [testng] at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28)
| [testng] at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)
| [testng] at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
| [testng] at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
| [testng] at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
| [testng] at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
| [testng] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
| [testng] at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:918)
| [testng] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:656)
| [testng] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
| [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
| [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
| [testng] at pl.unizeto.ezapp.persistence.UserDaoTest.init(UserDaoTest.java:24)
| [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| [testng] at java.lang.reflect.Method.invoke(Method.java:585)
| [testng] at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604)
| [testng] at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:394)
| [testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
| [testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:79)
| [testng] at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:165)
| [testng] at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:103)
| [testng] at org.testng.TestRunner.runWorkers(TestRunner.java:678)
| [testng] at org.testng.TestRunner.privateRun(TestRunner.java:624)
| [testng] at org.testng.TestRunner.run(TestRunner.java:495)
| [testng] at org.testng.SuiteRunner.runTest(SuiteRunner.java:300)
| [testng] at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295)
| [testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275)
| [testng] at org.testng.SuiteRunner.run(SuiteRunner.java:190)
| [testng] at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792)
| [testng] at org.testng.TestNG.runSuitesLocally(TestNG.java:765)
| [testng] at org.testng.TestNG.run(TestNG.java:699)
| [testng] at org.testng.TestNG.privateMain(TestNG.java:824)
| [testng] at org.testng.TestNG.main(TestNG.java:802)
| [testng] FAILED CONFIGURATION: @BeforeClass init
| [testng] javax.persistence.PersistenceException: org.hibernate.HibernateException: Could not find datasource
| [testng] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:663)
| [testng] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
| [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
| [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
| [testng] at pl.unizeto.ezapp.persistence.UserDaoTest.init(UserDaoTest.java:24)
| [testng] Caused by: org.hibernate.HibernateException: Could not find datasource
| [testng] at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:56)
| [testng] at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
| [testng] at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
| [testng] at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
| [testng] at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
| [testng] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
| [testng] at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:918)
| [testng] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:656)
| [testng] ... 26 more
| [testng] Caused by: java.lang.RuntimeException: PROVIDER_URL not provided in jndi.properties. Automatic discovery not implemented yet.
| [testng] at org.jboss.naming.JBossRemotingContextFactory.getInitialContext(JBossRemotingContextFactory.java:158)
| [testng] at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
| [testng] at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
| [testng] at javax.naming.InitialContext.init(InitialContext.java:223)
| [testng] at javax.naming.InitialContext.<init>(InitialContext.java:175)
| [testng] at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28)
| [testng] at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)
| [testng] ... 33 more
| [testng] ... Removed 22 stack frames
| [testng] FAILED CONFIGURATION: @BeforeMethod begin
| [testng] java.lang.IllegalStateException: Attempted to invoke a Seam component outside the an initialized application
| [testng] at org.jboss.seam.contexts.Lifecycle.getApplication(Lifecycle.java:36)
| [testng] at org.jboss.seam.contexts.Lifecycle.beginSession(Lifecycle.java:173)
| [testng] at org.jboss.seam.contexts.ServletLifecycle.beginSession(ServletLifecycle.java:124)
| [testng] at org.jboss.seam.mock.BaseSeamTest.begin(BaseSeamTest.java:918)
| [testng] at org.jboss.seam.mock.SeamTest.begin(SeamTest.java:28)
| [testng] ... Removed 24 stack frames
| [testng] SKIPPED CONFIGURATION: @AfterMethod end
| [testng] SKIPPED CONFIGURATION: @AfterClass destroy
| [testng] SKIPPED CONFIGURATION: @AfterClass cleanup
| [testng] SKIPPED: testFindByUsername
| [testng]
| [testng] ===============================================
| [testng] ezApp
| [testng] Tests run: 1, Failures: 0, Skips: 1
| [testng] Configuration Failures: 2, Skips: 3
| [testng] ===============================================
| [testng]
| [testng]
| [testng] ===============================================
| [testng] ezApp
| [testng] Total tests run: 1, Failures: 0, Skips: 1
| [testng] Configuration Failures: 2, Skips: 3
| [testng] ===============================================
| [testng]
|
| BUILD SUCCESSFUL
| Total time: 2 seconds
|
the persistence-test.xml is seam-gen generated without any change
| <?xml version="1.0" encoding="UTF-8"?>
| <!-- Persistence deployment descriptor for tests -->
| <persistence xmlns="http://java.sun.com/xml/ns/persistence"
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
| xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
| version="1.0">
|
| <persistence-unit name="ezapp">
| <provider>org.hibernate.ejb.HibernatePersistence</provider>
| <jta-data-source>java:/DefaultDS</jta-data-source>
| <properties>
| <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
| <property name="hibernate.show_sql" value="true"/>
| <property name="hibernate.cache.use_second_level_cache" value="false"/>
| <property name="jboss.entity.manager.factory.jndi.name" value="java:/ezappEntityManagerFactory"/>
| </properties>
| </persistence-unit>
|
| </persistence>
|
Why i'm getting Could not find datasource: java:/DefaultDS error? Am I missing something. I read all reference book, diged forum and googled very deep and didn't find any solution. What's wrong?
I found that DefaultDS is defined in bootstrap/deploy/hsqldb-ds.xml. So I made this file errorous but i got the same error. I looks like this file is not read in the embedded environment.
I try this wit Seam 2.0.0.GA and 2.0.1.CR1
Any help or working unit test example will be very weelcome.
I'm a newbee in seam matter so please be kind :] ( i'm trying to switch from appfuse framework and like the Seam concept very much).
Jarek
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4117320#4117320
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4117320
18 years, 3 months
[JBoss Seam] - Re: Calling the same method on different beans from the same
by kummer
I followed your suggestion except that I changed the name of the param from manager to orderManager in the both the param tag and the included file. The page displays correctly but invoking an action via
| <s:link action="#{orderManager.doSelectOrder}"/>
|
triggers the following exception
| Exception during request processing:
| Caused by javax.el.PropertyNotFoundException with message: "Target Unreachable, identifier 'orderManager' resolved to null"
|
| org.jboss.el.parser.AstValue.getTarget(AstValue.java:38)
| org.jboss.el.parser.AstValue.invoke(AstValue.java:95)
| org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
| org.jboss.seam.core.Expressions$2.invoke(Expressions.java:174)
| org.jboss.seam.navigation.Pages.callAction(Pages.java:634)
| org.jboss.seam.navigation.Pages.preRender(Pages.java:289)
| org.jboss.seam.jsf.SeamPhaseListener.preRenderPage(SeamPhaseListener.java:544)
| org.jboss.seam.jsf.SeamPhaseListener.beforeRenderResponse(SeamPhaseListener.java:455)
| org.jboss.seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhaseListener.java:146)
| org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:116)
| com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:222)
| com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
| javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
| org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
| org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
| org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
| org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
| org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
| org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
| org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
| org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
| org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
| org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
| org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
| org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| lu.deka.servlets.LoggedInFilter.doFilter(LoggedInFilter.java:56)
| org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
| org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
| org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
| org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
| org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
| org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
| org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
| org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
| org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
| org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
| org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
| org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| java.lang.Thread.run(Thread.java:619)
|
Any ides?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4117317#4117317
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4117317
18 years, 3 months