Aggiunto l'esempio del capitolo sul CDI
This commit is contained in:
18
cdidemo/src/main/java/it/plague/jeedemo/CdiMain.java
Normal file
18
cdidemo/src/main/java/it/plague/jeedemo/CdiMain.java
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
58
cdidemo/src/main/java/it/plague/jeedemo/beans/Book.java
Normal file
58
cdidemo/src/main/java/it/plague/jeedemo/beans/Book.java
Normal 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 + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package it.plague.jeedemo.beans;
|
||||
|
||||
public interface NumberGenerator {
|
||||
|
||||
String generateNumber();
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
6
cdidemo/src/main/resources/META-INF/beans.xml
Normal file
6
cdidemo/src/main/resources/META-INF/beans.xml
Normal 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>
|
||||
22
cdidemo/src/test/java/it/plague/jeedemo/BookServiceIT.java
Normal file
22
cdidemo/src/test/java/it/plague/jeedemo/BookServiceIT.java
Normal 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();
|
||||
}
|
||||
}
|
||||
25
cdidemo/src/test/java/it/plague/jeedemo/MockGenerator.java
Normal file
25
cdidemo/src/test/java/it/plague/jeedemo/MockGenerator.java
Normal 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;
|
||||
}
|
||||
}
|
||||
11
cdidemo/src/test/resources/META-INF/beans.xml
Normal file
11
cdidemo/src/test/resources/META-INF/beans.xml
Normal 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>
|
||||
Reference in New Issue
Block a user