Atlassian confluence插件。交易配置。包导入错误。版本约束

时间:2014-05-23 12:01:23

标签: spring transactions package atlassian-plugin-sdk

我有confluence插件项目,我想使用spring注释为我的服务类实现事务,但是我收到了错误:

[INFO] [talledLocalContainer]2014-05-23 13:12:06,298 ERROR [main][plugin.osgi.factory.OsgiPlugin] enableInternal Detected an error (BundleException) enabling the plugin 'mypackage'
: Unresolved constraint in bundle mypackage [176]: Unable to resolve 176.0: missing  requirement [176.0] package; (&(package=org.springframework.jdbc.datasource.DataSour
ceTransactionManager)(version>=2.5.6.SEC02)).  This error usually occurs when your      plugin imports a package from another bundle with a specific versio
n constraint and either the bundle providing that package doesn't meet those version   constraints, or there is no bundle available that provides the specified package.
For more details on how to fix this, see https://developer.atlassian.com/x/mQAN

以下是代码:

myconfigfile.xml

...
<!-- TRANSACTIONS CONF -->
    <!-- enable the configuration of transactional behavior based on annotations -->
    <tx:annotation-driven transaction-manager="txManager"/>

    <!-- PlatformTransactionManager -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!-- TRANSACTIONS CONF END-->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="url" value="${db.url}" />
    <property name="driverClassName" value="${db.driver}" />
    <property name="username" value="${db.user}" />
    <property name="password" value="${db.password}" />
</bean> 

<bean id="transactionAwareDataSource"
    class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <constructor-arg ref="dataSource" />
</bean>

<bean id="connectionProvider" class="org.jooq.impl.DataSourceConnectionProvider">
    <constructor-arg ref="transactionAwareDataSource" />
</bean>
...

service.class

@Service
@Transactional
public class AdminServiceImpl implements AdminService<ProjectRecord> {

private IDao<ProjectRecord> dao;

@Autowired
public AdminServiceImpl(IDao<ProjectRecord> dao) {
    super();
    this.dao = dao;
    // TODO Auto-generated constructor stub
}

@Override
public void delete(Long id) {
    // TODO Auto-generated method stub
    dao.delete(id);
}

@Override
public void changeName(Long id, String newName) {
    // TODO Auto-generated method stub
    dao.update(dao.findbyId(id));
}

}

的pom.xml

...
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>2.5.6.SEC02</version>
        <scope>provided</scope>
</dependency>
...
...
<plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-confluence-plugin</artifactId>
            <version>${amps.version}</version>
            <extensions>true</extensions>
            <configuration>
                <productVersion>${confluence.version}</productVersion>
                <productDataVersion>${confluence.data.version}</productDataVersion>
                <instructions>
                    <Import-Package>
                        org.springframework.jdbc.datasource.DataSourceTransactionManager;version="2.5.6.SEC02"
                    </Import-Package>
                </instructions>
            </configuration>
        </plugin>
        <plugin>

在我参与库的项目中,我有适当的库:

enter image description here

我做错了吗?

1 个答案:

答案 0 :(得分:0)

我有类似的问题,不幸的是,使用这些语句解决它并没有产生适当的解决方案。 添加import-statement时,您需要指定项目使用的所有依赖项,而不仅仅是您似乎缺少的依赖项。似乎指定导入将关闭自动生成的清单条目。 但即使你指定了所有的进口,你也会发现你的弹簧背景已经停止被阅读! 我通过一起删除import-package来规避这个问题并创建了一个名为OsgiImports的类,其中我保留了一个我希望由容器导入的类的表。这使得自动生成的清单可以获取所有需要的依赖项。即......这样:

package com.rulefinancial.uservoice;

import org.aopalliance.aop.Advice;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.aop.SpringProxy;
import org.springframework.aop.framework.Advised;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;

public class OsgiImports {
    public Class<?>[] imports = {
            PropertyPlaceholderConfigurer.class,
            BasicDataSource.class,
            DataSourceTransactionManager.class,
            TransactionAwareDataSourceProxy.class,
            SpringProxy.class,
            Advised.class,
            Advice.class
    };

}