Внедрение файла свойств EJB3.1 - PullRequest
5 голосов
/ 28 июля 2011

Есть ли какой-нибудь простой способ добавить класс свойств, загруженный файлом из пути к классам, в EJB (3.1)?

Примерно так:

@Resource(name="filename.properties", loader=some.properties.loader)
private Properties someProperties;

Спасибо,

бозо

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Как сказал bkail, вы можете достичь этого следующим образом. Я не уверен, что на самом деле имел в виду ваш loader=some.properties.loader, поэтому пропустил что-либо с этим, но предоставил опцию для этого на случай, если вы хотите загрузить, используя loader.getClass().getResourceAsStream ("filename.properties");

Сначала определите тип инъекции

@BindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD,
        ElementType.PARAMETER })
public @interface PropertiesResource {

    @Nonbinding
    public String name();

    @Nonbinding
    public String loader();

}

Затем создайте продюсера для этого

public class PropertiesResourceLoader {

    @Produces
    @PropertiesResource(name = "", loader = "")
    Properties loadProperties(InjectionPoint ip) {
        System.out.println("-- called PropertiesResource loader");
        PropertiesResource annotation = ip.getAnnotated().getAnnotation(
                PropertiesResource.class);
        String fileName = annotation.name();
        String loader = annotation.loader();
        Properties props = null;
        // Load the properties from file
        URL url = null;
        url = Thread.currentThread().getContextClassLoader()
                .getResource(fileName);
        if (url != null) {
            props = new Properties();
            try {
                props.load(url.openStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return props;
    }
}

Затем вставьте его в ваш именованный компонент.

@Inject
@PropertiesResource(name = "filename.properties", loader = "")
private Properties props;

Я сделал это, изучив документацию по сварке, где @HttpParam приведен в качестве примера здесь . Это как для сварного шва 1.1.0, для сварного шва 1.0.0 получить аннотацию можно следующим образом

PropertiesResource annotation = ip.getAnnotation(PropertiesResource.class);
1 голос
/ 01 сентября 2013

Если сервер приложений, который вы используете, имеет WELD в качестве реализации CDI (например, Glassfish 3.x или JBoss 7.x или Weblogic 12), вы хотите использовать расширение WELD , которое объясняетсяWELD документация здесь

Это так же просто, как добавить это к вашему POM

<dependency>
   <groupId>org.jboss.weld</groupId>
   <artifactId>weld-extensions</artifactId>
  <version>${weld.extensions.version}</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>
...