Unable to inject TransactionTemplate in a RuntimeTaskDataProvider

I am writing a bamboo task which has an admin form where it takes in basic properties that the task needs to function.
I am trying to use a RuntimeTaskDataProvider to fetch these values at runtime and add to taskcontext so they can be used further down the line.

I am having trouble injecting a TransactionTemplate into the runtimeTaskDataProvider. i am using atlassian-spring-scanner 1.2.13
I tried using @ComponentImport statement as suggested in the atlassian-spring-scanner docs but it does not seem to work.

Please suggest how can I get this to work.

My RuntimeTaskDataProviderClass

public class ChangeTicketTaskDataProvider implements RuntimeTaskDataProvider {

    private static final Logger LOG = LoggerFactory.getLogger(ChangeTicketTaskDataProvider.class);

    public static final String USERNAME = "username";
    public static final String PASSWORD = "password";
    public static final String IW_BASE_URL = "url";
    public static final String BAMBOO_BASE_URL = "bamboo_base_url";

    @ComponentImport
    private ChangeServiceManagement changeServiceManagement;
    @ComponentImport
    private TransactionTemplate transactionTemplate;
    
    @Autowired
    private ChangeTicketTaskDataProvider(ChangeServiceManagement changeServiceManagement, TransactionTemplate transactionTemplate){
    	this.changeServiceManagement = changeServiceManagement;
    	this.transactionTemplate = transactionTemplate;
    }

In the above, changeServiceManagement is a custom component that has been exposed using @ExportAsService. That is injected correctly.

This is how the pom looks like

<properties>
		<bamboo.version>5.13.2</bamboo.version>
		<bamboo.data.version>5.13.2</bamboo.data.version>
		<amps.version>6.2.11</amps.version>
		<plugin.testrunner.version>1.2.3</plugin.testrunner.version>
		<atlassian.spring.scanner.version>1.2.13</atlassian.spring.scanner.version>
		<!-- This key is used to keep the consistency between the key in atlassian-plugin.xml 
			and the key to generate bundle. -->
		<atlassian.plugin.key>${project.groupId}.${project.artifactId}</atlassian.plugin.key>
		<ao.version>1.1.5</ao.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>com.atlassian.bamboo</groupId>
			<artifactId>atlassian-bamboo-web</artifactId>
			<version>${bamboo.version}</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
					<artifactId>slf4j-log4j12</artifactId>
					<groupId>org.slf4j</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.atlassian.activeobjects</groupId>
			<artifactId>activeobjects-plugin</artifactId>
			<version>${ao.version}</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
					<artifactId>commons-logging</artifactId>
					<groupId>commons-logging</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.atlassian.sal</groupId>
			<artifactId>sal-api</artifactId>
			<version>3.0.2</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.atlassian.plugin</groupId>
			<artifactId>atlassian-spring-scanner-annotation</artifactId>
			<version>${atlassian.spring.scanner.version}</version>
			<scope>compile</scope>
		</dependency>


		<dependency>
			<groupId>com.atlassian.plugin</groupId>
			<artifactId>atlassian-spring-scanner-runtime</artifactId>
			<version>${atlassian.spring.scanner.version}</version>
			<scope>runtime</scope>
		</dependency>

		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>


