クラスパスからEJB(3.1)にファイルをロードしたPropertiesクラスを簡単に挿入する方法はありますか?EJB3.1プロパティファイルの注入
このような何か:bkailでは、次の方法でこれを達成することができ、言ったように
@Resource(name="filename.properties", loader=some.properties.loader)
private Properties someProperties;
は、
ボゾ
クラスパスからEJB(3.1)にファイルをロードしたPropertiesクラスを簡単に挿入する方法はありますか?EJB3.1プロパティファイルの注入
このような何か:bkailでは、次の方法でこれを達成することができ、言ったように
@Resource(name="filename.properties", loader=some.properties.loader)
private Properties someProperties;
は、
ボゾ
、ありがとうございました。私は次に作成する、あなたのloader=some.properties.loader
が本当に何を意味するのかわからないようにして何もしてスキップされていますが、まず、あなたの注入型
@BindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD,
ElementType.PARAMETER })
public @interface PropertiesResource {
@Nonbinding
public String name();
@Nonbinding
public String loader();
}
を定義loader.getClass().getResourceAsStream ("filename.properties");
を使用してロードしたい場合には、そのためのオプションを提供しますそのプロデューサ
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を例hereとして与えられている溶接のドキュメントを検討していました。これは、使用しているアプリケーションサーバーがCDIの実装(Glassfishの3.xまたはJBossのようWELDを持っている場合は、溶接1.0.0で、取得したアノテーションは、この
PropertiesResource annotation = ip.getAnnotation(PropertiesResource.class);
のように行うことができ、溶接1.1.0のとおりであります7.xまたはWeblogicの12、あなたはWELD溶接ドキュメントhere
に説明されて拡張子を使用することがでやすい
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-extensions</artifactId>
<version>${weld.extensions.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
ないあなたのPOMにこれを追加するのと同じくらい簡単です)例であり、標準のJavaEEです。私はCDIが@ Inject + @ Producesを使ってこのようなことをすることができると思っていますが、私はCDIに慣れていません。 (誰かが詳細を記入できるという希望でこのコメントを残す) –