2015-07-07 4 views
0

Недавно я узнал, как регистрировать произвольные артефакты grails (мне это нужно для динамических контроллеров в моем приложении), используя grailsApplication.addArtefact (java.lang.String artefactType, GrailsClass artefactGrailsClass), и он отлично работает, но теперь я понял, что я также хочу иметь возможность отменить их регистрацию.Программное удаление артефакта грааля из контекста приложения

К сожалению, интерфейс GrailsApplication не дает четкого способа сделать это, и кажется, что отмена регистрации нежелательных динамически зарегистрированных артефактов Грааля может быть выполнена только путем перезапуска всего приложения.

Возможно, мне что-то не хватает, и артефакт можно удалить из приложения без перезапуска приложения?

Спасибо

ответ

0

Вы можете всегда rebuildGrailsApplication. Это отбрасывает все артефакты и загружает значения по умолчанию. Это, очевидно, означает, что вам нужно будет addArtefact артефактов, которые вы хотите сохранить снова.

Другой вариант - это доступ к loadedClasses (который защищен) и внести изменения вручную, а затем позвонить populateAllClasses, чтобы сделать доступным (этот метод также защищен).

+0

Я пытаюсь реализовать первый подход, собирая все артефакты из 'grailsApplication.getAllArtefacts()', затем вызывая 'rebuild', а затем добавляя каждый собранный артефакт с помощью' addArtefact'. К сожалению, это как-то ломается с фильтром безопасности apache siro, и мое приложение не работает с 'javax.servlet.ServletException: Отфильтрованный запрос не выполнен. \t at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal (AbstractShiroFilter.java:384) ' –

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