Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Почему запрещена кодогенерация на app-сервере?


Автор: UnicornMirage 28.10.2009, 19:11
Здравствуйте.
Вот пытался сгенерировать класс на серваке (tomcat 6), и возникла проблема: если генерировать простой класс, кторый использует лишь стандартные классы из пакета java- то он создается нормально.
Если же в этом генерируемом классе использовать классы из сторонних библиотек, либо свой же другой класс, то класс не компилится. Для компиляции использую JCAPI (JavaCompiler).

НО! если ту же программу для генерации класса запустить как обычный application через метод main, то компиляция проходит.

Пример:

Этот класс компилится под томкатом:

Код

package somepack;

public class MyDynamicClass {

   public void foo() {
   }
}




Этот класс выдает ошибку компиляции под томкатом:

Код

package somepack;

import somepack.SomeExistingMyClass;

public class MyDynamicClass {

   private SomeExistingMyClass c;

   public void foo() {
   }
}





Компилятор говорит, что не находит класс SomeExistingMyClass, хотя он существует.

Почему существует такое ограничение, и можно ли это как то побороть?

вероятно все упирается в класслоадер, который используется в JavaCompiler.
Если в режиме дебага томката (catalina jpda run) посмотреть:




Код

// так он не находит класс
ToolProvider.getSystemToolClassLoader().loadClass("somepack.SomeExistingMyClass");

// а так класс находится нормально!
Thread.currentThread().getContextClassLoader().loadClass("somepack.SomeExistingMyClass");





Как бы заставить класслоадер ToolProvider.getSystemToolClassLoader() увидеть все мои классы??

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