サポートエンジニアが語る。weblogic server における cdi 概要・tips 紹介
TRANSCRIPT
-
WebLogic Server CDI Tips
NEC
PF
-
Agenda
1.
2. Contexts and Dependency Injection for the Java EE
platform (CDI)
3. CDI
4. WebLogic Server CDI
5. CDI AP
6.
7.
CDI
@Qualifier
@Alternative / @Priority
-
1.
-
4 NEC , Ltd. 2016
NEC Oracle Fusion Middleware
2005 WebLogic Server WebLogic Integration / WebLogicWorkshop Java / JRockitSOA SuiteBPM / BPEL / ServiceBus Tuxedo SE
-
2. Contexts and Dependency Injection for the Java EE Platform (CDI)
-
6 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
New
-
7 NEC , Ltd. 2016
HelloImpl-A HelloImpl-B new
Contexts and Dependency Injection for the Java EE platform (CDI)
New
public class Test {private Hello hello;
public void print() {hello = new HelloImpl-A();hello.sayHello();
}}
public class Test {private Hello hello;
public void print() {hello = new HelloImpl-B();hello.sayHello();
}}
-
8 NEC , Ltd. 2016
new @Inject
hello
New
Contexts and Dependency Injection for the Java EE platform (CDI)
public class Test {@Injectprivate Hello hello;
public void print() {hello.sayHello();
}}
-
9 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
App
Variable
Proxy
Bean (Impl)Context
Proxy
A
PP
WorldImpl implements World
HelloImpl implements Hello
SampleImpl implements Sample
New
-
10 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
CDI
P145 - @Alternative / @Priority
CDI Java EE 5 DI /
JSR-299
JSR-299: Contexts and Dependency Injection for the Java EE platformhttp://docs.jboss.org/cdi/spec/1.0/html/
New
http://docs.jboss.org/cdi/spec/1.0/html/
-
11 NEC , Ltd. 2016
CDI
-
HTTP
Contexts and Dependency Injection for the Java EE platform (CDI)
- Bean
@RequestScopedpublic class HelloImpl implements Hello, Serializable {
@Overridepublic String sayHello() {
return "Hello World";}
}
HTTP Bean
@SessionScopedpublic class HelloImpl implements Hello, Serializable {
@Overridepublic String sayHello() {
return "Hello World";}
}
Bean
public class Test {@Injectprivate Hello hello;
public void print() {hello.sayHello();
}}
null
-
12 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
P9 CDI
Bean
new
Context
ProxyBean Context
@Inject Bean (Impl) Proxy
Bean (Impl)Context
Proxy
-
13 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
Bean
Bean (Instance)Context
Proxy (Instance)
12
9
6
3
CDI Container
public class Test {@Injectprivate Hello hello;
public void print() {hello.sayHello();
}}
Proxy (Reference)
A
PP
@RequestScopedpublic class HelloImpl implements Hello, Serializable {
@Overridepublic String sayHello() {
return "Hello World";}
}
-
14 NEC , Ltd. 2016
CDI GC
Contexts and Dependency Injection for the Java EE platform (CDI)
CDI Container
Context
12
9
6
3
Context
HTTP Session
12
9
6
3
Context
HTTP
12
9
6
3
Context
HTTP
12
9
6
3
Context
HTTP
12
9
6
3
Context
HTTP Session
12
9
6
3
-
15 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
Bean
Interface
package weblogic.study;
public interface Hello {public String sayHello();
}
Servlet
package weblogic.study;
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.inject.Inject;
@WebServlet("/cdi.do")public class CDISampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@InjectHello hello;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {System.out.println( hello.sayHello() );
}}
Bean
package weblogic.study;
import java.io.Serializable;import javax.enterprise.context.RequestScoped;
@RequestScopedpublic class HelloImpl implements Hello, Serializable {
private static final long serialVersionUID = 1L;
@Overridepublic String sayHello() {
try { Thread.sleep( 10000 ); } catch ( InterruptedException e ) { }return "Hello World";
}}
10
-
-
16 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
Servlet HelloImpl#sayHello() service()
weblogic.study.HelloImpl$Proxy$_$$_WeldClientProxy HelloImpl
"[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'"#22 daemon prio=2 os_prio=-2 tid=0x000000005aa45000 nid=0x2108 waiting on condition [0x000000005bc4e000]java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)at weblogic.study.HelloImpl.sayHello(HelloImpl.java:17)at weblogic.study.HelloImpl$Proxy$_$$_WeldClientProxy.sayHello(Unknown Source)at weblogic.study.CDISampleServlet.service(CDISampleServlet.java:26)at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1651)at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
-
17 NEC , Ltd. 2016
CDI Bean
CDI Bean
POJO (Plain Old Java Object) Java Beans CDI Bean
CDI Bean
Contexts and Dependency Injection for the Java EE platform (CDI)
-
18 NEC , Ltd. 2016
Contexts and Dependency Injection for the Java EE platform (CDI)
CDI
null
CDI Java
CDI CDI
CDI Bean
CDI Bean
CDI Bean
CDI
-
3. CDI
@Inject
@Named
-
20 NEC , Ltd. 2016
CDI
CDI
@Inject CDI
@Named
CDI Bean CDI Bean JSF EL
-
21 NEC , Ltd. 2016
CDI
Java EE 6 CDI CDI beans.xml XML Web WEB-INF
0 beans.xml WEB-INF CDI
Java EE 7 CDI beans.xml beans.xml CDI
beans.xml
-
22 NEC , Ltd. 2016
CDI
@Inject
@Inject CDI
CDI
import javax.inject.Inject;
public class Test {@Injectprivate Hello hello;
public void print() {hello.sayHello();
}}
public interface Hello {public void sayHello();
}
public class HelloImpl implements Hello {@Overridepublic void sayHello() {
System.out.println( "Hello World" );}
}
@Inject javax.inject.Inject
@Inject
-
23 NEC , Ltd. 2016
CDI
@Inject
@Inject
CDI
CDI
@InjectHello hello; WorldImpl implements World
HelloImpl implements Hello
SampleImpl implements Sample
Hello
Bean (Impl)Context
Proxy
-
24 NEC , Ltd. 2016
CDI
@Inject
@InjectHello hello;
HelloImpl2 implements Hello
HelloImpl1 implements Hello
-
25 NEC , Ltd. 2016
CDI
@Inject
@Qualifier
-
26 NEC , Ltd. 2016
CDI
@Named
CDI Bean
CDI CDI Bean
CDI Bean JSF EL CDI Bean
JSF
CDI Bean @Named EL
CDI Bean
package weblogic.study;
import java.io.Serializable;import javax.enterprise.context.SessionScoped;import javax.inject.Inject;import javax.inject.Named;
@SessionScoped@Namedpublic class Test implements Serializable {
private static final long serialVersionUID = 1L;
@InjectHello hello;
public String getHello() {
return hello.sayHello();}
}
-
27 NEC , Ltd. 2016
CDI
@Named
@Named CDI Bean EL Bean
Named Bean
@Named
Bean JSF Bean test
EL
@Named( Bean )
Bean JSF Bean Test
EL
@Namedpublic class Test implements Serializable {
-
28 NEC , Ltd. 2016
CDI
@Named
EL CDI Bean getter
EL getter
CDI Bean
package weblogic.study;
import java.io.Serializable;import javax.enterprise.context.SessionScoped;import javax.inject.Inject;import javax.inject.Named;
@SessionScoped@Namedpublic class Test implements Serializable {
private static final long serialVersionUID = 1L;
@InjectHello hello;
public String getHello() {
return hello.sayHello();}
}
JSF
-
29 NEC , Ltd. 2016
CDI
5
@RequestScoped / @SessionScoped / @ApplicationScoped@ConversationScoped / @Dependent
@Qualifier
@Alternative / @Priority
@Alternative @Priority
-
30 NEC , Ltd. 2016
CDI
@Inject
CDI
@Named
CDI Bean CDI Bean JSF EL
-
4. WebLogic Server CDI
JBoss Weld
Jersey
-
32 NEC , Ltd. 2016
WebLogic Server CDI
JBoss Weld
WebLogic Server CDI JBoss Weld
JBoss Weld
Red Hat Open Source Software
CDI for Java EE Platform
WebLogic Server GlassFish JBoss Web
Weld - CDI Reference Implementation
http://weld.cdi-spec.org/
http://weld.cdi-spec.org/
-
33 NEC , Ltd. 2016
JBoss Weld
WebLogic Server JBoss Weld
JBoss Weld latest stable release 2017/1/17 2.4.1.Final
WebLogic Server Version Java EE Version JBoss Weld Version
12.1.1.0.0 Java EE 6 1.1.Final
12.1.2.0.0 Java EE 6
1.1.Final
12.1.3.0.0 Java EE 6
1.1.Final
12.2.1.0.0 Java EE 7 2.2.13.Final
12.2.1.1.0 Java EE 7 2.3.2.Final
12.2.1.2.0 Java EE 7 2.3.2.Final
WebLogic Server CDI
-
34 NEC , Ltd. 2016
WebLogic Server CDI
JBoss Weld
.jar
12.2.1.0.0
WebLogic Server Version Library Path
12.1.1.0.0${MW_HOME}/modules/org.jboss.weld.api_1.0.0.0_1-1-3.SP1.jar${MW_HOME}/modules/org.jboss.weld.core_1.0.0.0_1-1-3.SP1.jar${MW_HOME}/modules/org.jboss.weld.spi_1.0.0.0_1-1-3.SP1.jar
12.1.2.0.0 ${WL_HOME}/modules/features/weblogic.server.merged.jar
12.1.3.0.0 ${WL_HOME}/modules/features/weblogic.server.merged.jar
12.2.1.0.0${WL_HOME}/modules/org.jboss.weld.weld-api.jar${WL_HOME}/modules/org.jboss.weld.weld-core.jar${WL_HOME}/modules/org.jboss.weld.weld-spi.jar
12.2.1.1.0${WL_HOME}/modules/org.jboss.weld.weld-api.jar${WL_HOME}/modules/org.jboss.weld.weld-core.jar${WL_HOME}/modules/org.jboss.weld.weld-spi.jar
12.2.1.2.0${WL_HOME}/modules/org.jboss.weld.weld-api.jar${WL_HOME}/modules/org.jboss.weld.weld-core.jar${WL_HOME}/modules/org.jboss.weld.weld-spi.jar
-
35 NEC , Ltd. 2016
WebLogic Server CDI
Jersey
WebLogic Server JAX-RS Jersey CDI
Jersey
Open Source Software
RESTful Web Service JAX-RS
Jersey
https://jersey.java.net/
https://jersey.java.net/
-
36 NEC , Ltd. 2016
Jersey
WebLogic Server Jersey
Jersey latest stable release 2017/1/17 2.25
WebLogic Server 12.1.3.0.0 Jersey
Oracle WebLogic Server 12.1.3 RESTful Web 12c (12.1.3)
> [2 Jersey 2.5.1 (JAX-RS 2.0)]
https://docs.oracle.com/cd/E57014_01/wls/RESTF/use-jersey20-ri.htm
Oracle WebLogic Server RESTful Web 12c (12.2.1)
> [Jersey 1.18 (JAX-RS 1.1 RI)RESTful Web]
http://docs.oracle.com/cd/E72987_01/wls/RESTF/jersey-back-comp.htm
WebLogic Server Version Java EE Version Jersey Version
12.1.1.0.0 Java EE 6 1.9
12.1.2.0.0 Java EE 6 1.17.1
12.1.3.0.0 Java EE 6 1.18.1
12.2.1.0.0 Java EE 7 2.21.1
12.2.1.1.0 Java EE 7 2.22.1
12.2.1.2.0 Java EE 7 2.22.1
WebLogic Server CDI
https://docs.oracle.com/cd/E57014_01/wls/RESTF/use-jersey20-ri.htmhttp://docs.oracle.com/cd/E72987_01/wls/RESTF/jersey-back-comp.htm
-
37 NEC , Ltd. 2016
WebLogic Server CDI
Jersey
.jar
WebLogic Server Version Library Path
12.1.1.0.0${MW_HOME}/modules/com.sun.jersey.core_1.1.0.0_1-9.jar${MW_HOME}/modules/com.sun.jersey.server_1.1.0.0_1-9.jar
12.1.2.0.0
${ORACLE_HOME}/oracle_common/modules/jersey-core-1.17.1.jar${ORACLE_HOME}/oracle_common/modules/jersey-server-1.17.1.jar${ORACLE_HOME}/oracle_common/modules/jersey-servlet-1.17.1.jar
12.1.3.0.0
${ORACLE_HOME}/oracle_common/modules/jersey-core-1.18.jar${ORACLE_HOME}/oracle_common/modules/jersey-server-1.18.jar${ORACLE_HOME}/oracle_common/modules/jersey-servlet-1.18.jar
12.2.1.0.0
${ORACLE_HOME}/oracle_common/modules/org.glassfish.jersey.core.jersey-common.jar${ORACLE_HOME}/oracle_common/modules/org.glassfish.jersey.ext.cdi.jersey-cdi1x.jar${ORACLE_HOME}/oracle_common/modules/org.glassfish.jersey.ext.cdi.jersey-cdi1x-servlet.jar${ORACLE_HOME}/oracle_common/modules/org.glassfish.jersey.ext.cdi.jersey-cdi1x-transaction.jar
12.2.1.1.0 12.2.1.0.0
12.2.1.2.0 12.2.1.0.0
-
38 NEC , Ltd. 2016
WebLogic Server CDI
Weld / Jersey CDI
jBatch (Batch Applications for the Java Platform)
IBM jBatch CDI
-
5. CDI AP
@PostConstruct
Weld
Weld .class
-
40 NEC , Ltd. 2016
CDI AP
@PostConstruct
CDI Bean CDI Bean
CDI
CDI
void ()
void init() / void initialize()
@PostConstruct CDI Bean
@PreDestroy CDI Bean
-
41 NEC , Ltd. 2016
CDI AP
@PostConstruct
CDI Bean
@PreDestroy
CDI Bean
CDI Bean
CDI Bean
@PostConstruct
@SessionScoped / @ConversationScoped CDI Bean
@PostConstruct
@PreDestroy CDI Bean
-
42 NEC , Ltd. 2016
CDI AP
@PostConstruct
@PostConstruct CDI Bean Logger CDI Bean
HelloImpl
package weblogic.study;
import javax.annotation.PostConstruct;
public class HelloImpl implements Hello {
@PostConstructpublic void init() {
System.out.println( "HelloImpl was injected." );}
@Overridepublic String sayHello() {
// TODO Auto-generated method stubreturn "Hello World.";
}}
HelloImpl was injected.
-
43 NEC , Ltd. 2016
CDI AP
Weld
WebLogic Server Weld Weld
Weld
How do I enable debug logging for Weld in a specific container?http://weld.cdi-spec.org/documentation/#7
Weld Web WebLogic Server
http://weld.cdi-spec.org/documentation/#7
-
44 NEC , Ltd. 2016
CDI AP
Weld
WebLogic Server 12.1.3.0.0 []
[] [] []
CDI Weld
-
45 NEC , Ltd. 2016
CDI AP
Weld
[] []
[]
-
46 NEC , Ltd. 2016
CDI AP
Weld
[] org.jboss.weld=Trace []
WebLogic Server 12.2.1.2.0
WebLogic Server 12.1.3.0.0 [Platform Logger Levels]
-
47 NEC , Ltd. 2016
CDI AP
Weld
-
48 NEC , Ltd. 2016
CDI AP
Weld
org.jboss.weld=Trace CDI 600KB
WebLogic Server 12.2.1.2.0 STATE_PREPARED STATE_ACTIVE 1400 700KB
CDI
WebLogic Server 12.2.1.2.0 40 9KB
-
49 NEC , Ltd. 2016
CDI AP
Weld
Weld Weld org.jboss.weld.logging.Category.java Weld 17
Trace
Category
org.jboss.weld.Bootstrap
WebLogic Server CDI STATE_PREPARED CDI
Weld Weld / Jersey IBM jBatch CDI
org.jboss.weld.Version
CDI WebLogic Server Weld
WebLogic Server ----- -----
org.jboss.weld.Utilities
CDI CDI
-
50 NEC , Ltd. 2016
CDI AP
Weld
Category
org.jboss.weld.Bean
WebLogic Server Weld
-----org.jboss.weldx.transaction.UserTransaction$XXXXXXXX$Proxy$_$$_Weld$Proxy$org.jboss.weld.security.Principal$XXXXXXXX$Proxy$_$$_Weld$Proxy$org.jboss.weldx.enterprise.inject.Instance$Provider$XXXXXXXX$Proxy$_$$_Weld$Proxy$
XXXXXXXX -----
Weld Jersey / jBatch
CDI CDI Bean
-----weblogic.study.BImpl$Proxy$_$$_WeldClientProxy-----
org.jboss.weld.Servletweld-servlet ServletContainerInitializer HTTP
org.jboss.weld.Reflection
CDI WELD-000620
-
51 NEC , Ltd. 2016
CDI AP
Weld
Category
org.jboss.weld.JSF
@Named EL CDI Bean
org.jboss.weld.Event
@Observes CDI
org.jboss.weld.Conversation@ConversationScoped CDI ID
org.jboss.weld.Context
CDI Bean BeanStore BeanStore
RequestScoped CDI ThreadLocal -----State thread-local removed: org.jboss.weld.context.http.LazyHttpConversationContextImpl@7e4f3b94State thread-local removed: org.jboss.weld.context.http.HttpRequestContextImpl@34de8782State thread-local removed: org.jboss.weld.context.http.HttpSessionContextImpl@414b9c5e-----
-
52 NEC , Ltd. 2016
CDI AP
Weld
Category
org.jboss.weld.El
JSF EL
-----WELD-001002: Looking for EL property a> WELD-001003: EL property a resolved to weblogic.study.A@272bffb7> -----
org.jboss.weld.Resolution
CDI -----Weld
> [19.1.6. Bounding the cache size for resolved injection points]https://docs.jboss.org/weld/reference/latest/en-US/html/configure.html#_bounding_the_cache_size_for_resolved_injection_points
Weld caches already resolved injection points in order to resolve them faster in the future.A separate type-safe resolver exists for beans, decorators, disposers, interceptors and observers.Each of them stores resolved injection points in its cache, which maximum size is bounded by a default value (common to all of them).-----
https://docs.jboss.org/weld/reference/latest/en-US/html/configure.html#_bounding_the_cache_size_for_resolved_injection_points
-
53 NEC , Ltd. 2016
CDI AP
Weld
Category
org.jboss.weld.BeanManager
javax.enterprise.inject.spi.BeanManager CDI
org.jboss.weld.Validator
javax.validation.Validator CDI
org.jboss.weld.Interceptor
org.jboss.weld.Serialization
CDI Bean @SessionScoped @ConversationScoped CDI
org.jboss.weld.Configuration
WebLogic Server CDI STATE_PREPARED
-
54 NEC , Ltd. 2016
CDI AP
Weld
org.jboss.weld.Bean / org.jboss.weld.Context
org.jboss.weld.El / org.jboss.weld.Conversation / org.jboss.weld.Interceptor
WebLogic Server JSF Mojarra
-
55 NEC , Ltd. 2016
CDI AP
Weld .class
Weld
-
56 NEC , Ltd. 2016
CDI AP
Weld .class
.class CLASSPATH
WebLogic Server 12.2.1.2.0 Weld 2.3.2.Final
Index of /groups/public/org/jboss/weld/weld-core/2.3.2.Final
https://repository.jboss.org/nexus/content/groups/public/org/jboss/weld/weld-core/2.3.2.Final/
https://repository.jboss.org/nexus/content/groups/public/org/jboss/weld/weld-core/2.3.2.Final/
-
57 NEC , Ltd. 2016
Weld .class
Weld 2.3.2.Final
Weld: Download
http://weld.cdi-spec.org/download/
CDI AP
http://weld.cdi-spec.org/download/
-
58 NEC , Ltd. 2016
CDI AP
Weld .class
.class
org.jboss.weld.Bean / org.jboss.weld.Context CDI
-
59 NEC , Ltd. 2016
CDI AP
Weld .class
org.jboss.weld.bean.proxy.ProxyFactory
ProxyFactory ProxyFactory#create()
ProxyFactory#create()
/*** Method to create a new proxy that wraps the bean instance.** @param beanInstance the bean instance* @return a new proxy object*/
public T create(BeanInstance beanInstance) {final T proxy = (System.getSecurityManager() == null) ? run() : AccessController.doPrivileged(this);((ProxyObject) proxy).setHandler(new ProxyMethodHandler(contextId, beanInstance, bean));return proxy;
}
-
60 NEC , Ltd. 2016
CDI AP
Weld .class
ProxyFactory#create() ProxyFactory#createProxyClass()
ProxyFactory#createProxyClass()
private Class createProxyClass(String proxyClassName) throws Exception {ArraySet>(
LifecycleMixin.class, TargetInstanceProxy.class, ProxyObject.class);addAdditionalInterfaces(specialInterfaces);// Remove special interfaces from main set (deserialization scenario)additionalInterfaces.removeAll(specialInterfaces);
ClassFile proxyClassType = null;final int accessFlags = AccessFlag.of(AccessFlag.PUBLIC, AccessFlag.SUPER, AccessFlag.SYNTHETIC);if (getBeanType().isInterface()) {
proxyClassType = newClassFile(proxyClassName, accessFlags, Object.class.getName());proxyClassType.addInterface(getBeanType().getName());
} else {proxyClassType = newClassFile(proxyClassName, accessFlags, getBeanType().getName());
}// Add interfaces which require method generationfor (Class clazz : additionalInterfaces) {
proxyClassType.addInterface(clazz.getName());}List initialValueBytecode = new ArrayList();
-
61 NEC , Ltd. 2016
CDI AP
Weld .class
ClassFile org.jboss.classfilewriter
org.jboss.classfilewriter
jbossas/jboss-classfilewriter
https://github.com/jbossas/jboss-classfilewriter/blob/master/src/main/java/org/jboss/classfilewriter/ClassFile.java
proxyClassType
ProxyFactory import
import org.jboss.classfilewriter.AccessFlag;import org.jboss.classfilewriter.ClassFile;import org.jboss.classfilewriter.ClassMethod;import org.jboss.classfilewriter.DuplicateMemberException;import org.jboss.classfilewriter.code.BranchEnd;import org.jboss.classfilewriter.code.CodeAttribute;import org.jboss.classfilewriter.util.Boxing;import org.jboss.classfilewriter.util.DescriptorUtils;
https://github.com/jbossas/jboss-classfilewriter/blob/master/src/main/java/org/jboss/classfilewriter/ClassFile.java
-
62 NEC , Ltd. 2016
CDI AP
Weld .class
ProxyFactory#createProxyClass() proxyClassType return
ProxyFactory#createProxyClass()
// Added by iootani fromimport org.jboss.classfilewriter.ClassField;import org.jboss.classfilewriter.ClassMethod;// Added by iootani to
private Class createProxyClass(String proxyClassName) throws Exception {ArraySet>(
LifecycleMixin.class, TargetInstanceProxy.class, ProxyObject.class);addAdditionalInterfaces(specialInterfaces);// Remove special interfaces from main set (deserialization scenario)additionalInterfaces.removeAll(specialInterfaces);
ClassFile
-
63 NEC , Ltd. 2016
CDI AP
Weld .class
ProxyFactory#createProxyClass()
ClassFile proxyClassType = null;final int accessFlags = AccessFlag.of(AccessFlag.PUBLIC, AccessFlag.SUPER, AccessFlag.SYNTHETIC);if (getBeanType().isInterface()) {
proxyClassType = newClassFile(proxyClassName, accessFlags, Object.class.getName());proxyClassType.addInterface(getBeanType().getName());
} else {proxyClassType = newClassFile(proxyClassName, accessFlags, getBeanType().getName());
}
// Added by iootani fromSystem.out.println( "********************************************************************** " );System.out.println( "ProxyClassName : " + proxyClassType.getClass().getCanonicalName() );for ( ClassField cf : proxyClassType.getFields() ) {
System.out.println( "ClassField : " + cf.getName() );}for ( ClassMethod cm : proxyClassType.getMethods() ) {
System.out.println( "ClassMethod : " + cm.getName() );}System.out.println( "********************************************************************** " );// Added by iootani to
return proxyClass;}
ClassFile
-
64 NEC , Ltd. 2016
CDI AP
Weld .class
Eclipse NetBeans IDE
Windows
cd /d D:osslib
set JAVA_HOME=D:OracleJavaOraclex86-641.7.0jdk1.7.0_121
set CLASSPATH=.set CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactscdicdi-api.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-api.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-core-impl.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-core.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-environment-common.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-probe-core.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-se-core.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-se.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-servlet-core.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-servlet.jarset CLASSPATH=%CLASSPATH%;D:osslibweld-2.3.2.Finalartifactsweldweld-spi.jar
%JAVA_HOME%binjavac.exe -cp %CLASSPATH% ProxyFactory.java
-
65 NEC , Ltd. 2016
CDI AP
Weld .class
.class startWebLogic.cmd CLASSPATH
CLASSPATH Windows
@REM In order to use resource consumption management policies or to get partition's resource consumption metrics, uncomment the following JAVA_OPTIONS
set #JAVA_OPTIONS=-XX:+UnlockCommercialFeatures -XX:+ResourceManagement -XX:+UseG1GC %SAVE_JAVA_OPTIONS%
set SAVE_JAVA_OPTIONS=
set CLASSPATH=%SAVE_CLASSPATH%
set CLASSPATH=D:OracleMiddlewareOracle_Homeuser_projectsdomainscdi_domainworkdebugclass;%CLASSPATH%
set SAVE_CLASSPATH=
-
66 NEC , Ltd. 2016
CDI AP
Weld .class
WebLogic Server CDI
**********************************************************************ProxyClassName : org.jboss.classfilewriter.ClassFileClassField : weld_proxy_field$$$491ClassField : weld_proxy_field$$$493ClassField : weld_proxy_field$$$492ClassField : weld_proxy_field$$$494ClassField : BEAN_ID_FIELDClassField : methodHandlerClassField : constructedClassMethod : destroyClassMethod : getTargetInstanceClassMethod : getHandlerClassMethod : lifecycle_mixin_$$_preDestroyClassMethod : sayHelloClassMethod : writeReplaceClassMethod : toStringClassMethod : ClassMethod : equalsClassMethod : setHandlerClassMethod : getTargetClassClassMethod : hashCodeClassMethod : initClassMethod : lifecycle_mixin_$$_postConstructClassMethod : **********************************************************************
@PreDestroy
@PostConstruct
CDI Bean sayHello()
@PreDestroy
@PostConstruct
-
67 NEC , Ltd. 2016
CDI AP
Weld .class
CDI Bean CDI Bean
OSS
-
6.
CDI Bean
CDI AP WELD-000072
CDI AP NamingException
CDI AP WELD-000321
-
69 NEC , Ltd. 2016
CDI Bean
CDI
WebLogic Server 12.1.3.0.0
beans.xml WebLogic Server 12.2.1.2.0 class A
EL Class A
Interface B
-
70 NEC , Ltd. 2016
CDI Bean
CDI Bean BImpl
P21 Java EE 7 CDI
beans.xml CDI Bean
package weblogic.study;
import javax.annotation.PostConstruct;
public class BImpl implements B {@Overridepublic String execute() {
System.out.println( "BImpl#execute called !!." );return "Hello World.";
}
@PostConstructpublic void init() {
System.out.println( "BImpl was injected." );}
}
-
71 NEC , Ltd. 2016
CDI Bean
Java EE 7 CDI Bean
/
Java EE 7 CDI Bean beans.xml
beans.xml Web WEB-INF annotated BImpl CDI Bean
all CDI Bean
annotated
beans.xml WEB-INF / CDI Bean
none CDI Bean
-
72 NEC , Ltd. 2016
CDI Bean
CDI Bean
class A
package weblogic.study;
import javax.inject.Inject;import javax.inject.Named;import javax.enterprise.context.RequestScoped;
@RequestScoped@Namedpublic class A {
@InjectB b;
public String getB() {return b.execute();
}}
class BImpl
package weblogic.study;
import javax.enterprise.context.RequestScoped;
@RequestScopedpublic class BImpl implements B {
@Overridepublic String execute() {
System.out.println( "BImpl#execute called !!." );return "Hello World.";
}}
-
73 NEC , Ltd. 2016
CDI Bean
CDI Bean beans.xml bean-discovery-mode all
0 byte beans.xml WEB-INF bean-discovery-mode all
beans.xml
-
74 NEC , Ltd. 2016
CDI AP WELD-000072
CDI WebLogic Server 12.2.1.2.0
CDI Bean - @RequestScoped
EL hello
-
75 NEC , Ltd. 2016
CDI AP WELD-000072
CDI Bean @RequestScoped HTTP @SessionScoped
HelloImpl
package weblogic.study;
//import javax.enterprise.context.RequestScoped;import javax.enterprise.context.SessionScoped;
//@RequestScoped@SessionScopedpublic class HelloImpl implements Hello {
private int count = 0;
@Overridepublic String sayHello() {
// TODO Auto-generated method stubreturn "Hello World ( " + count++ + " ).";
}}
Test
package weblogic.study;
//import javax.enterprise.context.RequestScoped;import javax.enterprise.context.SessionScoped;import javax.inject.Inject;import javax.inject.Named;
//@RequestScoped@SessionScoped@Namedpublic class Test {
@InjectHello hello;
public String getMessage() {return hello.sayHello();
}}
-
76 NEC , Ltd. 2016
CDI AP WELD-000072
-
77 NEC , Ltd. 2016
CDI AP WELD-000072
-
78 NEC , Ltd. 2016
CDI AP WELD-000072
@SessionScoped JSR-299
@SessionScoped CDI Bean Serializable
JSR-299
6.6.3. Passivating scopes
A passivating scope requires that:
beans with the scope are passivation capable, and
implementations of Contextual passed to any context object for the scope are passivation capable.
Passivating scopes must be explicitly declared @NormalScope(passivating=true).
For example, the built-in session and conversation scopes defined in Section 6.7, Context management for built-inscopes are passivating scopes. No other built-in scopes are passivating scopes.
-
79 NEC , Ltd. 2016
CDI AP WELD-000072
Serializable implements
CDI Bean Serializable implements
HelloImpl
package weblogic.study;
import java.io.Serializable;import javax.enterprise.context.SessionScoped;
@SessionScopedpublic class HelloImpl implements Hello, Serializable {
private int count = 0;
@Overridepublic String sayHello() {
// TODO Auto-generated method stubreturn "Hello World ( " + count++ + " ).";
}}
Test
package weblogic.study;
import java.io.Serializable;import javax.enterprise.context.SessionScoped;import javax.inject.Inject;import javax.inject.Named;
@SessionScoped@Namedpublic class Test implements Serializable {
private static final long serialVersionUID = 1L;
@InjectHello hello;
public String getMessage() {return hello.sayHello();
}}
-
80 NEC , Ltd. 2016
CDI AP NamingException
CDI
WebLogic Server 12.1.3.0.0
WebLogic-Application-Version
CDI
-
81 NEC , Ltd. 2016
CDI AP NamingException
CDI WebLogic-Application-Version 1.1
Version 1.1
-
82 NEC , Ltd. 2016
CDI AP NamingException
CDI
-
83 NEC , Ltd. 2016
CDI AP NamingException
####
-
84 NEC , Ltd. 2016
CDI AP NamingException
CDI Jersey Jersey JAX-RS Jersey CDIExtension#initialize() Weld
NamingException
java.lang.RuntimeException: javax.naming.NamingException: CDIExtension was previously bound from another application 'CDISampleEar1'; remaining name ''
at com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:199)at com.sun.jersey.server.impl.cdi.CDIExtension.beforeBeanDiscovery(CDIExtension.java:300)
-
85 NEC , Ltd. 2016
CDI AP NamingException
Jersey CDIExtension#initialize() WebLogic Server CDI Weld Jersey
WebLogic Server Weld Jersey verbose:class CDI
com.oracle.injection.integration.CDIAppDeploymentExtension
-verbose:class
[Loaded com.oracle.injection.integration.CDIIntegrationService from file:/D:/Oracle/Middleware/Oracle_Home/wlserver/modules/com.oracle.injection.integration.weblogic.jar][Loaded com.oracle.injection.integration.CDIModuleExtensionFactory from file:/D:/Oracle/Middleware/Oracle_Home/wlserver/modules/com.oracle.injection.integration.weblogic.jar][Loaded com.oracle.injection.integration.CDIUtils from file:/D:/Oracle/Middleware/Oracle_Home/wlserver/modules/com.oracle.injection.integration.weblogic.jar][Loaded com.oracle.injection.integration.CDIAppDeploymentExtensionFactory from file:/D:/Oracle/Middleware/Oracle_Home/wlserver/modules/com.oracle.injection.integration.weblogic.jar][Loaded com.oracle.injection.integration.CDIAppDeploymentExtension from file:/D:/Oracle/Middleware/Oracle_Home/wlserver/modules/com.oracle.injection.integration.weblogic.jar][Loaded com.oracle.injection.integration.CDIAppValidationExtension from file:/D:/Oracle/Middleware/Oracle_Home/wlserver/modules/com.oracle.injection.integration.weblogic.jar]
-
86 NEC , Ltd. 2016
CDI AP NamingException
CDI CDI JAX-RS Weld Jersey
-
87 NEC , Ltd. 2016
CDI AP NamingException
Jersey CDIExtension#initialize() MANIFEST.MF WebLogic-Application-Version CDI JNDI CDIExtension
JNDI com/sun/jersey/config/CDIExtension
JNDI CDIExtension
-
88 NEC , Ltd. 2016
CDI AP NamingException
CDIExtension#initialize() JNDI
lookupExtensionInBeanManager false JNDI lookupExtensionInBeanManager true com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager true
CDIExtension#initialize()
private void initialize(BeanManager manager) {// initialize in a separate method because Weld creates a proxy for the extension// and we don't want to waste time initializing it
if (!lookupExtensionInBeanManager) {try {
InitialContext ic = InitialContextHelper.getInitialContext();if (ic != null) {
javax.naming.Context jerseyConfigJNDIContext = createJerseyConfigJNDIContext(ic);jerseyConfigJNDIContext.rebind(JNDI_CDIEXTENSION_NAME, this);
}} catch (NamingException ex) {
throw new RuntimeException(ex);}
}
-
89 NEC , Ltd. 2016
CDI AP NamingException
MANIFEST.MF WebLogic-Application-Version CDI config.xml JNDI
JNDI CDI NamingException
CDI
CDI MANIFEST.MF WebLogic-Application-Version
-
90 NEC , Ltd. 2016
CDI AP NamingException
JAVA_OPTIONS
CDIExtension#initialize() com/sun/jersey/config/CDIExtension JNDI Jersey CDI BeanManager NamingException
My Oracle Support DocId 1591081.1
-Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true
-
91 NEC , Ltd. 2016
CDI AP WELD-000321
@ConversationScoped
org.jboss.weld.context.NonexistentConversationException: WELD-000321 No conversation found to restore for id 1
at org.jboss.weld.context.AbstractConversationContext.activate(AbstractConversationContext.java:217)at org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:108)at org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:85)at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228)at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99)at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280).....
-
92 NEC , Ltd. 2016
CDI AP WELD-000321
WELD-000321 ID WebLogic Server Google ID
JBoss Developer
stackoverflow> [WELD-000321 No conversation found to restore for id 3 when I refresh a page]
http://stackoverflow.com/questions/16325686/weld-000321-no-conversation-found-to-restore-for-id-3-when-i-refresh-a-page
github> [WELD-000321 No conversation found to restore for id 4]
https://github.com/agoncal/agoncal-application-petstore-ee6/issues/18
JBossDeveloper> [NonexistentConversationException: WELD-000321 No conversation found to restore for id 1]
https://issues.jboss.org/browse/WELD-1418?_sscc=t
JBossDeveloper> [WELD-000321: No conversation found to restore for id 1]
https://developer.jboss.org/thread/256298
JBossDeveloper> [Conversation-id-parameter causes WELD-000321 Exception]
https://issues.jboss.org/browse/JBSEAM-4941
http://stackoverflow.com/questions/16325686/weld-000321-no-conversation-found-to-restore-for-id-3-when-i-refresh-a-pagehttps://github.com/agoncal/agoncal-application-petstore-ee6/issues/18https://issues.jboss.org/browse/WELD-1418?_sscc=thttps://developer.jboss.org/thread/256298https://issues.jboss.org/browse/JBSEAM-4941
-
93 NEC , Ltd. 2016
CDI AP WELD-000321
github HTTP
HTTP
WebLogic Server weblogic > servlet > internal > session > DebugHttpSessions HTTP
Conversation#getTimeout() 600000 10
github> [WELD-000321 No conversation found to restore for id 4]
https://github.com/agoncal/agoncal-application-petstore-ee6/issues/18
-----It's probably due to session or conversation timeout.Possible solutions :
Deal with the exception to forward to an error pageUse a keepalive trick (Ajax call) on given pages to be sure that session / conversation doesn't timeoutRaise the timeouts to very high length and rely on EJB passivation to avoid resource exhaustion. Anyway we'll need also 1.-----
https://github.com/agoncal/agoncal-application-petstore-ee6/issues/18
-
94 NEC , Ltd. 2016
CDI AP WELD-000321
xhtml EL ManagedBean @PostConstruct Conversation#begin()
Conversation#begin() System.out.println() ID ID
CDI Bean
@Named@ConversationScopedpublic class Action implements Serializable {
@InjectConversation conversation;
@PostConstructpublic void start() {
conversation.begin();System.out.println( "***** cid = " + conversation.getId() );
}
Conversation#begin()
-
95 NEC , Ltd. 2016
CDI AP WELD-000321
JBossDeveloper 1.1.12.Final2.0.0.Final Weld 2.1.0.Beta1 WELD-1418
JBossDeveloper> [NonexistentConversationException: WELD-000321 No conversation found to restore for id 1]
https://issues.jboss.org/browse/WELD-1418?_sscc=t
https://issues.jboss.org/browse/WELD-1418?_sscc=t
-
96 NEC , Ltd. 2016
CDI AP WELD-000321
@ConversationScoped xhtml JSF ajax / outputStylesheet
JBossDeveloper> [NonexistentConversationException: WELD-000321 No conversation found to restore for id 1]
https://issues.jboss.org/browse/WELD-1418?_sscc=t
https://issues.jboss.org/browse/WELD-1418?_sscc=t
-
97 NEC , Ltd. 2016
CDI AP WELD-000321
outputScript / outputStylesheet JSF
xhtml
#{title}
-
98 NEC , Ltd. 2016
CDI AP WELD-000321
Weld 2.3.2.Final / Weld 2.1.2.Final WEB-INF/lib CDI
-
99 NEC , Ltd. 2016
CDI AP WELD-000321
Weld 2.3.2.Final / Weld 2.1.2.Final
-
100 NEC , Ltd. 2016
CDI AP WELD-000321
WELD-1418 JSF HTML
Weld
-
101 NEC , Ltd. 2016
CDI AP WELD-000321
WebLogic Server 12.2.1.0.0 WebLogic Server 12.2.1.0.0
WebLogic Server 12.2.1.0.0
WebLogic Server 12.2.1.0.0 Weld CDI 1.1 2.2.13.Final
-
102 NEC , Ltd. 2016
CDI AP WELD-000321
WELD-1418
Thread A Thread B
A
A ID:1 / HTTP
BHTTP
B
Thread C
C ID:1 / HTTP
A
HTTP
B HTTP
B put
HTTP B put
A put
ID:1 A
WELD-000321
-
103 NEC , Ltd. 2016
CDI AP WELD-000321
xhtml HTTP JSF HTML
JSF HTML B A HTTP A put
HTTP
A A HTTP put
ServletFilter HttpSession
A HTTP put
-
104 NEC , Ltd. 2016
CDI Bean Serializable implements
Java EE 7 CDI beans.xml CDI Bean
CDI -Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true JAVA_OPTIONS
WebLogic Server 12c R112.1.3.0.0 R212.2.1.0.0 CDI WebLogic Server CDI
-
7.
CDI
@Qualifier
@Alternative / @Priority
-
106 NEC , Ltd. 2016
CDI
Oracle Enterprise Pack for Eclipse (OEPE) 12.2.1.4
OEPE
Oracle Enterprise Pack for Eclipsehttp://www.oracle.com/technetwork/developer-tools/eclipse/downloads/index.html
JDK 1.8.0_102
JDK My Oracle Support
http://www.oracle.com/technetwork/developer-tools/eclipse/downloads/index.html
-
107 NEC , Ltd. 2016
CDI
OEPE
-
108 NEC , Ltd. 2016
CDI
[File] [New] [Project...] [New Project]
-
109 NEC , Ltd. 2016
CDI
[New Project] [Web] [Dynamic Web Project] type filter text Dynamic [Dynamic Web Project] [Next]
Dynamic Dynamic
Web Project
[Web] [Dynamic Web Project]
-
110 NEC , Ltd. 2016
CDI
[New Dynamic Web Project] [Project name] [Target runtime] [New Runtime]
CDISample Web
-
111 NEC , Ltd. 2016
CDI
[New Server Runtime Environment] [Oracle] [Oracle WebLogic Server 12c R2 (12.2.1)] type filter text Oracle WebLogic Server 12c [Oracle WebLogic Server 12c R2 (12.2.1)] [Next]
[Oracle WebLogic Server 12c R2 (12.2.1)]
Oracle WebLogic Server 12c
[Oracle WebLogic Server 12c R2 (12.2.1)]
-
112 NEC , Ltd. 2016
CDI
[WebLogic home] WL_HOME [Finish] [Java home] WL_HOME
-
113 NEC , Ltd. 2016
CDI
[New Dynamic Web Project] [Configuration] [Modify] [Project Facets]
-
114 NEC , Ltd. 2016
CDI
[Project Facets] [Configuration] [JavaServer Faces v2.2 Project] [OK]
CDI JSF JSF EL JSF
-
115 NEC , Ltd. 2016
CDI
[New Dynamic Web Project] [Target runtime] [Configuration] [Finish]
Oracle WebLogic Server 12c R2 (12.2.1)
JavaServer Faces v2.2 Project
-
116 NEC , Ltd. 2016
CDI
[Project Explorer] [Java Resources] Package / Interface / Class
-
117 NEC , Ltd. 2016
CDI
[New] [Package] [New Java Package]
[Name] [Finish]
weblogic.study
-
118 NEC , Ltd. 2016
CDI
[New] [Interface]
-
119 NEC , Ltd. 2016
CDI
[Name] [Finish]
Hello
-
120 NEC , Ltd. 2016
CDI
[New] [Class]
-
121 NEC , Ltd. 2016
CDI
[Name]
[Interfaces] [Add]
HelloImpl
-
122 NEC , Ltd. 2016
CDI
[Choose Interfaces] [Matching items] [OK]
-
123 NEC , Ltd. 2016
CDI
[Interfaces] [Finish]
-
124 NEC , Ltd. 2016
CDI
[Interfaces]
Test
-
125 NEC , Ltd. 2016
CDI
[Project Explorer]
Package weblogic.study
Interface Hello CDI Bean
Class HelloImpl CDI Bean
Class Test CDI
-
126 NEC , Ltd. 2016
CDI
package weblogic.study;
public interface Hello {public String sayHello();
}
package weblogic.study;
public class HelloImpl implements Hello {@Overridepublic String sayHello() {
return "Hello World";}
}
-
127 NEC , Ltd. 2016
CDI
JSF EL @Named getter
package weblogic.study;
import javax.inject.Inject;import javax.inject.Named;
@Namedpublic class Test {
@InjectHello hello;
public String getMessage() {return hello.sayHello();
}}
-
128 NEC , Ltd. 2016
CDI
@Named CDI Bean EL JSF
JSF index.xhtml
-
129 NEC , Ltd. 2016
CDI
index.xhtml
-
130 NEC , Ltd. 2016
CDI
CDI Bean Test HelloImpl CDI Test HelloImpl CDI Bean CDI Bean WEB-INF beans.xml
WebContent WEB-INF [New] [File]
-
131 NEC , Ltd. 2016
CDI
[New File] [File Name] beans.xml [Finish]
-
132 NEC , Ltd. 2016
CDI
[Project Explorer]
beans.xml
xml beans.xml
CDI Java EE 7 CDI CDI Bean
-
133 NEC , Ltd. 2016
CDI
war
CDISample[Export] [WAR file]
-
134 NEC , Ltd. 2016
CDI
[Destination] war [Browse...]
[Finish]
war weblogic.Deployer
-
135 NEC , Ltd. 2016
CDI
http://IP:PORT/CDISample/faces/index.xhtml
IP PORT
Test CDI Bean getMessage()
http://IP:PORT/CDISample/faces/index.xhtml
-
136 NEC , Ltd. 2016
Request @RequestScoped
Session @SessionScoped HTTP
Application @ApplicationScoped Web HTTP
Conversation @ConversationScoped
Conversation#begin() Conversation#end()JSF
Dependent @Dependent
-
137 NEC , Ltd. 2016
@Request
HTTP Keep-Alive HTTP
Client Request
Response
Request
Response
@RequestScoped
A
PP
Instance
Instance
-
138 NEC , Ltd. 2016
@Session
HTTP HTTP
Client Request
Response
Request
Response
@SessionScopedHTTP
A
PP
Instance
HTTP
HTTP
Create
Invalidate
-
139 NEC , Ltd. 2016
@Application
Client
A
PPInstance
Request
Response
Request
Response
Client
A
PP
STATE_PREPARED
@ApplicationScoped
STATE_ACTIVE
-
140 NEC , Ltd. 2016
@Conversation
HTTP Conversation#begin() Conversation#end()
Request
Client
A
PP
Instance
Request
Response
Request
Response
Request
Response
Request
Response
Request
Response
Conversation#begin()
Conversation#end()
Conversation#begin()
Conversation#end()
-
141 NEC , Ltd. 2016
@Qualifier
@Qualifier CDI
@InjectHello hello;
HelloImpl2 implements Hello
HelloImpl1 implements Hello
-
142 NEC , Ltd. 2016
@Qualifier
HelloImpl1
HelloImpl1
package weblogic.study;
import static java.lang.annotation.ElementType.*;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.Retention;import java.lang.annotation.Target;import javax.inject.Qualifier;
@Qualifier@Retention( RUNTIME )@Target( {METHOD, FIELD, PARAMETER, TYPE} )Public @interface Hello1 {}
HelloImpl1
package weblogic.study;
import javax.enterprise.context.SessionScoped;
@Hello1public class HelloImpl1 implements Hello {}
HelloImpl1
javax.inject.Qualifier @Qualifier
-
143 NEC , Ltd. 2016
@Qualifier
HelloImpl1 HelloImpl2
HelloImpl2
package weblogic.study;
import static java.lang.annotation.ElementType.*;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.Retention;import java.lang.annotation.Target;import javax.inject.Qualifier;
@Qualifier@Retention( RUNTIME )@Target( {METHOD, FIELD, PARAMETER, TYPE} )Public @interface Hello2 {}
HelloImpl2
package weblogic.study;
import javax.enterprise.context.SessionScoped;
@Hello2public class HelloImpl2 implements Hello {}
javax.inject.Qualifier @Qualifier
HelloImpl2
-
144 NEC , Ltd. 2016
@Qualifier
HelloImpl2
package weblogic.study;
import javax.enterprise.context.SessionScoped;import javax.inject.Inject;import javax.inject.Named;
@Namedpublic class Test {
private static final long serialVersionUID = 1L;
@Inject@Hello2Hello hello;
public String getHello() {return hello.sayHello();
}}
Hello2Impl
-
145 NEC , Ltd. 2016
@Alternative / @Priority
CDI Bean
CDI Bean
@Inject@Hello2 @Hello1Hello hello;
public String getHello() {return hello.sayHello();
}
CDI Bean
-
146 NEC , Ltd. 2016
@Alternative / @Priority
HellpImpl HelloImplDev
@InjectHello hello;
HelloImplTest implements Hello
HelloImpl implements Hello
HelloImplDev implements Hello
-
147 NEC , Ltd. 2016
@Alternative / @Priority
CDI Bean Bean Bean
@CDI Bean
package weblogic.study;
import javax.enterprise.context.RequestScoped;
@RequestScopedpublic class HelloImpl implements Hello {
@Overridepublic String sayHello() {
// TODO Auto-generated method stubreturn "Hello World (Production).";
}
}
Bean
package weblogic.study;
import javax.annotation.Priority;import javax.enterprise.context.RequestScoped;import javax.enterprise.inject.Alternative;
@Alternative@Priority( 1000 )@RequestScopedpublic class HelloImplDev implements Hello {
@Overridepublic String sayHello() {
// TODO Auto-generated method stubreturn "Hello World (Development).";
}
}
-
148 NEC , Ltd. 2016
@Alternative / @Priority
@Alternative Bean Bean
@Priority Bean
Java EE 7 Java EE 6
Java EE 6 beans.xml Bean
Bean CDI Bean
beans.xml
weblogic.study.HelloImplDev
-
149 NEC , Ltd. 2016
@Alternative / @Priority
Bean CDI Bean
-
150 NEC , Ltd. 2016