
|
If you were logged in you would be able to see more operations.
|
|
|
|
The WebLogicOracleDelegate throws a java.lang.NoSuchMethodException because it cannot find a method called putBytes(long, byte[]) on the weblogic.jdbc.base.BaseBlob class. This is Weblogic 8.1 SP2, and I am using the weblogic.jdbc.oracle.OracleDriver JDBC driver class.
There is a method called setBytes(long, byte[]) in the weblogic.jdbc.base.BaseBlob class.
I changed the method writeDataToBlob() in WebLogicOracleDelegate.java to this code that tries setBytes(long, byte[]) if puttBytes(long, byte[]) does not exist, and the changes worked in my local environment
/**
* Check for the Weblogic Blob wrapper, and handle accordingly...
*/
protected Blob writeDataToBlob(ResultSet rs, int column, byte[] data) throws SQLException {
Blob blob = rs.getBlob(column);
if (blob == null)
throw new SQLException("Driver's Blob representation is null!");
// handle thin driver's blob
if (blob instanceof weblogic.jdbc.vendor.oracle.OracleThinBlob) {
((weblogic.jdbc.vendor.oracle.OracleThinBlob) blob).putBytes(1, data);
return blob;
}
// (more slowly) handle blob for wrappers of other variations of
// drivers...
else if (blob.getClass().getPackage().getName().startsWith("weblogic.")) {
try {
// try to find putBytes method...
Method m = blob.getClass().getMethod("putBytes", new Class[] { long.class, byte[].class });
m.invoke(blob, new Object[] { new Long(1), data });
} catch (Exception e) {
try {
// Added this logic to the original code from OpenSymphony
// putBytes method does not exist. Try setBytes
Method m = blob.getClass().getMethod("setBytes", new Class[] { long.class, byte[].class });
m.invoke(blob, new Object[] { new Long(1), data });
} catch (Exception e2) {
throw new SQLException("Unable to find putBytes(long,byte[]) or setBytes(long,byte[]) methods on blob: " + e2);
}
}
return blob;
} else {
return super.writeDataToBlob(rs, column, data);
}
}
Here is a stack trace of the error.
org.quartz.JobPersistenceException: Couldn't store job: Unable to find putBytes(
long,byte[]) method on blob: java.lang.NoSuchMethodException: weblogic.jdbc.base
.BaseBlob.putBytes(long, [B) [See nested exception: java.sql.SQLException: Unabl
e to find putBytes(long,byte[]) method on blob: java.lang.NoSuchMethodException:
weblogic.jdbc.base.BaseBlob.putBytes(long, [B)]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport
.java:857)
at org.quartz.impl.jdbcjobstore.JobStoreTX.storeJob(JobStoreTX.java:210)
at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:687)
at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:261)
at com.pwc.us.mw.common.startup.QuartzListener.contextInitialized(Quartz
Listener.java:100)
at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAct
ion.run(WebAppServletContext.java:6415)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppSe
rvletContext.java:1678)
at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAp
pServletContext.java:3178)
at weblogic.servlet.internal.WebAppServletContext.setStarted(WebAppServl
etContext.java:5647)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:869)
at weblogic.j2ee.J2EEApplicationContainer.start(J2EEApplicationContainer
.java:2022)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContai
ner.java:2063)
at weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.
activateContainer(SlaveDeployer.java:2592)
at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit(
SlaveDeployer.java:2515)
at weblogic.management.deploy.slave.SlaveDeployer$Task.commit(SlaveDeplo
yer.java:2317)
at weblogic.management.deploy.slave.SlaveDeployer.commitUpdate(SlaveDepl
oyer.java:608)
at weblogic.drs.internal.SlaveCallbackHandler$2.execute(SlaveCallbackHan
dler.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
* Nested Exception (Underlying Cause) ---------------
java.sql.SQLException: Unable to find putBytes(long,byte[]) method on blob: java
.lang.NoSuchMethodException: weblogic.jdbc.base.BaseBlob.putBytes(long, [B)
at org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate.w
riteDataToBlob(WebLogicOracleDelegate.java:94)
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(Or
acleDelegate.java:204)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport
.java:851)
at org.quartz.impl.jdbcjobstore.JobStoreTX.storeJob(JobStoreTX.java:210)
at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:687)
at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:261)
at com.pwc.us.mw.common.startup.QuartzListener.contextInitialized(Quartz
Listener.java:100)
at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAct
ion.run(WebAppServletContext.java:6415)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppSe
rvletContext.java:1678)
at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAp
pServletContext.java:3178)
at weblogic.servlet.internal.WebAppServletContext.setStarted(WebAppServl
etContext.java:5647)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:869)
at weblogic.j2ee.J2EEApplicationContainer.start(J2EEApplicationContainer
.java:2022)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContai
ner.java:2063)
at weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.
activateContainer(SlaveDeployer.java:2592)
at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit(
SlaveDeployer.java:2515)
at weblogic.management.deploy.slave.SlaveDeployer$Task.commit(SlaveDeplo
yer.java:2317)
at weblogic.management.deploy.slave.SlaveDeployer.commitUpdate(SlaveDepl
oyer.java:608)
at weblogic.drs.internal.SlaveCallbackHandler$2.execute(SlaveCallbackHan
dler.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
|
|
Description
|
The WebLogicOracleDelegate throws a java.lang.NoSuchMethodException because it cannot find a method called putBytes(long, byte[]) on the weblogic.jdbc.base.BaseBlob class. This is Weblogic 8.1 SP2, and I am using the weblogic.jdbc.oracle.OracleDriver JDBC driver class.
There is a method called setBytes(long, byte[]) in the weblogic.jdbc.base.BaseBlob class.
I changed the method writeDataToBlob() in WebLogicOracleDelegate.java to this code that tries setBytes(long, byte[]) if puttBytes(long, byte[]) does not exist, and the changes worked in my local environment
/**
* Check for the Weblogic Blob wrapper, and handle accordingly...
*/
protected Blob writeDataToBlob(ResultSet rs, int column, byte[] data) throws SQLException {
Blob blob = rs.getBlob(column);
if (blob == null)
throw new SQLException("Driver's Blob representation is null!");
// handle thin driver's blob
if (blob instanceof weblogic.jdbc.vendor.oracle.OracleThinBlob) {
((weblogic.jdbc.vendor.oracle.OracleThinBlob) blob).putBytes(1, data);
return blob;
}
// (more slowly) handle blob for wrappers of other variations of
// drivers...
else if (blob.getClass().getPackage().getName().startsWith("weblogic.")) {
try {
// try to find putBytes method...
Method m = blob.getClass().getMethod("putBytes", new Class[] { long.class, byte[].class });
m.invoke(blob, new Object[] { new Long(1), data });
} catch (Exception e) {
try {
// Added this logic to the original code from OpenSymphony
// putBytes method does not exist. Try setBytes
Method m = blob.getClass().getMethod("setBytes", new Class[] { long.class, byte[].class });
m.invoke(blob, new Object[] { new Long(1), data });
} catch (Exception e2) {
throw new SQLException("Unable to find putBytes(long,byte[]) or setBytes(long,byte[]) methods on blob: " + e2);
}
}
return blob;
} else {
return super.writeDataToBlob(rs, column, data);
}
}
Here is a stack trace of the error.
org.quartz.JobPersistenceException: Couldn't store job: Unable to find putBytes(
long,byte[]) method on blob: java.lang.NoSuchMethodException: weblogic.jdbc.base
.BaseBlob.putBytes(long, [B) [See nested exception: java.sql.SQLException: Unabl
e to find putBytes(long,byte[]) method on blob: java.lang.NoSuchMethodException:
weblogic.jdbc.base.BaseBlob.putBytes(long, [B)]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport
.java:857)
at org.quartz.impl.jdbcjobstore.JobStoreTX.storeJob(JobStoreTX.java:210)
at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:687)
at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:261)
at com.pwc.us.mw.common.startup.QuartzListener.contextInitialized(Quartz
Listener.java:100)
at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAct
ion.run(WebAppServletContext.java:6415)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppSe
rvletContext.java:1678)
at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAp
pServletContext.java:3178)
at weblogic.servlet.internal.WebAppServletContext.setStarted(WebAppServl
etContext.java:5647)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:869)
at weblogic.j2ee.J2EEApplicationContainer.start(J2EEApplicationContainer
.java:2022)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContai
ner.java:2063)
at weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.
activateContainer(SlaveDeployer.java:2592)
at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit(
SlaveDeployer.java:2515)
at weblogic.management.deploy.slave.SlaveDeployer$Task.commit(SlaveDeplo
yer.java:2317)
at weblogic.management.deploy.slave.SlaveDeployer.commitUpdate(SlaveDepl
oyer.java:608)
at weblogic.drs.internal.SlaveCallbackHandler$2.execute(SlaveCallbackHan
dler.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
* Nested Exception (Underlying Cause) ---------------
java.sql.SQLException: Unable to find putBytes(long,byte[]) method on blob: java
.lang.NoSuchMethodException: weblogic.jdbc.base.BaseBlob.putBytes(long, [B)
at org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate.w
riteDataToBlob(WebLogicOracleDelegate.java:94)
at org.quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(Or
acleDelegate.java:204)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport
.java:851)
at org.quartz.impl.jdbcjobstore.JobStoreTX.storeJob(JobStoreTX.java:210)
at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:687)
at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:261)
at com.pwc.us.mw.common.startup.QuartzListener.contextInitialized(Quartz
Listener.java:100)
at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAct
ion.run(WebAppServletContext.java:6415)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppSe
rvletContext.java:1678)
at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAp
pServletContext.java:3178)
at weblogic.servlet.internal.WebAppServletContext.setStarted(WebAppServl
etContext.java:5647)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:869)
at weblogic.j2ee.J2EEApplicationContainer.start(J2EEApplicationContainer
.java:2022)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContai
ner.java:2063)
at weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.
activateContainer(SlaveDeployer.java:2592)
at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit(
SlaveDeployer.java:2515)
at weblogic.management.deploy.slave.SlaveDeployer$Task.commit(SlaveDeplo
yer.java:2317)
at weblogic.management.deploy.slave.SlaveDeployer.commitUpdate(SlaveDepl
oyer.java:608)
at weblogic.drs.internal.SlaveCallbackHandler$2.execute(SlaveCallbackHan
dler.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
|
Show » |
|