1 package org.apache.turbine.services.uniqueid;
2
3
4 import java.nio.charset.StandardCharsets;
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import java.security.MessageDigest;
27 import java.util.concurrent.atomic.AtomicInteger;
28
29 import org.apache.commons.codec.binary.Base64;
30 import org.apache.logging.log4j.LogManager;
31 import org.apache.logging.log4j.Logger;
32 import org.apache.turbine.Turbine;
33 import org.apache.turbine.services.InitializationException;
34 import org.apache.turbine.services.TurbineBaseService;
35 import org.apache.turbine.util.GenerateUniqueId;
36
37
38
39
40
41
42
43
44 public class TurbineUniqueIdService
45 extends TurbineBaseService
46 implements UniqueIdService
47 {
48
49 private static final Logger log = LogManager.getLogger(TurbineUniqueIdService.class);
50
51
52 private static String turbineId = "UNKNOWN";
53
54 private static String turbineURL = "UNKNOWN";
55
56 private static final AtomicInteger counter = new AtomicInteger();
57
58
59
60
61
62
63 @Override
64 public void init()
65 throws InitializationException
66 {
67 try
68 {
69 counter.set(0);
70
71
72
73
74
75
76
77 turbineURL = Turbine.getDefaultServerData().toString();
78
79 MessageDigest md = MessageDigest.getInstance("MD5");
80 byte [] bytesId = md.digest(turbineURL.getBytes(StandardCharsets.UTF_8));
81 turbineId = new String(Base64.encodeBase64(bytesId),
82 StandardCharsets.UTF_8);
83
84 log.info("This is Turbine instance running at: {}", turbineURL);
85 log.info("The instance id is #{}", turbineId);
86 setInit(true);
87 }
88 catch (Exception e)
89 {
90 throw new InitializationException(
91 "Could not initialize TurbineUniqueId Service", e);
92 }
93 }
94
95
96
97
98 @Override
99 public void shutdown()
100 {
101 log.info("Turbine instance running at {} shutting down.", turbineURL);
102 }
103
104
105
106
107
108
109
110
111
112
113
114 @Override
115 public String getInstanceId()
116 {
117 return turbineId;
118 }
119
120
121
122
123
124
125
126
127 @Override
128 public String getUniqueId()
129 {
130 int current = counter.getAndIncrement();
131 String id = Integer.toString(current);
132
133
134
135 if (current < 100000000)
136 {
137 id = ("00000000" + id).substring(id.length());
138 }
139 return id;
140 }
141
142
143
144
145
146
147 @Override
148 public String getPseudorandomId()
149 {
150 return GenerateUniqueId.getIdentifier();
151 }
152 }