		<!-- WIRED TEST RUNNER DEPENDENCIES -->
		<dependency>
			<groupId>com.atlassian.plugins</groupId>
			<artifactId>atlassian-plugins-osgi-testrunner</artifactId>
			<version>${plugin.testrunner.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>javax.ws.rs</groupId>
			<artifactId>jsr311-api</artifactId>
			<version>1.1.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.2.2-atlassian-1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.1.7.RELEASE</version>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<version>1.7.8</version>
		</dependency>
		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.1.0.Final</version>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-all</artifactId>
			<version>1.9.0</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>com.atlassian.maven.plugins</groupId>
				<artifactId>maven-bamboo-plugin</artifactId>
				<version>${amps.version}</version>
				<extensions>true</extensions>
				<configuration>
					<productVersion>${bamboo.version}</productVersion>
					<productDataVersion>${bamboo.data.version}</productDataVersion>
					<enableQuickReload>true</enableQuickReload>
					<enableFastdev>false</enableFastdev>
					<testGroups>
						<testGroup>
							<id>bamboo-integration</id>
							<productIds>
								<productId>bambooIW</productId>
							</productIds>
							<includes>
								<include>it/**/*Test.java</include>
							</includes>
						</testGroup>
					</testGroups>

					<!-- See here for an explanation of default instructions: -->
					<!-- https://developer.atlassian.com/docs/advanced-topics/configuration-of-instructions-in-atlassian-plugins -->
					<instructions>
						<Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>

						<!-- Add package to export here -->
						<Export-Package>
							com.lmig.hs.iwbamboo.changemanagement,
						</Export-Package>

						<!-- Add package import here -->
						<Import-Package>
							org.springframework.osgi.*;resolution:="optional",
							org.eclipse.gemini.blueprint.*;resolution:="optional",
							com.fasterxml.jackson.databind.*;*;resolution:="optional",
							com.atlassian.activeobjects.external.*;*;resolution:="optional",
							com.atlassian.sal.api.transaction.*;*;resolution:="optional",
							*
						</Import-Package>

						<!-- Ensure plugin is spring powered -->
						<Spring-Context>*</Spring-Context>
					</instructions>
				</configuration>
			</plugin>

			<plugin>
				<groupId>com.atlassian.plugin</groupId>
				<artifactId>atlassian-spring-scanner-maven-plugin</artifactId>
				<version>${atlassian.spring.scanner.version}</version>
				<executions>
					<execution>
						<goals>
							<goal>atlassian-spring-scanner</goal>
						</goals>
						<phase>process-classes</phase>
					</execution>
				</executions>
				<configuration>
					<scannedDependencies>
						<dependency>
							<groupId>com.atlassian.plugin</groupId>
							<artifactId>atlassian-spring-scanner-external-jar</artifactId>
						</dependency>
						<dependency>
							<groupId>com.fasterxml.jackson.core</groupId>
							<artifactId>jackson-databind</artifactId>
						</dependency>
					</scannedDependencies>
					<verbose>false</verbose>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<executions>
					<!-- Prepares the property pointing to the JaCoCo runtime agent which 
						is passed as VM argument when Maven the Surefire plugin is executed. -->
					<execution>
						<id>pre-unit-test</id>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
						<configuration>
							<!-- Sets the path to the file which contains the execution data. -->
							<destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
							<!-- Sets the name of the property containing the settings for JaCoCo 
								runtime agent. -->
							<propertyName>surefireArgLine</propertyName>
						</configuration>
					</execution>
					<!-- Ensures that the code coverage report for unit tests is created 
						after unit tests have been run. -->
					<execution>
						<id>post-unit-test</id>
						<phase>test</phase>
						<goals>
							<goal>report</goal>
						</goals>
						<configuration>
							<!-- Sets the path to the file which contains the execution data. -->
							<dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
							<!-- Sets the output directory for the code coverage report. -->
							<outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.15</version>
				<configuration>
					<!-- Sets the VM argument line used when unit tests are run. -->
					<argLine>${surefireArgLine}</argLine>
					<!-- Skips unit tests if the value of skip.unit.tests property is true -->
					<skipTests>${skip.unit.tests}</skipTests>
					<!-- Excludes integration tests when unit tests are run. -->
					<excludes>
						<exclude>**/IT*.java</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

Please help. thanks. Let me know if i can add more information

Shot in the dark. . need @Scanned

Thanks for the reply. But sadly I have tried that and didn’t work. :-/

darn. in the olden days I’d say try a setter. didn’t used to be the case that everything could be injected through the constructor. I don’t know if everything is spring now or picocontainer is still in the mix. I’m still using atlassian-plugin.xml for all of my plugins so haven’t had to debug these issues yet. can’t wait. :wink:

Can you take a look in target/classes/META-INF/plugin-components/imports and make sure the TransactionTemplate is listed in there?