@startuml

hide members

package "main" {
    class MainCDI
    class MainJPASchemaGen #8FBC8F
}
package "test" {
    class ItemServiceTest
}

package "service" {
    interface NumberGenerator
    class IsbnGenerator << @ThirteenDigits >>
    class IssnGenerator << @EightDigits >>
    class MockGenerator << @Alternative >>
    class ItemService

    ItemService <.right. NumberGenerator : @Inject
    NumberGenerator <|.. IsbnGenerator
    NumberGenerator <|.. IssnGenerator
    NumberGenerator <|.. MockGenerator
}

package "model" {
    class Book << @Entity >> #8FBC8F
    class String #8FBC8F
    enum Language #8FBC8F
    class LanguageConverter << @Converter >> #8FBC8F

    Book --> "*" String
    Book --> Language
    Book ..> LanguageConverter
}

package "util" {
    annotation Loggable
    class LoggingInterceptor << @Loggable >>
    class LoggingProducer
    class CDIDebug << Extension >>
}

main ..> service
test ..> service
service ..> model
service ..> util

@enduml