How can I remove the admin module?

martijn brinkers <[email protected]>
Newsgroups gmane.comp.jakarta.james.user
Message-ID <CAJRz6kG24fNjaX3XtwryQD=zSO6jK-q9jzwY1Wd3wKzaO4Cz+w@mail.gmail.com>
Hi,

I'm trying to create a James server (I'm using release 3.8) without the
admin module. Main reason for this is that I want a minimal system.

As an experiement I created a copy of the jpa-smtp-app and then tried to
remove modules related to the webadmin.

It works if I disable some admin modules. However disabling the
DataRoutesModules results in a runtime error when trying to start the
application.

From JPAJamesServerMain:

    private static final Module PROTOCOLS = Modules.combine(
        new ProtocolHandlerModule(),
        new SMTPServerModule(),
//        new WebAdminServerModule(),
//        new DataRoutesModules(),
//        new MailRepositoriesRoutesModule(),
//        new MailQueueRoutesModule(),
//        new NoJwtModule(),
        new DefaultProcessorsConfigurationProviderModule(),
        new TaskManagerModule());

With the admin modules commented out, compilation works. However at runtime
the folllowing error is shown:


16:19:18.519 [ERROR] o.a.j.GuiceJamesServer - Fatal error while starting
James
com.google.inject.CreationException: Unable to create injector, see the
following errors:

1) [Guice/MissingImplementation]: No implementation for
Set<AdditionalInformationDTOModule<? extends
TaskExecutionDetails$AdditionalInformation, ? extends
AdditionalInformationDTO>> was bound.

Did you mean?
    Set<AdditionalInformationDTOModule<? extends
TaskExecutionDetails$AdditionalInformation, ? extends
AdditionalInformationDTO>> annotated with
@Named(value="additional_information_dto") bound at
TaskSerializationModule.provideAdditionalInformationDTOModules(TaskSerializationModule.java:60)
      \_ installed by: Modules$OverrideModule -> Modules$CombinedModule ->
Modules$CombinedModule -> Modules$CombinedModule -> TaskManagerModule ->
TaskSerializationModule

Requested by:
1  :
TaskSerializationModule.provideAdditionalInformationDTOModules(TaskSerializationModule.java:60)
      \_ for 1st parameter
     at
TaskSerializationModule.provideAdditionalInformationDTOModules(TaskSerializationModule.java:60)
      \_ installed by: Modules$OverrideModule -> Modules$CombinedModule ->
Modules$CombinedModule -> Modules$CombinedModule -> TaskManagerModule ->
TaskSerializationModule

Learn more:
  https://github.com/google/guice/wiki/MISSING_IMPLEMENTATION

2) [Guice/MissingImplementation]: No implementation for Set<TaskDTOModule<?
extends Task, ? extends TaskDTO>> was bound.

Did you mean?
    Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> annotated with
@Named(value="task_dto") bound at
TaskSerializationModule.provideTaskDTOModules(TaskSerializationModule.java:83)
      \_ installed by: Modules$OverrideModule -> Modules$CombinedModule ->
Modules$CombinedModule -> Modules$CombinedModule -> TaskManagerModule ->
TaskSerializationModule

Requested by:
1  :
TaskSerializationModule.provideTaskDTOModules(TaskSerializationModule.java:83)
      \_ for 1st parameter
     at
TaskSerializationModule.provideTaskDTOModules(TaskSerializationModule.java:83)
      \_ installed by: Modules$OverrideModule -> Modules$CombinedModule ->
Modules$CombinedModule -> Modules$CombinedModule -> TaskManagerModule ->
TaskSerializationModule

If I only enable DataRoutesModules, the above error is not shown.

    private static final Module PROTOCOLS = Modules.combine(
        new ProtocolHandlerModule(),
        new SMTPServerModule(),
//        new WebAdminServerModule(),
        new DataRoutesModules(),
//        new MailRepositoriesRoutesModule(),
//        new MailQueueRoutesModule(),
//        new NoJwtModule(),
        new DefaultProcessorsConfigurationProviderModule(),
        new TaskManagerModule());

The DataRoutesModules however pull in spark-core via a dependency (and
therefore also jetty etc) which I would like to prevent.

What I do not understand is that it looks like
"Set<AdditionalInformationDTOModule<? extends
TaskExecutionDetails$AdditionalInformation, ? extends
AdditionalInformationDTO>>" is provided by TaskSerializationModule and
TaskSerializationModule is installed by TaskManagerModule. It therefore
looks like there is an implementation available.

Any suggestion on how I can complete remove the web admin (and it's
dependencies).

Kind regards,

Martijn Brinkers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.