package com.sun.s1asdev.ejb.ejb30.hello.session3;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.resource.ConnectionFactoryDefinitions;
import javax.resource.ConnectionFactoryDefinition;
import javax.resource.cci.Connection;
import javax.resource.cci.ConnectionFactory;
import javax.resource.spi.TransactionSupport.TransactionSupportLevel;
import javax.annotation.Resource;
@ConnectionFactoryDefinitions(
value = {
@ConnectionFactoryDefinition(
description="global-scope resource defined by @ConnectionFactoryDefinition",
name = "java:global/env/HelloEJB_ModByDD_ConnectionFactory",
interfaceName = "javax.resource.cci.ConnectionFactory",
resourceAdapter = "cfd-ra",
properties = {"testName=foo"}
),
@ConnectionFactoryDefinition(
description = "global-scope resource defined by @ConnectionFactoryDefinition",
name = "java:global/env/HelloEJB_Annotation_ConnectionFactory",
interfaceName = "javax.resource.cci.ConnectionFactory",
resourceAdapter = "cfd-ra",
transactionSupport = TransactionSupportLevel.LocalTransaction,
maxPoolSize = 16,
minPoolSize = 4,
properties = {"testName=foo"}
),
@ConnectionFactoryDefinition(
description = "application-scope resource defined by @ConnectionFactoryDefinition",
name = "java:app/env/HelloEJB_Annotation_ConnectionFactory",
interfaceName = "javax.resource.cci.ConnectionFactory",
transactionSupport = TransactionSupportLevel.XATransaction,
maxPoolSize = 16,
minPoolSize = 4,
resourceAdapter = "cfd-ra",
properties = {"testName=foo"}
),
@ConnectionFactoryDefinition(
description = "module-scope resource defined by @ConnectionFactoryDefinition",
name = "java:module/env/HelloEJB_Annotation_ConnectionFactory",
interfaceName = "javax.resource.cci.ConnectionFactory",
resourceAdapter = "cfd-ra",
properties = {"testName=foo"}
),
@ConnectionFactoryDefinition(
description = "component-scope resource defined by @ConnectionFactoryDefinition",
name = "java:comp/env/HelloEJB_Annotation_ConnectionFactory",
interfaceName = "javax.resource.cci.ConnectionFactory",
resourceAdapter = "cfd-ra",
properties = {"testName=foo"}
)
}
)
@Stateless
public class HelloEJB implements Hello {
@javax.annotation.Resource(name="java:comp/env/HelloEJB_Annotation_ConnectionFactory")
ConnectionFactory cf;
public void hello() {
try {
Connection c = cf.getConnection();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Fail to access connector resource through injection", e);
}
// Connection-Factory-Definition through Annotation
lookupConnectionFactory("java:global/env/Servlet_ConnectionFactory", true);
lookupConnectionFactory("java:app/env/Servlet_ConnectionFactory", true);
lookupConnectionFactory("java:module/env/Servlet_ConnectionFactory", false);
lookupConnectionFactory("java:comp/env/Servlet_ConnectionFactory", false);
lookupConnectionFactory("java:global/env/HelloStatefulEJB_Annotation_ConnectionFactory", true);
lookupConnectionFactory("java:app/env/HelloStatefulEJB_Annotation_ConnectionFactory", true);
lookupConnectionFactory("java:module/env/HelloStatefulEJB_Annotation_ConnectionFactory", true);
lookupConnectionFactory("java:comp/env/HelloStatefulEJB_Annotation_ConnectionFactory", false);
lookupConnectionFactory("java:global/env/HelloEJB_Annotation_ConnectionFactory", true);
lookupConnectionFactory("java:app/env/HelloEJB_Annotation_ConnectionFactory", true);
lookupConnectionFactory("java:module/env/HelloEJB_Annotation_ConnectionFactory", true);
lookupConnectionFactory("java:comp/env/HelloEJB_Annotation_ConnectionFactory", true);
// Connection-Factory-Definition through DD
lookupConnectionFactory("java:global/env/EAR_ConnectionFactory", true);
lookupConnectionFactory("java:app/env/EAR_ConnectionFactory", true);
lookupConnectionFactory("java:global/env/Web_DD_ConnectionFactory", true);
lookupConnectionFactory("java:app/env/Web_DD_ConnectionFactory", true);
lookupConnectionFactory("java:module/env/Web_DD_ConnectionFactory", false);
lookupConnectionFactory("java:comp/env/Web_DD_ConnectionFactory", false);
lookupConnectionFactory("java:global/env/HelloStatefulEJB_DD_ConnectionFactory", true);
lookupConnectionFactory("java:app/env/HelloStatefulEJB_DD_ConnectionFactory", true);
lookupConnectionFactory("java:module/env/HelloStatefulEJB_DD_ConnectionFactory", true);
lookupConnectionFactory("java:comp/env/HelloStatefulEJB_DD_ConnectionFactory", false);
lookupConnectionFactory("java:global/env/HelloEJB_DD_ConnectionFactory", true);
lookupConnectionFactory("java:app/env/HelloEJB_DD_ConnectionFactory", true);
lookupConnectionFactory("java:module/env/HelloEJB_DD_ConnectionFactory", true);
lookupConnectionFactory("java:comp/env/HelloEJB_DD_ConnectionFactory", true);
System.out.println("In HelloEJB::hello()");
}
private void lookupConnectionFactory(String jndiName, boolean expectSuccess) throws RuntimeException{
Connection c = null;
try {
InitialContext ic = new InitialContext();
ConnectionFactory ds = (ConnectionFactory) ic.lookup(jndiName);
c = ds.getConnection();
System.out.println("Stateless EJB: can access connector resource : " + jndiName);
} catch (Exception e) {
if(expectSuccess){
e.printStackTrace();
throw new RuntimeException("Fail to access connector resource: "+jndiName, e);
}else{
System.out.println("Stateless EJB cannot access connector resource : " + jndiName);
}
} finally {
try {
if (c != null) {
c.close();
}
} catch (Exception e) {
}
}
}
}