Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Janino - создание класса из строки???!!! / 22 сообщений из 22, страница 1 из 1
27.02.2012, 18:43:40
    #37680843
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Есть такая штучка Janino. Она умеет создавать классы из строки. Мне рубит ошибку. Материалов в инете "0"! 2 странички туториала и все! Не могу даже ни одной статьи найти. :(
Так вот, я хочу сделать обычный класс и вызвать метод, рубит ошибку

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
import java.io.IOException;
import java.io.StringReader;

import org.codehaus.commons.compiler.CompileException;
import org.codehaus.janino.SimpleCompiler;

public class JaninoCompileFromString {
	
	private static SimpleCompiler compiler = new SimpleCompiler();
	
	public static void main(String[] args) throws CompileException, IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		String source = "public class JaninoEvaluator implements Evaluator {\n"
		         +"\tpublic int evaluate(int i) {" + "\t\t"
		         +"\n" + "\t\treturn i-2;\n" + "\t}\n"
		         +"}\n";
		
		compiler.cook(new StringReader(source));
		
		Class clazz = compiler.getClassLoader().loadClass("JaninoEvaluator");
		
		Evaluator eval = (Evaluator)clazz.newInstance();
		
		System.out.println(source);
		System.out.println("\n\n\n evaluate(13): "+eval.evaluate(13));
	}
}


Код: java
1.
2.
3.
4.
5.
6.
7.
Exception in thread "main" java.lang.VerifyError: (class: JaninoEvaluator, method: evaluate signature: (I)D) Expecting to find object/array on stack
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	at java.lang.Class.getConstructor0(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at JaninoCompileFromString.main(JaninoCompileFromString.java:26)



Спасибо.

Где можно почитать о этом?


В чем моя ошибка? :(
...
Рейтинг: 0 / 0
27.02.2012, 18:59:06
    #37680880
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
implements Evaluator это что?
...
Рейтинг: 0 / 0
27.02.2012, 19:17:01
    #37680907
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
:):):) Вот я торрррмммооооззззз,
Blazkowicz - вы сами того не ведая ткнули мне носом в мою ошибку!!!! :):)
Вот где она сидела
Код: java
1.
2.
3.
4.
5.
public interface Evaluator {

	public double evaluate(int i);

}



а нужно

Код: java
1.
2.
3.
4.
5.
public interface Evaluator {

	public int evaluate(int i);

}



Все запустилось, и заработало.
Еще бы подсказали где читать на данную тему. был бы премного благодареннн!!
...
Рейтинг: 0 / 0
27.02.2012, 19:21:32
    #37680914
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
А зачем это нужно, если в java встроеная поддержка скриптовых языков?
...
Рейтинг: 0 / 0
27.02.2012, 19:26:03
    #37680923
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Blazkowicz - конкретно не скажу зачам. Начальство сказало - значит нужно. Сейчас в проекте интегрирован BeanShell, хотят соскакивать, так как медленный он.
Основная фишка - нужно "на лету" и чтоб классы можно загонять в обычный стринг.
А на ваше усмотрения какая альтернатива?
javax.tools - оч большой по размеру использовать не хотят.
...
Рейтинг: 0 / 0
27.02.2012, 19:30:03
    #37680930
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
...
Рейтинг: 0 / 0
27.02.2012, 19:35:18
    #37680939
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Blazkowicz - я вас не понимаю, а разве java это скриптовый язык? или.. не буду сильно спорить. так как я не гуру в программровании... Но все же предоставте аргументы если можно.
Я рыбачил на это страничке. :) недавно делал примеры с Rhino.
А здесь идет речь о создании java-класса из строки и компилировании его "на лету"..
...
Рейтинг: 0 / 0
27.02.2012, 19:57:36
    #37680982
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
_webdev_ Blazkowicz - я вас не понимаю, а разве java это скриптовый язык?
Нет. Просто удивляет, не уже ли такая сильная и важная разница в производительности?

_webdev_или.. не буду сильно спорить. так как я не гуру в программровании... Но все же предоставте аргументы если можно.

Мне просто, для общего развития, интересно, почему из всех вариантов выбран именно Janino. Только из-за производительности?
javax.tools большой? 12Мб вроде страшно только для апплетов.
Janino - не видно чтобы особо развивался.
...
Рейтинг: 0 / 0
27.02.2012, 20:16:36
    #37681007
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
BlazkowiczНет. Просто удивляет, не уже ли такая сильная и важная разница в производительности? - сказали. что да - он оч медленный. Проект оч большой и наверное тестируют все под большой нагрузкой..

BlazkowiczМне просто, для общего развития, интересно, почему из всех вариантов выбран именно Janino. Только из-за производительности? - главное требование - создавать классы на лету и вот таким способом.
Код: java
1.
2.
3.
4.
5.
6.
		String source = "public class JaninoEvaluator implements Evaluator {\n"
		         +"public static String var;"
		         +"public JaninoEvaluator(){ this.var=\"private Variable\";}"
		         +"\tpublic int evaluate(int i) {" + "\t\t"
		         +"\n" + "\t\treturn i-2;\n" + "\t}\n"
		         +"}\n";



