DotCMS as WAR in WebLogic: error during startup

256 views
Skip to first unread message

Jorith vd Heuvel

unread,
Jul 23, 2015, 11:02:54 AM7/23/15
to dotCMS User Group
Hi,

When I deploy dotCMS as a WAR in WebLogic, I get the following error during startup (DB is Oracle):

2015-07-23 16:55:18,895 ERROR com.dotmarketing.init.DotInitScheduler - Couldn't store job: Driver's Blob representation is of an unsupported type: weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB
org.quartz.JobPersistenceException: Couldn't store job: Driver's Blob representation is of an unsupported type: weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB [See nested exception: java.sql.SQLException: Driver's Blob representation is of an unsupported type: weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1132)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$4.execute(JobStoreSupport.java:1099)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:3716)
at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:242)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInLock(JobStoreSupport.java:3712)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1095)
at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:905)
at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:266)
at com.dotmarketing.init.DotInitScheduler.start(DotInitScheduler.java:830)
at com.dotmarketing.servlets.InitServlet.init(InitServlet.java:202)
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:337)
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:288)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:98)
at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:86)
at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:74)
at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:60)
at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:34)
at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:652)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:593)
at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1924)
at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1901)
at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1791)
at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2807)
at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:822)
at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360)
at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138)
at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70)
at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24)
at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258)
at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:48)
at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80)
at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:222)
at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:414)
at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51)
at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200)
at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30)
at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:240)
at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169)
at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123)
at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:191)
at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:99)
at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)
Caused by: java.sql.SQLException: Driver's Blob representation is of an unsupported type: weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.writeDataToBlob(OracleDelegate.java:647)
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(OracleDelegate.java:207)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1126)
... 56 more

Any ideas how to solve this? The solution seems to be to set the driverDelegateClass to org.quartz.impl.jdbcjobstore.WebLogicDelegate, but I can't easily change this since the delegate class is hardcoded in DotJobStore.java.

Jason Tesser

unread,
Jul 23, 2015, 11:09:06 AM7/23/15
to dotCMS User Group

--
You received this message because you are subscribed to the Google Groups "dotCMS User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dotcms+un...@googlegroups.com.
To post to this group, send email to dot...@googlegroups.com.
Visit this group at http://groups.google.com/group/dotcms.
For more options, visit https://groups.google.com/d/optout.

Jorith vd Heuvel

unread,
Jul 23, 2015, 11:31:21 AM7/23/15
to dotCMS User Group, jason...@gmail.com
Thanks, that did help! Could you please add this to the installation documentation for WebLogic?

I get another error however when I try to deploy an OSGi plugin with a Quartz job, although it seems to be linked to the previous error:

org.quartz.JobPersistenceException: Couldn't retrieve job because the BLOB couldn't be deserialized: null [See nested exception: java.io.EOFException]
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1421)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport$7.execute(JobStoreSupport.java:1396)
        at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:242)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeWithoutLock(JobStoreSupport.java:3693)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1393)
        at org.quartz.core.QuartzScheduler.getJobDetail(QuartzScheduler.java:1431)
        at org.quartz.impl.StdScheduler.getJobDetail(StdScheduler.java:539)
        at com.dotmarketing.quartz.QuartzUtils.scheduleTask(QuartzUtils.java:452)
        at com.dotmarketing.osgi.GenericBundleActivator.scheduleQuartzJob(GenericBundleActivator.java:437)
        at nl.isaac.dotcms.minify.osgi.MinifierActivator.scheduleCleanupJob(MinifierActivator.java:71)
        at nl.isaac.dotcms.minify.osgi.MinifierActivator.start(MinifierActivator.java:40)
        at com.dotcms.repackage.org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
        at com.dotcms.repackage.org.apache.felix.framework.Felix.activateBundle(Felix.java:2146)
        at com.dotcms.repackage.org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
        at com.dotcms.repackage.org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
        at com.dotcms.repackage.org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1175)
        at com.dotcms.repackage.org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1153)
        at com.dotcms.repackage.org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:458)
        at com.dotcms.repackage.org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:263)
Caused by: java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2304)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2773)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:798)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
        at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.getObjectFromBlob(OracleDelegate.java:156)
        at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectJobDetail(StdJDBCDelegate.java:904)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1404)
        ... 18 more

It looks like the OracleDelegate class is used here instead of the WebLogicOracleDelegate I configured in dotmarketing-config.properties.


Op donderdag 23 juli 2015 17:09:06 UTC+2 schreef LORDs_diakonos:

Brent Griffin

unread,
Jul 24, 2015, 11:51:41 AM7/24/15
to dotCMS User Group, jor...@gmail.com, jason...@gmail.com, jor...@gmail.com
I could be wrong here but I seem to remember changing a Weblogic config setting relating to this.  I wish I could remember more clearly but I believe there was a setting somewhere under the Weblogic JDBC settings to NOT have weblogic replace the BLOB implementation.

Hope this helps,
Brent Griffin
Sr. Java Architect
Director of Quality Assurance
dotCMS

Jorith vd Heuvel

unread,
Jul 27, 2015, 4:03:48 AM7/27/15
to dotCMS User Group, jason...@gmail.com, brent....@dotcms.com
Hi Brent,

You're right, thanks! I have set the 'Wrap Data Types' setting to false, and now it's working correctly. I had to remove the database entries for my job from the database and redeploy the OSGi plugin to get it working though.

Also, it seems that I don't need to set the QUARTZ_DRIVER_CLASS option in dotmarketing-config.properties anymore.

For future reference: this setting can be found in the Admin Console under Services -> Data Sources -> [Dotcms database data source] -> Connection Pool -> Advanced -> Wrap Data Types



Op vrijdag 24 juli 2015 17:51:41 UTC+2 schreef Brent Griffin:
Reply all
Reply to author
Forward
0 new messages