[英]DataSource in an OSGI container
我有一个简单的Spring App,它通过EntityManager
连接到数据库
所以我必须进行以下配置:
<bean id="domainEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="TheManager" />
<property name="dataSource" ref="domainDataSource" />
<property name="packagesToScan" value="com.conztanz.persistence.stock.model" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
</bean>
<bean id="domainDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5433/dbName" />
<property name="username" value="xxxx" />
<property name="password" value="xxxx" />
</bean>
通过main
类午餐时,此方法工作正常(手动加载AppContext)
但是,一旦部署到ServiceMix
,就会出现以下错误:
Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [org.postgresql.Driver]
OSGI
和DriverManager
混合不好,但我不明白为什么。 dataSource
公开为OSGI
捆绑软件,您是否同意? 在那种情况下,您将如何从spring context
访问它以拥有例如EntityManager
? DriverManager在OSGi中无法正常运行。 最简单的方法是直接使用数据源。 大多数数据库驱动程序都具有此类。 如果您在应用程序上下文中实例化它,那么它将起作用。 缺点是,它将应用程序绑定到DB驱动程序,因为它将随后为DataSource impl导入软件包。
一种更宽松的耦合方式是使用ops4j pax jdbc 。 它允许从config admin中的配置创建一个数据源作为OSGi服务。 因此,在您的应用程序上下文中,您只需要向DataSource服务添加依赖项。 因此,您的应用程序未绑定到特定的数据库驱动程序。 一种典型的用例是在测试中使用H2,在生产中使用oracle。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.