powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / java приложение
11 сообщений из 11, страница 1 из 1
java приложение
    #35157870
rehsinup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хочю работать с cache на java
1. создал в cache класс
Class User.PIF Extends (%Persistent, %Populate, %XML.Adaptor) [ ClassType = persistent ]

2. Создал java класс
public class TPIF extends Persistent {
private static String CACHE_CLASS_NAME = "User.PIF";

public TPIF (Database db) throws CacheException {
super (((SysDatabase)db).newCacheObject (CACHE_CLASS_NAME));
}

public TPIF (CacheObject ref) throws CacheException {
super (ref);
}
}

3. Создал соеденение
Database dbconnection = null;
String url="jdbc:Cache://localhost:1972/TEST";
String username="_SYSTEM";
String password="sys";

dbconnection = CacheDatabase.getDatabase (url, username, password);

4. Хочю создать екземпляр класа User.PIF
Sample.TPIF pif = null;
pif = new Sample.TPIF( dbconnection );
вот на этом месте летит ексепшин:

com.intersys.objects.CacheException: Unable to find Java class for Cache class User.PIF caused by: java.lang.ClassNotFoundException: User.PIF
at com.intersys.cache.AbstractCacheClass.setJavaClass(AbstractCacheClass.java:87)
at com.intersys.cache.AbstractCacheClass.getJavaClass(AbstractCacheClass.java:64)
at com.intersys.cache.AbstractCacheClass.verifyClass(AbstractCacheClass.java:206)
at com.intersys.cache.jbind.JBindDatabase.newCacheObject(JBindDatabase.java:1018)
at Sample.TPIF.<init>(TPIF.java:12)
at exl.LoadPIF.main(LoadPIF.java:31)

Вопрос почему он его не находит?!?! Спасибо.
...
Рейтинг: 0 / 0
java приложение
    #35158412
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как Вы создавали Java-класс? Неужели вручную?
У Вас класс в Caché называется "User.PIF", в Java он уже "TPIF" (какой пакет?), и, наконец, в коде Вы обращаетесь к нему, как "Sample.TPIF".

В Ваш Caché-класс добавьте проекцию, например:
Код: plaintext
Projection JavaClient As %Projection.Java(ROOTDIR = "C:\Client\src");
и перекомпилируйте его. В указанной директории появится Java-класс с правильной структурой каталогов. Его и используйте.
...
Рейтинг: 0 / 0
java приложение
    #35158985
rehsinup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дорогой товарищ. спасибо тебе! за то что направил безтолкового.
...
Рейтинг: 0 / 0
java приложение
    #35164237
rehsinup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему после того как я вставил новое отражение для класса он перестал компилится и не генерит java класс?

Compilation started on 03/01/2008 03:45:05
Compiling class User.TPerson ..................
Compiling table SQLUser.TPerson ...
Compiling table SQLUser.TPerson_MobilePhone ...
Compiling routine User.TPerson.1
Compiling routine User.TPerson.2
Compiling routine User.TPerson.3
ERROR #6632: Class User.TPerson is not up-to-date. Please recompile the class and try again.
ERROR #6632: Class User.TPerson is not up-to-date. Please recompile the class and try again.
Errors detected during compilation.
...
Рейтинг: 0 / 0
java приложение
    #35164359
rehsinup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему вот стаким методом проекция не строится?

Query IsNumberExists(Seria As %String, Number As %String) As %SQLQuery(CONTAINID = 1)
{
SELECT
ID,
CardNumber,
Person->FirstName,
Person->FirstName,
Person->SecondName,
Person->MiddleName,
(Person->Home->IDStreet->Name || ' д.' || Person->Home->House || ' корп.' || Person->Home->Box || ' кв.' || Person->Home->Apartment) As StreetName

FROM TPersonCard
WHERE
UPPER(Person->Passport->Seria) = UPPER(:Seria) AND
Person->Passport->Number = :Number
}

что в нем такого особеного?
...
Рейтинг: 0 / 0
java приложение
    #35166168
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Попробуйте принудительно перекомпилировать класс или весь проект. Вот еще ссылка на похожую проблему:
Устаревание классов

