blob: 73dd6f59e3642fb4414cc6674bc9d62f86bb9afc [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Apache TomEE</title>
<meta name="description"
content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
<meta name="author" content="Luka Cvetinovic for Codrops" />
<link rel="icon" href="../../favicon.ico">
<link rel="icon" type="image/png" href="../../favicon.png">
<meta name="msapplication-TileColor" content="#80287a">
<meta name="theme-color" content="#80287a">
<link rel="stylesheet" type="text/css" href="../../css/normalize.css">
<link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="../../css/owl.css">
<link rel="stylesheet" type="text/css" href="../../css/animate.css">
<link rel="stylesheet" type="text/css" href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="../../fonts/eleganticons/et-icons.css">
<link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
<link rel="stylesheet" type="text/css" href="../../css/idea.css">
<link rel="stylesheet" type="text/css" href="../../css/cardio.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2717626-1']);
_gaq.push(['_setDomainName', 'apache.org']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div class="preloader">
<img src="../../img/loader.gif" alt="Preloader image">
</div>
<nav class="navbar">
<div class="container">
<div class="row"> <div class="col-md-12">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">
<span>
<img src="../../img/logo-active.png">
</span>
Apache TomEE
</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right main-nav">
<li><a href="../../docs.html">Documentation</a></li>
<li><a href="../../community/index.html">Community</a></li>
<li><a href="../../security/security.html">Security</a></li>
<li><a href="../../download-ng.html">Downloads</a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div></div>
</div>
<!-- /.container-fluid -->
</nav>
<div id="main-block" class="container main-block">
<div class="row title">
<div class="col-md-12">
<div class='page-header'>
<h1>EJB Examples</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p><em>Help us document this example! Click the blue pencil icon in the upper
right to edit this page.</em></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_annotatedejb">AnnotatedEJB</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.annotation.Resource;
import jakarta.ejb.LocalBean;
import jakarta.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 + "]";
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_annotatedejblocal">AnnotatedEJBLocal</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.ejb.Local;
import javax.sql.DataSource;
@Local
public interface AnnotatedEJBLocal {
String getName();
void setName(String name);
DataSource getDs();
void setDs(DataSource ds);
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_annotatedejbremote">AnnotatedEJBRemote</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.ejb.Remote;
@Remote
public interface AnnotatedEJBRemote {
String getName();
void setName(String name);
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_annotatedservlet">AnnotatedServlet</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.annotation.Resource;
import jakarta.ejb.EJB;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.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;
}
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_clienthandler">ClientHandler</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.xml.ws.handler.Handler;
import jakarta.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;
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_helloejb">HelloEjb</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.jws.WebService;
@WebService(targetNamespace = "http://examples.org/wsdl")
public interface HelloEjb {
String hello(String name);
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_helloejbservice">HelloEjbService</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.ejb.Stateless;
import jakarta.jws.HandlerChain;
import jakarta.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!";
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_hellopojo">HelloPojo</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.jws.WebService;
@WebService(targetNamespace = "http://examples.org/wsdl")
public interface HelloPojo {
String hello(String name);
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_hellopojoservice">HelloPojoService</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.jws.HandlerChain;
import jakarta.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!";
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_jndiservlet">JndiServlet</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingException;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.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&lt;String, Object&gt; bindings = new TreeMap&lt;String, Object&gt;(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&lt;String, Object&gt; entry : bindings.entrySet()) {
if (entry.getValue() != null) {
out.println(" " + entry.getKey() + "=" + entry.getValue());
} else {
out.println(" " + entry.getKey());
}
}
}
private void addBindings(String path, Map&lt;String, Object&gt; 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, "&lt;file&gt;");
} 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());
}
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_jpabean">JpaBean</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.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 + "]";
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_jpaservlet">JpaServlet</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.PersistenceUnit;
import jakarta.persistence.Query;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.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();
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_resourcebean">ResourceBean</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="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 + "]";
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_runasservlet">RunAsServlet</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.ejb.EJB;
import jakarta.ejb.EJBAccessException;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.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()=&lt;null&gt;");
}
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()=&lt;null&gt;");
}
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();
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_secureejb">SecureEJB</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.annotation.Resource;
import jakarta.annotation.security.DeclareRoles;
import jakarta.annotation.security.DenyAll;
import jakarta.annotation.security.RolesAllowed;
import jakarta.ejb.SessionContext;
import jakarta.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() + "]";
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_secureejblocal">SecureEJBLocal</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.ejb.Local;
import java.security.Principal;
@Local
public interface SecureEJBLocal {
Principal getCallerPrincipal();
boolean isCallerInRole(String role);
void allowUserMethod();
void allowManagerMethod();
void allowFakeMethod();
void denyAllMethod();
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_secureservlet">SecureServlet</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.ejb.EJB;
import jakarta.ejb.EJBAccessException;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.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()=&lt;null&gt;");
}
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()=&lt;null&gt;");
}
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();
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_serverhandler">ServerHandler</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.xml.ws.handler.Handler;
import jakarta.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;
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_webserviceclient">WebserviceClient</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.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:
* &lt;p/&gt;
* jaxb-api-2.0.jar
* jaxb-impl-2.0.3.jar
* &lt;p/&gt;
* saaj-api-1.3.jar
* saaj-impl-1.3.jar
* &lt;p/&gt;
* &lt;p/&gt;
* 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
* &lt;p/&gt;
* 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
* &lt;p/&gt;
* 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();
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_webserviceservlet">WebserviceServlet</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.servlet;
import jakarta.jws.HandlerChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.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();
}
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_persistence_xml">persistence.xml</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"&gt;
&lt;persistence-unit transaction-type="RESOURCE_LOCAL" name="jpa-example"&gt;
&lt;jta-data-source&gt;java:openejb/Connector/Default JDBC Database&lt;/jta-data-source&gt;
&lt;non-jta-data-source&gt;java:openejb/Connector/Default Unmanaged JDBC Database&lt;/non-jta-data-source&gt;
&lt;class&gt;org.superbiz.servlet.JpaBean&lt;/class&gt;
&lt;properties&gt;
&lt;property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/&gt;
&lt;/properties&gt;
&lt;/persistence-unit&gt;
&lt;/persistence&gt;</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_client_handlers_xml">client-handlers.xml</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee"&gt;
&lt;jws:handler-chain&gt;
&lt;jws:handler&gt;
&lt;jws:handler-name&gt;ClientHandler&lt;/jws:handler-name&gt;
&lt;jws:handler-class&gt;org.superbiz.servlet.ClientHandler&lt;/jws:handler-class&gt;
&lt;/jws:handler&gt;
&lt;/jws:handler-chain&gt;
&lt;/jws:handler-chains&gt;</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_server_handlers_xml">server-handlers.xml</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee"&gt;
&lt;jws:handler-chain&gt;
&lt;jws:handler&gt;
&lt;jws:handler-name&gt;ServerHandler&lt;/jws:handler-name&gt;
&lt;jws:handler-class&gt;org.superbiz.servlet.ServerHandler&lt;/jws:handler-class&gt;
&lt;/jws:handler&gt;
&lt;/jws:handler-chain&gt;
&lt;/jws:handler-chains&gt;</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_context_xml">context.xml</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Context&gt;
&lt;!-- This only works if the context is installed under the correct name --&gt;
&lt;Realm className="org.apache.catalina.realm.MemoryRealm"
pathname="webapps/ejb-examples-1.0-SNAPSHOT/WEB-INF/tomcat-users.xml"/&gt;
&lt;Environment
name="context.xml/environment"
value="ContextString"
type="java.lang.String"/&gt;
&lt;Resource
name="context.xml/resource"
auth="Container"
type="org.superbiz.servlet.ResourceBean"
factory="org.apache.naming.factory.BeanFactory"
value="ContextResource"/&gt;
&lt;ResourceLink
name="context.xml/resource-link"
global="server.xml/environment"
type="java.lang.String"/&gt;
&lt;!-- web.xml resources --&gt;
&lt;Resource
name="web.xml/resource-env-ref"
auth="Container"
type="org.superbiz.servlet.ResourceBean"
factory="org.apache.naming.factory.BeanFactory"
value="ContextResourceEnvRef"/&gt;
&lt;Resource
name="web.xml/resource-ref"
auth="Container"
type="org.superbiz.servlet.ResourceBean"
factory="org.apache.naming.factory.BeanFactory"
value="ContextResourceRef"/&gt;
&lt;ResourceLink
name="web.xml/resource-link"
global="server.xml/environment"
type="java.lang.String"/&gt;
&lt;/Context&gt;</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_jetty_web_xml">jetty-web.xml</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Configure class="org.eclipse.jetty.webapp.WebAppContext"&gt;
&lt;Get name="securityHandler"&gt;
&lt;Set name="loginService"&gt;
&lt;New class="org.eclipse.jetty.security.HashLoginService"&gt;
&lt;Set name="name"&gt;Test Realm&lt;/Set&gt;
&lt;Set name="config"&gt;&lt;SystemProperty name="jetty.home" default="."/&gt;/etc/realm.properties
&lt;/Set&gt;
&lt;/New&gt;
&lt;/Set&gt;
&lt;/Get&gt;
&lt;/Configure&gt;</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_tomcat_users_xml">tomcat-users.xml</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;tomcat-users&gt;
&lt;user name="manager" password="manager" roles="manager,user"/&gt;
&lt;user name="user" password="user" roles="user"/&gt;
&lt;/tomcat-users&gt;</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_web_xml">web.xml</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;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"&gt;
&lt;display-name&gt;OpenEJB Servlet Examples&lt;/display-name&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;AnnotatedServlet&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.superbiz.servlet.AnnotatedServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;AnnotatedServlet&lt;/servlet-name&gt;
&lt;url-pattern&gt;/annotated/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;JpaServlet&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.superbiz.servlet.JpaServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;JpaServlet&lt;/servlet-name&gt;
&lt;url-pattern&gt;/jpa/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;JndiServlet&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.superbiz.servlet.JndiServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;JndiServlet&lt;/servlet-name&gt;
&lt;url-pattern&gt;/jndi/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;RunAsServlet&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.superbiz.servlet.RunAsServlet&lt;/servlet-class&gt;
&lt;run-as&gt;
&lt;role-name&gt;fake&lt;/role-name&gt;
&lt;/run-as&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;RunAsServlet&lt;/servlet-name&gt;
&lt;url-pattern&gt;/runas/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;SecureServlet&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.superbiz.servlet.SecureServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;SecureServlet&lt;/servlet-name&gt;
&lt;url-pattern&gt;/secure/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;security-constraint&gt;
&lt;web-resource-collection&gt;
&lt;web-resource-name&gt;Secure Area&lt;/web-resource-name&gt;
&lt;url-pattern&gt;/secure/*&lt;/url-pattern&gt;
&lt;url-pattern&gt;/runas/*&lt;/url-pattern&gt;
&lt;/web-resource-collection&gt;
&lt;auth-constraint&gt;
&lt;role-name&gt;user&lt;/role-name&gt;
&lt;/auth-constraint&gt;
&lt;/security-constraint&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;WebserviceServlet&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.superbiz.servlet.WebserviceServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;WebserviceServlet&lt;/servlet-name&gt;
&lt;url-pattern&gt;/webservice/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;HelloPojoService&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.superbiz.servlet.HelloPojoService&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;HelloPojoService&lt;/servlet-name&gt;
&lt;url-pattern&gt;/hello&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;login-config&gt;
&lt;auth-method&gt;BASIC&lt;/auth-method&gt;
&lt;/login-config&gt;
&lt;security-role&gt;
&lt;role-name&gt;manager&lt;/role-name&gt;
&lt;/security-role&gt;
&lt;security-role&gt;
&lt;role-name&gt;user&lt;/role-name&gt;
&lt;/security-role&gt;
&lt;env-entry&gt;
&lt;env-entry-name&gt;web.xml/env-entry&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;java.lang.String&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;WebValue&lt;/env-entry-value&gt;
&lt;/env-entry&gt;
&lt;resource-ref&gt;
&lt;res-ref-name&gt;web.xml/Data Source&lt;/res-ref-name&gt;
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
&lt;res-auth&gt;Container&lt;/res-auth&gt;
&lt;/resource-ref&gt;
&lt;resource-env-ref&gt;
&lt;resource-env-ref-name&gt;web.xml/Queue&lt;/resource-env-ref-name&gt;
&lt;resource-env-ref-type&gt;jakarta.jms.Queue&lt;/resource-env-ref-type&gt;
&lt;/resource-env-ref&gt;
&lt;ejb-ref&gt;
&lt;ejb-ref-name&gt;web.xml/EjbRemote&lt;/ejb-ref-name&gt;
&lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt;
&lt;remote&gt;org.superbiz.servlet.AnnotatedEJBRemote&lt;/remote&gt;
&lt;/ejb-ref&gt;
&lt;ejb-local-ref&gt;
&lt;ejb-ref-name&gt;web.xml/EjLocal&lt;/ejb-ref-name&gt;
&lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt;
&lt;local&gt;org.superbiz.servlet.AnnotatedEJBLocal&lt;/local&gt;
&lt;/ejb-local-ref&gt;
&lt;persistence-unit-ref&gt;
&lt;persistence-unit-ref-name&gt;web.xml/PersistenceUnit&lt;/persistence-unit-ref-name&gt;
&lt;persistence-unit-name&gt;jpa-example&lt;/persistence-unit-name&gt;
&lt;/persistence-unit-ref&gt;
&lt;persistence-context-ref&gt;
&lt;persistence-context-ref-name&gt;web.xml/PersistenceContext&lt;/persistence-context-ref-name&gt;
&lt;persistence-unit-name&gt;jpa-example&lt;/persistence-unit-name&gt;
&lt;persistence-context-type&gt;Transactional&lt;/persistence-context-type&gt;
&lt;/persistence-context-ref&gt;
&lt;/web-app&gt;</code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-sm-6 text-center-mobile">
<h3 class="white">Be simple. Be certified. Be Tomcat.</h3>
<h5 class="light regular light-white">"A good application in a good server"</h5>
<ul class="social-footer">
<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
<li><a href="https://plus.google.com/communities/105208241852045684449"><i class="fa fa-google-plus"></i></a></li>
</ul>
</div>
<div class="col-sm-6 text-center-mobile">
<div class="row opening-hours">
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../latest/docs/" class="white">Documentation</a></h5>
<ul class="list-unstyled">
<li><a href="../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
<li><a href="../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
<li><a href="../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
<li><a href="../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../latest/examples/" class="white">Examples</a></h5>
<ul class="list-unstyled">
<li><a href="../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
<li><a href="../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
<li><a href="../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
<li><a href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../community/index.html" class="white">Community</a></h5>
<ul class="list-unstyled">
<li><a href="../../community/contributors.html" class="regular light-white">Contributors</a></li>
<li><a href="../../community/social.html" class="regular light-white">Social</a></li>
<li><a href="../../community/sources.html" class="regular light-white">Sources</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../security/index.html" class="white">Security</a></h5>
<ul class="list-unstyled">
<li><a href="http://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
<li><a href="http://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
<li><a href="http://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="row bottom-footer text-center-mobile">
<div class="col-sm-12 light-white">
<p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
</div>
</div>
</div>
</footer>
<!-- Holder for mobile navigation -->
<div class="mobile-nav">
<ul>
<li><a hef="../../latest/docs/admin/index.html">Administrators</a>
<li><a hef="../../latest/docs/developer/index.html">Developers</a>
<li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
<li><a hef="../../community/index.html">Community</a>
</ul>
<a href="#" class="close-link"><i class="arrow_up"></i></a>
</div>
<!-- Scripts -->
<script src="../../js/jquery-1.11.1.min.js"></script>
<script src="../../js/owl.carousel.min.js"></script>
<script src="../../js/bootstrap.min.js"></script>
<script src="../../js/wow.min.js"></script>
<script src="../../js/typewriter.js"></script>
<script src="../../js/jquery.onepagenav.js"></script>
<script src="../../js/tree.jquery.js"></script>
<script src="../../js/highlight.pack.js"></script>
<script src="../../js/main.js"></script>
</body>
</html>