はじめに †
- EJB OSGi バンドルを作る
- Session Bean を OSGi バンドルとして配備できる
- OSGi な Session Bean を呼び出すには JNDI 名で lookup する必要がある
- このメモの内容
- OSGi な Session Bean の JNDI 名 はどう決まるのか?
- OSGi な Session Bean の JNDI 名 はどう設定するのか?
OSGi な Session Bean の JNDI 名 はどう決まるのか? †
- OSGi な SessionBean? につけられる JNDI名 は次のように決まる
java:global/com.foo.SomeEjbBundle_1.0.0/BarEjb
- "com.foo.SomeEjbBundle_1.0.0" は、OSGi Bundle の MANIFEST.MF からとられたもの
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: 1.8.0_25 (Oracle Corporation)
Built-By: atsushi
Build-Jdk: 1.8.0_25
Export-EJB: ALL
Bundle-SymbolicName: com.foo.SomeEjbBundle
Bundle-ManifestVersion: 2
...
Bundle-Version: 1.0.0
...
Bundle-SymbolicName?は、maven-bundle-plugin が pom.xml の groupid、artifactId、version から作った
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.foo</groupId>
<artifactId>SomeEjbBundle</artifactId>
<version>1.0.0</version>
...
</project>
- "BarEjb?" はクラス名
OSGi な Session Bean の JNDI 名 はどう設定するのか? †
Interface †
@Local
public interface Hello {
String JNDI_NAME = "java:global/ejb/com.foo.snail.api.Hello/v1.0";
String sayHello(String name);
}
SessionBean? †
@Stateless
@EJB(name = Hello.JNDI_NAME, beanInterface = Hello.class)
public class HelloEjb implements Hello {
@Override
public String sayHello(final String name) {
return "Hello " + name;
}
}
EJB Client (Servlet) †
@WebServlet(name = "HelloServlet", urlPatterns = {"/hello"})
public class HelloServlet extends HttpServlet {
@EJB(lookup = Hello.JNDI_NAME)
private Hello hello;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello</title>");
out.println("</head>");
out.println("<body>");
out.println(hello.sayHello(req.getParameter("NAME")));
} catch (Exception ex) {
out.println("<pre>");
ex.printStackTrace(out);
out.println("</pre>");
} finally {
out.println("</body>");
out.println("</html>");
out.close();
}
}
}
Java#Glassfish