Gestion de bases de données

DESTYPE=BLOBDestination dans Reports 11g échoue avec : java.lang.IllegalAccessError: tried to access cl

S'APPLIQUE À :

Oracle Reports Developer - Version 11.1 à 11.1.1.4.0 [Release 11g]
Les informations de ce document s'appliquent à toutes les plateformes.

SYMPTÔMES

Exception :

REP-50125: An internal exception occurred: org.omg.CORBA.UNKNOWN: ----------BEGIN server-side stack trace----------
org.omg.CORBA.UNKNOWN: vmcid: SUN minor code: 202 completed: Maybe
at com.sun.corba.se.impl.logging.ORBUtilSystemException.runtimeexception(ORBUtilSystemException.java:8869)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.convertThrowableToSystemException(CorbaMessageMediatorImpl.java:1920)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleThrowableDuringServerDispatch(CorbaMessageMediatorImpl.java:1870)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleThrowableDuringServerDispatch(CorbaMessageMediatorImpl.java:1823)
at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:258)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1682)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1540)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:922)
at com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:181)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:694)
at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:451)
at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1213)
at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:471)
at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:500)
Caused by: java.lang.IllegalAccessError: tried to access class oracle.jdbc.driver.OracleResultSet from class oracle.reports.plugin.destination.blob.BLOBHelper
at oracle.reports.plugin.destination.blob.BLOBHelper.insertBLOB(BLOBHelper.java:82)
at oracle.reports.plugin.destination.blob.BLOBDestination.sendFile(BLOBDestination.java:219)
at oracle.reports.server.Destination.send(Destination.java:578)
at oracle.reports.server.JobObject.distribute(JobObject.java:2013)
at oracle.reports.server.JobManager.updateJobStatus(JobManager.java:2761)
at oracle.reports.server.EngineCommImpl.updateEngineJobStatus(EngineCommImpl.java:154)
at oracle.reports.server.EngineCommPOA._invoke(EngineCommPOA.java:94)
at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:637)
at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:189)
... 9 more

----------END server-side stack trace---------- vmcid: SUN minor code: 202 completed: Maybe.




lors de l'utilisation, dans Oracle Reports 11g, du fichier BLOBDestination.jar fourni sur OTN dans "Oracle Reports - Plugin Exchange".

"Oracle Reports - Plugin Exchange" : http://www.oracle.com/technetwork/middleware/reports/index-085705.html

CAUSE

1. Le package oracle.jdbc.driver, déprécié depuis Oracle Database 9.0.1, n'est plus pris en charge dans la Release 11g R1

Oracle Database JDBC Developer's Guide and Reference,
11g Release 1 (11.1)
Part Number B31224-03

Changements d'interface

Le package oracle.jdbc.driver, déprécié depuis Oracle Database 9.0.1, n'est plus pris en charge dans cette version. Le code qui fait référence à ce package ne pourra être ni compilé ni exécuté. Vous pouvez utiliser le package oracle.jdbc à la place.



2. La méthode BLOB getBinaryOutputStream(long pos) est dépréciée :

Oracle Database SecureFiles and Large Objects Developer's Guide
11g Release 1 (11.1)
Part Number B28393-02

Méthode propriétaire Oracle (dépréciée) : getBinaryOutputStream(long pos)

Méthode standard JDBC 3.0 de remplacement : setBinaryStream(long pos)

SOLUTION

Les modifications de code décrites ci-dessous ne sont nécessaires que si vous utilisez une version "personnalisée" de BLOBDestination.

Si vous utilisiez le fichier BLOBDestination.jar fourni sur OTN dans "Oracle Reports - Plugin Exchange", téléchargez simplement le fichier jar BLOBDestination11g.jar, modifié pour Reports 11g, fourni dans le document :

BLOB Destination Configuration in Reports 11g (Doc ID 1151455.1)


Le fichier BLOBHelper.java doit être modifié :

Modification 1 :

Remplacez la ligne

import oracle.jdbc.driver.OracleResultSet;


par

import oracle.jdbc.OracleResultSet;


Modification 2 :

Remplacez la ligne

outStream = blob.getBinaryOutputStream();


par

outStream = blob.setBinaryStream(0L);

Attention
Ce code d'exemple est fourni uniquement à des fins pédagogiques et n'est pas pris en charge par Oracle Support Services. Il a toutefois été testé en interne et fonctionne comme documenté. Nous ne garantissons pas qu'il fonctionnera chez vous : testez-le donc dans votre environnement avant de vous y fier.

RÉFÉRENCES

NOTE:1151455.1 - BLOB Destination Configuration in Reports 11g