2) А какая ошибка возникает? На генерацию проекции должны влиять только сигнатуры метода/запроса, но не их код.
У меня и с более сложным кодом запросов все генерируется нормально.
...
Рейтинг: 0 / 0
java приложение
    #35173921
rehsinup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit1) Попробуйте принудительно перекомпилировать класс или весь проект. Вот еще ссылка на похожую проблему:
Устаревание классов

2) А какая ошибка возникает? На генерацию проекции должны влиять только сигнатуры метода/запроса, но не их код.
У меня и с более сложным кодом запросов все генерируется нормально.

по ссылке проблема не та...
ошибку привел выше...
без создания проекции компелируется...
удалил этот метод, добавил дериктиву создания проекции - скомпелировался и создал проекцию.

В чем проблема не понимаю...
...
Рейтинг: 0 / 0
java приложение
    #35174282
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как же не та, сами приводите

авторRROR #6632: Class User.TPerson is not up-to-date. Please recompile the class and try again.
ERROR #6632: Class User.TPerson is not up-to-date. Please recompile the class and try again.
То есть проблема устаревания класса.

Если решите этот вопрос с IS, сообщите сюда
...
Рейтинг: 0 / 0
java приложение
    #35174565
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Блок А.Н. :
Я компилирую в версии 2008.1.RC1 в Studio в рамках проекта с параметрами "cukfv-o" и ни разу не встречался с такой ошибкой. Не могли бы Вы привести пример соотвествующих классов? Лучше в изначальной ветке.

To rehsinup :
Если классов в проекте много и они сложные, при этом реализация меняется часто, а каркас класса - редко, то рекомендую генерировать проекцию по необходимости - сэкономите время.
...
Рейтинг: 0 / 0
java приложение
    #35174812
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to servit
К сожалению, нет.

Проблема в WRC (зависла), решали на уровне пересылки логов, абстрактно.
Классы передать разрешения не получил (от своих), демо-проблему построить не получилось.
Так что проблема пока просто висит.

У меня в первоначальной проблеме были нескомпилированы абстракные классы
$system.OBJ.CompileAll("'cf") без флага "s" их как оказалось не компилил, и получалось, что абстрактные классы были старее системных, поэтому все производное от них автоматически устаревало.

Но даже после этого если классов много и они очень сильно друг друга используют, любое изменение или даже просто компилляция класса приводит к устареванию почти всех остальных.
Можно конечно компилировать с флагами ry, но перекомпилировать каждый раз весь проект не очень радует.
Проблема создать демо проблему (как ни странно) в том, что у каше какая-то защита от этого есть. На трех-четырех классах каше разбирается в том, что от чего зависит, но один раз как-то подавилась, повторить пример не получилось, как не пытался.

Пока обходимся удалением глобала oddDEP.
Флагом u не пользуюсь, наоборот "-u" делаю обязательно. Были случаи, когда каше ошибочно решало, что компиляция не нужна.
"v" тоже не раз подводила, больше не применяю. Если пользователи работают, компилить нельзя.
Как правило, компилирую гораздо больше одного класса, в это время сохранить работоспособность сервера с какие-то ни было ключами по-моему, не получится.
...
Рейтинг: 0 / 0
java приложение
    #35175197
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rehsinupпочему вот стаким методом проекция не строится?

Query IsNumberExists(Seria As %String, Number As %String) As %SQLQuery(CONTAINID = 1)
{
SELECT
ID,
CardNumber,
Person->FirstName,
Person->FirstName,
Person->SecondName,
Person->MiddleName,
(Person->Home->IDStreet->Name || ' д.' || Person->Home->House || ' корп.' || Person->Home->Box || ' кв.' || Person->Home->Apartment) As StreetName

FROM TPersonCard
WHERE
UPPER(Person->Passport->Seria) = UPPER(:Seria) AND
Person->Passport->Number = :Number
}

что в нем такого особеного?

Потому что в момент компиляции этого запроса необходим уже скопилированный User.TPerson... оссобенно некрасиво получается если внутри User.TPerson так же есть некие статические запросы по таблице User.PIF... иногда помагает включение рекурсивной компиляции... (r)

В другом случае во первых можно поставить в User.PIF в свойстве CompileAfter = User.TPerson, или заменить статический запрос на динамический ...

Последнее поможет скорее всего...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / java приложение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]