2011-12-14 4 views
1

Я использую JDK 7 и тестирую игру! 1.2.4. Я создавал тестовый класс с общественным элементом под названием «имя» и получил исключение, что мой класс был переопределяем окончательным метод «GetName»:Нельзя публиковать имя участника '

public class DummyClass extends Thread { 
    public String name; 
    ... 
} 

Этого класс не является часть «рамок» себя: это это Thread, который получает информацию от Socket и сохраняет его в базе данных через Play! JPA (из пакета «models»). Мое приложение не является полным «веб-приложением», но имеет некоторые части, к которым следует обращаться через браузер (обычно: конфигурация, простой поиск базы данных, ...). Он запускает приложение @OnApplicationStart, которое запускает Threads, Sockets, сохраняет файлы, ...

Я угадываю Play! автоматически генерирует геттеры и сеттеры, но похоже, что он также меняет мои собственные классы.

Я не уверен, что это «ошибка» фреймворка, или я просто неправильно понял концепцию и мне нужно изменить несколько вещей (по крайней мере, переименование «имя» в «dummyName» делает трюк!:))?

Вот трассировки стека:

play.exceptions.UnexpectedException: Unexpected Error 
     at play.Invoker$Invocation.onException(Invoker.java:244) 
     at play.Invoker$Invocation.run(Invoker.java:286) 
     at Invocation.HTTP Request(Play!) 
Caused by: java.lang.VerifyError: class com.deepgray.acq.Acquisition overrides final method getName.()Ljava/lang/String; 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
     at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:166) 
     at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:84) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     at play.classloading.ApplicationClasses.getAssignableClasses(ApplicationClasses.java:67) 
     at play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:455) 
     at play.templates.GroovyTemplateCompiler.endTag(GroovyTemplateCompiler.java:342) 
     at play.templates.TemplateCompiler.generate(TemplateCompiler.java:93) 
     at play.templates.TemplateCompiler.compile(TemplateCompiler.java:15) 
     at play.templates.GroovyTemplateCompiler.compile(GroovyTemplateCompiler.java:41) 
     at play.templates.TemplateCompiler.compile(TemplateCompiler.java:28) 
     at play.templates.TemplateLoader.load(TemplateLoader.java:82) 
     at play.mvc.Router.parse(Router.java:162) 
     at play.mvc.Router.parse(Router.java:190) 
     at play.mvc.Router.parse(Router.java:164) 
     at play.mvc.Router.load(Router.java:48) 
     at play.mvc.Router.detectChanges(Router.java:219) 
     ... 1 more 

ответ

2

Да, проблема у вас здесь в том, что у вас есть общественный член, который игра «магия» создает сеттеры и геттеры для вас.

Простое изменение имени участника решит вашу проблему. Я не думаю, что это ошибка, потому что Play ожидает улучшения этих классов. Я не уверен, что это должно быть ограничено определенными пакетами, потому что это общее ожидание, что все публичные члены становятся доступными таким образом.

1

Я бы не использовать свои собственные темы. Play делает много «магии» для улучшения моделей, добавления транзакций и возможностей jpa.

Я думаю, что предпочтительный способ приблизиться к этому - это заставить работу слушать сокет. Работа автоматически дополняется поддержкой jap и транзакциями, что упрощает сохранение ваших данных после их получения.

+0

Да, это то, что я делаю. Я хотел использовать Play! просто для того, чтобы легко предложить моему приложению некоторые веб-возможности. Недостатком является то, что он должен быть полностью разработан в рамках. Надеюсь, я смогу начать (а) задание, в котором работает мое приложение, но я считаю, что это плохое использование Play! ... – Matthieu

0

У вас есть аннотированный DummyClass с любыми аннотациями Play/JPA?

Если нет, это ошибка, и ее следует сообщать в трекер проблемы.

+0

Нет, 'DummyClass' является POJO, даже в любом пакете Play (он находится в один из моих пакетов com.xxx). – Matthieu

Смежные вопросы