9 Replies Latest reply on Dec 27, 2008 11:22 AM by juergen.zimmermann

    PostgreSQL for JBoss 5.0.0

    juergen.zimmermann

      I tried to switch from Hypersonic to PostgreSQL. Now I get the following stacktrace. Any hint is appreciated!

      16:53:22,458 ERROR [GeneralPurposeDatabasePersistencePlugin] Cannot create timer table
      org.jboss.deployment.DeploymentException: Failed to get datasource connection
       at org.jboss.ejb.plugins.cmp.jdbc.SQLUtil.unquote(SQLUtil.java:1239)
       at org.jboss.ejb.txtimer.GeneralPurposeDatabasePersistencePlugin.createTableIfNotExists(GeneralPurposeDatabasePersistencePlugin.java:161)
       at org.jboss.ejb.txtimer.DatabasePersistencePolicy.startService(DatabasePersistencePolicy.java:104)
       at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:376)
       at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:322)
       at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
       at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
       at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
       at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
       at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
       at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:189)
       at $Proxy36.start(Unknown Source)
       at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)
       at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)
       at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
       at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
       at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
       at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
       at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286)
       at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
       at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
       at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
       at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
       at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
       at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
       at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
       at org.jboss.system.ServiceController.start(ServiceController.java:460)
       at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:146)
       at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:104)
       at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:45)
       at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
       at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
       at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
       at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
       at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
       at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
       at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
       at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
       at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
       at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
       at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
       at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
       at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
       at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
       at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
       at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:545)
       at org.jboss.system.server.profileservice.ProfileServiceBootstrap.loadProfile(ProfileServiceBootstrap.java:304)
       at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:205)
       at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:405)
       at org.jboss.Main.boot(Main.java:209)
       at org.jboss.Main$1.run(Main.java:547)
       at java.lang.Thread.run(Thread.java:619)
      16:53:22,535 INFO [TomcatDeployment] deploy, ctxPath=/, vfsUrl=ROOT.war


        • 1. Re: PostgreSQL for JBoss 5.0.0
          woot4moo

          Did you replace all the config files with those found in examples/jca?

          • 2. Re: PostgreSQL for JBoss 5.0.0
            juergen.zimmermann

            1) Removed the HSQL files in to server\default\deploy
            2) Copied docs\examples\jca\postgres-ds.xml to server\default\deploy
            3) Removed the HSQL files in server\default\deploy\messaging
            4) Copied docs\examples\jms\postgres-persistence-service.xml to server\default\deploy\messaging
            5) Edited postgres-persistence-service.xml and replaced <depends optional-attribute-name="ChannelFactoryName">jboss.jgroups:service=ChannelFactory by
            jboss.jgroups:service=ChannelFactory
            6) Edited server\default\deploy\ejb3-timer-service.xml for PostgreSQL settings
            7) Edited server\default\conf\login-config.xml and excluded:
            <application-policy name="HsqlDbRealm">

            • 3. Re: PostgreSQL for JBoss 5.0.0
              peterj

              Are you still using DefaultDS as your datasource name?

              And did you see: http://www.jboss.com/index.html?module=bb&op=viewtopic&t=141835

              • 4. Re: PostgreSQL for JBoss 5.0.0
                juergen.zimmermann

                I'm using DefaultDS in both server/default/deploy/postgres-ds.xml and default/deploy/messaging/postgresql-messaging-service.xml and server/deploy/ejb3-timer-service.xml

                When JBoss starts 22 tables are created: hilosequences, 9x jbm_xxx, 12x qrtz_xxx. Also the INSERTs into these tables are done, e.g. in jbm_role and qrtz_locks.

                There is just this exception "Cannot create timer table". I cannot find in which xml file the creation of the table "timer" is specified.

                • 5. Re: PostgreSQL for JBoss 5.0.0
                  juergen.zimmermann

                  OK, the problem is server/default/deploy/ejb2-timer-service.xml (note: ejb2, not ejb3).

                  If I change this file from "DatabasePersistencePolicy" to "NoopPersistencePolicy", then JBoss starts as expected.

                  Hmm, what should be changed in ejb2-timer-service.xml to use PostgreSQL ?

                  • 6. Re: PostgreSQL for JBoss 5.0.0
                    peterj

                    Oh, in your postgresql-ds.xml file, do you have this line:

                    <metadata>
                     <type-mapping>PostgreSQL 8.0</type-mapping>
                     </metadata>
                    


                    That is the line that states which mapping, within the server/xxx/conf/standardjbosscmp-jdbc.xml file, to use for EJB2-related stuff.

                    • 7. Re: PostgreSQL for JBoss 5.0.0
                      juergen.zimmermann

                      In postgres-ds.xml I tried both "PostgreSQL" and "PostgreSQL 8.0".

                      Additionally I tried to add to conf/standardjbosscmp-jdbc.xml:

                      <datasource-mapping>PostgreSQL</datasource-mapping>
                      and there also "PostgreSQL 8.0" according to postgres-ds.xml

                      BTW, I'm trying to use PostgreSQL 8.3.5 which is working fine with JBoss 4.2.3

                      • 8. Re: PostgreSQL for JBoss 5.0.0
                        peterj

                        I'm using 8.3.3, and I think that I did the same changes you did (but not step 7), and I did not run into any issues. The main things to change seem to be:

                        * properly configuring messaging
                        * setting the data source metadata to keep EJB2.x things happy
                        * configuring Quartz

                        Are you sure that your postgresql-ds.xml settings are correct so that a connection can be established?

                        • 9. Re: PostgreSQL for JBoss 5.0.0
                          juergen.zimmermann

                          RESOLVED:

                          My postgres-ds.xml as of JBoss 4.2.3 was configured to use exactly 1 database connection for DefaultDS:

                          <min-pool-size>1</min-pool-size>
                          <max-pool-size>1</max-pool-size>


                          It looks like JBoss 5 uses a separate pooled connection for the EJB2 stuff. Increasing the max-pool-size parameter (and also the min-pool-size) to 2 solved the issue.