назовите пожалуйста альтернативы.


Blazkowiczjavax.tools большой? 12Мб вроде страшно только для апплетов. - проект серезный - куча людей уже не один месяц, а может и год трудится, не знаю, мне сказали, что много, значит много.

BlazkowiczJanino - не видно чтобы особо развивался. - в принципе, то что он предлагает, разработчиков пока устраивает..
Вот.. здесь были просмотреты альтернативы, - какая из них может перечисленное выше? Janino 2 jar - 620kb.
До этого сделал пример с Javassist - он не может из строки разбирать ява-код.
...
Рейтинг: 0 / 0
27.02.2012, 20:18:04
    #37681010
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Судя по всему, ни вы, ни я, требований к задаче не знаем. Поэтому вопросы отпадают.
...
Рейтинг: 0 / 0
27.02.2012, 20:24:13
    #37681017
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
_webdev_- главное требование - создавать классы на лету и вот таким способом. - всегда пожалуйста. :)
Что такое Janino я узнал несколько часов назад.. Что я могу вам поконкретней ответить..
...
Рейтинг: 0 / 0
13.03.2012, 18:46:19
    #37703479
Александр2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Не подскажешь, в твоем примере на строке:
Код: java
1.
Evaluator eval = (Evaluator)clazz.newInstance();


выдает ошибку..
Почему? Ты не весь код выложил или что?
...
Рейтинг: 0 / 0
13.03.2012, 18:59:14
    #37703503
Александр2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
(разобрался...)
...
Рейтинг: 0 / 0
13.03.2012, 19:13:05
    #37703530
Александр2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
И все-таки, может автор или кто другой поможет, почему ругается при выполнении? :
Код: java
1.
2.
3.
4.
Exception in thread "main" org.codehaus.janino.CompileException: Line 1, Column 41: Cannot determine simple type name "Evaluator"
	at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:8185)
	at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java:4203)
	at org.codehaus.janino.UnitCompiler.access$10200(UnitCompiler.java:108)



если убрать "implements Evaluator" то спотыкается об
Код: java
1.
Evaluator eval = (Evaluator)clazz.newInstance();
...
Рейтинг: 0 / 0
14.03.2012, 11:53:00
    #37704446
maxkar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Александр2012,

А Evaluator в каком package находится? Там, наверное, нужно полностью квалифицированное имя написать. Что-то похожее на "implements com.test.Evaluator"
...
Рейтинг: 0 / 0
14.03.2012, 12:57:42
    #37704604
Александр2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Именно!) (теперь я уже это знаю)) )
И все-таки - крутая вещь - во время выполнения создавать код и им пользоваться)
...
Рейтинг: 0 / 0
14.03.2012, 20:07:02
    #37705507
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Александр2012Именно!) (теперь я уже это знаю)) )
И все-таки - крутая вещь - во время выполнения создавать код и им пользоваться)

ну-ну

Я пока минусов больше вижу:
1. Отсутствие проверки на этапе компиляции (хорошо видно на примере топикстартера, в любой IDE в редакторе он бы сразу увидел). Хотя если код был разработан в другом IDE...
2. Как можно при таком подходе выполнять рефакторинг? Тем более на большом проекте
3. Данный пример на основе одного класса. А если их куча? Не знаю, зависимости там всякие...
4. Дебажить как вы это будете?

Может я и неправ, но над этими вопросами мне кажется надо подумать, прежде чем на иглу подсаживаться

Удачи
...
Рейтинг: 0 / 0
14.03.2012, 20:59:30
    #37705560
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
пока не прострелит ногу не поймет:)
...
Рейтинг: 0 / 0
15.03.2012, 13:31:30
    #37706501
Большой Синий Кит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
забыл никпока не прострелит ногу не поймет:)

Лично меня больше всего пугает отсутствие возможности дебага. Хотя и остальное страшное.
...
Рейтинг: 0 / 0
30.03.2012, 11:44:25
    #37731065
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
прошу прощения. был в отпуске. Кого-то еще интересует эта тема?
Я так видел, что "Александр2012" уже разобрался. :)
...
Рейтинг: 0 / 0
30.03.2012, 14:24:50
    #37731442
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
_webdev_,

Я думаю, что любая подобная библиотека, должно иметь свой java parser. А это влечет за собой вопрос насколько этот парсер совершенен ?
...
Рейтинг: 0 / 0
30.03.2012, 17:45:09
    #37732018
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Janino - создание класса из строки???!!!
Не могу ответить, так как занимался єтим день-два, а потом переключился на другое задание...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Janino - создание класса из строки???!!! / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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