5
私はJNDIを使用して定義されたデータソースを持つ既存のSpring Webベースアプリケーションを使用していますが、Beanを使用するスタンドアロンアプリケーションを作成しようとしています。スタンドアロンアプリケーションでJNDIエントリとデータベースプロパティをプログラムで作成するにはどうすればよいですか?Spring用のJNDIデータソースをプログラムで作成する
<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/MyDS" />
</bean>
public static void main(String[] args) {
// this throws an error since the JNDI lookup fails - can I programmatically define the database properties here?
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = ctx.getBean(UserService.class);
User user = userService.findUserById("jdoe");
System.out.println("display name: " + user.getDisplayName());
}
EDIT: ":環境やシステムプロパティでクラス名を指定する必要がjavax.naming.NoInitialContextException"
public static void main(String[] args) {
setupJNDI();
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = ctx.getBean(UserService.class);
User user = userService.findUserById("jdoe");
System.out.println("display name: " + user.getDisplayName());
}
private static void setupJNDI() {
InitialContext ic;
try {
ic = new InitialContext();
ic.createSubcontext("java:");
ic.createSubcontext("java:/comp");
ic.createSubcontext("java:/comp/env");
ic.createSubcontext("java:/comp/env/jdbc");
SQLServerConnectionPoolDataSource myDS = new SQLServerConnectionPoolDataSource();
opaDS.setServerName("myserver");
opaDS.setPortNumber(1433);
opaDS.setUser("user");
opaDS.setPassword("password");
ic.bind("java:/comp/env/jdbc/MyDS", myDS);
} catch (NamingException e) {
e.printStackTrace();
}
}
おかげで...私はこれを試みたが、 "スレッド『メイン』org.springframework.beans.factory.BeanCreationExceptionに例外:名前の作成中にエラーが発生しましBeanのエラーを取得しています – acvcu
それを試してみましょうクラスパスのリソース[applicationContext.xml]で定義されているmyDataSource:initメソッドの呼び出しに失敗しました。ネストされた例外はjavax.naming.NoInitialContextExceptionです:環境またはシステムのプロパティ、アプレットのパラメータ、またはアプリケーションリソースファイルにクラス名を指定する必要があります。java.naming.factory.initial ' – acvcu
JNDIツリーはもちろん、Springのコンテキストを作成しようとする前に作成してアクティブにする必要があります - 私はそれに応じて答えを編集しました。 –