Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-examples.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-examples.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-examples.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-examples.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,1188 @@
+= EJB Examples
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example ejb-examples can be browsed at
https://github.com/apache/tomee/tree/master/examples/ejb-examples
+
+
+*Help us document this example! Click the blue pencil icon in the upper right
to edit this page.*
+
+== AnnotatedEJB
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.annotation.Resource;
+import javax.ejb.LocalBean;
+import javax.ejb.Stateless;
+import javax.sql.DataSource;
+
+@Stateless
+@LocalBean
+public class AnnotatedEJB implements AnnotatedEJBLocal, AnnotatedEJBRemote {
+ @Resource
+ private DataSource ds;
+
+ private String name = "foo";
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public DataSource getDs() {
+ return ds;
+ }
+
+ public void setDs(DataSource ds) {
+ this.ds = ds;
+ }
+
+ public String toString() {
+ return "AnnotatedEJB[name=" + name + "]";
+ }
+}
+----
+
+
+== AnnotatedEJBLocal
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.ejb.Local;
+import javax.sql.DataSource;
+
+@Local
+public interface AnnotatedEJBLocal {
+ String getName();
+
+ void setName(String name);
+
+ DataSource getDs();
+
+ void setDs(DataSource ds);
+}
+----
+
+
+== AnnotatedEJBRemote
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface AnnotatedEJBRemote {
+ String getName();
+
+ void setName(String name);
+}
+----
+
+
+== AnnotatedServlet
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+import java.io.IOException;
+
+public class AnnotatedServlet extends HttpServlet {
+ @EJB
+ private AnnotatedEJBLocal localEJB;
+
+ @EJB
+ private AnnotatedEJBRemote remoteEJB;
+
+ @EJB
+ private AnnotatedEJB localbeanEJB;
+
+ @Resource
+ private DataSource ds;
+
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
+ response.setContentType("text/plain");
+ ServletOutputStream out = response.getOutputStream();
+
+ out.println("LocalBean EJB");
+ out.println("@EJB=" + localbeanEJB);
+ if (localbeanEJB != null) {
+ out.println("@EJB.getName()=" + localbeanEJB.getName());
+ out.println("@EJB.getDs()=" + localbeanEJB.getDs());
+ }
+ out.println("JNDI=" + lookupField("localbeanEJB"));
+ out.println();
+
+ out.println("Local EJB");
+ out.println("@EJB=" + localEJB);
+ if (localEJB != null) {
+ out.println("@EJB.getName()=" + localEJB.getName());
+ out.println("@EJB.getDs()=" + localEJB.getDs());
+ }
+ out.println("JNDI=" + lookupField("localEJB"));
+ out.println();
+
+ out.println("Remote EJB");
+ out.println("@EJB=" + remoteEJB);
+ if (localEJB != null) {
+ out.println("@EJB.getName()=" + remoteEJB.getName());
+ }
+ out.println("JNDI=" + lookupField("remoteEJB"));
+ out.println();
+
+
+ out.println("DataSource");
+ out.println("@Resource=" + ds);
+ out.println("JNDI=" + lookupField("ds"));
+ }
+
+ private Object lookupField(String name) {
+ try {
+ return new InitialContext().lookup("java:comp/env/" +
getClass().getName() + "/" + name);
+ } catch (NamingException e) {
+ return null;
+ }
+ }
+}
+----
+
+
+== ClientHandler
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.xml.ws.handler.Handler;
+import javax.xml.ws.handler.MessageContext;
+
+public class ClientHandler implements Handler {
+ public boolean handleMessage(MessageContext messageContext) {
+ WebserviceServlet.write(" ClientHandler handleMessage");
+ return true;
+ }
+
+ public void close(MessageContext messageContext) {
+ WebserviceServlet.write(" ClientHandler close");
+ }
+
+ public boolean handleFault(MessageContext messageContext) {
+ WebserviceServlet.write(" ClientHandler handleFault");
+ return true;
+ }
+}
+----
+
+
+== HelloEjb
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.jws.WebService;
+
+@WebService(targetNamespace = "http://examples.org/wsdl")
+public interface HelloEjb {
+ String hello(String name);
+}
+----
+
+
+== HelloEjbService
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.ejb.Stateless;
+import javax.jws.HandlerChain;
+import javax.jws.WebService;
+
+@WebService(
+ portName = "HelloEjbPort",
+ serviceName = "HelloEjbService",
+ targetNamespace = "http://examples.org/wsdl",
+ endpointInterface = "org.superbiz.servlet.HelloEjb"
+)
+@HandlerChain(file = "server-handlers.xml")
+@Stateless
+public class HelloEjbService implements HelloEjb {
+ public String hello(String name) {
+ WebserviceServlet.write(" HelloEjbService hello(" +
name + ")");
+ if (name == null) name = "World";
+ return "Hello " + name + " from EJB Webservice!";
+ }
+}
+----
+
+
+== HelloPojo
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.jws.WebService;
+
+@WebService(targetNamespace = "http://examples.org/wsdl")
+public interface HelloPojo {
+ String hello(String name);
+}
+----
+
+
+== HelloPojoService
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.jws.HandlerChain;
+import javax.jws.WebService;
+
+@WebService(
+ portName = "HelloPojoPort",
+ serviceName = "HelloPojoService",
+ targetNamespace = "http://examples.org/wsdl",
+ endpointInterface = "org.superbiz.servlet.HelloPojo"
+)
+@HandlerChain(file = "server-handlers.xml")
+public class HelloPojoService implements HelloPojo {
+ public String hello(String name) {
+ WebserviceServlet.write(" HelloPojoService hello(" +
name + ")");
+ if (name == null) name = "World";
+ return "Hello " + name + " from Pojo Webservice!";
+ }
+}
+----
+
+
+== JndiServlet
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NameClassPair;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class JndiServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
+ response.setContentType("text/plain");
+ ServletOutputStream out = response.getOutputStream();
+
+ Map<String, Object> bindings = new TreeMap<String,
Object>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Context context = (Context) new
InitialContext().lookup("java:comp/");
+ addBindings("", bindings, context);
+ } catch (NamingException e) {
+ throw new ServletException(e);
+ }
+
+ out.println("JNDI Context:");
+ for (Map.Entry<String, Object> entry : bindings.entrySet()) {
+ if (entry.getValue() != null) {
+ out.println(" " + entry.getKey() + "=" + entry.getValue());
+ } else {
+ out.println(" " + entry.getKey());
+ }
+ }
+ }
+
+ private void addBindings(String path, Map<String, Object> bindings,
Context context) {
+ try {
+ for (NameClassPair pair : Collections.list(context.list(""))) {
+ String name = pair.getName();
+ String className = pair.getClassName();
+ if
("org.apache.naming.resources.FileDirContext$FileResource".equals(className)) {
+ bindings.put(path + name, "<file>");
+ } else {
+ try {
+ Object value = context.lookup(name);
+ if (value instanceof Context) {
+ Context nextedContext = (Context) value;
+ bindings.put(path + name, "");
+ addBindings(path + name + "/", bindings,
nextedContext);
+ } else {
+ bindings.put(path + name, value);
+ }
+ } catch (NamingException e) {
+ // lookup failed
+ bindings.put(path + name, "ERROR: " + e.getMessage());
+ }
+ }
+ }
+ } catch (NamingException e) {
+ bindings.put(path, "ERROR: list bindings threw an exception: " +
e.getMessage());
+ }
+ }
+}
+----
+
+
+== JpaBean
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+public class JpaBean {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private int id;
+
+ @Column(name = "name")
+ private String name;
+
+ public int getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+ public String toString() {
+ return "[JpaBean id=" + id + ", name=" + name + "]";
+ }
+}
+----
+
+
+== JpaServlet
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.PersistenceUnit;
+import javax.persistence.Query;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class JpaServlet extends HttpServlet {
+ @PersistenceUnit(name = "jpa-example")
+ private EntityManagerFactory emf;
+
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
+ response.setContentType("text/plain");
+ ServletOutputStream out = response.getOutputStream();
+
+ out.println("@PersistenceUnit=" + emf);
+
+ EntityManager em = emf.createEntityManager();
+ EntityTransaction transaction = em.getTransaction();
+ transaction.begin();
+
+ JpaBean jpaBean = new JpaBean();
+ jpaBean.setName("JpaBean");
+ em.persist(jpaBean);
+
+ transaction.commit();
+ transaction.begin();
+
+ Query query = em.createQuery("SELECT j FROM JpaBean j WHERE
j.name='JpaBean'");
+ jpaBean = (JpaBean) query.getSingleResult();
+ out.println("Loaded " + jpaBean);
+
+ em.remove(jpaBean);
+
+ transaction.commit();
+ transaction.begin();
+
+ query = em.createQuery("SELECT count(j) FROM JpaBean j WHERE
j.name='JpaBean'");
+ int count = ((Number) query.getSingleResult()).intValue();
+ if (count == 0) {
+ out.println("Removed " + jpaBean);
+ } else {
+ out.println("ERROR: unable to remove" + jpaBean);
+ }
+
+ transaction.commit();
+ }
+}
+----
+
+
+== ResourceBean
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+public class ResourceBean {
+ private String value;
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String toString() {
+ return "[ResourceBean " + value + "]";
+ }
+}
+----
+
+
+== RunAsServlet
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.ejb.EJB;
+import javax.ejb.EJBAccessException;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.security.Principal;
+
+public class RunAsServlet extends HttpServlet {
+ @EJB
+ private SecureEJBLocal secureEJBLocal;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
+ response.setContentType("text/plain");
+ ServletOutputStream out = response.getOutputStream();
+
+ out.println("Servlet");
+ Principal principal = request.getUserPrincipal();
+ if (principal != null) {
+ out.println("Servlet.getUserPrincipal()=" + principal + " [" +
principal.getName() + "]");
+ } else {
+ out.println("Servlet.getUserPrincipal()=<null>");
+ }
+ out.println("Servlet.isCallerInRole(\"user\")=" +
request.isUserInRole("user"));
+ out.println("Servlet.isCallerInRole(\"manager\")=" +
request.isUserInRole("manager"));
+ out.println("Servlet.isCallerInRole(\"fake\")=" +
request.isUserInRole("fake"));
+ out.println();
+
+ out.println("@EJB=" + secureEJBLocal);
+ if (secureEJBLocal != null) {
+ principal = secureEJBLocal.getCallerPrincipal();
+ if (principal != null) {
+ out.println("@EJB.getCallerPrincipal()=" + principal + " [" +
principal.getName() + "]");
+ } else {
+ out.println("@EJB.getCallerPrincipal()=<null>");
+ }
+ out.println("@EJB.isCallerInRole(\"user\")=" +
secureEJBLocal.isCallerInRole("user"));
+ out.println("@EJB.isCallerInRole(\"manager\")=" +
secureEJBLocal.isCallerInRole("manager"));
+ out.println("@EJB.isCallerInRole(\"fake\")=" +
secureEJBLocal.isCallerInRole("fake"));
+
+ try {
+ secureEJBLocal.allowUserMethod();
+ out.println("@EJB.allowUserMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.allowUserMethod() DENIED");
+ }
+
+ try {
+ secureEJBLocal.allowManagerMethod();
+ out.println("@EJB.allowManagerMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.allowManagerMethod() DENIED");
+ }
+
+ try {
+ secureEJBLocal.allowFakeMethod();
+ out.println("@EJB.allowFakeMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.allowFakeMethod() DENIED");
+ }
+
+ try {
+ secureEJBLocal.denyAllMethod();
+ out.println("@EJB.denyAllMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.denyAllMethod() DENIED");
+ }
+ }
+ out.println();
+ }
+}
+----
+
+
+== SecureEJB
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.annotation.Resource;
+import javax.annotation.security.DeclareRoles;
+import javax.annotation.security.DenyAll;
+import javax.annotation.security.RolesAllowed;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+import java.security.Principal;
+
+@Stateless
+@DeclareRoles({"user", "manager", "fake"})
+public class SecureEJB implements SecureEJBLocal {
+ @Resource
+ private SessionContext context;
+
+ public Principal getCallerPrincipal() {
+ return context.getCallerPrincipal();
+ }
+
+ public boolean isCallerInRole(String role) {
+ return context.isCallerInRole(role);
+ }
+
+ @RolesAllowed("user")
+ public void allowUserMethod() {
+ }
+
+ @RolesAllowed("manager")
+ public void allowManagerMethod() {
+ }
+
+ @RolesAllowed("fake")
+ public void allowFakeMethod() {
+ }
+
+ @DenyAll
+ public void denyAllMethod() {
+ }
+
+ public String toString() {
+ return "SecureEJB[userName=" + getCallerPrincipal() + "]";
+ }
+}
+----
+
+
+== SecureEJBLocal
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.ejb.Local;
+import java.security.Principal;
+
+@Local
+public interface SecureEJBLocal {
+ Principal getCallerPrincipal();
+
+ boolean isCallerInRole(String role);
+
+ void allowUserMethod();
+
+ void allowManagerMethod();
+
+ void allowFakeMethod();
+
+ void denyAllMethod();
+}
+----
+
+
+== SecureServlet
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.ejb.EJB;
+import javax.ejb.EJBAccessException;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.security.Principal;
+
+public class SecureServlet extends HttpServlet {
+ @EJB
+ private SecureEJBLocal secureEJBLocal;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
+ response.setContentType("text/plain");
+ ServletOutputStream out = response.getOutputStream();
+
+ out.println("Servlet");
+ Principal principal = request.getUserPrincipal();
+ if (principal != null) {
+ out.println("Servlet.getUserPrincipal()=" + principal + " [" +
principal.getName() + "]");
+ } else {
+ out.println("Servlet.getUserPrincipal()=<null>");
+ }
+ out.println("Servlet.isCallerInRole(\"user\")=" +
request.isUserInRole("user"));
+ out.println("Servlet.isCallerInRole(\"manager\")=" +
request.isUserInRole("manager"));
+ out.println("Servlet.isCallerInRole(\"fake\")=" +
request.isUserInRole("fake"));
+ out.println();
+
+ out.println("@EJB=" + secureEJBLocal);
+ if (secureEJBLocal != null) {
+ principal = secureEJBLocal.getCallerPrincipal();
+ if (principal != null) {
+ out.println("@EJB.getCallerPrincipal()=" + principal + " [" +
principal.getName() + "]");
+ } else {
+ out.println("@EJB.getCallerPrincipal()=<null>");
+ }
+ out.println("@EJB.isCallerInRole(\"user\")=" +
secureEJBLocal.isCallerInRole("user"));
+ out.println("@EJB.isCallerInRole(\"manager\")=" +
secureEJBLocal.isCallerInRole("manager"));
+ out.println("@EJB.isCallerInRole(\"fake\")=" +
secureEJBLocal.isCallerInRole("fake"));
+
+ try {
+ secureEJBLocal.allowUserMethod();
+ out.println("@EJB.allowUserMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.allowUserMethod() DENIED");
+ }
+
+ try {
+ secureEJBLocal.allowManagerMethod();
+ out.println("@EJB.allowManagerMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.allowManagerMethod() DENIED");
+ }
+
+ try {
+ secureEJBLocal.allowFakeMethod();
+ out.println("@EJB.allowFakeMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.allowFakeMethod() DENIED");
+ }
+
+ try {
+ secureEJBLocal.denyAllMethod();
+ out.println("@EJB.denyAllMethod() ALLOWED");
+ } catch (EJBAccessException e) {
+ out.println("@EJB.denyAllMethod() DENIED");
+ }
+ }
+ out.println();
+ }
+}
+----
+
+
+== ServerHandler
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.xml.ws.handler.Handler;
+import javax.xml.ws.handler.MessageContext;
+
+public class ServerHandler implements Handler {
+ public boolean handleMessage(MessageContext messageContext) {
+ WebserviceServlet.write(" ServerHandler handleMessage");
+ return true;
+ }
+
+ public void close(MessageContext messageContext) {
+ WebserviceServlet.write(" ServerHandler close");
+ }
+
+ public boolean handleFault(MessageContext messageContext) {
+ WebserviceServlet.write(" ServerHandler handleFault");
+ return true;
+ }
+}
+----
+
+
+== WebserviceClient
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.xml.ws.Service;
+import java.io.PrintStream;
+import java.net.URL;
+
+public class WebserviceClient {
+ /**
+ * Unfortunately, to run this example with CXF you need to have a HUGE
class path. This
+ * is just what is required to run CXF:
+ * <p/>
+ * jaxb-api-2.0.jar
+ * jaxb-impl-2.0.3.jar
+ * <p/>
+ * saaj-api-1.3.jar
+ * saaj-impl-1.3.jar
+ * <p/>
+ * <p/>
+ * cxf-api-2.0.2-incubator.jar
+ * cxf-common-utilities-2.0.2-incubator.jar
+ * cxf-rt-bindings-soap-2.0.2-incubator.jar
+ * cxf-rt-core-2.0.2-incubator.jar
+ * cxf-rt-databinding-jaxb-2.0.2-incubator.jar
+ * cxf-rt-frontend-jaxws-2.0.2-incubator.jar
+ * cxf-rt-frontend-simple-2.0.2-incubator.jar
+ * cxf-rt-transports-http-jetty-2.0.2-incubator.jar
+ * cxf-rt-transports-http-2.0.2-incubator.jar
+ * cxf-tools-common-2.0.2-incubator.jar
+ * <p/>
+ * geronimo-activation_1.1_spec-1.0.jar
+ * geronimo-annotation_1.0_spec-1.1.jar
+ * geronimo-ejb_3.0_spec-1.0.jar
+ * geronimo-jpa_3.0_spec-1.1.jar
+ * geronimo-servlet_2.5_spec-1.1.jar
+ * geronimo-stax-api_1.0_spec-1.0.jar
+ * jaxws-api-2.0.jar
+ * axis2-jws-api-1.3.jar
+ * <p/>
+ * wsdl4j-1.6.1.jar
+ * xml-resolver-1.2.jar
+ * XmlSchema-1.3.1.jar
+ */
+ public static void main(String[] args) throws Exception {
+ PrintStream out = System.out;
+
+ Service helloPojoService = Service.create(new
URL("http://localhost:8080/ejb-examples/hello?wsdl"), null);
+ HelloPojo helloPojo = helloPojoService.getPort(HelloPojo.class);
+ out.println();
+ out.println("Pojo Webservice");
+ out.println(" helloPojo.hello(\"Bob\")=" + helloPojo.hello("Bob"));
+ out.println(" helloPojo.hello(null)=" + helloPojo.hello(null));
+ out.println();
+
+ Service helloEjbService = Service.create(new
URL("http://localhost:8080/HelloEjbService?wsdl"), null);
+ HelloEjb helloEjb = helloEjbService.getPort(HelloEjb.class);
+ out.println();
+ out.println("EJB Webservice");
+ out.println(" helloEjb.hello(\"Bob\")=" + helloEjb.hello("Bob"));
+ out.println(" helloEjb.hello(null)=" + helloEjb.hello(null));
+ out.println();
+ }
+}
+----
+
+
+== WebserviceServlet
+
+
+[source,java]
+----
+package org.superbiz.servlet;
+
+import javax.jws.HandlerChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.ws.WebServiceRef;
+import java.io.IOException;
+
+public class WebserviceServlet extends HttpServlet {
+
+ @WebServiceRef
+ @HandlerChain(file = "client-handlers.xml")
+ private HelloPojo helloPojo;
+
+ @WebServiceRef
+ @HandlerChain(file = "client-handlers.xml")
+ private HelloEjb helloEjb;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
+ response.setContentType("text/plain");
+ ServletOutputStream out = response.getOutputStream();
+
+ OUT = out;
+ try {
+ out.println("Pojo Webservice");
+ out.println(" helloPojo.hello(\"Bob\")=" +
helloPojo.hello("Bob"));
+ out.println();
+ out.println(" helloPojo.hello(null)=" + helloPojo.hello(null));
+ out.println();
+ out.println("EJB Webservice");
+ out.println(" helloEjb.hello(\"Bob\")=" +
helloEjb.hello("Bob"));
+ out.println();
+ out.println(" helloEjb.hello(null)=" + helloEjb.hello(null));
+ out.println();
+ } finally {
+ OUT = out;
+ }
+ }
+
+ private static ServletOutputStream OUT;
+
+ public static void write(String message) {
+ try {
+ ServletOutputStream out = OUT;
+ out.println(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
+----
+
+
+
+== persistence.xml
+
+
+[source,xml]
+----
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+ <persistence-unit transaction-type="RESOURCE_LOCAL" name="jpa-example">
+ <jta-data-source>java:openejb/Connector/Default JDBC
Database</jta-data-source>
+ <non-jta-data-source>java:openejb/Connector/Default Unmanaged JDBC
Database</non-jta-data-source>
+ <class>org.superbiz.servlet.JpaBean</class>
+
+ <properties>
+ <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
+ </properties>
+ </persistence-unit>
+</persistence>
+----
+
+
+== client-handlers.xml
+
+
+[source,xml]
+----
+<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">
+ <jws:handler-chain>
+ <jws:handler>
+ <jws:handler-name>ClientHandler</jws:handler-name>
+ <jws:handler-class>org.superbiz.servlet.ClientHandler</jws:handler-class>
+ </jws:handler>
+ </jws:handler-chain>
+</jws:handler-chains>
+----
+
+
+
+== server-handlers.xml
+
+
+[source,xml]
+----
+<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">
+ <jws:handler-chain>
+ <jws:handler>
+ <jws:handler-name>ServerHandler</jws:handler-name>
+ <jws:handler-class>org.superbiz.servlet.ServerHandler</jws:handler-class>
+ </jws:handler>
+ </jws:handler-chain>
+</jws:handler-chains>
+----
+
+
+
+== context.xml
+
+
+[source,xml]
+----
+<Context>
+ <!-- This only works if the context is installed under the correct name -->
+ <Realm className="org.apache.catalina.realm.MemoryRealm"
+
pathname="webapps/ejb-examples-1.0-SNAPSHOT/WEB-INF/tomcat-users.xml"/>
+
+ <Environment
+ name="context.xml/environment"
+ value="ContextString"
+ type="java.lang.String"/>
+ <Resource
+ name="context.xml/resource"
+ auth="Container"
+ type="org.superbiz.servlet.ResourceBean"
+ factory="org.apache.naming.factory.BeanFactory"
+ value="ContextResource"/>
+ <ResourceLink
+ name="context.xml/resource-link"
+ global="server.xml/environment"
+ type="java.lang.String"/>
+
+ <!-- web.xml resources -->
+ <Resource
+ name="web.xml/resource-env-ref"
+ auth="Container"
+ type="org.superbiz.servlet.ResourceBean"
+ factory="org.apache.naming.factory.BeanFactory"
+ value="ContextResourceEnvRef"/>
+ <Resource
+ name="web.xml/resource-ref"
+ auth="Container"
+ type="org.superbiz.servlet.ResourceBean"
+ factory="org.apache.naming.factory.BeanFactory"
+ value="ContextResourceRef"/>
+ <ResourceLink
+ name="web.xml/resource-link"
+ global="server.xml/environment"
+ type="java.lang.String"/>
+</Context>
+----
+
+
+
+== jetty-web.xml
+
+
+[source,xml]
+----
+<Configure class="org.eclipse.jetty.webapp.WebAppContext">
+ <Get name="securityHandler">
+ <Set name="loginService">
+ <New class="org.eclipse.jetty.security.HashLoginService">
+ <Set name="name">Test Realm</Set>
+ <Set name="config"><SystemProperty name="jetty.home"
default="."/>/etc/realm.properties
+ </Set>
+ </New>
+ </Set>
+ </Get>
+</Configure>
+----
+
+
+== tomcat-users.xml
+
+
+[source,xml]
+----
+<tomcat-users>
+ <user name="manager" password="manager" roles="manager,user"/>
+ <user name="user" password="user" roles="user"/>
+</tomcat-users>
+----
+
+
+
+== web.xml
+
+
+[source,xml]
+----
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ metadata-complete="false"
+ version="2.5">
+
+ <display-name>OpenEJB Servlet Examples</display-name>
+
+ <servlet>
+ <servlet-name>AnnotatedServlet</servlet-name>
+ <servlet-class>org.superbiz.servlet.AnnotatedServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>AnnotatedServlet</servlet-name>
+ <url-pattern>/annotated/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet>
+ <servlet-name>JpaServlet</servlet-name>
+ <servlet-class>org.superbiz.servlet.JpaServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>JpaServlet</servlet-name>
+ <url-pattern>/jpa/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet>
+ <servlet-name>JndiServlet</servlet-name>
+ <servlet-class>org.superbiz.servlet.JndiServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>JndiServlet</servlet-name>
+ <url-pattern>/jndi/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet>
+ <servlet-name>RunAsServlet</servlet-name>
+ <servlet-class>org.superbiz.servlet.RunAsServlet</servlet-class>
+ <run-as>
+ <role-name>fake</role-name>
+ </run-as>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>RunAsServlet</servlet-name>
+ <url-pattern>/runas/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet>
+ <servlet-name>SecureServlet</servlet-name>
+ <servlet-class>org.superbiz.servlet.SecureServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>SecureServlet</servlet-name>
+ <url-pattern>/secure/*</url-pattern>
+ </servlet-mapping>
+
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Secure Area</web-resource-name>
+ <url-pattern>/secure/*</url-pattern>
+ <url-pattern>/runas/*</url-pattern>
+ </web-resource-collection>
+ <auth-constraint>
+ <role-name>user</role-name>
+ </auth-constraint>
+ </security-constraint>
+
+ <servlet>
+ <servlet-name>WebserviceServlet</servlet-name>
+ <servlet-class>org.superbiz.servlet.WebserviceServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>WebserviceServlet</servlet-name>
+ <url-pattern>/webservice/*</url-pattern>
+ </servlet-mapping>
+
+
+ <servlet>
+ <servlet-name>HelloPojoService</servlet-name>
+ <servlet-class>org.superbiz.servlet.HelloPojoService</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>HelloPojoService</servlet-name>
+ <url-pattern>/hello</url-pattern>
+ </servlet-mapping>
+
+ <login-config>
+ <auth-method>BASIC</auth-method>
+ </login-config>
+
+ <security-role>
+ <role-name>manager</role-name>
+ </security-role>
+
+ <security-role>
+ <role-name>user</role-name>
+ </security-role>
+
+ <env-entry>
+ <env-entry-name>web.xml/env-entry</env-entry-name>
+ <env-entry-type>java.lang.String</env-entry-type>
+ <env-entry-value>WebValue</env-entry-value>
+ </env-entry>
+
+ <resource-ref>
+ <res-ref-name>web.xml/Data Source</res-ref-name>
+ <res-type>javax.sql.DataSource</res-type>
+ <res-auth>Container</res-auth>
+ </resource-ref>
+
+ <resource-env-ref>
+ <resource-env-ref-name>web.xml/Queue</resource-env-ref-name>
+ <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
+ </resource-env-ref>
+
+ <ejb-ref>
+ <ejb-ref-name>web.xml/EjbRemote</ejb-ref-name>
+ <ejb-ref-type>Session</ejb-ref-type>
+ <remote>org.superbiz.servlet.AnnotatedEJBRemote</remote>
+ </ejb-ref>
+
+ <ejb-local-ref>
+ <ejb-ref-name>web.xml/EjLocal</ejb-ref-name>
+ <ejb-ref-type>Session</ejb-ref-type>
+ <local>org.superbiz.servlet.AnnotatedEJBLocal</local>
+ </ejb-local-ref>
+
+ <persistence-unit-ref>
+
<persistence-unit-ref-name>web.xml/PersistenceUnit</persistence-unit-ref-name>
+ <persistence-unit-name>jpa-example</persistence-unit-name>
+ </persistence-unit-ref>
+
+ <persistence-context-ref>
+
<persistence-context-ref-name>web.xml/PersistenceContext</persistence-context-ref-name>
+ <persistence-unit-name>jpa-example</persistence-unit-name>
+ <persistence-context-type>Transactional</persistence-context-type>
+ </persistence-context-ref>
+</web-app>
+----
+
+
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-examples.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-webservice.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-webservice.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-webservice.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-webservice.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,52 @@
+= EJB Webservice
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example ejb-webservice can be browsed at
https://github.com/apache/tomee/tree/master/examples/ejb-webservice
+
+
+*Help us document this example! Click the blue pencil icon in the upper right
to edit this page.*
+
+== Calculator
+
+
+[source,java]
+----
+package org.superbiz.ws;
+
+import javax.ejb.Stateless;
+import javax.jws.WebService;
+
+@Stateless
+@WebService(portName = "CalculatorPort",
+ serviceName = "CalculatorWebService",
+ targetNamespace = "http://superbiz.org/wsdl")
+public class Calculator {
+ public int sum(int add1, int add2) {
+ return add1 + add2;
+ }
+
+ public int multiply(int mul1, int mul2) {
+ return mul1 * mul2;
+ }
+}
+----
+
+
+== web.xml
+
+
+[source,xml]
+----
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ metadata-complete="false"
+ version="2.5">
+
+</web-app>
+----
+
+
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/ejb-webservice.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-cdi.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-cdi.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-cdi.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-cdi.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,9 @@
+= groovy-cdi
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example groovy-cdi can be browsed at
https://github.com/apache/tomee/tree/master/examples/groovy-cdi
+
+No README.md yet, be the first to contribute one!
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-cdi.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-jpa.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-jpa.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-jpa.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-jpa.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,9 @@
+= groovy-jpa
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example groovy-jpa can be browsed at
https://github.com/apache/tomee/tree/master/examples/groovy-jpa
+
+No README.md yet, be the first to contribute one!
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-jpa.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-spock.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-spock.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-spock.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-spock.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,9 @@
+= groovy-spock
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example groovy-spock can be browsed at
https://github.com/apache/tomee/tree/master/examples/groovy-spock
+
+No README.md yet, be the first to contribute one!
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/groovy-spock.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/helloworld-weblogic.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/helloworld-weblogic.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/helloworld-weblogic.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/helloworld-weblogic.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,169 @@
+= Helloworld Weblogic
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example helloworld-weblogic can be browsed at
https://github.com/apache/tomee/tree/master/examples/helloworld-weblogic
+
+
+*Help us document this example! Click the blue pencil icon in the upper right
to edit this page.*
+
+== HelloBean
+
+
+[source,java]
+----
+package org.superbiz.hello;
+
+import javax.ejb.LocalHome;
+import javax.ejb.Stateless;
+
+/**
+ * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec
2007) $
+ */
+@Stateless
+@LocalHome(HelloEjbLocalHome.class)
+public class HelloBean {
+
+ public String sayHello() {
+ return "Hello, World!";
+ }
+}
+----
+
+
+== HelloEjbLocal
+
+
+[source,java]
+----
+package org.superbiz.hello;
+
+import javax.ejb.EJBLocalObject;
+
+/**
+ * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec
2007) $
+ */
+public interface HelloEjbLocal extends EJBLocalObject {
+
+ String sayHello();
+}
+----
+
+
+== HelloEjbLocalHome
+
+
+[source,java]
+----
+package org.superbiz.hello;
+
+import javax.ejb.CreateException;
+import javax.ejb.EJBLocalHome;
+
+/**
+ * @version $Revision: 1090810 $ $Date: 2011-04-10 07:49:26 -0700 (Sun, 10 Apr
2011) $
+ */
+public interface HelloEjbLocalHome extends EJBLocalHome {
+ HelloEjbLocal create() throws CreateException;
+}
+----
+
+
+== ejb-jar.xml
+
+
+[source,xml]
+----
+<ejb-jar/>
+----
+
+
+== weblogic-ejb-jar.xml
+
+
+[source,xml]
+----
+<weblogic-ejb-jar>
+ <weblogic-enterprise-bean>
+ <ejb-name>HelloBean</ejb-name>
+ <local-jndi-name>MyHello</local-jndi-name>
+ </weblogic-enterprise-bean>
+</weblogic-ejb-jar>
+----
+
+
+
+
+== HelloTest
+
+
+[source,java]
+----
+package org.superbiz.hello;
+
+import junit.framework.TestCase;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.Properties;
+
+/**
+ * @version $Revision: 1090810 $ $Date: 2011-04-10 07:49:26 -0700 (Sun, 10 Apr
2011) $
+ */
+public class HelloTest extends TestCase {
+
+ public void test() throws Exception {
+ Properties properties = new Properties();
+ properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.core.LocalInitialContextFactory");
+ InitialContext initialContext = new InitialContext(properties);
+
+ HelloEjbLocalHome localHome = (HelloEjbLocalHome)
initialContext.lookup("MyHello");
+ HelloEjbLocal helloEjb = localHome.create();
+
+ String message = helloEjb.sayHello();
+
+ assertEquals(message, "Hello, World!");
+ }
+}
+----
+
+
+= Running
+
+
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.hello.HelloTest
+Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/helloworld-weblogic
+INFO - openejb.base = /Users/dblevins/examples/helloworld-weblogic
+INFO - Configuring Service(id=Default Security Service, type=SecurityService,
provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager,
type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Found EjbModule in classpath:
/Users/dblevins/examples/helloworld-weblogic/target/classes
+INFO - Beginning load:
/Users/dblevins/examples/helloworld-weblogic/target/classes
+INFO - Configuring enterprise application:
/Users/dblevins/examples/helloworld-weblogic/classpath.ear
+INFO - Configuring Service(id=Default Stateless Container, type=Container,
provider-id=Default Stateless Container)
+INFO - Auto-creating a container for bean HelloBean: Container(type=STATELESS,
id=Default Stateless Container)
+INFO - Enterprise application
"/Users/dblevins/examples/helloworld-weblogic/classpath.ear" loaded.
+INFO - Assembling app:
/Users/dblevins/examples/helloworld-weblogic/classpath.ear
+INFO - Jndi(name=MyHello) --> Ejb(deployment-id=HelloBean)
+INFO -
Jndi(name=global/classpath.ear/helloworld-weblogic/HelloBean!org.superbiz.hello.HelloEjbLocalHome)
--> Ejb(deployment-id=HelloBean)
+INFO - Jndi(name=global/classpath.ear/helloworld-weblogic/HelloBean) -->
Ejb(deployment-id=HelloBean)
+INFO - Created Ejb(deployment-id=HelloBean, ejb-name=HelloBean,
container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=HelloBean, ejb-name=HelloBean,
container=Default Stateless Container)
+INFO - Deployed
Application(path=/Users/dblevins/examples/helloworld-weblogic/classpath.ear)
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.414 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+----
+
+
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/helloworld-weblogic.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/index.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/index.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/index.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/index.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,5 @@
+= Examples
+:jbake-date: 2016-08-30
+:jbake-type: examples
+:jbake-status: published
+:jbake-tomeepdf:
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/index.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-connectionfactory.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-connectionfactory.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-connectionfactory.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-connectionfactory.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,180 @@
+= Injection Of Connectionfactory
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example injection-of-connectionfactory can be browsed at
https://github.com/apache/tomee/tree/master/examples/injection-of-connectionfactory
+
+
+*Help us document this example! Click the blue pencil icon in the upper right
to edit this page.*
+
+== Messages
+
+
+[source,java]
+----
+package org.superbiz.injection.jms;
+
+import javax.annotation.Resource;
+import javax.ejb.Stateless;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.JMSException;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+@Stateless
+public class Messages {
+
+ @Resource
+ private ConnectionFactory connectionFactory;
+
+ @Resource
+ private Queue chatQueue;
+
+
+ public void sendMessage(String text) throws JMSException {
+
+ Connection connection = null;
+ Session session = null;
+
+ try {
+ connection = connectionFactory.createConnection();
+ connection.start();
+
+ // Create a Session
+ session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
+
+ // Create a MessageProducer from the Session to the Topic or Queue
+ MessageProducer producer = session.createProducer(chatQueue);
+ producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+
+ // Create a message
+ TextMessage message = session.createTextMessage(text);
+
+ // Tell the producer to send the message
+ producer.send(message);
+ } finally {
+ // Clean up
+ if (session != null) session.close();
+ if (connection != null) connection.close();
+ }
+ }
+
+ public String receiveMessage() throws JMSException {
+
+ Connection connection = null;
+ Session session = null;
+ MessageConsumer consumer = null;
+ try {
+ connection = connectionFactory.createConnection();
+ connection.start();
+
+ // Create a Session
+ session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
+
+ // Create a MessageConsumer from the Session to the Topic or Queue
+ consumer = session.createConsumer(chatQueue);
+
+ // Wait for a message
+ TextMessage message = (TextMessage) consumer.receive(1000);
+
+ return message.getText();
+ } finally {
+ if (consumer != null) consumer.close();
+ if (session != null) session.close();
+ if (connection != null) connection.close();
+ }
+ }
+}
+----
+
+
+== MessagingBeanTest
+
+
+[source,java]
+----
+package org.superbiz.injection.jms;
+
+import junit.framework.TestCase;
+
+import javax.ejb.embeddable.EJBContainer;
+import javax.naming.Context;
+
+public class MessagingBeanTest extends TestCase {
+
+ public void test() throws Exception {
+
+ final Context context = EJBContainer.createEJBContainer().getContext();
+
+ Messages messages = (Messages)
context.lookup("java:global/injection-of-connectionfactory/Messages");
+
+ messages.sendMessage("Hello World!");
+ messages.sendMessage("How are you?");
+ messages.sendMessage("Still spinning?");
+
+ assertEquals(messages.receiveMessage(), "Hello World!");
+ assertEquals(messages.receiveMessage(), "How are you?");
+ assertEquals(messages.receiveMessage(), "Still spinning?");
+ }
+}
+----
+
+
+= Running
+
+
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.injection.jms.MessagingBeanTest
+Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/injection-of-connectionfactory
+INFO - openejb.base = /Users/dblevins/examples/injection-of-connectionfactory
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService,
provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager,
type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Found EjbModule in classpath:
/Users/dblevins/examples/injection-of-connectionfactory/target/classes
+INFO - Beginning load:
/Users/dblevins/examples/injection-of-connectionfactory/target/classes
+INFO - Configuring enterprise application:
/Users/dblevins/examples/injection-of-connectionfactory
+WARN - Method 'lookup' is not available for 'javax.annotation.Resource'.
Probably using an older Runtime.
+INFO - Configuring Service(id=Default Stateless Container, type=Container,
provider-id=Default Stateless Container)
+INFO - Auto-creating a container for bean Messages: Container(type=STATELESS,
id=Default Stateless Container)
+INFO - Configuring Service(id=Default JMS Connection Factory, type=Resource,
provider-id=Default JMS Connection Factory)
+INFO - Auto-creating a Resource with id 'Default JMS Connection Factory' of
type 'javax.jms.ConnectionFactory for 'Messages'.
+INFO - Configuring Service(id=Default JMS Resource Adapter, type=Resource,
provider-id=Default JMS Resource Adapter)
+INFO - Auto-linking resource-ref
'java:comp/env/org.superbiz.injection.jms.Messages/connectionFactory' in bean
Messages to Resource(id=Default JMS Connection Factory)
+INFO - Configuring Service(id=org.superbiz.injection.jms.Messages/chatQueue,
type=Resource, provider-id=Default Queue)
+INFO - Auto-creating a Resource with id
'org.superbiz.injection.jms.Messages/chatQueue' of type 'javax.jms.Queue for
'Messages'.
+INFO - Auto-linking resource-env-ref
'java:comp/env/org.superbiz.injection.jms.Messages/chatQueue' in bean Messages
to Resource(id=org.superbiz.injection.jms.Messages/chatQueue)
+INFO - Configuring Service(id=Default Managed Container, type=Container,
provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean
org.superbiz.injection.jms.MessagingBeanTest: Container(type=MANAGED,
id=Default Managed Container)
+INFO - Enterprise application
"/Users/dblevins/examples/injection-of-connectionfactory" loaded.
+INFO - Assembling app: /Users/dblevins/examples/injection-of-connectionfactory
+INFO -
Jndi(name="java:global/injection-of-connectionfactory/Messages!org.superbiz.injection.jms.Messages")
+INFO - Jndi(name="java:global/injection-of-connectionfactory/Messages")
+INFO -
Jndi(name="java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest!org.superbiz.injection.jms.MessagingBeanTest")
+INFO -
Jndi(name="java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest")
+INFO - Created Ejb(deployment-id=Messages, ejb-name=Messages,
container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest,
ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default
Managed Container)
+INFO - Started Ejb(deployment-id=Messages, ejb-name=Messages,
container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest,
ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default
Managed Container)
+INFO - Deployed
Application(path=/Users/dblevins/examples/injection-of-connectionfactory)
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.562 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+----
+
+
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-connectionfactory.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-datasource.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-datasource.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-datasource.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-datasource.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,248 @@
+= Injection Of Datasource
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example injection-of-datasource can be browsed at
https://github.com/apache/tomee/tree/master/examples/injection-of-datasource
+
+
+*Help us document this example! Click the blue pencil icon in the upper right
to edit this page.*
+
+== Movie
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+/**
+ * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec
2007) $
+ */
+public class Movie {
+ private String director;
+ private String title;
+ private int year;
+
+ public Movie() {
+ }
+
+ public Movie(String director, String title, int year) {
+ this.director = director;
+ this.title = title;
+ this.year = year;
+ }
+
+ public String getDirector() {
+ return director;
+ }
+
+ public void setDirector(String director) {
+ this.director = director;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+
+}
+----
+
+
+== Movies
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.ejb.Stateful;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+
+@Stateful
+public class Movies {
+
+ /**
+ * The field name "movieDatabase" matches the DataSource we
+ * configure in the TestCase via :
+ * p.put("movieDatabase", "new://Resource?type=DataSource");
+ * <p/>
+ * This would also match an equivalent delcaration in an openejb.xml:
+ * <Resource id="movieDatabase" type="DataSource"/>
+ * <p/>
+ * If you'd like the freedom to change the field name without
+ * impact on your configuration you can set the "name" attribute
+ * of the @Resource annotation to "movieDatabase" instead.
+ */
+ @Resource
+ private DataSource movieDatabase;
+
+ @PostConstruct
+ private void construct() throws Exception {
+ Connection connection = movieDatabase.getConnection();
+ try {
+ PreparedStatement stmt = connection.prepareStatement("CREATE TABLE
movie ( director VARCHAR(255), title VARCHAR(255), year integer)");
+ stmt.execute();
+ } finally {
+ connection.close();
+ }
+ }
+
+ public void addMovie(Movie movie) throws Exception {
+ Connection conn = movieDatabase.getConnection();
+ try {
+ PreparedStatement sql = conn.prepareStatement("INSERT into movie
(director, title, year) values (?, ?, ?)");
+ sql.setString(1, movie.getDirector());
+ sql.setString(2, movie.getTitle());
+ sql.setInt(3, movie.getYear());
+ sql.execute();
+ } finally {
+ conn.close();
+ }
+ }
+
+ public void deleteMovie(Movie movie) throws Exception {
+ Connection conn = movieDatabase.getConnection();
+ try {
+ PreparedStatement sql = conn.prepareStatement("DELETE from movie
where director = ? AND title = ? AND year = ?");
+ sql.setString(1, movie.getDirector());
+ sql.setString(2, movie.getTitle());
+ sql.setInt(3, movie.getYear());
+ sql.execute();
+ } finally {
+ conn.close();
+ }
+ }
+
+ public List<Movie> getMovies() throws Exception {
+ ArrayList<Movie> movies = new ArrayList<Movie>();
+ Connection conn = movieDatabase.getConnection();
+ try {
+ PreparedStatement sql = conn.prepareStatement("SELECT director,
title, year from movie");
+ ResultSet set = sql.executeQuery();
+ while (set.next()) {
+ Movie movie = new Movie();
+ movie.setDirector(set.getString("director"));
+ movie.setTitle(set.getString("title"));
+ movie.setYear(set.getInt("year"));
+ movies.add(movie);
+ }
+ } finally {
+ conn.close();
+ }
+ return movies;
+ }
+}
+----
+
+
+== MoviesTest
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+import junit.framework.TestCase;
+
+import javax.ejb.embeddable.EJBContainer;
+import javax.naming.Context;
+import java.util.List;
+import java.util.Properties;
+
+//START SNIPPET: code
+public class MoviesTest extends TestCase {
+
+ public void test() throws Exception {
+
+ Properties p = new Properties();
+ p.put("movieDatabase", "new://Resource?type=DataSource");
+ p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
+ p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
+
+ Context context = EJBContainer.createEJBContainer(p).getContext();
+
+ Movies movies = (Movies)
context.lookup("java:global/injection-of-datasource/Movies");
+
+ movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs",
1992));
+ movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
+ movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998));
+
+ List<Movie> list = movies.getMovies();
+ assertEquals("List.size()", 3, list.size());
+
+ for (Movie movie : list) {
+ movies.deleteMovie(movie);
+ }
+
+ assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
+ }
+}
+----
+
+
+= Running
+
+
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.injection.MoviesTest
+Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/injection-of-datasource
+INFO - openejb.base = /Users/dblevins/examples/injection-of-datasource
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService,
provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager,
type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Configuring Service(id=movieDatabase, type=Resource,
provider-id=Default JDBC Database)
+INFO - Found EjbModule in classpath:
/Users/dblevins/examples/injection-of-datasource/target/classes
+INFO - Beginning load:
/Users/dblevins/examples/injection-of-datasource/target/classes
+INFO - Configuring enterprise application:
/Users/dblevins/examples/injection-of-datasource
+WARN - Method 'lookup' is not available for 'javax.annotation.Resource'.
Probably using an older Runtime.
+INFO - Configuring Service(id=Default Stateful Container, type=Container,
provider-id=Default Stateful Container)
+INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL,
id=Default Stateful Container)
+INFO - Auto-linking resource-ref
'java:comp/env/org.superbiz.injection.Movies/movieDatabase' in bean Movies to
Resource(id=movieDatabase)
+INFO - Configuring Service(id=Default Managed Container, type=Container,
provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean org.superbiz.injection.MoviesTest:
Container(type=MANAGED, id=Default Managed Container)
+INFO - Enterprise application
"/Users/dblevins/examples/injection-of-datasource" loaded.
+INFO - Assembling app: /Users/dblevins/examples/injection-of-datasource
+INFO -
Jndi(name="java:global/injection-of-datasource/Movies!org.superbiz.injection.Movies")
+INFO - Jndi(name="java:global/injection-of-datasource/Movies")
+INFO -
Jndi(name="java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest!org.superbiz.injection.MoviesTest")
+INFO -
Jndi(name="java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest")
+INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default
Stateful Container)
+INFO - Created Ejb(deployment-id=org.superbiz.injection.MoviesTest,
ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)
+INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default
Stateful Container)
+INFO - Started Ejb(deployment-id=org.superbiz.injection.MoviesTest,
ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)
+INFO - Deployed
Application(path=/Users/dblevins/examples/injection-of-datasource)
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.276 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+----
+
+
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-datasource.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-ejbs.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-ejbs.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-ejbs.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-ejbs.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,234 @@
+= Injection Of Ejbs
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example injection-of-ejbs can be browsed at
https://github.com/apache/tomee/tree/master/examples/injection-of-ejbs
+
+
+This example shows how to use the @EJB annotation on a bean class to refer to
other beans.
+
+This functionality is often referred as dependency injection (see
+http://www.martinfowler.com/articles/injection.html), and has been recently
introduced in
+Java EE 5.
+
+In this particular example, we will create two session stateless beans
+
+ * a DataStore session bean
+ * a DataReader session bean
+
+The DataReader bean uses the DataStore to retrieve some informations, and
+we will see how we can, inside the DataReader bean, get a reference to the
+DataStore bean using the @EJB annotation, thus avoiding the use of the
+JNDI API.
+
+== DataReader
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+
+/**
+ * This is an EJB 3.1 style pojo stateless session bean
+ * Every stateless session bean implementation must be annotated
+ * using the annotation @Stateless
+ * This EJB has 2 business interfaces: DataReaderRemote, a remote business
+ * interface, and DataReaderLocal, a local business interface
+ * <p/>
+ * The instance variables 'dataStoreRemote' is annotated with the @EJB
annotation:
+ * this means that the application server, at runtime, will inject in this
instance
+ * variable a reference to the EJB DataStoreRemote
+ * <p/>
+ * The instance variables 'dataStoreLocal' is annotated with the @EJB
annotation:
+ * this means that the application server, at runtime, will inject in this
instance
+ * variable a reference to the EJB DataStoreLocal
+ */
+//START SNIPPET: code
+@Stateless
+public class DataReader {
+
+ @EJB
+ private DataStoreRemote dataStoreRemote;
+ @EJB
+ private DataStoreLocal dataStoreLocal;
+ @EJB
+ private DataStore dataStore;
+
+ public String readDataFromLocalStore() {
+ return "LOCAL:" + dataStoreLocal.getData();
+ }
+
+ public String readDataFromLocalBeanStore() {
+ return "LOCALBEAN:" + dataStore.getData();
+ }
+
+ public String readDataFromRemoteStore() {
+ return "REMOTE:" + dataStoreRemote.getData();
+ }
+}
+----
+
+
+== DataStore
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+import javax.ejb.LocalBean;
+import javax.ejb.Stateless;
+
+/**
+ * This is an EJB 3 style pojo stateless session bean
+ * Every stateless session bean implementation must be annotated
+ * using the annotation @Stateless
+ * This EJB has 2 business interfaces: DataStoreRemote, a remote business
+ * interface, and DataStoreLocal, a local business interface
+ */
+//START SNIPPET: code
+@Stateless
+@LocalBean
+public class DataStore implements DataStoreLocal, DataStoreRemote {
+
+ public String getData() {
+ return "42";
+ }
+}
+----
+
+
+== DataStoreLocal
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+import javax.ejb.Local;
+
+/**
+ * This is an EJB 3 local business interface
+ * A local business interface may be annotated with the @Local
+ * annotation, but it's optional. A business interface which is
+ * not annotated with @Local or @Remote is assumed to be Local
+ */
+//START SNIPPET: code
+@Local
+public interface DataStoreLocal {
+
+ public String getData();
+}
+----
+
+
+== DataStoreRemote
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+import javax.ejb.Remote;
+
+/**
+ * This is an EJB 3 remote business interface
+ * A remote business interface must be annotated with the @Remote
+ * annotation
+ */
+//START SNIPPET: code
+@Remote
+public interface DataStoreRemote {
+
+ public String getData();
+}
+----
+
+
+== EjbDependencyTest
+
+
+[source,java]
+----
+package org.superbiz.injection;
+
+import junit.framework.TestCase;
+
+import javax.ejb.embeddable.EJBContainer;
+import javax.naming.Context;
+
+/**
+ * A test case for DataReaderImpl ejb, testing both the remote and local
interface
+ */
+//START SNIPPET: code
+public class EjbDependencyTest extends TestCase {
+
+ public void test() throws Exception {
+ final Context context = EJBContainer.createEJBContainer().getContext();
+
+ DataReader dataReader = (DataReader)
context.lookup("java:global/injection-of-ejbs/DataReader");
+
+ assertNotNull(dataReader);
+
+ assertEquals("LOCAL:42", dataReader.readDataFromLocalStore());
+ assertEquals("REMOTE:42", dataReader.readDataFromRemoteStore());
+ assertEquals("LOCALBEAN:42", dataReader.readDataFromLocalBeanStore());
+ }
+}
+----
+
+
+= Running
+
+
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.injection.EjbDependencyTest
+Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/injection-of-ejbs
+INFO - openejb.base = /Users/dblevins/examples/injection-of-ejbs
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService,
provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager,
type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Found EjbModule in classpath:
/Users/dblevins/examples/injection-of-ejbs/target/classes
+INFO - Beginning load:
/Users/dblevins/examples/injection-of-ejbs/target/classes
+INFO - Configuring enterprise application:
/Users/dblevins/examples/injection-of-ejbs
+INFO - Configuring Service(id=Default Stateless Container, type=Container,
provider-id=Default Stateless Container)
+INFO - Auto-creating a container for bean DataReader:
Container(type=STATELESS, id=Default Stateless Container)
+INFO - Configuring Service(id=Default Managed Container, type=Container,
provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean
org.superbiz.injection.EjbDependencyTest: Container(type=MANAGED, id=Default
Managed Container)
+INFO - Enterprise application "/Users/dblevins/examples/injection-of-ejbs"
loaded.
+INFO - Assembling app: /Users/dblevins/examples/injection-of-ejbs
+INFO -
Jndi(name="java:global/injection-of-ejbs/DataReader!org.superbiz.injection.DataReader")
+INFO - Jndi(name="java:global/injection-of-ejbs/DataReader")
+INFO -
Jndi(name="java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStore")
+INFO -
Jndi(name="java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreLocal")
+INFO -
Jndi(name="java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreRemote")
+INFO - Jndi(name="java:global/injection-of-ejbs/DataStore")
+INFO -
Jndi(name="java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest!org.superbiz.injection.EjbDependencyTest")
+INFO -
Jndi(name="java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest")
+INFO - Created Ejb(deployment-id=DataReader, ejb-name=DataReader,
container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=DataStore, ejb-name=DataStore,
container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest,
ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed
Container)
+INFO - Started Ejb(deployment-id=DataReader, ejb-name=DataReader,
container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=DataStore, ejb-name=DataStore,
container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest,
ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed
Container)
+INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-ejbs)
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.225 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+----
+
+
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-ejbs.adoc
------------------------------------------------------------------------------
svn:executable = *
Added:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-entitymanager.adoc
URL:
http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-entitymanager.adoc?rev=1772522&view=auto
==============================================================================
---
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-entitymanager.adoc
(added)
+++
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-entitymanager.adoc
Sun Dec 4 11:01:40 2016
@@ -0,0 +1,249 @@
+= Injection Of Entitymanager
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example injection-of-entitymanager can be browsed at
https://github.com/apache/tomee/tree/master/examples/injection-of-entitymanager
+
+
+This example shows use of `@PersistenceContext` to have an `EntityManager`
with an
+`EXTENDED` persistence context injected into a `@Stateful bean`. A JPA
+`@Entity` bean is used with the `EntityManager` to create, persist and merge
+data to a database.
+
+== Creating the JPA Entity
+
+The entity itself is simply a pojo annotated with `@Entity`. We create one
called `Movie` which we can use to hold movie records.
+
+
+[source,java]
+----
+package org.superbiz.injection.jpa;
+
+import javax.persistence.Entity;
+
+@Entity
+public class Movie {
+
+ @Id @GeneratedValue
+ private long id;
+
+ private String director;
+ private String title;
+ private int year;
+
+ public Movie() {
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Movie(String director, String title, int year) {
+ this.director = director;
+ this.title = title;
+ this.year = year;
+ }
+
+ public String getDirector() {
+ return director;
+ }
+
+ public void setDirector(String director) {
+ this.director = director;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+}
+----
+
+
+== Configure the EntityManager via a persistence.xml file
+
+The above `Movie` entity can be created, removed, updated or deleted via an
`EntityManager` object. The `EntityManager` itself is
+configured via a `META-INF/persistence.xml` file that is placed in the same
jar as the `Movie` entity.
+
+
+[source,xml]
+----
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+
+ <persistence-unit name="movie-unit">
+ <jta-data-source>movieDatabase</jta-data-source>
+ <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>
+ <class>org.superbiz.injection.jpa.Movie</class>
+
+ <properties>
+ <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
+ </properties>
+ </persistence-unit>
+</persistence>
+----
+
+
+Notice that the `Movie` entity is listed via a `<class>` element. This is not
required, but can help when testing or when the
+`Movie` class is located in a different jar than the jar containing the
`persistence.xml` file.
+
+== Injection via @PersistenceContext
+
+The `EntityManager` itself is created by the container using the information
in the `persistence.xml`, so to use it at
+runtime, we simply need to request it be injected into one of our components.
We do this via `@PersistenceContext`
+
+The `@PersistenceContext` annotation can be used on any CDI bean, EJB,
Servlet, Servlet Listener, Servlet Filter, or JSF ManagedBean. If you don't
use an EJB you will need to use a `UserTransaction` begin and commit
transactions manually. A transaction is required for any of the create, update
or delete methods of the EntityManager to work.
+
+
+[source,java]
+----
+package org.superbiz.injection.jpa;
+
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceContextType;
+import javax.persistence.Query;
+import java.util.List;
+
+@Stateful
+public class Movies {
+
+ @PersistenceContext(unitName = "movie-unit", type =
PersistenceContextType.EXTENDED)
+ private EntityManager entityManager;
+
+ public void addMovie(Movie movie) throws Exception {
+ entityManager.persist(movie);
+ }
+
+ public void deleteMovie(Movie movie) throws Exception {
+ entityManager.remove(movie);
+ }
+
+ public List<Movie> getMovies() throws Exception {
+ Query query = entityManager.createQuery("SELECT m from Movie as m");
+ return query.getResultList();
+ }
+}
+----
+
+
+This particular `EntityManager` is injected as an `EXTENDED` persistence
context, which simply means that the `EntityManager`
+is created when the `@Stateful` bean is created and destroyed when the
`@Stateful` bean is destroyed. Simply put, the
+data in the `EntityManager` is cached for the lifetime of the `@Stateful` bean.
+
+The use of `EXTENDED` persistence contexts is **only** available to
`@Stateful` beans. See the link:../../jpa-concepts.html[JPA Concepts] page for
an high level explanation of what a "persistence context" really is and how it
is significant to JPA.
+
+== MoviesTest
+
+Testing JPA is quite easy, we can simply use the `EJBContainer` API to create
a container in our test case.
+
+
+[source,java]
+----
+package org.superbiz.injection.jpa;
+
+import junit.framework.TestCase;
+
+import javax.ejb.embeddable.EJBContainer;
+import javax.naming.Context;
+import java.util.List;
+import java.util.Properties;
+
+//START SNIPPET: code
+public class MoviesTest extends TestCase {
+
+ public void test() throws Exception {
+
+ final Properties p = new Properties();
+ p.put("movieDatabase", "new://Resource?type=DataSource");
+ p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
+ p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
+
+ final Context context =
EJBContainer.createEJBContainer(p).getContext();
+
+ Movies movies = (Movies)
context.lookup("java:global/injection-of-entitymanager/Movies");
+
+ movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs",
1992));
+ movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
+ movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998));
+
+ List<Movie> list = movies.getMovies();
+ assertEquals("List.size()", 3, list.size());
+
+ for (Movie movie : list) {
+ movies.deleteMovie(movie);
+ }
+
+ assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
+ }
+}
+----
+
+
+= Running
+
+When we run our test case we should see output similar to the following.
+
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.injection.jpa.MoviesTest
+Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/injection-of-entitymanager
+INFO - openejb.base = /Users/dblevins/examples/injection-of-entitymanager
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService,
provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager,
type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Configuring Service(id=movieDatabase, type=Resource,
provider-id=Default JDBC Database)
+INFO - Found EjbModule in classpath:
/Users/dblevins/examples/injection-of-entitymanager/target/classes
+INFO - Beginning load:
/Users/dblevins/examples/injection-of-entitymanager/target/classes
+INFO - Configuring enterprise application:
/Users/dblevins/examples/injection-of-entitymanager
+INFO - Configuring Service(id=Default Stateful Container, type=Container,
provider-id=Default Stateful Container)
+INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL,
id=Default Stateful Container)
+INFO - Configuring Service(id=Default Managed Container, type=Container,
provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean
org.superbiz.injection.jpa.MoviesTest: Container(type=MANAGED, id=Default
Managed Container)
+INFO - Configuring PersistenceUnit(name=movie-unit)
+INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type
'DataSource for 'movie-unit'.
+INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource,
provider-id=movieDatabase)
+INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource
ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'
+INFO - Enterprise application
"/Users/dblevins/examples/injection-of-entitymanager" loaded.
+INFO - Assembling app: /Users/dblevins/examples/injection-of-entitymanager
+INFO - PersistenceUnit(name=movie-unit,
provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider
time 462ms
+INFO -
Jndi(name="java:global/injection-of-entitymanager/Movies!org.superbiz.injection.jpa.Movies")
+INFO - Jndi(name="java:global/injection-of-entitymanager/Movies")
+INFO -
Jndi(name="java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest!org.superbiz.injection.jpa.MoviesTest")
+INFO -
Jndi(name="java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest")
+INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default
Stateful Container)
+INFO - Created Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest,
ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed
Container)
+INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default
Stateful Container)
+INFO - Started Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest,
ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed
Container)
+INFO - Deployed
Application(path=/Users/dblevins/examples/injection-of-entitymanager)
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.301 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+----
+
+
Propchange:
tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/injection-of-entitymanager.adoc
------------------------------------------------------------------------------
svn:executable = *