2011年6月3日 星期五

由Spring 取得 Jboss JNDI datasource

問題:非一般由web container 取得JDNI 的方式。而是一隻獨立程式需要存取DB,要從JBoss取得JNDI datasource 。
解決方式:

在 applicationContext中
原本會有


...
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
<property name="dataSource" ref="jdbcDataSource"/>
</bean>
<bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
...>
...
這是使用jdbc的方式連的

加上
<bean id="jndidataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="your_JNDI_name"/>
<property name="resourceRef" value="false"/>
<property name="jndiTemplate" ref="jndiTemplate" />
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
<prop key="java.naming.provider.url">jnp://your_JBoss_IP:1099</prop>
<prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
<prop key="jnp.disableDiscovery">true</prop>
</props>
</property>


然後在執行這隻獨立的jar 檔時,加上jboss 的jar 檔到 classpath中

for example:
java  -cp /...[jboss home].../jboss-as/client/jbossall-client.jar:yourJarFile.jar your.main.class
不過這個方式要JDNI,好久啊~久到爆炸,在自己的localhost 跑都要超過兩分鐘 orz

沒有留言: