= JBoss5 =
* JEE5 certified
* Java EE 5 (May 11, 2006) (Java Servlet 2.5, JSP 2.1, JSTL 1.2, JSF 1.2, EJB 3.0, JDBC 3.0)
* https://docs.oracle.com/javaee/5/tutorial/doc/javaeetutorial5.pdf
* https://docs.oracle.com/javaee/5/tutorial/doc/
* Web container
* EJB container
* Requires jdk-1_5_0_22-linux-amd64.bin from Oracle to run
* run.sh -c options :minimal default all standard web
{{attachment:jeeTiers.png}}
{{attachment:jeeContainers.png}}
== Locally on debian buster ==
{{{
cp jdk-1_5_0_22-linux-amd64.bin ~
cd ~
./jdk-1_5_0_22-linux-amd64.bin
unzip jboss-5.1.0.GA.zip
JAVA_HOME=jdk1.5.0_22/ jboss-5.1.0.GA/bin/run.sh -b 0.0.0.0
http://127.0.0.1:8080/
wget https://archive.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.zip
unzip apache-maven-3.1.1-bin.zip
JAVA_HOME=jdk1.5.0_22/ ~/apache-maven-3.1.1/bin/mvn -version
JAVA_HOME=~/jdk1.5.0_22/ ~/apache-maven-3.1.1/bin/mvn clean install
}}}
== Docker ==
Dockerfile
{{{
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server unzip openjdk-8-jdk net-tools maven vim
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
RUN useradd userx
RUN echo 'userx:userx' | chpasswd
EXPOSE 22 8080 8081 8009 8009
CMD ["/usr/sbin/sshd", "-D"]
}}}
{{{#!highlight bash
wget http://sourceforge.net/projects/jboss/files/JBoss/JBoss-5.1.0.GA/jboss-5.1.0.GA.zip
unzip jboss-5.1.0.GA.zip
nano Dockerfile
docker build -t docker_jboss5 .
mkdir target
docker run -d -p 8080:8080 --name jboss5_container --mount type=bind,source="$(pwd)"/target,target=/app docker_jboss5
#docker run -d -P --name jboss5_container --mount type=bind,source="$(pwd)"/target,target=/app docker_jboss5
mv ~/jboss-5.1.0.GA.zip target/
docker exec -it jboss5_container bash
cd /app
unzip jboss-5.1.0.GA.zip
./jdk-1_5_0_22-linux-amd64.bin
/app# jdk1.5.0_22/bin/java -version
#java version "1.5.0_22"
#Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
#Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)
#/app/jdk1.5.0_22/bin/java -jar run.jar
mvn -version
#Apache Maven 3.3.9
#Maven home: /usr/share/maven
#Java version: 1.8.0_252, vendor: Private Build
#Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
#Default locale: en_US, platform encoding: ANSI_X3.4-1968
#OS name: "linux", version: "4.19.0-6-amd64", arch: "amd64", family: "unix"
cd /app/jboss-5.1.0.GA/bin
JAVA_HOME=/app/jdk1.5.0_22 ./run.sh -c all -b 0.0.0.0
}}}
== Example EJB for jboss5 in docker container ==
{{attachment:ejbjarFiles.png}}
* docker exec -it jboss5_container bash
* cd /app/ejbjee5
* mvn clean compile package
* cp /app/ejbjee5/target/ejbjee5-0.0.1.jar /app/jboss-5.1.0.GA/server/default/deploy/
{{{
18:04:14,955 INFO [JBossASKernel] Created KernelDeployment for: ejbjee5-0.0.1.jar
18:04:14,955 INFO [JBossASKernel] installing bean: jboss.j2ee:jar=ejbjee5-0.0.1.jar,name=ScheduleWS,service=EJB3
18:04:14,955 INFO [JBossASKernel] with dependencies:
18:04:14,955 INFO [JBossASKernel] and demands:
18:04:14,955 INFO [JBossASKernel] jboss.ejb:service=EJBTimerService
18:04:14,955 INFO [JBossASKernel] and supplies:
18:04:14,956 INFO [JBossASKernel] Class:org.allowed.bitarus.ScheduleRemote
18:04:14,956 INFO [JBossASKernel] jndi:ScheduleWS/local-org.allowed.bitarus.ScheduleLocal
18:04:14,956 INFO [JBossASKernel] jndi:ScheduleWS/remote
18:04:14,956 INFO [JBossASKernel] Class:org.allowed.bitarus.ScheduleLocal
18:04:14,956 INFO [JBossASKernel] jndi:ScheduleWS/local
18:04:14,956 INFO [JBossASKernel] jndi:ScheduleWS/remote-org.allowed.bitarus.ScheduleRemote
18:04:14,956 INFO [JBossASKernel] Added bean(jboss.j2ee:jar=ejbjee5-0.0.1.jar,name=ScheduleWS,service=EJB3) to KernelDeployment of: ejbjee5-0.0.1.jar
18:04:14,957 INFO [EJB3EndpointDeployer] Deploy AbstractBeanMetaData@542c21cb{name=jboss.j2ee:jar=ejbjee5-0.0.1.jar,name=ScheduleWS,service=EJB3_endpoint bean=org.jboss.ejb3.endpoint.deployers.impl.EndpointImpl properties=[container] constructor=null autowireCandidate=true}
18:04:15,020 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=ejbjee5-0.0.1.jar,name=ScheduleWS,service=EJB3
18:04:15,020 INFO [EJBContainer] STARTED EJB: org.allowed.bitarus.ScheduleWS ejbName: ScheduleWS
18:04:15,041 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
ScheduleWS/remote - EJB3.x Default Remote Business Interface
ScheduleWS/remote-org.allowed.bitarus.ScheduleRemote - EJB3.x Remote Business Interface
ScheduleWS/local - EJB3.x Default Local Business Interface
ScheduleWS/local-org.allowed.bitarus.ScheduleLocal - EJB3.x Local Business Interface
18:04:15,097 INFO [DefaultEndpointRegistry] register: jboss.ws:context=ejbjee5-0.0.1,endpoint=ScheduleWS
18:04:15,225 INFO [WSDLFilePublisher] WSDL published to: file:/app/jboss-5.1.0.GA/server/default/data/wsdl/ejbjee5-0.0.1.jar/ScheduleWSService4435570151338675382.wsdl
18:04:15,248 INFO [TomcatDeployment] deploy, ctxPath=/ejbjee5-0.0.1
}}}
=== ./src/main/java/org/allowed/bitarus/ScheduleRemote.java ===
{{{#!highlight java
package org.allowed.bitarus;
import javax.ejb.Remote;
@Remote
public interface ScheduleRemote {
int addSchedule(int val1, int val2);
}
}}}
=== ./src/main/java/org/allowed/bitarus/ScheduleLocal.java ===
{{{#!highlight java
package org.allowed.bitarus;
import javax.ejb.Local;
@Local
public interface ScheduleLocal {
int addSchedule(int val1, int val2) ;
}
}}}
=== ./src/main/java/org/allowed/bitarus/ScheduleWS.java ===
{{{#!highlight java
package org.allowed.bitarus;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.allowed.bitarus.ScheduleRemote;
@Stateless
@WebService
public class ScheduleWS implements ScheduleRemote {
@WebMethod
public int addSchedule(int val1, int val2) {
return val1 + val2;
}
}
}}}
=== ./src/main/resources/META-INF/ejb-jar.xml ===
{{{#!highlight java
ScheduleWSorg.allowed.bitarus.ScheduleLocalorg.allowed.bitarus.ScheduleRemoteorg.allowed.bitarus.ScheduleWSStatelessContainer
}}}
=== ./pom.xml ===
{{{#!highlight xml
4.0.0org.allowed.bitarusejbjee50.0.1ejbjavaeejavaee-api5providedsrc/main/javamaven-compiler-plugin1.51.5
}}}
* ./SoapUI-5.5.0
* new soap project
* initial wsdl: http://127.0.0.1:8080/ejbjee5-0.0.1/ScheduleWS?wsdl
* http://127.0.0.1:8080/ejbjee5-0.0.1/ScheduleWS
{{{#!highlight xml
12
}}}
{{{#!highlight xml
3
}}}
== Example WAR for JBoss5 in docker container ==
{{attachment:warFile.png}}
* mvn clean install
* cp /app/warjee5/target/warjee5-0.0.1.war /app/jboss-5.1.0.GA/server/default/deploy
* http://127.0.0.1:8080//warjee5-0.0.1/otherindex.jsp
=== src/main/java/org/allowed/bitarus/TestBean.java ===
{{{#!highlight java
package org.allowed.bitarus;
import java.util.logging.Logger;
import java.util.logging.Level;
public class TestBean{
private String name;
private Logger logger;
public TestBean(){
this.logger = Logger.getLogger(this.getClass().getName() );
this.logger.log(Level.INFO,"Created test bean");
this.name="Ioooo";
}
public String getName(){
this.logger.info("getName called");
return this.name;
}
public void setName(String name){
this.name=name;
}
}
}}}
=== src/main/java/org/allowed/bitarus/Handler.java ===
{{{#!highlight java
package org.allowed.bitarus;
import java.util.logging.Logger;
import java.util.logging.Level;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
public class Handler{
private ServletRequest request;
private ServletResponse response;
private JspWriter out;
public Handler(ServletRequest request, ServletResponse response,JspWriter out){
this.request = request;
this.response = response;
this.out = out;
}
public Handler(PageContext pageContext){
this.request = pageContext.getRequest();
this.response = pageContext.getResponse();
this.out = (JspWriter) pageContext.getAttribute(pageContext.OUT) ;
}
public void writeHandler(){
try{
this.out.println(String.format("
Handler up %s
" , this.request.getParameter("user") ));
}
catch(Exception ex){
}
}
public void writeIP(){
try{
this.out.print("!!! Your IP address is " + this.request.getRemoteAddr());
}
catch(Exception ex){
}
}
}
}}}
=== src/main/webapp/otherindex.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
Other Hello
World
<% h.writeHandler(); %>
<% out.print("Your IP address is " + request.getRemoteAddr()); %>
<% h.writeIP(); %>
}}}
=== src/main/webapp/index.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
Hello
World
<% h.writeHandler(); %>
<% out.print("Your IP address is " + request.getRemoteAddr()); %>
<% h.writeIP(); %>
}}}
=== src/main/webapp/WEB-INF/web.xml ===
{{{#!highlight xml
index/index.jspindex/index**otherindex/otherindex.jspotherindex/otherindex**
}}}
=== pom.xml ===
{{{#!highlight xml
4.0.0org.allowed.bitaruswarjee50.0.1warjavaeejavaee-api5providedsrcmaven-compiler-plugin1.51.5
}}}
== HyperSQL Database (HSQLDB) ==
* http://hsqldb.org/
HyperSQL is used for development, testing and deployment of database applications.
{{{
user: sa
pwd: empty
port: 1701
db path: /app/jboss-5.1.0.GA/server/default/data/hypersonic/localDB
java -cp ./common/lib/hsqldb.jar org.hsqldb.util.SqlTool localDB
#rcfile
# vi /root/sqltool.rc
urlid localDB
url jdbc:hsqldb:/app/jboss-5.1.0.GA/server/default/data/hypersonic/localDB;shutdown=true
username sa
password
/app/jboss-5.1.0.GA/server/default/data/hypersonic
java -cp /app/jboss-5.1.0.GA/common/lib/hsqldb.jar org.hsqldb.util.SqlTool localDB
\?
\q
# show tables
\dt
TABLE_SCHEM TABLE_NAME
----------- --------------
PUBLIC ADDENTITY
sql> select * from addentity;
ID CREATIONDATE OP1 OP2 RES
-- ----------------------- --- --- ---
1 2020-06-20 15:05:29.037 1 7 8
2 2020-06-20 15:05:30.509 1 7 8
3 2020-06-20 15:05:31.137 1 7 8
4 2020-06-20 15:05:43.043 1 70 71
5 2020-06-20 15:09:01.0 299 1 300
6 2020-06-20 15:25:14.918 1 2 3
7 2020-06-20 15:25:42.434 10 20 30
}}}
== EJB Jar with persistence ==
* http://127.0.0.1:8080/jbossws/services
* http://127.0.0.1:8080/ejbjee5-0.0.1/AddWS?wsdl
=== src/main/java/org/allowed/bitarus/AddEntity.java ===
{{{#!highlight java
package org.allowed.bitarus;
import java.util.Date;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.TemporalType;
import javax.persistence.Temporal;
@Entity
public class AddEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Column
private int op1;
@Column
private int op2;
@Column
private int res;
public long getId(){return this.id;}
public void setId(long id){ this.id=id;}
public Date getCreationDate(){return this.creationDate;}
public void setCreationDate(Date creationDate){ this.creationDate=creationDate;}
public int getOp1(){return this.op1;}
public void setOp1(int op1){ this.op1=op1;}
public int getOp2(){return this.op2;}
public void setOp2(int op2){ this.op2=op2;}
public int getRes(){return this.res;}
public void setRes(int res){ this.res=res;}
}
}}}
=== src/main/java/org/allowed/bitarus/AddLocal.java ===
{{{#!highlight java
package org.allowed.bitarus;
import javax.ejb.Local;
import java.util.List;
@Local
public interface AddLocal {
int add(int val1, int val2) ;
List getAll();
}
}}}
=== src/main/java/org/allowed/bitarus/AddWS.java ===
{{{#!highlight java
package org.allowed.bitarus;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.allowed.bitarus.AddRemote;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import java.util.List;
@Stateless
@WebService
public class AddWS implements AddRemote {
@PersistenceContext(unitName="puDefaultDS")
EntityManager em;
@WebMethod
public int add(int val1, int val2) {
int res = val1 + val2;
AddEntity me = new AddEntity();
me.setRes(res);
me.setOp1(val1);
me.setOp2(val2);
me.setCreationDate( new java.util.Date() );
em.persist(me);
return res;
}
@WebMethod
public List getAll(){
return em.createQuery("select a from AddEntity a ").getResultList();
}
}
}}}
=== src/main/java/org/allowed/bitarus/AddRemote.java ===
{{{#!highlight java
package org.allowed.bitarus;
import javax.ejb.Remote;
import java.util.List;
@Remote
public interface AddRemote {
int add(int val1, int val2);
List getAll();
}
}}}
=== src/main/resources/META-INF/ejb-jar.xml ===
{{{#!highlight xml
AddWSorg.allowed.bitarus.AddLocalorg.allowed.bitarus.AddRemoteorg.allowed.bitarus.AddWSStatelessContainer
}}}
=== src/main/resources/META-INF/persistence.xml ===
{{{#!highlight xml
java:/DefaultDS
}}}
=== pom.xml ===
{{{#!highlight xml
4.0.0org.allowed.bitarusejbjee50.0.1ejbjavaeejavaee-api5providedsrcmaven-compiler-plugin1.51.5
}}}
== JNDIView ==
* http://127.0.0.1:8080/jmx-console/
Show JNDI info. In kmx comsole chosse jboss, service=JNDIView, invoke list, Global JNDI Namespace
* http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss%3Aservice%3DJNDIView
== WAR web app that invokes ejb using JNDI name ==
* mvn clean install
* cp target/warjee5-0.0.1.war /app/jboss-5.1.0.GA/server/default/deploy/warjee5-0.0.1.war
=== pom.xml ===
{{{#!highlight xml
4.0.0org.allowed.bitaruswarjee50.0.1warjavaeejavaee-api5providedorg.allowed.bitarusejbjee50.0.1providedsrcmaven-compiler-plugin1.51.5
}}}
=== src/main/java/org/allowed/bitarus/Handler.java ===
{{{#!highlight java
package org.allowed.bitarus;
import java.util.logging.Logger;
import java.util.logging.Level;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.naming.InitialContext;
import java.util.List;
import javax.naming.NamingEnumeration;
import javax.naming.NameClassPair;
public class Handler{
private ServletRequest request;
private ServletResponse response;
private JspWriter out;
public Handler(ServletRequest request, ServletResponse response,JspWriter out){
this.request = request;
this.response = response;
this.out = out;
}
public Handler(PageContext pageContext){
this.request = pageContext.getRequest();
this.response = pageContext.getResponse();
this.out = (JspWriter) pageContext.getAttribute(pageContext.OUT) ;
}
public void writeHandler(){
try{
this.out.println(String.format("
Handler up %s
" , this.request.getParameter("user") ));
}
catch(Exception ex){
}
}
public void writeIP(){
try{
this.out.print("!!! Your IP address is " + this.request.getRemoteAddr());
}
catch(Exception ex){
}
}
public void writeAddResults(){
try{
InitialContext context = new InitialContext();
NamingEnumeration namingList = context.list("");
while (namingList.hasMore()) {
out.println(namingList.next().getName() + " " );
}
AddLocal addLocal = (AddLocal) context.lookup("AddWS/local");
List list = addLocal.getAll();
for(int idx=0; idx" );
}
}
catch(Exception ex){
}
}
}
}}}
=== src/main/java/org/allowed/bitarus/TestBean.java ===
{{{#!highlight java
package org.allowed.bitarus;
import java.util.logging.Logger;
import java.util.logging.Level;
public class TestBean{
private String name;
private Logger logger;
public TestBean(){
this.logger = Logger.getLogger(this.getClass().getName() );
this.logger.log(Level.INFO,"Created test bean");
this.name="Ioooo";
}
public String getName(){
this.logger.info("getName called");
return this.name;
}
public void setName(String name){
this.name=name;
}
}
}}}
=== src/main/webapp/WEB-INF/web.xml ===
{{{#!highlight xml
index/index.jspindex/index**otherindex/otherindex.jspotherindex/otherindex**
}}}
=== src/main/webapp/index.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
Hello
World
<% h.writeHandler(); %>
<% out.print("Your IP address is " + request.getRemoteAddr()); %>
<% h.writeIP(); %>
<% h.writeAddResults(); %>
}}}
=== src/main/webapp/otherindex.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
Other Hello
World
<% h.writeHandler(); %>
<% out.print("Your IP address is " + request.getRemoteAddr()); %>
<% h.writeIP(); %>
}}}
== Spring 3.0.1 in JBoss 5 ==
* https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/new-in-3.html#new-in-3-intro
=== pom.xml ===
{{{#!highlight xml
4.0.0org.allowed.bitarustestSpringMVCJSP0.1.0warorg.springframeworkspring-core3.0.1.RELEASEorg.springframeworkspring-web3.0.1.RELEASEorg.springframeworkspring-webmvc3.0.1.RELEASEsrc/main/javamaven-compiler-plugin1.51.5
}}}
=== src/main/java/org/allowed/bitarus/hello/HelloController.java ===
{{{#!highlight java
package org.allowed.bitarus.hello;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hellox(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
}}}
=== src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml ===
{{{#!highlight xml
/WEB-INF/pages/.jsp
}}}
=== src/main/webapp/WEB-INF/pages/greeting.jsp ===
{{{#!highlight html
Getting Started: Serving Web Content