cannot drop jar from Oracle database with dropjava command
cannot drop jar from Oracle database with dropjava command
I am trying to execute dropjava command to drop a jar file in the database....
dropjava -u username/password@schema -v -r abc.jar
... but it is giving me the following error:
ORA-29537: class or resource cannot be created or dropped directly
What is the problem?
I loaded the JAR using this command:
loadjava -u username/password@schema -v -r -f abc.jar
dropjava
The exact command is: dropjava -u username/password@schema -v -r abc.jar
– mkbsc
Jul 10 '12 at 13:06
Yes but did you use any other options when you loaded teh jar?
– APC
Jul 10 '12 at 14:37
to load the jar i've used the following command: loadjava -u username/password@schema -v -r -f abc.jar
– mkbsc
Jul 11 '12 at 5:36
3 Answers
3
TL;DR: An java source object (object_type='JAVA SOURCE'
) which defines the same class already exists in the database. Drop it first.
object_type='JAVA SOURCE'
$ oerr ora 29537
29537, 00000, "class or resource cannot be created or dropped directly"
// *Cause: An attempt was made to create or drop a Java class or resource that
// is known to result from compilation of an existing Java source object.
// *Action: Act on the class or resource by acting on the source, or change
// the source so that it no longer defines the class or resource.
Consider the following MCVE:
$ echo "public class SomeClass " >SomeClass.java
$ javac SomeClass.java
$ jar -cvf SomeClass.jar SomeClass.class
$ conndb="user/pass@db_server/sevice_name"
$ loadjava -u $conndb -r -v SomeClass.jar
resolving: class SomeClass
Classes Loaded: 1
$ dropjava -u $conndb -v SomeClass.jar
dropping: class SomeClass
So far, so good. Now, let's create the java source object that defines the same class:
$ sqlplus -l -s $conndb <<+++
create or replace and compile java source named "SomeClass" as
$(<SomeClass.java)
/
+++
Java created.
Then the class can be neither created nor dropped directly:
$ loadjava -u $conndb -r -v SomeClass.jar
Error while creating class SomeClass
ORA-29537: class or resource cannot be created or dropped directly
$ dropjava -u $conndb -v SomeClass.jar
Error while dropping SomeClass
ORA-29537: class or resource cannot be created or dropped directly
Drop the existing java source that defines class with the same name and it'll work again:
$ sqlplus -l -s $conndb <<+++
drop java source SomeClass;
+++
Java dropped.
$ loadjava -u $conndb -r -v SomeClass.jar
resolving: class SomeClass
Classes Loaded: 1
$ dropjava -u $conndb -v SomeClass.jar
dropping: class SomeClass
This is basically a guess but I think it is worth a shot.
Connect to your database as the appropriate user and trying dropping the JAR with the PL/SQL package DBMS_JAVA. In SQL*Plus that would look likeL
dbms_java.dropjava('-jarsasdbobjects abc.jar');
The PL/SQL takes the same options as the dropjava
commandline.
dropjava
not working for me , getting not found , i mean not found the jar i am trying to drop which was loaded by loadjava
– Forhad
Nov 20 '13 at 6:00
This command works, I think:
dropjava -u username/password@schema -v -r -f abc.jar
Thanks for contributing an answer to Stack Overflow!
But avoid …
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
But avoid …
To learn more, see our tips on writing great answers.
Required, but never shown
Required, but never shown
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
What was the precise command (including options) you used to load the jar into the database? What is the precise set of options you're using with
dropjava
?– APC
Jul 10 '12 at 12:44