| :index-group: Misc |
| :jbake-type: page |
| :jbake-status: status=published |
| = 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_2.2_spec-1.0.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> |
| ---- |