小编Rol*_*and的帖子

通过CDI动态注入实例

在具有CDI的Java EE平台中,能够注入POJO类的实例.以非常简单的方式,我们需要使用@Inject注释来注入某个接口的默认实例.我们也可以使用限定符为我们的领域注入具体的类.但这些解决方案相当静态.

我需要一些更具动力的注入模型.

让我来介绍一下我的问题:假设我们有接口Animal和三个实现该接口的类:Ant,Dog,Elephant.我想动态地注入这三个类中的一个的实例,它依赖于一些变量,如字符串(动物名称).在Java SE中我会这样做:

Map<String, Animal> animalMap = new HashMap<>();
animalMap.put("ant", new Ant());
animalMap.put("dog", new Dog());
animalMap.put("elephant", new Elephant());
...
String animalName = ...;
Animal animal = animalMap.get(animalMap);
animal.doSomething();
Run Code Online (Sandbox Code Playgroud)

所以我需要这样的东西:

class AnimalManager {
   @Inject // ?
   private Animal animal; // ?

   public void run(String animalName) {
      // based on animalName get new instance of animal and run doSomething()
      ...
      animal.doSomething(); // if animalName is "ant" call the doSomething on Ant class
   }
}
Run Code Online (Sandbox Code Playgroud)

在所有实现Animal接口的类中,我需要使用带有@EJB注释的变量.

在Java EE中最好和最正确的方法是什么?

编辑:
好的,基于Svetlin Zarev和hwellmann的回应(谢谢!)我创建了这个: …

java java-ee cdi

8
推荐指数
2
解决办法
3667
查看次数

GitLab的Shell执行者,没有特权

我有8.7.0版本的GitLab平台,我目前正在设置CI部分.我创建了一个新的gitlab-runner,它使用shell作为执行器.问题是,在调用转轮来完成自己的工作之前,系统无法获取git更改.构建过程的控制台输出:

gitlab-ci-multi-runner 1.1.3 (a470667)
Using Shell executor...
Running on <my-page>...
Fetching changes...
warning: failed to remove <some-path>/localClassSetAnalysis.bin
warning: failed to remove <some-path>/localClassSetAnalysis.lock
...


gitlab-ci-multi-runner 1.1.3 (a470667)
Using Shell executor...
Running on <my-page>...
Cloning repository...
rm: cannot remove ‘path-to-some-directory>’: Permission denied
rm: cannot remove ‘path-to-some-directory>’: Permission denied
...
Run Code Online (Sandbox Code Playgroud)

存储文件的文件夹是/ home/gitlab-runner/builds所以我想,有两个用户:git和gitlab-runner,git用户无法删除或重写此目录中的文件.更改后,目录权限构建过程启动并成功完成,但之后文件再次具有旧权限(读取+写入用户(gitlab-runner)并读取其余的权限).所以现在我必须(最简单的方法)在构建之前始终从/ home/gitlab-runner/builds中删除所有内容,但当然这不是解决方案......我该怎么办?

git permissions continuous-integration chmod gitlab

5
推荐指数
1
解决办法
1536
查看次数

标签 统计

cdi ×1

chmod ×1

continuous-integration ×1

git ×1

gitlab ×1

java ×1

java-ee ×1

permissions ×1