Hi all,
When I try to run my java application in VA Java it fails in execution of the SQLJ (I am not getting any data from DB2, it fails in the first statement of the following group:
synchronized (__sJT_execCtx) {
sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MdApplicationDataAccessDeptDiv_SJProfileKeys.getKey(0), 0);
try
{
sqlj.runtime.profile.RTResultSet __sJT_result = __sJT_execCtx.executeQuery();
aMdDepartmentDivisionCursor = new MdDepartmentDivisionInfo_Cursor(__sJT_result);
}
finally
{
__sJT_execCtx.releaseStatement();
}
}
When I export the project as jar file (classes and resources) and run it using JRE it is working fine.
I was thinking that it was related to Workspace classpath in VA Java, but I have the following in my Windows-Options-Resources:
C:\Program Files\SQLLIB\;
C:\Program Files\SQLLIB\bin\;
C:\Program Files\SQLLIB\java\db2java.zip;
C:\Program Files\SQLLIB\java\runtime.zip;
C:\Program Files\SQLLIB\java\sqlj.zip;
Thank you very much in advance for any ideas.
Garry
SQLJ problem in VA Java
-
- Уже с Приветом
- Posts: 240
- Joined: 25 Jan 2000 10:01
- Location: KS, USA
-
- Уже с Приветом
- Posts: 3982
- Joined: 13 Jul 2000 09:01
- Location: SVX -> BOS -> BUR -> SJC
-
- Уже с Приветом
- Posts: 240
- Joined: 25 Jan 2000 10:01
- Location: KS, USA
-
- Уже с Приветом
- Posts: 3982
- Joined: 13 Jul 2000 09:01
- Location: SVX -> BOS -> BUR -> SJC
К сожалению вы не привели стэка вызовов и сообщение об ошибке - хотя бы имя класса ошибки не помешало бы, а также верхушку стэка. Но есть вот такие идеи: если посмотреть на то, что генерится SQLJ компилером в качестве реализации ProfileKeys то видим (пример):
Обратите внимание на то, что в конструкторе (здесь singleton-pattern) исользуется loader тот, которым загружен указанный класс(XXX_Package_SJProfileKeys). И скорее всего, оно здесь падает ибо не может найти .SER-файлы.
Еще есть подозрение, что Statement на котором у вас падает - это первая ссылка на MdApplicationDataAccessDeptDiv_SJProfileKeys - то есть в этот момент загружается этот злостный класс, затем в статических инициализаторах он создаёт свой единственный instance, в конструкторе которого он не может загрузить SER - результат что-то вроде ExceptionInInitializersError или что-то в этом роде наследованное от java.lang.Error - оно не ловится catch(Exception e)
Если всё таки не удаётся загрузить SER'ы - пропишите в CLASSPATH их root... Да и вообще под отладчиком можно попробовать зайти во внутрь.
Сорри, что не могу ничего толком про VA сказать - я как-то под Eclipse занимаюсь...
Code: Select all
class XXX_Package_SJProfileKeys
{
private static XXX_Package_SJProfileKeys inst = null;
public static java.lang.Object getKey(int keyNum)
throws java.sql.SQLException
{
if (inst == null)
{
inst = new XXX_Package_SJProfileKeys();
}
return inst.keys[keyNum];
}
private final sqlj.runtime.profile.Loader loader = sqlj.runtime.RuntimeContext.getRuntime().getLoaderForClass(getClass());
private java.lang.Object[] keys;
private XXX_Package_SJProfileKeys()
throws java.sql.SQLException
{
keys = new java.lang.Object[1];
keys[0] = XXX_Conn_ContextEx.getProfileKey(loader, "com.yyy.XXX_Package_SJProfile0");
}
}
Обратите внимание на то, что в конструкторе (здесь singleton-pattern) исользуется loader тот, которым загружен указанный класс(XXX_Package_SJProfileKeys). И скорее всего, оно здесь падает ибо не может найти .SER-файлы.
Еще есть подозрение, что Statement на котором у вас падает - это первая ссылка на MdApplicationDataAccessDeptDiv_SJProfileKeys - то есть в этот момент загружается этот злостный класс, затем в статических инициализаторах он создаёт свой единственный instance, в конструкторе которого он не может загрузить SER - результат что-то вроде ExceptionInInitializersError или что-то в этом роде наследованное от java.lang.Error - оно не ловится catch(Exception e)
Если всё таки не удаётся загрузить SER'ы - пропишите в CLASSPATH их root... Да и вообще под отладчиком можно попробовать зайти во внутрь.
Сорри, что не могу ничего толком про VA сказать - я как-то под Eclipse занимаюсь...
I hated LA
-
- Уже с Приветом
- Posts: 240
- Joined: 25 Jan 2000 10:01
- Location: KS, USA
I tried to add the folders where .ser files are into classpath.
The same result.
Program fails on synchronized (__sJT_execCtx) statement. It is not going in the synchronized block at all.
I commented out synchronized (__sJT_execCtx). It fails now in the following constructor:
aMdDepartmentDivisionCursor = new MdDepartmentDivisionInfo_Cursor(__sJT_result);
No any exception was thrown.
{
sqlj.runtime.ConnectionContext __sJT_connCtx = sqlj.runtime.ref.DefaultContext.getDefaultContext();
if (__sJT_connCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_CONN_CTX();
sqlj.runtime.ExecutionContext __sJT_execCtx = __sJT_connCtx.getExecutionContext();
if (__sJT_execCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_EXEC_CTX();
// synchronized (__sJT_execCtx) {
sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MdApplicationDataAccessDeptDiv_SJProfileKeys.getKey(0), 0);
try
{
sqlj.runtime.profile.RTResultSet __sJT_result = __sJT_execCtx.executeQuery();
aMdDepartmentDivisionCursor = new MdDepartmentDivisionInfo_Cursor(__sJT_result);
}
finally
{
__sJT_execCtx.releaseStatement();
}
// }
}
The same result.
Program fails on synchronized (__sJT_execCtx) statement. It is not going in the synchronized block at all.
I commented out synchronized (__sJT_execCtx). It fails now in the following constructor:
aMdDepartmentDivisionCursor = new MdDepartmentDivisionInfo_Cursor(__sJT_result);
No any exception was thrown.
{
sqlj.runtime.ConnectionContext __sJT_connCtx = sqlj.runtime.ref.DefaultContext.getDefaultContext();
if (__sJT_connCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_CONN_CTX();
sqlj.runtime.ExecutionContext __sJT_execCtx = __sJT_connCtx.getExecutionContext();
if (__sJT_execCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_EXEC_CTX();
// synchronized (__sJT_execCtx) {
sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MdApplicationDataAccessDeptDiv_SJProfileKeys.getKey(0), 0);
try
{
sqlj.runtime.profile.RTResultSet __sJT_result = __sJT_execCtx.executeQuery();
aMdDepartmentDivisionCursor = new MdDepartmentDivisionInfo_Cursor(__sJT_result);
}
finally
{
__sJT_execCtx.releaseStatement();
}
// }
}