JavaEE аннотация сканирования из bean-компонента - PullRequest
0 голосов
/ 22 сентября 2018

Я использую javaee 8 для своего проекта и у меня есть следующие классы:

public class PersonRepository {
    @Inject
    @Mongo(collection = "users")
    private MongoCollection collection;

    // define some methods ....
}     

@ApplicationScoped
public class MongoProducer {

    @Inject
    private MongoClient mongoClient;

    @Produces
    @Mongo
    protected MongoCollection produceCollection(InjectionPoint ip) {
        Mongo mongo = getMongoAnnotation(ip);
        return mongoClient.getDatabase("sample").getCollection(mongo.collection());
    }

    private Mongo getMongoAnnotation(InjectionPoint ip) {
        return ip.getAnnotated().getAnnotation(Mongo.class);
    }
}    

@MongoClientDefinition(
        name = "mongoClient",
        dbName = "sample",
        username = "admin",
        password = "adminpass"
)
public class MongoConnectionConfig {
}

К сожалению, mongoClient не имеет никакого метода для получения имени базы данных, в настоящее время связанного с этим.(может быть, я не могу найти это!)
Как можно сканировать аннотацию MongoClientDefinition из метода yieldCollection?
Я хочу установить имя базы данных из этой аннотации.(заменить "образец").
Примечание : Я создал расширение CDI для MongoClientDefinition.

1 Ответ

0 голосов
/ 22 сентября 2018

Простая идея: BeanManager:
Я изменил свое расширение и добавил метод получения для dbName.
Полный проект на github

@ApplicationScoped
public class MongoProducer {

    @Inject
    private MongoClient mongoClient;

    @Inject
    private BeanManager bm;

    @Produces
    @Mongo
    protected MongoCollection produceCollection(InjectionPoint ip) {
        String dbName = bm.getExtension(MongoClientExtension.class).getDatabaseName();
        Mongo mongo = getMongoAnnotation(ip);
        return mongoClient.getDatabase(dbName).getCollection(collectionName,mongo.collection());
    }

    private Mongo getMongoAnnotation(InjectionPoint ip) {
        return ip.getAnnotated().getAnnotation(Mongo.class);
    }
}
...