1 package com.atlassian.sal.core.component;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.springframework.beans.BeansException;
9 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
10 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
11 import org.springframework.context.ApplicationContext;
12 import org.springframework.context.ApplicationContextAware;
13 import org.springframework.context.support.AbstractApplicationContext;
14 import org.springframework.transaction.PlatformTransactionManager;
15 import org.springframework.transaction.TransactionDefinition;
16 import org.springframework.transaction.TransactionStatus;
17 import org.springframework.transaction.support.DefaultTransactionDefinition;
18
19 import com.atlassian.sal.spi.HostContextAccessor;
20
21
22
23
24
25
26 @Deprecated
27 public class SpringHostContextAccessor implements HostContextAccessor, ApplicationContextAware
28 {
29 private ApplicationContext applicationContext;
30 private final PlatformTransactionManager transactionManager;
31 private static final Log log = LogFactory.getLog(SpringHostContextAccessor.class);
32
33 public SpringHostContextAccessor(final PlatformTransactionManager transactionManager)
34 {
35 this.transactionManager = transactionManager;
36 }
37
38 @SuppressWarnings("unchecked")
39 public <T> Map<String, T> getComponentsOfType(final Class<T> iface)
40 {
41 try
42 {
43 return applicationContext.getBeansOfType(iface);
44 } catch (final RuntimeException ex)
45 {
46
47
48 log.debug(ex,ex);
49 final Map<String, T> results = new HashMap<String, T>();
50 if (applicationContext instanceof AbstractApplicationContext)
51 {
52 final AbstractApplicationContext abstractApplicationContext = (AbstractApplicationContext) applicationContext;
53 final ConfigurableListableBeanFactory beanFactory = abstractApplicationContext.getBeanFactory();
54 if (beanFactory instanceof DefaultListableBeanFactory)
55 {
56 final DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) beanFactory;
57 final String[] beanDefinitionNames = defaultListableBeanFactory.getBeanDefinitionNames();
58 for (final String beanName : beanDefinitionNames)
59 {
60 try
61 {
62 final Object bean = defaultListableBeanFactory.getBean(beanName);
63 if (bean != null && iface.isAssignableFrom(bean.getClass()))
64 {
65 results.put(beanName, (T) bean);
66 }
67 } catch (final BeansException e)
68 {
69
70 }
71 }
72 }
73 }
74 return results;
75 }
76
77
78
79 }
80
81 public Object doInTransaction(final HostTransactionCallback callback)
82 {
83 final org.springframework.transaction.support.TransactionTemplate txTemplate =
84 new org.springframework.transaction.support.TransactionTemplate(transactionManager, getTransactionDefinition());
85 return txTemplate.execute(new org.springframework.transaction.support.TransactionCallback()
86 {
87 public Object doInTransaction(final TransactionStatus transactionStatus)
88 {
89 try
90 {
91 return callback.doInTransaction();
92 }
93 catch (final RuntimeException e)
94 {
95
96 transactionStatus.setRollbackOnly();
97 throw e;
98 }
99 }
100 });
101 }
102
103 public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException
104 {
105 this.applicationContext = applicationContext;
106 }
107
108 protected DefaultTransactionDefinition getTransactionDefinition()
109 {
110 final DefaultTransactionDefinition def = new DefaultTransactionDefinition();
111 def.setName("PluginReadWriteTx");
112 def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
113 def.setReadOnly(false);
114 return def;
115 }
116
117
118
119 }
120