1 /*
2 * JBoss, Home of Professional Open Source
3 * Copyright 2014, Red Hat, Inc. and/or its affiliates, and individual
4 * contributors by the @authors tag. See the copyright.txt in the
5 * distribution for a full listing of individual contributors.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.jboss.as.quickstarts.numberguess;
18
19 import java.io.Serializable;
20
21 import javax.enterprise.context.ApplicationScoped;
22 import javax.enterprise.inject.Produces;
23
24 /**
25 * <p>
26 * Random number generator.
27 * </p>
28 *
29 * <p>
30 * Placing the random number generation, as well as the configuring the maximum number allows for a more loosely coupled
31 * application. We can now change out the implementation of number generation without any effect on the client code. We also
32 * produce a more intuitive design - both are identifed by the fact they are numbers (int) and that they are qualified as the
33 * maximum number or a random number.
34 * </p>
35 *
36 * <p>
37 * We use the application scope to store the random number generator so that we use the same seed.
38 * </p>
39 *
40 * @author Pete Muir
41 *
42 */
43 @SuppressWarnings("serial")
44 @ApplicationScoped
45 public class Generator implements Serializable {
46
47 private java.util.Random random = new java.util.Random(System.currentTimeMillis());
48
49 private int maxNumber = 100;
50
51 java.util.Random getRandom() {
52 return random;
53 }
54
55 @Produces
56 @Random
57 int next() {
58 // a number between 1 and 100
59 return getRandom().nextInt(maxNumber - 1) + 1;
60 }
61
62 @Produces
63 @MaxNumber
64 int getMaxNumber() {
65 return maxNumber;
66 }
67 }