Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Доступ к javaклассу из класса другого пользователя


Автор: Appolina 14.7.2009, 11:17
Привет!

Кто-нибудь сталкивался с такой проблемой: необходимо использовать java-классы одного пользователя из под другого.
Классы загружаются с помощью pl/sql developer'а и появляются в списке user_object'ов, все ок. 
Класс пользователя supplier: 
Код

create or replace and compile java source named test_grant as
public class test_grant
{


      public static void method() 
    {
    int i;
    }
}

Использующий его класс пользователя consumer:
Код

create or replace and compile java source named test_consumer as
public class test_consumer
{
public static void test()
{
test_grant t = null;
// и так тоже пробовали: supplier.test_grant t = null;
}
}

Для того, чтобы разрешить ссылку на используемы класс из под пользователя supplier:
grant execute on "test_grant" to consumer;
А из под consumer по всякому пробовали:
alter java class "test_consumer" resolver ((* consumer)(* supplier)(* PUBLIC)) authid current_user;
alter java class "test_consumer" resolver ((* consumer)(* supplier)(* PUBLIC)) authid definer;

Несмотря на все эти ухищрения при компиляции класса test_consumer выдается ошибка cannot resolve symbol на строке "test_grant t = null;"
Если создать оба класса под одним пользователем, то все компилируется.
Oracle 10.2g

Автор: DimW 14.7.2009, 12:47
если я все правильно понимаю то при создании класса в схеме этот класс относится к пакету с названием схемы в которой он создан.
для того что бы его поюзать достаточно прописать импорт:
Код

create or replace and compile java source named test_consumer as
import supplier.*;
public class test_consumer
{
    public static void test()
    {
        test_grant t = null;
    }
}

но это теория, сам не проверял.

Автор: Appolina 14.7.2009, 17:40
Спасибо, но это, к сожалению не помогает. Вообще, какую бы чушь не написала после import, класс, не обращая на все это внимания компилируется. Проблема частично может быть решена загрузкой классов с помощью loadjava с обязательным ключом synonym.
Вот в таком виде у меня получилось:
Код

loadjava -user supplier/supplier -andresolve -grant consumer -synonym test_grant.java

Вроде бы это означало просто создание синонима, но, видимо происходит параллельно что-то еще тк отдельное создание аналогичного синонима без использоывания loadjava не помогло. 

Автор: LSD 14.7.2009, 18:40
А http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9013.htm на эти классы ты пользователю дала?


P.S. А имена классов остаются как есть, никаких префиксов схемы к ним не добавляется.

Автор: Appolina 15.7.2009, 09:59
Да, дала. Вот в таком виде:
Код

grant execute on "test_grant" to consumer;

из под пользователя supplier.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)