, хотя я был старым пользователем Сайта, но раньше мне удавалось решить проблемы самостоятельно. На этот раз мне нужен твой совет:)
Ситуация:
Я унаследовал старый код проекта Java, где SQLJ используется для доступа к базе данных. В проекте не нужны ни база данных, ни SQLJ, но я не могу изменить историю, поэтому приходится с ней мириться. Другая часть истории заключается в том, что разработка делалась в JDeveloper раньше, однако новые стандарты компании требуют Eclipse (лучший продукт в моих предпочтениях).
Но у меня проблема с переносом SQLJ для автоматической сборки с использованием Ant с использованием javac вместо компилятора Oracle. Итак, возникает проблема:
Java-файлы, сгенерированные SQLJ, недопустимы для компилятора javac из-за различий в структуре пакета. Однако JDeveloper (11.1.1.0.2) принимает такие java-файлы, поскольку он использует старый компилятор oracle. Пример обоих sqlj и Java, чтобы лучше объяснить проблему:
SQLJ
package Sess;
public class UserDB extends Object implements SessConstants
{
#sql public static iterator UserIterator(
String m
<cut off>
);
<cut off>
private static UserIterator UserIter = null;
}
public static boolean readNext(User theUser )
throws SQLException
{
if (iteratorOpen == false)
{
#sql UserIter = {
select
m
<cut off>
from
<cut off>
};
iteratorOpen = true;
<cut off>
Сгенерированный JAVA:
package Sess;
public class UserDB extends Object implements SessConstants
{
public static class UserIterator
extends sqlj.runtime.ref.ResultSetIterImpl
implements sqlj.runtime.NamedIterator
<cut off>
public static boolean readNext(User theUser )
throws SQLException
{
if (iteratorOpen == false)
{
<cut off>
{
<cut off>
UserIter = new Sess.UserDB.UserIterator(new
...
<cut off>
Проблема с последним утверждением
UserIter = new Sess.UserDB.UserIterator(new ...
На самом деле должно быть:
UserIter = new UserDB.UserIterator(new
Тогда все в порядке.
Обратите внимание, что в более новых версиях JDeveloper возникает та же проблема, что и в javac (как мне кажется).
В качестве обходного пути мы храним Java-файлы вместе с SQLJ, и после того, как мы регенерируем Java из SQLJ-изменения, мы снова исправляем Java. Не совсем рад сделать это вручную, поскольку это делает недействительной процедуру автоматической сборки для случаев, когда нужно обновить SQLJ.
У кого-нибудь есть идеи? Ваша помощь очень ценится:)
Приветствия