You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Rick Hillegas (JIRA)" <ji...@apache.org> on 2011/08/01 22:31:09 UTC

[jira] [Updated] (DERBY-5366) ClassNotFoundException when invoking a table function stored in a jar file in the database which extends or implements one of the classes/interfaces in org.apache.derby.vti

     [ https://issues.apache.org/jira/browse/DERBY-5366?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rick Hillegas updated DERBY-5366:
---------------------------------

    Attachment: derby-5366.sql
                DummyVTI.java

Attaching a repro:

1) Compile DummyVTI

2) Put it in a jar file called z/z.jar

3) Then run the derby-5366 script under ij.

You will see the following output:

ij version 10.9
ij> connect 'jdbc:derby:memory:db;create=true';
ij> create function dummyVTI() returns
table
(
    a int
)
language java parameter style derby_jdbc_result_set no sql
external name 'DummyVTI.dummyVTI';
0 rows inserted/updated/deleted
ij> call sqlj.install_jar('z/z.jar', 'APP.DUMMY_JAR', 0);
0 rows inserted/updated/deleted
ij> call syscs_util.syscs_set_database_property( 'derby.database.classpath', 'APP.DUMMY_JAR');
0 rows inserted/updated/deleted
ij> select * from table( dummyVTI() ) s;
ERROR 42X51: The class 'DummyVTI' does not exist or is inaccessible. This can happen if the class is not public.
ERROR XJ001: Java exception: 'DummyVTI : org/apache/derby/vti/RestrictedVTI: java.lang.ClassNotFoundException'.
ij> mainline (1.6) > runsql derby-5366
ij version 10.9
ij> connect 'jdbc:derby:memory:db;create=true';
ij> create function dummyVTI() returns
table
(
    a int
)
language java parameter style derby_jdbc_result_set no sql
external name 'DummyVTI.dummyVTI';
0 rows inserted/updated/deleted
ij> call sqlj.install_jar('z/z.jar', 'APP.DUMMY_JAR', 0);
0 rows inserted/updated/deleted
ij> call syscs_util.syscs_set_database_property( 'derby.database.classpath', 'APP.DUMMY_JAR');
0 rows inserted/updated/deleted
ij> select * from table( dummyVTI() ) s;
ERROR 42X51: The class 'DummyVTI' does not exist or is inaccessible. This can happen if the class is not public.
ERROR XJ001: Java exception: 'DummyVTI : org/apache/derby/vti/RestrictedVTI: java.lang.ClassNotFoundException'.

> ClassNotFoundException when invoking a table function stored in a jar file in the database which extends or implements one of the classes/interfaces in org.apache.derby.vti 
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5366
>                 URL: https://issues.apache.org/jira/browse/DERBY-5366
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.8.1.6
>            Reporter: Rick Hillegas
>         Attachments: DummyVTI.java, derby-5366.sql
>
>
> The class loader created by setting the derby.database.classpath does not see the Derby classes. This means that you can't use table functions which implement VTITemplate if you store those functions in a jar file in the database and then wire that jar file into the database-specific classpath. I will attach a repro. This problem was reported by Brett Berqquist in an email thread titled "Problem in trying to get a Restricted Table Function loaded".

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira