1 package org.seasar.uruma.container.warmdeploy;
2
3 import org.seasar.framework.container.ComponentCreator;
4 import org.seasar.framework.container.ComponentDef;
5 import org.seasar.framework.container.S2Container;
6 import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
7 import org.seasar.framework.container.impl.S2ContainerBehavior.DefaultProvider;
8 import org.seasar.framework.container.util.S2ContainerUtil;
9 import org.seasar.framework.convention.NamingConvention;
10 import org.seasar.framework.log.Logger;
11
12
13
14
15
16
17
18
19 public class UrumaWarmdeployBehavior extends DefaultProvider {
20
21 private static final Logger logger = Logger
22 .getLogger(UrumaWarmdeployBehavior.class);
23
24 private NamingConvention namingConvention;
25
26 private ComponentCreator[] creators = new ComponentCreator[0];
27
28
29
30
31
32
33 public NamingConvention getNamingConvention() {
34 return namingConvention;
35 }
36
37
38
39
40
41
42
43 public void setNamingConvention(final NamingConvention namingConvention) {
44 this.namingConvention = namingConvention;
45 }
46
47
48
49
50
51
52 public ComponentCreator[] getCreators() {
53 return creators;
54 }
55
56
57
58
59
60
61
62 public void setCreators(final ComponentCreator[] creators) {
63 this.creators = creators;
64 }
65
66 @Override
67 protected ComponentDef getComponentDef(final S2Container container,
68 final Object key) {
69 synchronized (container.getRoot()) {
70 ComponentDef cd = super.getComponentDef(container, key);
71 if (cd != null) {
72 return cd;
73 }
74 if (container != container.getRoot()) {
75 return null;
76 }
77
78 if (key instanceof Class) {
79 cd = createComponentDef((Class) key);
80 } else if (key instanceof String) {
81 cd = createComponentDef((String) key);
82 if (cd != null && !key.equals(cd.getComponentName())) {
83 logger.log("WSSR0011", new Object[] { key,
84 cd.getComponentClass().getName(),
85 cd.getComponentName() });
86 cd = null;
87 }
88 } else {
89 throw new IllegalArgumentException("key");
90 }
91 if (cd != null) {
92 SingletonS2ContainerFactory.getContainer().register(cd);
93 S2ContainerUtil.putRegisterLog(cd);
94 cd.init();
95 }
96 return cd;
97 }
98 }
99
100
101
102
103
104
105
106
107
108
109
110
111 protected ComponentDef createComponentDef(final Class componentClass) {
112 for (int i = 0; i < creators.length; ++i) {
113 ComponentCreator creator = creators[i];
114 ComponentDef cd = creator.createComponentDef(componentClass);
115 if (cd != null) {
116 return cd;
117 }
118 }
119 return null;
120 }
121
122
123
124
125
126
127
128
129
130
131
132
133 protected ComponentDef createComponentDef(final String componentName) {
134 for (int i = 0; i < creators.length; ++i) {
135 ComponentCreator creator = creators[i];
136 ComponentDef cd = creator.createComponentDef(componentName);
137 if (cd != null) {
138 return cd;
139 }
140 }
141 return null;
142 }
143
144 }