Aggiunto l'esempio del capitolo sul CDI

This commit is contained in:
Fabio Scotto di Santolo
2019-03-29 12:16:00 +01:00
parent 1b64148947
commit 0fd4ce96b3
20 changed files with 564 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
package it.plague.jeedemo;
import it.plague.jeedemo.beans.Book;
import it.plague.jeedemo.services.BookService;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
public class CdiMain {
public static void main(String[] args) {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
BookService bookService = container.instance().select(BookService.class).get();
Book book = bookService.createBook("H2G2", 12.5f, "Geeky scifi Book");
System.out.println(book);
weld.shutdown();
}
}

View File

@@ -0,0 +1,14 @@
package it.plague.jeedemo.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
public @interface EightDigits {
}

View File

@@ -0,0 +1,14 @@
package it.plague.jeedemo.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.interceptor.InterceptorBinding;
@InterceptorBinding
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
}

View File

@@ -0,0 +1,14 @@
package it.plague.jeedemo.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
public @interface ThirteenDigits {
}

View File

@@ -0,0 +1,58 @@
package it.plague.jeedemo.beans;
public class Book {
private String title;
private Float price;
private String description;
private String number;
public Book(String title, Float price, String description) {
this.title = title;
this.price = price;
this.description = description;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", price=" + price +
", description='" + description + '\'' +
", number='" + number + '\'' +
'}';
}
}

View File

@@ -0,0 +1,22 @@
package it.plague.jeedemo.beans;
import it.plague.jeedemo.annotations.Loggable;
import it.plague.jeedemo.annotations.ThirteenDigits;
import java.util.Random;
import java.util.logging.Logger;
import javax.inject.Inject;
@ThirteenDigits
public class IsbnGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Override
@Loggable
public String generateNumber() {
String isbn = " 13-84356- " + Math.abs(new Random().nextInt());
logger.info("Generated ISBN: " + isbn);
return isbn;
}
}

View File

@@ -0,0 +1,22 @@
package it.plague.jeedemo.beans;
import it.plague.jeedemo.annotations.EightDigits;
import it.plague.jeedemo.annotations.Loggable;
import java.util.Random;
import java.util.logging.Logger;
import javax.inject.Inject;
@EightDigits
public class IssnGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Override
@Loggable
public String generateNumber() {
String issn = " 8- " + Math.abs(new Random().nextInt());
logger.info("Generated ISSN: " + issn);
return issn;
}
}

View File

@@ -0,0 +1,6 @@
package it.plague.jeedemo.beans;
public interface NumberGenerator {
String generateNumber();
}

View File

@@ -0,0 +1,26 @@
package it.plague.jeedemo.interceptors;
import it.plague.jeedemo.annotations.Loggable;
import java.util.logging.Logger;
import javax.inject.Inject;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
@Interceptor
@Loggable
public class LoggingInterceptor {
@Inject
private Logger logger;
@AroundInvoke
public Object logMethod(InvocationContext ic) throws Exception {
logger.entering(ic.getTarget().getClass().getName(), ic.getMethod().getName());
try {
return ic.proceed();
} finally {
logger.exiting(ic.getTarget().getClass().getName(), ic.getMethod().getName());
}
}
}

View File

@@ -0,0 +1,13 @@
package it.plague.jeedemo.producers;
import java.util.logging.Logger;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
public class LoggerProducer {
@Produces
public Logger produceLogger(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
}

View File

@@ -0,0 +1,21 @@
package it.plague.jeedemo.services;
import it.plague.jeedemo.annotations.Loggable;
import it.plague.jeedemo.annotations.ThirteenDigits;
import it.plague.jeedemo.beans.Book;
import it.plague.jeedemo.beans.NumberGenerator;
import javax.inject.Inject;
@Loggable
public class BookService {
@Inject
@ThirteenDigits
private NumberGenerator numberGenerator;
public Book createBook(String title, Float price, String description) {
Book book = new Book(title, price, description);
book.setNumber(numberGenerator.generateNumber());
return book;
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance" xsi:schemeLocation="http://java.sun.com/xml/ns/javaee http://
java.sun.com/xml/ns/javaee/beans_1_0.xsd" version="1.1" bean-discovery-mode="all">
<!-- This is empty on purpose. -->
</beans>

View File

@@ -0,0 +1,22 @@
package it.plague.jeedemo;
import static org.junit.Assert.assertTrue;
import it.plague.jeedemo.beans.Book;
import it.plague.jeedemo.services.BookService;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
import org.junit.Test;
public class BookServiceIT {
@Test
public void shouldCheckNumberIsMOCK() {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
BookService bookService = container.instance().select(BookService.class).get();
Book book = bookService.createBook("H2G2", 12.5f, "Geeky scifi Book");
assertTrue(book.getNumber().startsWith("MOCK"));
weld.shutdown();
}
}

View File

@@ -0,0 +1,25 @@
package it.plague.jeedemo;
import it.plague.jeedemo.annotations.Loggable;
import it.plague.jeedemo.annotations.ThirteenDigits;
import it.plague.jeedemo.beans.NumberGenerator;
import java.util.Random;
import java.util.logging.Logger;
import javax.enterprise.inject.Alternative;
import javax.inject.Inject;
@Alternative
@ThirteenDigits
public class MockGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Override
@Loggable
public String generateNumber() {
String mock = "MOCK- " + Math.abs(new Random().nextInt());
logger.info("Generated Mock: " + mock);
return mock;
}
}

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance" xsi:schemeLocation="http://java.sun.com/xml/ns/javaee http://
java.sun.com/xml/ns/javaee/beans_1_0.xsd" version="1.1" bean-discovery-mode="all">
<alternatives>
<class>it.plague.jeedemo.MockGenerator</class>
</alternatives>
<interceptors>
<class>it.plague.jeedemo.interceptors.LoggingInterceptor</class>
</interceptors>
</beans>