我是OSGI蓝图的新手,面临着一个奇怪的问题。
我有两个独立的数据库:oracle和h2(用于测试)db
蓝图容器看起来像这样:
<service ref='oracleDataSource' interface='javax.sql.DataSource'>
<service-properties>
<entry key='osgi.jndi.service.name' value='someJndiDatasourceName'/>
</service-properties>
</service>
<bean id='oracleDataSource'
class="CustomDataSourceImpl">
<property name="connectionFactoryClassName" value="${datasource.type}"/>
<property name="url" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<property name="validateConnectionOnBorrow" value="true"/>
</bean>
显然,上面的服务绑定到了oracleDataSource。datasource.type属性从配置文件中填充,其值为Oracle . JDBC . pool . Oracle data source
现在,我的用例是,假设如果我想稍后编辑配置文件并将datasource.type的值更改为h2类型,那么我的service-ref应该绑定到下面提到的bean:
<bean id="h2ds" class="org.h2.jdbcx.JdbcDataSource">
<property name="URL" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
我们可以在蓝图中做这样的动态绑定吗?
基本上,我正在寻找类似于服务定位器的东西。
这
要引入所需的灵活性,正确的位置是
因此,您可以有两个捆绑包来提供
javax.sql.DataSource
服务。一个是用Oracle实现的,另一个是用H2实现的。在集成测试方案中,使用 H2 实现捆绑包并省略 Oracle 实现捆绑包。在生产中,反之亦然。
更新以澄清:
这
<reference id="dataSourceService"
interface="javax.sql.DataSource"/>
这将绑定到任何< code>DataSource
类型的服务,而不考虑其背后的实现。如果您只部署Oracle捆绑包,那么您的消费者将获得Oracle数据源。如果您只部署H2捆绑包,那么您的消费者将获得H2数据源。消费者不需要改变,这就是OSGi服务的魅力。
问题内容: 在我的AEM项目的代码中看似无关紧要的更改之后,我的捆绑软件无法解决。检查日志后,我可以看到出现以下错误。 该项目在本地编译得很好,并且只有在容器尝试解决该捆绑包后,该问题才会出现。 我没有在任何更改中添加任何显式依赖项。项目对象模型与以前相同。顾名思义,这是一个核心Java软件包,因此我希望它会被System软件包公开。 我正在运行AEM支持的JDK 7,所以不要指望它与JVM兼容性
问题内容: 我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。 下面的代码会发生什么: 静态绑定还是动态绑定? 这表明什么样的多态性? 问题答案: 您的示例是 动态绑定 ,因为在运行时确定类型是什么,并调用适当的方法。 现在假设您也具有以下两种方法: 即使您更改为 这将打印出来,因为对的调用使用 静态绑定 ,并且编译器仅知道其类型。
静态绑定还是动态绑定? 这显示了什么样的多态性?
起初我是一个初学者 我看过很多教程,读过很多例子,甚至试图从JLS来理解这个主题,但我仍然有一些困惑或误解。 让我给你看我看不懂的问题。
我想指定属性文件的位置,OSGi蓝图属性占位符应从中读取属性值: 更新:Configuration felix.configadmin felix.fileinstall适用于我。 我安装了: org.apache.felix.configadmin-1.8.0.jar org . Apache . Felix . file install-3 . 1 . 4 . jar org.eclipse.
我们知道静态绑定发生在私有、静态、最终和重载的方法上,而动态绑定发生在被覆盖的方法上。但是如果我的方法只是公共的,它既不是静态的,也不是覆盖和重载的怎么办? 有人能给我解释一下print()的绑定会怎样,因为它既没有重载也没有被覆盖。