Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / java приложение / 11 сообщений из 11, страница 1 из 1
27.02.2008, 14:09
    #35157870
rehsinup
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java приложение
хочю работать с 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
27.02.2008, 16:17
    #35158412
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java приложение
А как Вы создавали Java-класс? Неужели вручную?
У Вас класс в Caché называется "User.PIF", в Java он уже "TPIF" (какой пакет?), и, наконец, в коде Вы обращаетесь к нему, как "Sample.TPIF".

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

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
03.03.2008, 09:01
    #35166168
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java приложение
1) Попробуйте принудительно перекомпилировать класс или весь проект. Вот еще ссылка на похожую проблему:
Устаревание классов

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

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

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

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

автор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
06.03.2008, 10:04
    #35174565
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java приложение
To Блок А.Н. :
Я компилирую в версии 2008.1.RC1 в Studio в рамках проекта с параметрами "cukfv-o" и ни разу не встречался с такой ошибкой. Не могли бы Вы привести пример соотвествующих классов? Лучше в изначальной ветке.

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

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

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

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

Пока обходимся удалением глобала oddDEP.
Флагом u не пользуюсь, наоборот "-u" делаю обязательно. Были случаи, когда каше ошибочно решало, что компиляция не нужна.
"v" тоже не раз подводила, больше не применяю. Если пользователи работают, компилить нельзя.
Как правило, компилирую гораздо больше одного класса, в это время сохранить работоспособность сервера с какие-то ни было ключами по-моему, не получится.
...
Рейтинг: 0 / 0
06.03.2008, 12:38
    #35175197
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java приложение
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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / java приложение / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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