diff --git a/jonas/.checkstyle b/.checkstyle
similarity index 100%
rename from jonas/.checkstyle
rename to .checkstyle
diff --git a/jonas/.checkstyle_eclipse_config b/.checkstyle_eclipse_config
similarity index 100%
rename from jonas/.checkstyle_eclipse_config
rename to .checkstyle_eclipse_config
diff --git a/jonas/.classpath b/.classpath
similarity index 100%
rename from jonas/.classpath
rename to .classpath
diff --git a/jonas/.gitignore b/.gitignore
similarity index 100%
rename from jonas/.gitignore
rename to .gitignore
diff --git a/jonas/.project b/.project
similarity index 100%
rename from jonas/.project
rename to .project
diff --git a/jonas/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from jonas/.settings/org.eclipse.jdt.core.prefs
rename to .settings/org.eclipse.jdt.core.prefs
diff --git a/jonas/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
similarity index 100%
rename from jonas/.settings/org.eclipse.jdt.ui.prefs
rename to .settings/org.eclipse.jdt.ui.prefs
diff --git a/jonas/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs
similarity index 100%
rename from jonas/.settings/org.maven.ide.eclipse.prefs
rename to .settings/org.maven.ide.eclipse.prefs
diff --git a/jonas/LicenceAgreement.txt b/LicenceAgreement.txt
similarity index 100%
rename from jonas/LicenceAgreement.txt
rename to LicenceAgreement.txt
diff --git a/jonas/README b/README
similarity index 100%
rename from jonas/README
rename to README
diff --git a/jonas/ReleaseNotes.txt b/ReleaseNotes.txt
similarity index 100%
rename from jonas/ReleaseNotes.txt
rename to ReleaseNotes.txt
diff --git a/jonas/assemblies/ant-tasks/pom.xml b/assemblies/ant-tasks/pom.xml
similarity index 100%
rename from jonas/assemblies/ant-tasks/pom.xml
rename to assemblies/ant-tasks/pom.xml
diff --git a/jonas/assemblies/ant-tasks/src/main/resources/README b/assemblies/ant-tasks/src/main/resources/README
similarity index 100%
rename from jonas/assemblies/ant-tasks/src/main/resources/README
rename to assemblies/ant-tasks/src/main/resources/README
diff --git a/jonas/assemblies/client-jar/pom.xml b/assemblies/client-jar/pom.xml
similarity index 100%
rename from jonas/assemblies/client-jar/pom.xml
rename to assemblies/client-jar/pom.xml
diff --git a/jonas/assemblies/client-jar/src/main/resources/README b/assemblies/client-jar/src/main/resources/README
similarity index 100%
rename from jonas/assemblies/client-jar/src/main/resources/README
rename to assemblies/client-jar/src/main/resources/README
diff --git a/jonas/assemblies/examples/pom.xml b/assemblies/examples/pom.xml
similarity index 100%
rename from jonas/assemblies/examples/pom.xml
rename to assemblies/examples/pom.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/build.properties b/assemblies/examples/src/main/resources/examples/build.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/build.properties
rename to assemblies/examples/src/main/resources/examples/build.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/build.xml b/assemblies/examples/src/main/resources/examples/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/build.xml
rename to assemblies/examples/src/main/resources/examples/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/README b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/README
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/README
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/README
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java b/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt b/assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/README b/assemblies/examples/src/main/resources/examples/cluster-javaee5/README
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/README
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/README
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh b/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties b/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf b/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml b/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties b/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java b/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java
rename to assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/README b/assemblies/examples/src/main/resources/examples/j2ee1.4/README
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/README
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/README
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/jetty.gif b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/jetty.gif
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/jetty.gif
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/jetty.gif
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/logoOW2.png b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/logoOW2.png
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/logoOW2.png
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/logoOW2.png
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/ow_jonas_logo.gif b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/ow_jonas_logo.gif
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/ow_jonas_logo.gif
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/ow_jonas_logo.gif
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/tomcat.gif b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/tomcat.gif
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/tomcat.gif
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/tomcat.gif
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/valid-xhtml11.png b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/valid-xhtml11.png
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/valid-xhtml11.png
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/valid-xhtml11.png
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/vcss.png b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/vcss.png
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/vcss.png
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/vcss.png
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml b/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java b/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log b/assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log
rename to assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/README b/assemblies/examples/src/main/resources/examples/javaee5-earsample/README
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/README
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/README
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh b/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/architecture.png b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/architecture.png
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/architecture.png
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/architecture.png
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/jetty.gif b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/jetty.gif
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/jetty.gif
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/jetty.gif
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/logoOW2.png b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/logoOW2.png
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/logoOW2.png
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/logoOW2.png
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/ow_jonas_logo.gif b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/ow_jonas_logo.gif
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/ow_jonas_logo.gif
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/ow_jonas_logo.gif
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/tomcat.gif b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/tomcat.gif
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/tomcat.gif
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/tomcat.gif
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/valid-xhtml11.png b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/valid-xhtml11.png
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/valid-xhtml11.png
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/valid-xhtml11.png
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/vcss.png b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/vcss.png
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/vcss.png
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/vcss.png
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css b/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java
diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html b/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html
rename to assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html
diff --git a/jonas/assemblies/examples/src/main/resources/examples/jonas-common.xml b/assemblies/examples/src/main/resources/examples/jonas-common.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/examples/jonas-common.xml
rename to assemblies/examples/src/main/resources/examples/jonas-common.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/README b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/README
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/README
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/README
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java b/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java
rename to assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java
diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jonas-common.xml b/assemblies/examples/src/main/resources/tutorial/jonas-common.xml
similarity index 100%
rename from jonas/assemblies/examples/src/main/resources/tutorial/jonas-common.xml
rename to assemblies/examples/src/main/resources/tutorial/jonas-common.xml
diff --git a/jonas/assemblies/pom.xml b/assemblies/pom.xml
similarity index 100%
rename from jonas/assemblies/pom.xml
rename to assemblies/pom.xml
diff --git a/jonas/assemblies/profiles/addons/minimal/pom.xml b/assemblies/profiles/addons/minimal/pom.xml
similarity index 100%
rename from jonas/assemblies/profiles/addons/minimal/pom.xml
rename to assemblies/profiles/addons/minimal/pom.xml
diff --git a/jonas/assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml b/assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml
similarity index 100%
rename from jonas/assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml
rename to assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml
diff --git a/jonas/assemblies/profiles/addons/pom.xml b/assemblies/profiles/addons/pom.xml
similarity index 100%
rename from jonas/assemblies/profiles/addons/pom.xml
rename to assemblies/profiles/addons/pom.xml
diff --git a/jonas/assemblies/profiles/addons/src/main/assembly/addons-component.xml b/assemblies/profiles/addons/src/main/assembly/addons-component.xml
similarity index 100%
rename from jonas/assemblies/profiles/addons/src/main/assembly/addons-component.xml
rename to assemblies/profiles/addons/src/main/assembly/addons-component.xml
diff --git a/jonas/assemblies/profiles/legacy/full/pom.xml b/assemblies/profiles/legacy/full/pom.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/full/pom.xml
rename to assemblies/profiles/legacy/full/pom.xml
diff --git a/jonas/assemblies/profiles/legacy/full/src/main/assembly/assembly.xml b/assemblies/profiles/legacy/full/src/main/assembly/assembly.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/full/src/main/assembly/assembly.xml
rename to assemblies/profiles/legacy/full/src/main/assembly/assembly.xml
diff --git a/jonas/assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml b/assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml
rename to assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml
diff --git a/jonas/assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml b/assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml
rename to assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml
diff --git a/jonas/assemblies/profiles/legacy/jaxrs/pom.xml b/assemblies/profiles/legacy/jaxrs/pom.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/jaxrs/pom.xml
rename to assemblies/profiles/legacy/jaxrs/pom.xml
diff --git a/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml b/assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml
rename to assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml
diff --git a/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml b/assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml
rename to assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml
diff --git a/jonas/assemblies/profiles/legacy/minimal/pom.xml b/assemblies/profiles/legacy/minimal/pom.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/minimal/pom.xml
rename to assemblies/profiles/legacy/minimal/pom.xml
diff --git a/jonas/assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml b/assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml
rename to assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml
diff --git a/jonas/assemblies/profiles/legacy/pom.xml b/assemblies/profiles/legacy/pom.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/pom.xml
rename to assemblies/profiles/legacy/pom.xml
diff --git a/jonas/assemblies/profiles/legacy/src/main/assembly/legacy-component.xml b/assemblies/profiles/legacy/src/main/assembly/legacy-component.xml
similarity index 100%
rename from jonas/assemblies/profiles/legacy/src/main/assembly/legacy-component.xml
rename to assemblies/profiles/legacy/src/main/assembly/legacy-component.xml
diff --git a/jonas/assemblies/profiles/pom.xml b/assemblies/profiles/pom.xml
similarity index 100%
rename from jonas/assemblies/profiles/pom.xml
rename to assemblies/profiles/pom.xml
diff --git a/jonas/assemblies/profiles/src/main/assembly/common-component.xml b/assemblies/profiles/src/main/assembly/common-component.xml
similarity index 100%
rename from jonas/assemblies/profiles/src/main/assembly/common-component.xml
rename to assemblies/profiles/src/main/assembly/common-component.xml
diff --git a/jonas/assemblies/profiles/src/main/resources/logs/README b/assemblies/profiles/src/main/resources/logs/README
similarity index 100%
rename from jonas/assemblies/profiles/src/main/resources/logs/README
rename to assemblies/profiles/src/main/resources/logs/README
diff --git a/jonas/clientbuild.xml b/clientbuild.xml
similarity index 100%
rename from jonas/clientbuild.xml
rename to clientbuild.xml
diff --git a/jonas/eclipse-settings/checkstyle-convention.xml b/eclipse-settings/checkstyle-convention.xml
similarity index 100%
rename from jonas/eclipse-settings/checkstyle-convention.xml
rename to eclipse-settings/checkstyle-convention.xml
diff --git a/jonas/eclipse-settings/eclipse-java-code-formatter.xml b/eclipse-settings/eclipse-java-code-formatter.xml
similarity index 100%
rename from jonas/eclipse-settings/eclipse-java-code-formatter.xml
rename to eclipse-settings/eclipse-java-code-formatter.xml
diff --git a/eclipse-settings/eclipse-java-codestyle-organize-import b/eclipse-settings/eclipse-java-codestyle-organize-import
new file mode 100644
index 0000000000000000000000000000000000000000..1b52f7ec0913065f63e8ddb1795ed3cfd65894c2
--- /dev/null
+++ b/eclipse-settings/eclipse-java-codestyle-organize-import
@@ -0,0 +1,24 @@
+#Organize Import Order
+#Mon Apr 19 08:43:05 CEST 2004
+19=org.objectweb.security
+18=org.objectweb.medor
+17=org.objectweb.jorm
+16=org.objectweb.joram
+15=org.objectweb.jonas
+14=org.objectweb.jonas_ws
+13=org.objectweb.jonas_web
+12=org.objectweb.jonas_rar
+11=org.objectweb.jonas_jms
+10=org.objectweb.jonas_lib
+9=org.objectweb.jonas_ejb
+8=org.objectweb.jonas_ear
+7=org.objectweb.jonas_client
+6=org.objectweb.common
+5=org.objectweb.carol
+4=org.objectweb
+3=org.apache
+2=org
+1=javax
+21=com
+0=java
+20=org.objectweb.util
diff --git a/jonas/eclipse-settings/jonas-style-convention.xml b/eclipse-settings/jonas-style-convention.xml
similarity index 100%
rename from jonas/eclipse-settings/jonas-style-convention.xml
rename to eclipse-settings/jonas-style-convention.xml
diff --git a/jonas/eclipse-settings/plugin-checkstyle-config.xml b/eclipse-settings/plugin-checkstyle-config.xml
similarity index 100%
rename from jonas/eclipse-settings/plugin-checkstyle-config.xml
rename to eclipse-settings/plugin-checkstyle-config.xml
diff --git a/jonas/itests/applications/classloader/pom.xml b/itests/applications/classloader/pom.xml
similarity index 100%
rename from jonas/itests/applications/classloader/pom.xml
rename to itests/applications/classloader/pom.xml
diff --git a/jonas/itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java b/itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java
similarity index 100%
rename from jonas/itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java
rename to itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java
diff --git a/jonas/itests/applications/classloader/src/main/resources/metadata.xml b/itests/applications/classloader/src/main/resources/metadata.xml
similarity index 100%
rename from jonas/itests/applications/classloader/src/main/resources/metadata.xml
rename to itests/applications/classloader/src/main/resources/metadata.xml
diff --git a/jonas/itests/applications/connection-leaks/pom.xml b/itests/applications/connection-leaks/pom.xml
similarity index 100%
rename from jonas/itests/applications/connection-leaks/pom.xml
rename to itests/applications/connection-leaks/pom.xml
diff --git a/jonas/itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java b/itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java
similarity index 100%
rename from jonas/itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java
rename to itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java
diff --git a/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml b/itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml
similarity index 100%
rename from jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml
rename to itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml
diff --git a/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml b/itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/jaxws-add/assemblies/ear/pom.xml b/itests/applications/jaxws-add/assemblies/ear/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/assemblies/ear/pom.xml
rename to itests/applications/jaxws-add/assemblies/ear/pom.xml
diff --git a/jonas/itests/applications/jaxws-add/assemblies/pom.xml b/itests/applications/jaxws-add/assemblies/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/assemblies/pom.xml
rename to itests/applications/jaxws-add/assemblies/pom.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/api/pom.xml b/itests/applications/jaxws-add/modules/api/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/api/pom.xml
rename to itests/applications/jaxws-add/modules/api/pom.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java b/itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java
rename to itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java
diff --git a/jonas/itests/applications/jaxws-add/modules/beans/pom.xml b/itests/applications/jaxws-add/modules/beans/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/beans/pom.xml
rename to itests/applications/jaxws-add/modules/beans/pom.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java b/itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java
rename to itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java
diff --git a/jonas/itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml b/itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml
rename to itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/pom.xml b/itests/applications/jaxws-add/modules/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/pom.xml
rename to itests/applications/jaxws-add/modules/pom.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/pom.xml b/itests/applications/jaxws-add/modules/webapp/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/pom.xml
rename to itests/applications/jaxws-add/modules/webapp/pom.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java b/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java
rename to itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java b/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java
rename to itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java b/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java
rename to itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java b/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java
rename to itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml b/itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml
rename to itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml b/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml
rename to itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml
diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml b/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/jaxws-add/pom.xml b/itests/applications/jaxws-add/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-add/pom.xml
rename to itests/applications/jaxws-add/pom.xml
diff --git a/jonas/itests/applications/jaxws-sample/pom.xml b/itests/applications/jaxws-sample/pom.xml
similarity index 100%
rename from jonas/itests/applications/jaxws-sample/pom.xml
rename to itests/applications/jaxws-sample/pom.xml
diff --git a/jonas/itests/applications/jndi/pom.xml b/itests/applications/jndi/pom.xml
similarity index 100%
rename from jonas/itests/applications/jndi/pom.xml
rename to itests/applications/jndi/pom.xml
diff --git a/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java b/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java
similarity index 100%
rename from jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java
rename to itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java
diff --git a/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java b/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java
similarity index 100%
rename from jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java
rename to itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java
diff --git a/jonas/itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml b/itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml
similarity index 100%
rename from jonas/itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml
rename to itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml
diff --git a/jonas/itests/applications/jsf/jsf-1.x/pom.xml b/itests/applications/jsf/jsf-1.x/pom.xml
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-1.x/pom.xml
rename to itests/applications/jsf/jsf-1.x/pom.xml
diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml b/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml
rename to itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml
diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml b/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp b/itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp
rename to itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp
diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp b/itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp
rename to itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp
diff --git a/jonas/itests/applications/jsf/jsf-2.0/pom.xml b/itests/applications/jsf/jsf-2.0/pom.xml
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-2.0/pom.xml
rename to itests/applications/jsf/jsf-2.0/pom.xml
diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java b/itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java
rename to itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java
diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml b/itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml b/itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml
rename to itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml
diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml b/itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml
similarity index 100%
rename from jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml
rename to itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml
diff --git a/jonas/itests/applications/jsf/pom.xml b/itests/applications/jsf/pom.xml
similarity index 100%
rename from jonas/itests/applications/jsf/pom.xml
rename to itests/applications/jsf/pom.xml
diff --git a/jonas/itests/applications/multitenant/pom.xml b/itests/applications/multitenant/pom.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/pom.xml
rename to itests/applications/multitenant/pom.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T1.ear b/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T1.ear
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T1.ear
rename to itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T1.ear
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T2.ear b/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T2.ear
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T2.ear
rename to itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T2.ear
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java b/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java
rename to itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml b/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html b/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html
rename to itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/pom.xml b/itests/applications/multitenant/src/main/resources/tenant-war/pom.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-war/pom.xml
rename to itests/applications/multitenant/src/main/resources/tenant-war/pom.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml b/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml
rename to itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml b/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html b/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html
rename to itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html
diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/test-multitenant-war.war b/itests/applications/multitenant/src/main/resources/tenant-war/test-multitenant-war.war
similarity index 100%
rename from jonas/itests/applications/multitenant/src/main/resources/tenant-war/test-multitenant-war.war
rename to itests/applications/multitenant/src/main/resources/tenant-war/test-multitenant-war.war
diff --git a/jonas/itests/applications/osgi/osgi-datasource/pom.xml b/itests/applications/osgi/osgi-datasource/pom.xml
similarity index 100%
rename from jonas/itests/applications/osgi/osgi-datasource/pom.xml
rename to itests/applications/osgi/osgi-datasource/pom.xml
diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java b/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java
similarity index 100%
rename from jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java
rename to itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java
diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java b/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java
similarity index 100%
rename from jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java
rename to itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java
diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java b/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java
similarity index 100%
rename from jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java
rename to itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java
diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java b/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java
similarity index 100%
rename from jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java
rename to itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java
diff --git a/jonas/itests/applications/osgi/pom.xml b/itests/applications/osgi/pom.xml
similarity index 100%
rename from jonas/itests/applications/osgi/pom.xml
rename to itests/applications/osgi/pom.xml
diff --git a/jonas/itests/applications/pom.xml b/itests/applications/pom.xml
similarity index 100%
rename from jonas/itests/applications/pom.xml
rename to itests/applications/pom.xml
diff --git a/jonas/itests/applications/versioning/pom.xml b/itests/applications/versioning/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/pom.xml
rename to itests/applications/versioning/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/non-versioned-war/non-versioned-war.war b/itests/applications/versioning/src/main/resources/non-versioned-war/non-versioned-war.war
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/non-versioned-war/non-versioned-war.war
rename to itests/applications/versioning/src/main/resources/non-versioned-war/non-versioned-war.war
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.classpath b/itests/applications/versioning/src/main/resources/root-war/.classpath
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/.classpath
rename to itests/applications/versioning/src/main/resources/root-war/.classpath
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.project b/itests/applications/versioning/src/main/resources/root-war/.project
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/.project
rename to itests/applications/versioning/src/main/resources/root-war/.project
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs b/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs
rename to itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs b/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs
rename to itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs b/itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs
rename to itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/pom.xml b/itests/applications/versioning/src/main/resources/root-war/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/pom.xml
rename to itests/applications/versioning/src/main/resources/root-war/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/root-war.war b/itests/applications/versioning/src/main/resources/root-war/root-war.war
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/root-war.war
rename to itests/applications/versioning/src/main/resources/root-war/root-war.war
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java b/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java
rename to itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java b/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java
rename to itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/jonas-web.xml b/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/jonas-web.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/jonas-web.xml
rename to itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/jonas-web.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml b/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp b/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp
rename to itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp
diff --git a/jonas/itests/applications/versioning/src/main/resources/secured-war/secured-war.war b/itests/applications/versioning/src/main/resources/secured-war/secured-war.war
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/secured-war/secured-war.war
rename to itests/applications/versioning/src/main/resources/secured-war/secured-war.war
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.classpath b/itests/applications/versioning/src/main/resources/version1.0.0/.classpath
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/.classpath
rename to itests/applications/versioning/src/main/resources/version1.0.0/.classpath
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.project b/itests/applications/versioning/src/main/resources/version1.0.0/.project
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/.project
rename to itests/applications/versioning/src/main/resources/version1.0.0/.project
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs b/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs
rename to itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs b/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs
rename to itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs b/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs
rename to itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml b/itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml
rename to itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml b/itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml
rename to itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java b/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java
rename to itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java b/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java
rename to itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/pom.xml b/itests/applications/versioning/src/main/resources/version1.0.0/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/pom.xml
rename to itests/applications/versioning/src/main/resources/version1.0.0/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/test-versioning.ear b/itests/applications/versioning/src/main/resources/version1.0.0/test-versioning.ear
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/test-versioning.ear
rename to itests/applications/versioning/src/main/resources/version1.0.0/test-versioning.ear
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml b/itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml
rename to itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java b/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java
rename to itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml b/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html b/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html
rename to itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html
diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp b/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp
rename to itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.classpath b/itests/applications/versioning/src/main/resources/version2.0.0/.classpath
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/.classpath
rename to itests/applications/versioning/src/main/resources/version2.0.0/.classpath
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.project b/itests/applications/versioning/src/main/resources/version2.0.0/.project
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/.project
rename to itests/applications/versioning/src/main/resources/version2.0.0/.project
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs b/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs
rename to itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs b/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs
rename to itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs b/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs
rename to itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml b/itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml
rename to itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml b/itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml
rename to itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java b/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java
rename to itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java b/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java
rename to itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/pom.xml b/itests/applications/versioning/src/main/resources/version2.0.0/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/pom.xml
rename to itests/applications/versioning/src/main/resources/version2.0.0/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/test-versioning.ear b/itests/applications/versioning/src/main/resources/version2.0.0/test-versioning.ear
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/test-versioning.ear
rename to itests/applications/versioning/src/main/resources/version2.0.0/test-versioning.ear
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml b/itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml
rename to itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java b/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java
rename to itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java b/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java
rename to itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java b/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java
rename to itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml b/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html b/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html
rename to itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html
diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp b/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp
rename to itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp
diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/pom.xml b/itests/applications/versioning/src/main/resources/welcome-file/pom.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/welcome-file/pom.xml
rename to itests/applications/versioning/src/main/resources/welcome-file/pom.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml b/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml
rename to itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml b/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml
rename to itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml
diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx b/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx
rename to itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx
diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/test-versioning-welcome.war b/itests/applications/versioning/src/main/resources/welcome-file/test-versioning-welcome.war
similarity index 100%
rename from jonas/itests/applications/versioning/src/main/resources/welcome-file/test-versioning-welcome.war
rename to itests/applications/versioning/src/main/resources/welcome-file/test-versioning-welcome.war
diff --git a/jonas/itests/cargo/iiop/pom.xml b/itests/cargo/iiop/pom.xml
similarity index 100%
rename from jonas/itests/cargo/iiop/pom.xml
rename to itests/cargo/iiop/pom.xml
diff --git a/jonas/itests/cargo/irmi/pom.xml b/itests/cargo/irmi/pom.xml
similarity index 100%
rename from jonas/itests/cargo/irmi/pom.xml
rename to itests/cargo/irmi/pom.xml
diff --git a/jonas/itests/cargo/jetty6/pom.xml b/itests/cargo/jetty6/pom.xml
similarity index 100%
rename from jonas/itests/cargo/jetty6/pom.xml
rename to itests/cargo/jetty6/pom.xml
diff --git a/jonas/itests/cargo/jetty8/pom.xml b/itests/cargo/jetty8/pom.xml
similarity index 100%
rename from jonas/itests/cargo/jetty8/pom.xml
rename to itests/cargo/jetty8/pom.xml
diff --git a/jonas/itests/cargo/jrmp/pom.xml b/itests/cargo/jrmp/pom.xml
similarity index 100%
rename from jonas/itests/cargo/jrmp/pom.xml
rename to itests/cargo/jrmp/pom.xml
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java
diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java b/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java
rename to itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java
diff --git a/jonas/itests/cargo/jrmp/src/test/resources/jonas-290.war b/itests/cargo/jrmp/src/test/resources/jonas-290.war
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/resources/jonas-290.war
rename to itests/cargo/jrmp/src/test/resources/jonas-290.war
diff --git a/jonas/itests/cargo/jrmp/src/test/resources/jonas-292.jar b/itests/cargo/jrmp/src/test/resources/jonas-292.jar
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/resources/jonas-292.jar
rename to itests/cargo/jrmp/src/test/resources/jonas-292.jar
diff --git a/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-empty-value-test.xml b/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-empty-value-test.xml
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-empty-value-test.xml
rename to itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-empty-value-test.xml
diff --git a/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml b/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml
rename to itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml
diff --git a/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml b/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml
similarity index 100%
rename from jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml
rename to itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml
diff --git a/jonas/itests/cargo/pom.xml b/itests/cargo/pom.xml
similarity index 100%
rename from jonas/itests/cargo/pom.xml
rename to itests/cargo/pom.xml
diff --git a/jonas/itests/cargo/safe-startup/pom.xml b/itests/cargo/safe-startup/pom.xml
similarity index 100%
rename from jonas/itests/cargo/safe-startup/pom.xml
rename to itests/cargo/safe-startup/pom.xml
diff --git a/jonas/itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java b/itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java
similarity index 100%
rename from jonas/itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java
rename to itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java
diff --git a/jonas/itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml b/itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml
similarity index 100%
rename from jonas/itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml
rename to itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml
diff --git a/jonas/itests/cargo/security/pom.xml b/itests/cargo/security/pom.xml
similarity index 100%
rename from jonas/itests/cargo/security/pom.xml
rename to itests/cargo/security/pom.xml
diff --git a/jonas/itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java b/itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java
similarity index 100%
rename from jonas/itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java
rename to itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java
diff --git a/jonas/itests/cargo/tomcat6/pom.xml b/itests/cargo/tomcat6/pom.xml
similarity index 100%
rename from jonas/itests/cargo/tomcat6/pom.xml
rename to itests/cargo/tomcat6/pom.xml
diff --git a/jonas/itests/intravm/pom.xml b/itests/intravm/pom.xml
similarity index 100%
rename from jonas/itests/intravm/pom.xml
rename to itests/intravm/pom.xml
diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java b/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java
similarity index 100%
rename from jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java
rename to itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java
diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java b/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java
similarity index 100%
rename from jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java
rename to itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java
diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java b/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java
similarity index 100%
rename from jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java
rename to itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java
diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java b/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java
similarity index 100%
rename from jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java
rename to itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java
diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java b/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java
similarity index 100%
rename from jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java
rename to itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java
diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java b/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java
similarity index 100%
rename from jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java
rename to itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java
diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java b/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java
similarity index 100%
rename from jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java
rename to itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java
diff --git a/jonas/itests/intravm/src/test/resources/index.html b/itests/intravm/src/test/resources/index.html
similarity index 100%
rename from jonas/itests/intravm/src/test/resources/index.html
rename to itests/intravm/src/test/resources/index.html
diff --git a/jonas/itests/intravm/src/test/resources/test.html b/itests/intravm/src/test/resources/test.html
similarity index 100%
rename from jonas/itests/intravm/src/test/resources/test.html
rename to itests/intravm/src/test/resources/test.html
diff --git a/jonas/itests/osgi/base/pom.xml b/itests/osgi/base/pom.xml
similarity index 100%
rename from jonas/itests/osgi/base/pom.xml
rename to itests/osgi/base/pom.xml
diff --git a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java b/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java
similarity index 100%
rename from jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java
rename to itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java
diff --git a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java b/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java
similarity index 100%
rename from jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java
rename to itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java
diff --git a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java b/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java
similarity index 100%
rename from jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java
rename to itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java
diff --git a/jonas/itests/osgi/equinox/pom.xml b/itests/osgi/equinox/pom.xml
similarity index 100%
rename from jonas/itests/osgi/equinox/pom.xml
rename to itests/osgi/equinox/pom.xml
diff --git a/jonas/itests/osgi/felix/pom.xml b/itests/osgi/felix/pom.xml
similarity index 100%
rename from jonas/itests/osgi/felix/pom.xml
rename to itests/osgi/felix/pom.xml
diff --git a/jonas/itests/osgi/knopflerfish/pom.xml b/itests/osgi/knopflerfish/pom.xml
similarity index 100%
rename from jonas/itests/osgi/knopflerfish/pom.xml
rename to itests/osgi/knopflerfish/pom.xml
diff --git a/jonas/itests/osgi/pom.xml b/itests/osgi/pom.xml
similarity index 100%
rename from jonas/itests/osgi/pom.xml
rename to itests/osgi/pom.xml
diff --git a/jonas/itests/osgi/src/test/configuration/testng-osgi.xml b/itests/osgi/src/test/configuration/testng-osgi.xml
similarity index 100%
rename from jonas/itests/osgi/src/test/configuration/testng-osgi.xml
rename to itests/osgi/src/test/configuration/testng-osgi.xml
diff --git a/jonas/itests/osgi/src/test/configuration/testng.xml b/itests/osgi/src/test/configuration/testng.xml
similarity index 100%
rename from jonas/itests/osgi/src/test/configuration/testng.xml
rename to itests/osgi/src/test/configuration/testng.xml
diff --git a/jonas/itests/pom.xml b/itests/pom.xml
similarity index 100%
rename from jonas/itests/pom.xml
rename to itests/pom.xml
diff --git a/jonas_doc/.gitignore b/jonas_doc/.gitignore
deleted file mode 100644
index 41f4ad1cab066fe2f7e6c55285927a0fa035efcf..0000000000000000000000000000000000000000
--- a/jonas_doc/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-output/
-src/docbook/doc-en/cmi/
-src/docbook/doc-en/easybeans/
-
diff --git a/jonas_doc/.project b/jonas_doc/.project
deleted file mode 100644
index 451f84138c0e6161dba861cf8d3c743f11b2ab6f..0000000000000000000000000000000000000000
--- a/jonas_doc/.project
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- jonas_doc
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/README b/jonas_doc/README
deleted file mode 100644
index b794d1073942aa06012f22e0aa59e36a71e71ca2..0000000000000000000000000000000000000000
--- a/jonas_doc/README
+++ /dev/null
@@ -1,65 +0,0 @@
-Note for Windows user.
-================================
-
-Please add all the content of \tools\win32 in your WINDOWS\system32 folder.
-
-
-
-Release process
-================================
-
-0. SVN checkout
-Checkout the jonas_doc using that kind of URL:
->$ svn co svn+ssh://$USERNAME@svn.forge.objectweb.org/svnrot/....
-
-1. Update version numbers in build.properties
-JOnAS -> product.version // most important :)
-Easybeans -> easybeans.version
-CMI -> cmi.version
-
-Notice that this version should not contains -SNAPSHOT
-
-=> Commit
-
-2. Update project's in pom.xml
-
-2.1 Version
-XPath: /project/version
-
-Notice that the version should ends with -SNAPSHOT (this is the maven release plugin that will update that value)
-
-2.2 Maven username
-Use ${maven.username} in place of the hardcoded username
-XPath: /project/scm/developerConnection
-
-=> Commit
-
-3. Release using maven
-
-IMPORTANT: Clean up your Ant generated output directory before preparing the release (avoid >10MB src jar file)
-
->$ cd core
->$ ant clean
->$ cd ..
-
->$ mvn -Dmaven.username=$USERNAME -DaddSchema=false release:clean release:prepare
- - Maven says that there are still some remaining snapshot dependencies annd ask if we want to resolve them now
- - Answer yes (default is no and lead to a build failure) and that you want to resolve only Project Dependencies (default choice)
- - Set the correct release number = the tag version
- - Reset the dependency version for development to ${project.version}
- - Continue the release process as usual
- ...
->$ mvn release:perform
-
-4. Deploy the distribution using ant
-
-Move to the checkouted tag used by release:perform
->$ cd target/checkout/core
-
-and finally deploy using ant
->$ ant stage
-
-5. Update version numbers in build.properties (finally)
-
-Update product.version to the new development version
-
diff --git a/jonas_doc/core/build.properties b/jonas_doc/core/build.properties
deleted file mode 100644
index 26886a26fee789655d3b726ccac106e33b4d5415..0000000000000000000000000000000000000000
--- a/jonas_doc/core/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-docbook.dtd.location=tools/docbook-5.0/dtc/docbook.dtd
-docbook.public.id=-//OASIS//DTD DocBook XML V5.0//EN
-fop.dir=tools/fop-0.95
-docbook.xsl.dir=tools/docbook-xsl-ns-1.76.1
-
-# Product version
-product.version = 5.3.0-M8-SNAPSHOT
-
-# EasyBeans Doc version to use
-easybeans.version = 1.2.0-M1
-
-# CMI Doc version to use
-cmi.version = 2.1.2
-
diff --git a/jonas_doc/core/build.xml b/jonas_doc/core/build.xml
deleted file mode 100644
index bf3e13e05db85e9b2a377b59a39de06d8abe80d2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/build.xml
+++ /dev/null
@@ -1,677 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ==========================================================
- Generating @{file}
- * formats: PDF & HTML & HTML Chunks
- * language: @{lang}
- ==========================================================
-
-
-
-
-
-
-
-
-
-
- ==========================================================
- Generating @{file}
- * formats: PDF & HTML
- * language: @{lang}
- ==========================================================
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- xsltproc - file:@{file}
- xsltproc - output:@{output}
- xsltproc - style.file:@{style}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/olddoc/Admin.html b/jonas_doc/core/olddoc/Admin.html
deleted file mode 100644
index dcb898daaf1a5b6cc8ddd483a14b3d43c43fb625..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/Admin.html
+++ /dev/null
@@ -1,337 +0,0 @@
-
-
-
-
-
-
- Administration Guide
-
-
-
-
Administration Guide
-
-
The target audience for this guide is the JOnAS server administrator.
-
-
JOnAS provides the following two tools for performing some administration
-tasks on a running JOnAS Server:
These tools also allow administration of several JOnAS Servers. Each JOnAS
-Server is identified by a name, which is the value of the -n
-option used in the jonas start command (the default name is
-jonas).
-
-
-
-Begining with JOnAS 4, we also provide the
-J2EE Management EJB component (MEJB), as specified by the
-J2EE Management Specification which defines the J2EE Management Model.
-
-
This chapter provides information about installing, configuring, and using
-the JonasAdmin administration console.
-
-
JonasAdmin is the new administration tool for JOnAS and replaces the
-deprecated Jadmin tool.
-
-
JonasAdmin was developed using the Struts framework; it uses
-standard technologies such as Java Servlets and JavaServer Pages. JonasAdmin
-is more ergonomic than Jadmin and provides integrated administration
-facilities for a Tomcat server running embedded in JOnAS.
-
-
Installing JonasAdmin
-
-
Designed as a web application, JonasAdmin is packed in a WAR and installed
-under the JONAS_ROOT/webapps/autoload/ directory. This WAR can
-be installed in JONAS_BASE/webapps/autoload if a JONAS_BASE
-variable has been defined in the environment. When installed in the
-autoload directory, JonasAdmin is deployed when starting the
-JOnAS server, thus the administration console is automatically accessible.
-
-
As with any web application, JonasAdmin requires a servlet server to be
-installed. Additionally, the JOnAS server running JonasAdmin must have the
-web container service present in the list of services defined in the
-jonas.properties configuration file.
-
-
When accessing JonasAdmin, the administrator must provide identification
-and authentication.
-The jonas-realm.xml configuration file contains a memory realm
-definition named memrlm_1, which is referenced in both
-server.xml (for Tomcat) and jetty.xml (for Jetty) configuration files. The
-default user name (jonas) and
-password (jonas) corresponding to the admin
-role can be modified here.
-
-
-
Using JonasAdmin
-
-
Once started, JonasAdmin can administer the JOnAS server in which it is
-running, as well as other JOnAS servers with which it shares the same
-registry. Typically, this is used to administer JOnAS servers running without
-the WEB container service.
-Note that the administered JOnAS servers can be running on the same host or
-on different hosts. Also, if Tomcat is used as the WEB container service
-implementation, it can be administered using JonasAdmin.
-
-
Running JonasAdmin
-
-
Ensure that the web service is listed in the
-jonas.services property in the jonas.properties
-configuration file. If you are not using a jonas-tomcat or jonas-jetty
-package, depending on the Servlet container being used, the
-CATALINA_HOME or the JETTY_HOME environment
-variable must have been previously set. Note that when running the Servlet
-container on top of Unix, the DISPLAY environment variable must
-be set in order to use the JOnAS server monitoring feature of JonasAdmin.
-
-
Once JOnAS is launched, JonasAdmin must be loaded if it was not installed
-in the autoload directory. The administration console is
-accessible at the URL:
-http://<hostname>:<portnumber>/jonasAdmin/
-using any web browser.
-
-
<hostname> is the name of the host where the Servlet
-container is running and <portnumber> is the http port number
-(default is 9000).
-
-
After logging in, the left-hand frame in the Welcome page displays the
-management tree associated with the JOnAS server running JonasAdmin.
-Starting with JOnAS 4.6, the management tree's root is Domain, which
-corresponds to the new domain management facilities.
-
-
In the image below, JonasAdmin is running on the master server named jonas
-within a domain also named jonas. It is immediately apparent that this is a
-master server, as we have a Deployment sub-tree under the Domain
-root node.
-
-
-
-
-
-
-
The management tree in this figure allows access to the following main
-management facilities:
-
-
Domain administration with domain level deployment facilities.
-
Current server administration
-
-
Server monitoring
-
Logging management
-
Communication protocols management
-
Active services presentation and configuration
-
Dynamic deployment at the current server level
-
Resources management
-
Security management
-
-
Joram platform administration
-
MBeans browsing
-
-
-
Server management
-
-
Displays general information about the administered JOnAS server,
-including the JMX server and the WEB server, and provides the capability of
-listing the content of the Registry.
-
-
Server monitoring
-
-
Presents memory usage, a count of the threads created by JOnAS, and other
-monitoring information concerning managed services and resources.
-
-
Logging management
-
-
Allows the administrator to configure the JOnAS Logging system.
-Additionally, if Tomcat is used as the WEB container service implementation,
-it allows creation of new access log valves.
-
-
Communication protocols management
-
-
This management facility relates to the integration of Tomcat management
-in JonasAdmin.
-It currently presents connectors defined in the Tomcat configuration and
-allows for the creation of new HTTP, HTTPS, or AJP connectors.
-Note that the Protocols sub-tree is not presented if Jetty is
-used as the WEB container service implementation.
-
-
Active services presentation and configuration
-
-
All the active services have a corresponding sub-tree in the
-Services tree.
-
-
Managing the various container services consists of presenting information
-about the components deployed in these containers. New components can be
-deployed using the dynamic deployment facilities presented in the next
-section.
-
-Creation of a new context for WEB components to be deployed in the Tomcat server
-is deprecated since JOnAS 4.6 (the New web application button is
-removed).
-
-
-
Similarly, the services that allow management of the different types of
-resources (DataSources, Resource Adapters, Jms and Mail resources) also
-provide information about the resources being deployed. Additionally,
-deployed resources (DataSources or MailFactories) can be reconfigured and
-their new configuration made persistent by using a Save
-button.
-
-
The transaction service management allows reconfiguration (possibly
-persistent) and presents monitoring information about transactions managed by
-JOnAS.
-
-
Dynamic deployment with JonasAdmin
-
-
A very useful management operation is the capability of loading
-stand-alone J2EE components (JAR, WAR, RAR packages) or J2EE applications
-(EAR packages) in the administered server using the Deployment
-sub-tree.
-
-
-The administrator's task is facilitated by the display of the list of
-deployable modules, the list of deployed modules, and the capability of
-transferring modules from one list to another (which corresponds to
-deploy/undeploy operations.
-
-
-The deployable modules are files installed in directories specific to their type. For example, the
-deployable JARs are un-deployed JARs installed in
-JONAS_BASE/ejbjars/ or in a
-JONAS_BASE/ejbjars/autoload/ directory.
-
-
-The Deployment sub-tree also allows a J2EE package to be uploaded from
-the local file system to the corresponding directory of the administered server
-(install operation), and the opposite remove operation.
-
-
-
Resources management
-The Resources sub-tree provides the capability of loading or
-creating new resources managed by the active services. For example, if the
-JMS service is running, the JMS sub-tree in Resources presents
-the existing JMS destinations (Topics and Queues), and allows the removal of
-unused destinations and the creation of new JMS destinations.
-Adding or removing resources implies reconfiguration of the corresponding
-service. If this new configuration is saved using the Save
-button, the JOnAS configuration file is updated. As in the JMS service
-example, the removed topics are deleted from the list assigned to the
-jonas.service.jms.topics property and the newly created topics
-are added to this list.
-
-
Security management
-The Security sub-tree presents existing security realms and
-allows the creation of new realms of different types: memory, datasource, and
-ldap realms.
-
-
Domain management
-
-First recall that domain management functions are accessible only when JonasAdmin
-is deployed on a master server. The Domain tree contains only one
-Server sub-tree, the currently administered server, which is initially
-the server hosting JonasAdmin.
-
-Domain management principal function is to present the domain topology: list all the servers and clusters
-belonging to the domain. It also allows modification of the domain topology by adding new servers and clusters
-to the domain, removing servers and moving servers to/from clusters.
-
-In JOnAS 4.6 there is no cluster support, and the domain topology cannot be modified. The servers presented as belonging
-to the domain are those that have been started with their discovery service enabled.
-
-In JOnAS 4.7, domain management page also presents servers that are not yet started but are specified as
-belonging to the domain in the new configuration file named domain.xml.
-Also, a server can be added to the domain when it has been started without having the discovery service enabled.
-
-
-An essential domain management function is that the administrator can switch from the master to any of the
-other servers in the domain. Currently, JonasAdmin allows only one category of global domain level management
-operation, the deployment operation. Using any other management operation requires switching
-to the server to be administered.
-
-
Domain level deployment allows for deploying one or more J2EE packages (JARs, WARs, RARs or EARs), which
-are installed in the corresponding master directory (ejbjars, webaps, rars or apps), into any running server in the domain.
-A deployment operation target may be a server but also a cluster. In this case, the deployment
-operation addresses all the running servers in the cluster, including servers in the embedded clusters, if any.
-
-The deploy operation may have three semantics:
-
-
deploy only (create container) - which is useful when the package is already installed
-on the target server.
-
distribute only - which means install the package in the target's corresponding directory
-
distribute and (re)deploy the package, with optionally replacing the current package
-with the new one.
-
-Note that at domain level deployment the Upload and Remove operations
-are only related to the master server itself.
-
-It is important to note that JOnAS and Tomcat have different approaches to
-reconfiguration persistency. In JOnAS, every Save operation is
-related to a service or a resource reconfiguration. For example, the
-administrator can reconfigure a service and a resource, but choose to save
-only the new resource configuration.
-In Tomcat, the Save operation is global to all configuration
-changes that have been performed. For example, if a new HTTP connector is
-reconfigured and a new context created for a web application, both
-configuration changes are saved when using the Save
-button.
-
-
-
Management EJB Component
-
-The MEJB component exposes the managed objects within the JOnAS
-platform as JMX manageable resources. It is packed in an ejb-jar
-file installed in the $JONAS_ROOT/ejbjars/autoload directory,
-and therefor it is loaded at server start-up.
-
-The MEJB component is registered under the name
-java:comp/env/ejb/MEJB.
-
-The current implementation allows access only to the manageable
-resources within the current server (the server containing the
-MEJB's container).
-
-The JOnAS distribution was enriched with a new example called
-j2eemanagement, which shows how the MEJB can be used.
-You can find details about this management application in
-$JONAS_ROOT/j2eemanagement/README file.
the jndi high availability through the registry replication and the
- multi-target lookup
-
the load-balancing and fail-over at the EJB level (RMI flow) through
- the CMI cluster stub
-
-
for the Home interface of the EJB's SSB, SFSB, EB
-
for the Remote interface of the EJB's SSB
-
-
-
the SFSB high availability with the JOnAS HA service
-
-
-
-
-
Getting started with the CMI Protocol
-
-
CMI can be enabled in JOnAS by:
-
-
setting the cmi protocol in the $JONAS_BASE/conf/carol.properties
- file
-
compiling an application with the CMI protocol
-
-
-
Clustered objects and CMI Registry
-
-
CMI brings its own registry for implementing the jndi replication. Each
-CMI registry instance over the cluster contains two areas:
-
-
a local area for hosting the local objects that must not be
- replicated
-
a distributed area hosting the global objects (cluster objects) that
- must be replicated
-
-
-
When an object is registered in the registry, the routing to the local or
-global area is done according to:
-
-
the type of the object: only the remote objects are replicated
-
the presence of the 'CMI class' having the same name as the object
- class with the suffix '_CMI' and inherited from the
- org.objectweb.carol.cmi.Distributor class
-
one of the two following methods returning true:
-
-
equivAtBind() if the replication has to take place at the bind()
- time. For example, this could be the case for the EJB Remote Home
- objects.
-
equivAtExport() if the replication has to take place at the
- export() time. Typically, this could be the case for the SSB Remote
- objects.
-
-
-
-
-
The entries of the distributed area are lists providing the ability, for
-example, to gather several stubs for the the same jndi-name and thus to
-return a stubs list.
-
-
JNDI HA
-
-
Registry Replication
-
-
CMI relies on JGroups group-communication protocol for ensuring the global
-registry replication. The parameters are gathered in the:
-
-
$JONAS_BASE/conf/carol.properties for specifying the JGroups
- configuration file name and the JGroups group name.
-
$JONAS_BASE/conf/jgroups-cmi.xml file for the settings of the jgroups
- protocol stack. By default, the JGroups configuration uses the UDP
- protocol and the multicast IP for broadcasting the registry updates. A
- TCP-based stack can be used in a network environment that does not allow
- the use of multicast IP or when a cluster is distributed over a WAN.
-
-
-
-
-
All the members of a cluster share the same JGroups configuration.
-
-
If several cluster partitions are required over a single LAN, several
-JGroups configurations must be configured with different values for the
-following parameters:
-
-
JGroups group name
-
JGroups multicast address
-
JGroups multicast port
-
-
-
When a new node appears in the cluster, its registry content is
-synchronized automatically.
-
-
When a node disappears, JGroups notifies the other's member of the node
-leaving and the registry entries related to this node are removed.
-
-
Registry Fail-over
-
-
On the client side, the high availability of the registry is provided by
-the capability to set several JOnAS instances in the registry url. At the
-lookup time, the client chooses (round-robin algorithm) one of the available
-servers to get the home stub. If the server fails, the request is sent to
-another server. The CMI url registry is specified in the
-$JONAS_BASE/conf/carol.properties file using the following syntax:
Load-balancing and fail-over on the client side are provided through
-cluster-aware stubs. These stubs are generated on the fly through ASM and
-rely on:
-
-
the RMI/JRMP protocol for communicating with the server side,
-
the CMI class associated with the EJB for the load-balancing and
- fail-over logic.
-
-
-
-
-
Cluster Map on the Client Side
-
-
The CMI cluster stub handles a cluster map on the client side. The CMI
-cluster stub is created:
-
-
at lookup time for the SSB, SFSB, EB Home objects if the retrieved
- object is replicated and located in the global registry
-
at create time for the SSB Remote objects if the retrieved object is
- replicated and located in the global registry
-
-
-
In these two cases, the call gets a stubs list from the global registry
-and the CMI cluster stub updates the local cluster map. Afterwards, the local
-cluster map can be updated dynamically during the invocation of the business methods calls (through the HA interceptors) when a new view is detected in
-the cluster.
-
-
If a communication error with a server occurs during a remote call
-invocation, the server is removed from the cluster map.
-
-
CMI Class
-
-
CMI classes are generated by GenIC when compiling with the protocol CMI.
-They are built from the velocity templates located in
-$JONAS_ROOT/templates/genic directory. By default the templates used are:
-
-
ClusterHomeDistributor.vm for the home interface of the SSB, SFSB,
- EB
-
ClusterRemoteSLSBDistributor.vm for the remote interface of the SSB
-
-
-
The templates inherit the org.objectweb.carol.cmi.Distributor class and
-contain the following methods:
-
-
choose(method, params): this method is called by the CMI cluster stub
- at each remote method call to choose the next stub to use for invoking
- the call. By default, this method implements the weighted round-robin
- algorithm with a local preference, i.e., if there is a collocated server,
- it will be selected in priority. The servers factors are set for each
- JOnAS instance in the $JONAS_BASE/conf/carol.properties file.Below is
- given the code of the choose() method implementing a simple RR algorithm :
-
onException(method, params, stub, exception): this method is called by
- the CMI cluster stub when an exception occurs and returns a decision of
- RETRY, RETURN, or THROW for indicating the behavior to the CMI smart
- stub. By default, this method returns a RETRY decision if the exception
- is related to a network error, and otherwise it returns a THROW
- decision. Below is given the code of the mustFailover() method that
- is used by default for analysing the exception and deciding if the fail-over
- must occur :
-
- protected static boolean mustFailover(Exception ex) {
- if (ex instanceof UnmarshalException) {
- Throwable cause = ((UnmarshalException) ex).getCause();
- if (( cause instanceof EOFException) ||
- (cause instanceof SocketException)) {
- return true;
- }
- }
-
- if ((ex instanceof ConnectException) ||
- (ex instanceof ConnectIOException) ||
- (ex instanceof NoSuchObjectException)) {
- return true;
- }
- return false;
- }
-
-
-
-
onReturn(method, params, stub, returnValue): this method is called by
- the CMI cluster stub after having invoked the call and before returning
- to the application. This call back enables implementation of a
- post-processing on the return value. By default, this method does nothing.
-
-
-
-
-
Customizing the Load-balancing and Fail-over Logic
-
-
The user has the ability to customize the load-balancing and fail-over
-logic for each EJB by specifying the velocity template to use in the JOnAS-
-specific descriptor on deployment of the ejb-jar file. The XML elements
-are:
If not set, the default velocity templates are used.
-
-
If set with the value 'disabled', the CMI classes are not generated and
-the EJB will not be distributed.
-
-
If set with a file name, this file must be located in the
-$JONAS_ROOT/templates/genic directory.
-
-
The 'cluster-home-distributor' element is valid for the SSB, SFSB and
-EB.
-
-
The 'cluster-remote-distributor' element is valid for the SSB.
-
-
High Availability with Horizontal Replication
-
-
Stateful session beans (SFSBs) can be replicated since JOnAS 4.7 in order
-to provide high availability in the case of failures in clustered environments.
-A new service called High Availability (HA) has been included in JOnAS to
-provide replication mechanishms. JOnAS HA also requires the cluster
-method invocation (CMI) protocol.
-
-
Compared to JOnAS 4.7, JOnAS 4.8 implements a new replication algorithm
-based on a horizontal replication approach. The algorithm improves the
-algorithm implemented for JOnAS 4.7 with the following enhancements:
-
-
Replication of SFSBs with references to EBs: The algorithm can replicate
-SFSBs that reference EB by means of both, local or remote interfaces.
-
Transaction awareness: The algorithm is transaction aware, meaning that
-the state is not replicated if the transaction aborts.
-
Exactly-once semantics: Each transaction is committed exactly once at
-the DB if the client does not fail. If the client fails, each transaction
-is committed at most once at the DB
-
-
EJB replication Description
-
-
Update-everywhere mode
-
-
JOnAS implements an update-everywhere replication protocol according to
-the database replication terminology (See the J. Gray et al.'s paper ''The
-dangers of replication and a solution'' in proceedings of the ACM SIGMOD 96's
-conference, Canada). In this protocol, a client can connect to any server.
-When the client calls the create() method on the SFSB's Home interface, the
-server the client connects to is selected following a round-robin scheme. All
-the requests from the client to the SFSB will be processed by this server
-until the client calls the remove() method on the remote interface. The rest
-of the servers will act as backups for that client. Before sending the
-response to the client, the SFSB's state is sent to the backups.
-
-
If the server fails, another server among the backups will be selected to
-serve the client requests, first restoring the current state of the SFSBs
-from the state information stored in the HA local service. From this point
-on, this server will receive the new client requests.
-
-
The supported replication scenarios are shown in the following figure:
-
-
-
-
-
-
Transaction aware fail-over
-
-
The horizontal approach aims to guarantee that the transactions are kept
-consistent when a fail-over occurs. They are either aborted or restored
-for ensuring the exactly-once semantics. During a fail-over, the new primary
-uses a special table in the database for storing the transaction identifier
-and enabling to find out if the transaction was committed or not.
-
-
If the transaction is aborted due to the primary failure, then the new primary will
- not find the transaction identifier in the special table. The request will be replayed.
-
If the transaction is committed, then the new primary will find the transaction identifier,
- which means that the transaction was committed. The request won't be replayed; the replicated
- result is returned.
-
-
-Beyond the SFSB replication, the algorithm enables the building of applications
-(stateful or stateless) with a high level of reliability and integrity.
-
-
-
Configuring JOnAS for EJB Replication
-
-
The High Availability (HA) service is required in JOnAS in order to
-replicate SFSBs. The HA service must be included in the list of available
-services in JOnAS. This is done in the jonas.properties file placed in
-$JONAS_BASE/conf.
The HA service uses JGroups as a group communication layer (GCL). JGroups
-behavior is specified by means of a stack of properties configured through an
-XML file (See JGroups documentation for more
-information: http://www.jgroups.org). The default configuration of the HA
-service uses the $JONAS_BASE/conf/jgroups-ha.xml file and the sfsb-rep group name. The HA
-service can be told to use a particular stack configuration or a particular group name by modifying the following
-lines in jonas.properties:
-Finally, the CMI protocol must be specified in the carol.properties file in
-$JONAS_BASE/conf:
-
...
-carol.protocols=cmi...
-...
-
-
Transaction Table Configuration
-
The new horizontal replication algorithm uses a database table
-to keep track of current running transactions. This table is accessed from the new
-elected node during fail-over to detect whether or not the current transaction committed at
-the former local node, ensuring exactly-once semantics.
-The table contains only one column: the transaction identifier (txid).
-
In JOnAS 4.8 this table must be created manually with the following SQL command:
-
create TABLE ha_transactions (txid varchar(60));
-
This table should be located preferably in the database used by the replicated
-application, but it is not mandatory. If the table is not created in the database
-used by the replicated application, it is necessary to configure a new datasource
-for the database that contains this transaction table. This datasource must be
-configured to use the serializable transaction isolation level.
-
-
The database that holds the transaction table is accessed by the replication service with
-the JNDI name configured in jonas.properties.
-
...
-jonas.service.ha.datasource tx_table_ds
-...
-
-
Configuring Garbage Collection
-Due to the fact that the replication algorithm stores information associated with
-clients' transactions and that the server is not notified when a client dies,
-the HA service might have been storing unnecessary replication information over
-time. In order to automatically clean this unnecessary replication information,
-the HA service includes a garbage collection mechanism. It is possible
-to configure the number of seconds the system waits to execute this mechanism
-by changing the following property in the jonas.properties file:
-
...
-jonas.service.ha.timeout 600
-...
-
-
Configuring an Application for Replication
-
-
jonas-ejb-jar.xml
-
-
In order to configure an application for replication, the <cluster-replicated/> element must be added to the bean definition of every
-bean requiring high availability in the jonas-ejb-jar.xml deployment
-descriptor file. This element can have two possible
-values: true or false (default value). In addition, if the programmer wants
-to change the behavior of the CMI stubs (e.g., the server selection policy),
-it is possible to specify different distributor implementations by means of
-<cluster-home-distributor/> and <cluster-remote-distributor/>
-elements. In this case, the value corresponds to the .vm file that implements
-the distributor in its home and remote parts respectively. If the
-<cluster-replicated/> element is present without the
-<cluster-*-distributor/> elements, the default values are used
-(ClusterHomeSFSBRepDistributor.vm and ClusterRemoteSFSBRepDistributor.vm).
-
-
The following is an example description for a replicated SFSB in
-jonas-ejb-jar.xml file:
The <cluster-replicated/> element can also be set in the SSB or EB for
-
-
enabling the transaction checking mechanism ensuring the exactly-once semantic at
- fail-over
-
supporting the EB references replication
-
-
-
-
Note: When set in the SSB, the mechanism inhibits the load-balancing at the remote
-interface. After the home create() method call, all the requests are sent to the same
-instance.
-
-
Entity Beans lock policy
-
-
The lock policy for the Entity Beans in a replicated application must be configured
-as database in the jonas-ejb-jar.xml deployment descriptor file.
-
The following is an example description for a replicated EB in the jonas-ejb-jar.xml:
Finally, when compiling the application that includes the replicated
-beans, the CMI protocol must be specified in order to generate the classes
-that include the replication logic.
-
-
Status and Management Information in Admin. Console for the HA Service's Replication Algorithm
-
-The JOnAS administration console offers several items of information about the HA
-service's replication algorithm and allows the configuring of several parameters
-related to its behaviour. The related information and parameters include:
-
-
-
The name of the service.
-
The binded name for the MBean. The name can be changed.
-
The number of replicated messages sent by the algorithm to the cluster's
- replicas.
-
The average size of the replicated messages sent.
-
The total size of the replicated messages sent.
-
The current JGroups configuration file name used.
-
The current timeout established to clean in memory information related
- to SFSBs required by the algorithm. When this timeout expires, the
- information is garbage-collected. This avoids increasing the memory used
- by the algorithm. The administrator can set a different
- timeout if required.
-
The datasource name required by the algorithm to keep track of current
- running transactions (See Transaction Table Configuration section above).
- The default datasource is setted through the "jonas.service.ha.datasource"
- parameter in the "jonas.properties" configuration file, but the administrator
- can configure different datasources and can set here, the name of the one
- that will be used by the algorithm, once JOnAS has started.
-
NOTE: It is recomended to not change the Datasource once the HA service
- is running.
The deployment and installation of Enterprise Beans
-
-
This guide assumes that the Enterprise Bean provider followed the
-Enterprise Beans Programmer's Guide and packaged the beans's classes together
-with the deployment descriptors in a ejb-jar file. To deploy un-packed
-Enterprise Beans, refer to Configuring EJB
-Container service.
-
-
-
To deploy the Enterprise Beans in JOnAS, the deployer must add the
-interposition classes interfacing the EJB components with the services
-provided by the JOnAS application server.
-The GenIC tool supplied in the JOnAS
-distribution provides the capability of generating interposition classes and
-updating the ejb-jar file.
-The application deployer may also need to customize the deployment
-descriptors in order to adapt it to a specific operational environment. This
-must be done before using GenIC.
-
-
The deployer may choose to deploy the Enterprise Beans as stand-alone
-application components, in which case the ejb-jar must be installed in the
-$JONAS_ROOT/ejbjars directory. The deployer may also choose to
-include them in war or ear packaging, which is presented in the following
-sections.
-
-
The deployment and installation of Web and J2EE applications
-Once the packaging of the application components has been completed as
-described in the WAR Packaging or EAR Packaging guides, the obtained archive file must be
-installed in the:
-
-
$JONAS_ROOT/webapps directory, for war files
-
$JONAS_ROOT/apps directory, for ear files
-
-
-
Example of deploying and installing
-an EJB using an ejb-jar file
-
-
For this example, it is assumed that a user wants to customize the
-deployment of the AccountImpl bean in the JOnAS example
-examples/src/eb by
-changing the name of the database table used for the persistence of the
-AccountImpl.
-
-
The current directory is $JONAS_ROOT/examples/src/eb. The
-user will do the following:
-
-
Editjonas-ejb-jar.xml and modify the value of the
- <jdbc-table-name> element included in the
- <jdbc-mapping> element corresponding to
- AccountImpl entity.
-
Compile all the .java files present in this
- directory:
- javac -d ../../classes Account.java
- AccountImplBean.java AccountExplBean.java AccountHome.java
- ClientAccount.java
-
Perform deployment
-
-
Build an ejbjar file named ejb-jar.jar with all the
- corresponding classes and the two deployment descriptors:
-
-The JOnAS application Server can now be launched using the command:
-jonas start
-
-
The steps just described for building the new ejb-jar.jar
-file explain the deployment process. It is generally implemented by an ANT
-build script.
-
-
If Apache ANT is installed on your machine, type ant
-install in the $JONAS_ROOT/examples/src directory to build
-and install all ejb-jar.jar files for the examples.
-To write a build.xml file for ANT, use the ejbjar
-task, which is one of the optional EJB tasks defined
-in ANT. The ejbjar task contains a nested element called
-jonas, which implements the deployment process described above
-(interposition classes generation and EJB-JAR file update).
-Generally, the latest version of the EJB task containing an updated
-implementation of the jonas nested element is provided with
-JOnAS, in $JONAS_ROOT/lib/common/ow_jonas_ant.jar. Click here
-for the documentation corresponding
-to this new version of the jonas nested element.
-As an example, this code snippet is taken from the
-$JONAS_ROOT/examples/src/alarm/build.xml:
-
Before deploying a web application in the JOnAS application server, first
-package its components in a war file as explained in the WAR packaging guide.
-For Apache ANT, refer to the target war in the
-$JONAS_ROOT/examples/earsample/build.xml file.
-
-
Next, install the war file into the
-$JONAS_ROOT/webapps directory.
-Note: Be aware that the war file must not be installed in the
-$CATALINA_HOME/webapps directory.
-
-
Then, check the configuration: before running the web application;
-check that the web service is present in the
-jonas.services property. The ejb service may also be
-needed if the Web application uses enterprise beans.
-The name of the war file can be added in the
-jonas.service.web.descriptors section.
-
-
Finally, run the application Server:
-jonas start
-
-
The web components are deployed in a web container created during the
-startup. If the war file was not added in the
-jonas.service.web.descriptors list, the web components can be
-dynamically deployed using the jonas admin command or
-JonasAdmin tool.
-
-
Deploying and installing a J2EE
-application
-
-
Before deploying a J2EE application in the JOnAS application server, first
-package its components in an ear file as explained in the EAR packaging
-guide.
-For Apache ANT, refer to the target ear in the
-$JONAS_ROOT/examples/earsample/build.xml file.
-
-
Next, install the ear file into the $JONAS_ROOT/apps
-directory.
-
-
Then, check the configuration: before running the application,
-check that the ejb, web and ear services are
-present in the jonas.services property.
-The name of the ear file can be added in the
-jonas.service.ear.descriptors section.
-
-
Finally, run the application Server:
-jonas start
-
-
The application components are deployed in EJB and web containers created
-during the startup. If the ear file was not added in the
-jonas.service.ear.descriptors list, the application components
-can be dynamically deployed using the jonas admin command or
-JonasAdmin tool.
This guide is intended for JOnAS administrators responsible for the configuration
- and administration of JOnAS servers running within a management domain.
-
-
-
Domain and Cluster Management Functions
-
A JOnAS management domain is composed of a set of JOnAS servers that are running under the same
- management authority. All the servers in the domain must have a distinct server name and
- a common domain name.
-
-
The servers in a domain can be administered by a management application running on a server
- playing the role of administrator or master. The managed servers play the role of slaves.
- Note that it is possible to have several masters in a domain. Also note that default configuration
- corresponds to a slave server running without the discovery service (the role of this service is
- described below and its configuration here).
-
-
- Typically, when deploying the JonasAdmin application on a slave, the administrator can manage only
- the server on which the application is running. When deploying JonasAdmin on a master server,
- the administrator can manage all the known servers in the domain:
-
-
the administrator can see the state of the servers belonging to the domain;
-
can apply management operations to
- one or more servers in the domain;
-
switch management from the master to any other running server
- in the domain, then switch back to the master.
-
Starting with JOnAS 4.8, administration is enriched with domain and cluster monitoring features,
- and remote control.
-
-
-
- Cluster management facilities was introduced in JOnAS 4.7.
- A cluster is a group of servers having common properties within a domain. A cluster may be the target of a
- domain level management operation - currently applications and J2EE modules deployment only.
-
-
- The domain topology (servers and clusters composing the domain) can be defined using a new domain.xml
- configuration file. Also, servers and clusters may be dynamically added and removed to the domain via JonasAdmin.
-
-
- Starting with JOnAS 4.8, domain and cluster management is enhanced with monitoring functions available in
- JonasAdmin. As in the previous version, clusters may be created by an administrator in a static (via domain.xml)
- or dynamic (via JonasAdmin) way. These clusters are now called logical cluster. A new class of clusters
- is supported in the current version, the physical clusters that are detected automatically by the management
- infrastructure. Several types of physical clusters are supported: Mod JK clusters, Tomcat clusters, CMI clusters, etc.
- All the members of a type of physical cluster share specific properties which depend on the cluster type, e.g., all
- the members of a CMI cluster have the same JGroups configuration. Note that a given JOnAS instance may belong to
- several physical and logical clusters.
-
-
- An important domain level administration operation introduced in JOnAS 4.8, is the possiblity to start/stop
- the managed servers via a so called cluster daemon.
- Cluster daemons can be defined and associated
- to servers using the domain.xml configuration file. A cluster daemon has to be collocalized (located on the same
- machine) with the servers it controls.
-
-
-
Mechanisms used by Domain Management
-
Basically, domain management in JOnAS relies on JSR 160 specification. When a JOnAS server is started,
- it creates at least one JSR 160 connector server as explained in
- JSR 160 support in JOnAS.
-
-
- A connector server makes it possible for a JMX remote API client to access and manage the MBeans exposed
- through the MBean server running in a remote JVM. In order to establish a connection, the remote client
- needs to know the address of the connector server. JSR 160 does not provide any specific API that would
- make it possible for a client to find the address of a connector server. The standard suggests using
- existing discovery and lookup infrastructures, for instance, JNDI API with an LDAP back end.
-
-
- A new service added to JOnAS, the Discovery Service, allows JOnAS servers running over
- a LAN within the same management domain to communicate to each other the connector-server addresses they create
- at start-up. All the servers in the domain having the discovery service in the services list, will
- publish their connector-server address at start-up. The goal is to allow master servers to
- discover which servers are running in their domain, and to establish connections allowing them to remotely
- manage the slave servers by a management application deployed on a master server.
-
-
- Starting with JOnAS 4.7, a server can be added to a domain via a management operation, thus allowing servers which
- cannot use the multicast-based discovery service to join a management domain.
-
-
- The current discovery service implementation is based on MBeans (called discovery MBeans) which use:
-
-
IP Multicast protocol to communicate their connector-server addresses and state transitions to each other.
-
JMX notifications to update domain management information within a master server.
-
-
-
J2EEDomain MBean
- Domain management information can be retrieved from J2EEDomain MBean.
-
- The J2EEDomain MBean has the following JMX ObjectName:
-
- A J2EEDomain MBean contains several management attributes and operations related to servers management
- in a domain:
-
-
If the J2EEDomain is registered in a master server's MBean server, the servers
- attribute keeps the list of the servers known in the domain. Otherwise, it contains only one element corresponding to itself.
- The elements in the servers list are Strings representing J2EEServer ObjectNames
- associated to the running servers. By iterating over the servers
- list, a management application can determine the name of the servers in the domain.
-
-
The getConnectorServerURLs operation returns the connector server addresses for a server in the list.
- In order to administer a given server in the domain, any management application has to create an
- MBeanServerConnection object using one of the connector-server addresses corresponding to that server
- (see the j2eemanagement sample).
-
-
-
-
-
-
- Starting with JOnAS 4.7, the J2EEDomain MBean was enriched in order to support adding/removing a server to/from the domain,
- creating a cluster in the domain, listing the clusters in a domain.
-
-
- The following is a list of some of the new management attributes and operations exposed by a J2EEDomain MBean:
-
clusters attribute gives the String representation of the J2EEDomain ObjectNames
- associated to the clusters created in this domain
- (or in this cluster if the current J2EEDomain MBean is associated to a cluster).
-
-
-
- In JOnAS 4.7, clusters are implemented as "sub-domains", they have associated J2EEDomain
- type MBeans. For example, if a cluster named clust is created in the domain named
- domainName, it has an associated MBean with the following JMX ObjectName:
-
- An important re-engineering of domain management mechanisms was conducted in JOnAS 4.8 to support
- cluster and domain monitoring. Clusters aren't implemented as sub-domains anymore; there is only
- one J2EEDomain MBean registered in the master's MBean server. Another important point
- is that the servers' state is no longer accessible in the J2EEDomain MBean (getServerState(serverName)
- operation doesn't exist anymore). On the other hand, new MBeans were created:
-
-
-
ServerProxy MBeans. For every server known in the domain, a ServerProxy MBean is created with the
- following JMX ObjectName:
-
- domainName:type=ServerProxy,name=serverName
-
- It contains a State attribute which gives the server state as known by the master, and
- a set of monitoring information like memory usage, threads, transactions, etc. which are periodically
- updated. The servers may be in one of the following states:
-
-
INIT - corresponds to a server that was added to the domain. This is a temporary state.
-
UNREACHABLE - corresponds to a server that was added to the domain but the master
- is unable to access the managed server (the MBeanServerConnection could
- not be established, or it doesn't work anymore)
-
RUNNING - corresponds to a server that is running and controlled by the master
-
STOPPED - corresponds to a server which was stopped with the jonas stop
- command (if the server has enabled its discovery service), or if the server was stopped
- using the remote control mechanisms (via the cluster daemon).
-
FAILED - corresponds to a particular case of UNREACHABLE state. The master decides to pass
- a server in the FAILED state if it is UNREACHABLE for a while, and if it has some information
- allowing to infer that the server is failed: First, the managed server had its discovery service
- enabled (otherwise, the server stop can't be detected, so can't distinguish STOPPED from FAILED).
- Moreover, the master can use information provided by the cluster daemon, if the
- server has an associated, running, cluster daemon.
-
-
-
Cluster MBeans. For every cluster created in the domain, a LogicalCluster
- MBean is created with the following JMX ObjectName:
-
- The master may have registered other types of cluster MBeans which correspond to physical clusters.
- They are automatically created by the management system if managed servers are identified as
- being members of supported physical cluster types.
-
- A cluster MBean contains a State attribute and a member's list.
- A cluster may be in one of the following states,
- which depends on the state of its members.
-
-
INIT - corresponds to a cluster that was created in the domain. This is a temporary state.
-
UP - all the members are in RUNNING state
-
DOWN - all the members are STOPPED
-
FAILED - all the members are FAILED
-
PARTIALLY_FAILED - at least one member is FAILED
-
PARTIALLY_UP - at least one member is RUNNING, there is no failed member
-
PARTIALLY_DOWN- at least one member is STOPPED, there is no FAILED member, there is no RUNNING member
-
-
-
ClusterMember MBeans. A member MBean's role is to make the link between a cluster MBean and
- the ServerProxy MBean
- corresponding to the server which belongs to that cluster. Any member MBean has a ServerProxy attribute
- equal to the corresponding ServerProxy MBean OBJECT_NAME. If a server belongs to several clusters, there is a
- member MBean for each cluster, and all these members have the same value for the ServerProxy attribute.
- There are several types of member MBeans. They correspond to the several cluster types. The
- LogicalClusterMember
- MBeans are used to represent LogicalCluster members.
-
-
-
-
Physical clusters
-Logical clusters are created by the administrator to facilitate management administration on a group of
-servers. Physical clusters are created automatically if servers running in the domain have particular
-properties which depend on the cluster type.
-
-
Mod_jk load balancing clusters. The members of such a cluster are workers defined in
-the mod_jk configuration file workers.properties. The workers correspond to JOnAS server instances
-having the web service based on Tomcat and a specific configuration (server.xml having a Connector
-XML element for AJP1.3 protocol defined, as well as the Engine element having the jvmRoute attribute
-set to the worker name).
-
The ObjectNames corresponding to Mod_jk clusters and Mod_jk cluster members are:
-
- The workerName and clusterName are defined in the workers.properties configuration file.
-
-
-
Tomcat session replication clusters. The members are JOnAS-Tomcat cluster servers having
-a Cluster element defined in server.xml file. The management infrastructure detects
-Tomcat cluster members by looking for Tomcat Cluster MBeans in the managed server's MBean server.
-
The ObjectNames corresponding to Tomcat session replication clusters and Tomcat cluster members are:
-
- The clusterName can be defined in the jonas.properties configuration file and
- represents a JavaGroups group name.
-
-
-
-
-
How to start manageable servers in a Domain
-
The servers must adhere to these rules:
-
-
The servers must be started on hosts connected by a LAN.
-
The servers must be configured with the discovery service activated (see
- Configuring Discovery Service).
-
-
There must be at least one master server in the domain.
- The role of a server, slave
- or master, is determined by the discovery service configuration.
-
-
The servers must have different names, but the same domain name.
-
-
Also note the following:
-
-
Servers may be started in any order.
-
Servers may join or leave the domain at any time. Domain management information is updated on the master server(s).
-
A slave server may become master by invoking the startDiscoveryMaster management operation exposed by
- the discovery service. This operation can be invoked using the JonasAdmin management console deployed on a master.
-
-
Example
-
Consider a scenario in which there are three JOnAS servers named jonas, j1 and j2.
- Assume that they have discovery service configured with at least one of the servers playing the role of master.
-
-
-
Start the server named jonas in domain jonas (by default, the domain name is given by the server's name)
-
- jonas start
-
-
Start the server named j1 in domain jonas
-
- jonas start -n j1 -Ddomain.name=jonas
-
-
Start the server named j2 in domain jonas
-
- jonas start -n j2 -Ddomain.name=jonas
-
-
-
-
How to define domain configuration using domain.xml file
-
A default domain configuration is provided in $JONAS_ROOT/conf/domain.xml.
-This configuration corresponds to a domain named jonas managed by a master
-server also named jonas. The location tag defines a JMX remote
-connector server URL for this server.
-
The SunTMJ2EE
-specification, together with its related specifications ( EJBTM, JMSTM,...), defines
-an architecture and interfaces for developing and deploying distributed
-Internet JavaTM server applications based on a multi-tier
-architecture. This specification intends to facilitate and standardize the
-development, deployment, and assembling of application components; such
-components will be deployable on J2EE platforms. The resulting applications
-are typically web-based, transactional, database-oriented, multi-user,
-secured, scalable, and portable. More precisely, this specification describes
-two kinds of information:
-
-
The first is the runtime environment, called a J2EE server, which
- provides the execution environment and the required system services, such
- as the transaction service, the persistence service, the Java Message
- Service (JMS), and the security service.
-
The second is programmer and user information explaining how an
- application component should be developed, deployed, and used.
-
-
-
Not only will an application component be independent of the platform and
-operating system (since it is written in Java), it will also be independent
-of the J2EE platform.
-
-
A typical J2EE application is composed of 1) presentation components, also
-called "web components" (Servlets and JSPsTM), which define
-the application Web interface, and 2) enterprise components, the "Enterprise
-JavaBeans" (EJB), which define the application business logic and application
-data. The J2EE server provides containers for hosting web and enterprise
-components. The container provides the component life-cycle management and
-interfaces the components with the services provided by the J2EE server.
-There are two types of containers; the web container handles Servlet and JSP
-components, while the EJB container handles the Enterprise JavaBeans
-components. A J2EE server can also provide an environment for deploying Java
-clients (accessing EJBs); it is called client container.
-
-
-
ObjectWeb
-
-
JOnAS is an open source application server, developed within the ObjectWeb
-consortium. ObjectWeb is an open
-source initiative which can be compared to Apache or Linux, but in the area
-of middleware. The aim of ObjectWeb is to develop and
-promote open source middleware software.
-
-
ObjectWeb is an International Consortium hosted by INRIA, officially
-founded in February 2002 by Bull, France Telecom, and INRIA. All software is
-available with the LGPL license.
-
-
The technical objective of this consortium is to develop a distributed
-component-based, middleware technology, in line with CORBA, Java, and W3C
-standards. The intent is to apply the component model, as already used at the
-application level in J2EE and in the CORBA Component Model, at the middleware
-level itself. The functional coverage of ObjectWeb projects addresses naming,
-trading, communication (events, messages), availability and safety
-(transactions, persistence, replication, fault tolerance), load balancing,
-and security. Some related topics are also addressed, such as robustness,
-optimization, code quality, as well as benchmarks, tests, evaluations,
-demonstrators, and development tools. More recently, the middleware
-eco-system around JOnAS within ObjectWeb addresses Service Oriented
-Architecture (SOA).
-
-
ObjectWeb already has a significant number of members: corporations,
-universities, individual members (individual membership is free). ObjectWeb
-members contribute to ObjectWeb orientations and participate in all ObjectWeb
-working groups, meetings, workshops, and conferences. The community of
-developers and users working with ObjectWeb components and platforms is
-constantly growing.
-
-
JOnAS Features
-
-
JOnAS is a pure Java, open source, application server. Its high modularity
-allows to it to be used as
-
-
a J2EE server, for deploying and running EAR applications (i.e.
- applications composed of both web and ejb components),
-
an EJB container, for deploying and running EJB components (e.g. for
- applications without web interfaces or when using JSP/Servlet engines
- that are not integrated as a JOnAS container),
-
a Web container, for deploying and running JSPs and Servlets (e.g. for
- applications without EJB components).
-
-
-
System Requirements
-
-
JOnAS is available for JDK 1.4 and JDK 5. It has been used on many
-operating systems (Linux, AIX, Windows, Solaris, HP-UX, etc.), and with
-different Databases (Oracle, PostgreSQL, MySQL, SQL server, Access, DB2,
-Versant, Informix, Interbase, etc.).
-
-
Java Standard Conformance
-
-
JOnAS supports the deployment of applications conforming to J2EE 1.4
-specification. Its current integration of Tomcat or Jetty as a Web container
-ensures conformity to Servlet 2.4 and JSP 2.0 specifications. The JOnAS
-server relies on or implements the following Java APIs: EJBTM 2.1,
-JTATM 1.0.1, JDBC 3.0, J2EE CATM 1.5, JMXTM
-1.2, JNDITM 1.2.1, JMSTM 1.1, JavaMailTM
-1.3, ServletTM 2.4, JSPTM 2.0, JAASTM 1.0,
-JACCTM 1.0, Web Services 1.1, JAX-RPCTM 1.1,
-SAAJTM 1.2, JAXRTM 1.0, J2EE Management 1.0,
-JAFTM 1.0, JAXPTM 1.2 specifications. JOnAS is
-architectured in terms of services.
-
-
Key Features
-
-
JOnAS provides the following important advanced features:
-
-
Management: JOnAS server management uses JMX and
- provides a JSP/Struts-based management console. It provides high level
- functionalities for monitoring and managing clusters of JOnAS
- servers.
-
Services: JOnAS's service-based architecture provides
- for high modularity and configurability of the server. It allows the
- developer to apply a component-model approach at the middleware level,
- and makes the integration of new modules easy (e.g. for open source
- contributors). It also provides a way to start only the services needed
- by a particular application, thus saving valuable system resources. JOnAS
- services are manageable through JMX.
-
Scalability: JOnAS integrates several optimization
- mechanisms for increasing server scalability. This includes a pool of
- stateless session beans, a pool of message-driven beans, a pool of
- threads, a cache of entity beans, activation/passivation of entity beans,
- a pool of connections (for JDBC, JMS, J2EE CA), storage access
- optimizations (shared flag, isModified).
-
Clustering: JOnAS clustering solutions, both at the
- WEB and EJB levels, provide load balancing, high availability, and
- failover support.
-
Distribution: JOnAS works with several distributed
- processing environments, due to the integration of the CAROL (Common
- Architecture for RMI ObjectWeb Layer) ObjectWeb project, which allows
- simultaneous support of several communication protocols:
-
-
RMI using the Sun proprietary protocol JRMP
-
RMI on IIOP
-
CMI, the "Cluster aware" distribution protocol of JOnAS
-
IRMI, an open source RMI protocol implementation
-
-
JOnAS benefits from transparent local RMI call optimization.
-
-
Support of "Web Services:" Due to the integration of
- AXIS, JOnAS allows J2EE components to access "Web services" (i.e., to be
- "Web Services" clients), and allows J2EE components to be deployed as
- "Web Services" endpoints. Standard Web Services clients and endpoints
- deployment, as specified in J2EE 1.4, is supported.
-
Support of JDO: By integrating the ObjectWeb
- implementation of JDO, SPEEDO, and its associated J2EE
- CA Resource Adapter, JOnAS provides the capability of using JDO within
- J2EE components.
-
Early support of EJB3: Even before the EJB3
- specification (part of Java EE 5, the new J2EE specification) is
- finalized, JOnAS already provides an EJB3 container. This one is
- available as a J2EE CA Resource Adapter, which may be deployed on JOnAS
- 4. It is developed as a standalone ObjectWeb project, named EasyBeans. This container makes
- EJB development far more easy.
-
-
-
Three critical J2EE aspects were implemented early on in the JOnAS
-server:
-
-
J2EECA: Enterprise Information Systems (EIS) can be
- easily accessed from JOnAS applications. By supporting the Java Connector
- Architecture, JOnAS allows deployment of any J2EE CA-compliant Resource
- Adapter (connector), which makes the corresponding EIS available from the
- J2EE application components. For example, Bull GCOS mainframes can be
- accessed from JOnAS using their associated HooX
- connectors. Moreover, with J2EE 1.4, resource adapters are now the
- "standard" way to plug JDBC drivers and JMS implementation, to J2EE
- platforms. A JDBC Resource Adapter is available with JOnAS, which
- provides JDBC PreparedStatement pooling and can be used in place of the
- JOnAS DBM service. A JORAM JMS Resource Adapter is also available. The
- JOnAS EJB3 early container is also available as a Resource Adapter.
-
JMS: JMS implementations can be easily plugged into
- JOnAS. They run as a JOnAS service or through a resource adapter in the
- same JVM (Java Virtual Machine) or in a separate JVM. JOnAS provides
- administration facilities that hide the JMS proprietary administration
- APIs. Currently, two JMS implementations can be used: the JORAM open source JMS
- implementation from Objectweb, and Websphere MQ. JORAM management is
- particularly strongly integrated within the JOnAS management console.
- Clustering configurations involving load balacing and high availability
- at the JMS level are also available thanks to JORAM HA features.
-
JTA: The JOnAS platform supports distributed
- transactions that involve multiple components and transactional
- resources. The JTA transactions support is provided through JOTM, a Transaction Monitor that has
- been developed on an implementation of the CORBA Transaction Service
- (OTS). Originally this transaction monitor was JOnAS internal; it has
- been extracted to be available as a standalone project, JOTM.
-
-
-
JOnAS Packages
-
-
JOnAS is available for download with three different packagings:
-
-
A simple packaging contains the JOnAS application server only, without
- the associated Web Container implementation. To use it for J2EE Web
- applications, Tomcat or Jetty must be installed (with an adequate
- version) and it must be configured to work with JOnAS.
-
A JOnAS-Tomcat package contains both JOnAS and Tomcat, pre-configured,
- and with compiled examples. This is a ready-to-run J2EE application
- server.
-
A JOnAS-Jetty package contains both JOnAS and Jetty, pre-configured,
- and with compiled examples. This is a ready-to-run J2EE application
- server.
-
-
-
These packages also contain AXIS, thus providing pre-configured "Web
-Services" support.
-
-
JOnAS Architecture
-
-
JOnAS is designed with services in mind. A service typically provides
-system resources to containers. Most of the components of the JOnAS
-application server are pre-defined JOnAS services. However, it is possible
-and easy for an advanced JOnAS user to define a service and to integrate it
-into JOnAS. Because J2EE applications do not necessarily need all services,
-it is possible to define, at JOnAS server configuration time, the set of
-services that are to be launched at server start.
-
-
The JOnAS architecture is illustrated in the following figure, showing WEB
-and EJB containers relying on JOnAS services (this figure only misses the HA
-service). Two thin clients are also shown in this figure, one of which is the
-JOnAS administration console (called JonasAdmin).
-
-
-
Communication and Naming Service
-
-
This service (also called "Registry") is used for launching the RMI
-registry, the CosNaming, and/or the CMI registry, depending on the JOnAS
-configuration (CAROL configuration, which specifies which communication
-protocols are to be used). There are different registry launching modes: in
-the same JVM or not, automatically if not already running. CAROL enables
-multi-protocol runtime support and deployment, which avoids having to
-redeploy components when changing the communication protocol.
-
-
This service provides the JNDI API to application components and to other
-services in order to bind and lookup remote objects (e.g. EJB Homes) and
-resource references (JDBC DataSource, Mail and JMS connection factories,
-etc.).
-
-
EJB Container Service
-
-
This service is in charge of loading the EJB 2.1 components and their
-containers. EJB containers consist of a set of Java classes that implement
-the EJB specification and a set of interposition classes that interface the
-EJB components with the services provided by the JOnAS application server.
-Interposition classes are specific to each EJB component and are generated by
-the deployment tool called GenIC; this tool is automatically called at
-deployment time, if necessary.
-
-
Enterprise JavaBeans (EJB) are software components that implement the
-business logic of an application (while the Servlets and JSPs implement the
-presentation). There are three types of Enterprise JavaBeans:
-
-
Session beans are objects associated with only one
- client, short-lived (one method call or a client session), that represent
- the current state of the client session. They can be transaction-aware,
- stateful, or stateless.
-
Entity beans are objects that represent data in a
- database. They can be shared by several clients and are identified by
- means of a primary key. The EJB container is responsible for managing the
- persistence of such objects. The persistence management of such an object
- is entirely transparent to the client that will use it, and may or may
- not be transparent to the bean provider who develops it. This depends on
- if it is one of the following:
-
-
An enterprise bean with Container-Managed
- Persistence. In this case, the bean provider does not
- develop any data access code; persistence management is delegated to
- the container. The mapping between the bean and the persistent
- storage is provided in the deployment descriptor, in an application
- server-specific way.
-
An enterprise bean with Bean-Managed Persistence.
- In this case, the bean provider writes the database access operations
- in the methods of the enterprise bean that are specified for data
- creation, load, store, retrieval, and remove operations.
-
-
-
Message-driven Beans are objects that can be
- considered as message listeners. They execute on receipt of a JMS (Java Message Service)
- message; they are transaction-aware and stateless. They implement some
- type of asynchronous EJB method invocation.
-
-
-
-
-
JOnAS configuration provides a means for specifying a set of ejb-jar files
-to be loaded at server start. Ejb-jar files can also be deployed at server
-runtime using the JOnAS administration tools.
-
-
For implementing Container-Managed Persistence of EJB 2.0 and EJB 2.1
-(CMP2), JOnAS relies on the ObjectWeb JORM (Java Object Repository Mapping)
-and MEDOR (Middleware Enabling
-Distributed Object Requests) frameworks. JORM supports complex mappings of
-EJBs to database tables.
-
-
The JOnAS EJB 2.1 container provides many optimization mechanisms to
-improve data access and scalability: pool of instances, caches, lock
-policies...
-
-
JOnAS also implements the Timer Service features as specified in EJB
-2.1.
-
-
WEB Container Service
-
-
This service is in charge of running a Servlet/JSP Engine in the JVM of
-the JOnAS server and of loading web applications ("war" files) within this
-engine. Currently, this service can be configured to use Tomcat or Jetty. Servlet/JSP engines are
-integrated within JOnAS as "web containers," i.e. such containers provide the
-web components with access to the system resources (of the application
-server) and to EJB components, in a J2EE-compliant way.
-
-
JOnAS configuration provides a means for specifying that this service be
-launched during JOnAS initialization. Additionally, JOnAS configuration
-provides a means for specifying a set of war files to be loaded. War files
-may also be deployed at server runtime using the JOnAS administration tools.
-User management for Tomcat/Jetty and JOnAS has been unified. The
-class-loading delegation policy (priority to the Webapp classloader or to the
-parent classloader) can be configured. Tomcat management has been strongly
-integrated within the JOnAS management console.
-
-
Servlet and JSPTM are technologies
-for developing dynamic web pages. The Servlet approach allows the development
-of Java classes (HTTP Servlets) that can be invoked through HTTP requests and
-that generate HTML pages. Typically, Servlets access the information system
-using Java APIs (as JDBC or the APIs of EJB components) in order to build the
-content of the HTML page they will generate in response to the HTTP request.
-The JSP technology is a complement of the Servlet technology. A JSP is an
-HTML page containing Java code within particular XML-like tags; this Java
-code is in charge of generating the dynamic content of the HTML page.
-
-
Servlets and JSPs are considered as J2EE application components,
-responsible for the application presentation logic. Such application
-components can access resources provided by the J2EE server (such as JDBC
-datasources, JMS connection factories, EJBs, mail factories). For J2EE
-components, the actual assignment of these resources is performed at
-component deployment time and is specified in the deployment descriptor of
-each component, since the component code uses logical resource names.
-
-
Ear Service
-
-
This service is used for deploying complete J2EE applications, i.e.
-applications packaged in EAR files, which themselves contain ejb-jar files
-and/or war files. This service handles the EAR files and delegates the
-deployment of the war files to the WEB Container service and the ejb-jar
-files to the EJB Container service. It handles creating the appropriate class
-loaders, in order for the J2EE application to execute properly.
-
-
For deploying J2EE applications, JOnAS must be configured to launch the
-EAR service and to specify the set of EAR files to be loaded. EAR files can
-also be deployed at server runtime using the JOnAS administration tools.
-
-
Transaction Service
-
-
This service encapsulate a Java Transaction Monitor called JOTM (a project from ObjectWeb). It is a
-mandatory service which handles distributed transactions. It provides
-transaction management for EJB components as defined in their deployment
-descriptors. It handles two-phase commit protocol against any number of
-Resource Managers (XA Resources). For J2EE, a transactional resource may be a
-JDBC connection, a JMS session, or a J2EE CA Resource Adapter connection. The
-transactional context is implicitly propagated with the distributed requests.
-The Transaction Monitor can be distributed across one or more JOnAS servers;
-thus a transaction may involve several components located on different JOnAS
-servers. This service implements the JTA 1.0.1 specification, thus allowing
-transactions from application components or from application clients to be
-explicitly started and terminated. Starting transactions from application
-components is only allowed from Web components, session beans, or
-message-driven beans (only these two types of beans, which is called
-"Bean-managed transaction demarcation").
-
-
One of the main advantages of the EJB support for transactions is its
-declarative aspect, which means that transaction control is no longer
-hard-coded in the server application, but is configured at deployment time.
-This is known as "Container-managed transaction demarcation." With
-"Container-managed transaction demarcation," the transactional
-behaviour of an enterprise bean is defined at configuration time and is part
-of the deployment descriptor of the bean. The EJB container is responsible
-for providing the transaction demarcation for the enterprise beans according
-to the value of transactional attributes associated with EJB methods, which
-can be one of the following:
-
-
NotSupported: If the method is called
- within a transaction, this transaction is suspended during the time of
- the method execution.
-
Required: If the method is called within
- a transaction, the method is executed in the scope of this transaction,
- else, a new transaction is started for the execution of the method and
- committed before the method result is sent to the caller.
-
RequiresNew: The method will always be
- executed within the scope of a new transaction. The new transaction is
- started for the execution of the method, and committed before the method
- result is sent to the caller. If the method is called within a
- transaction, this transaction is suspended before the new one is started,
- and resumed when the new transaction has completed.
-
Mandatory: The method should always be
- called within the scope of a transaction, else the container will throw
- the TransactionRequired exception.
-
Supports: The method is invoked within
- the caller transaction scope. If the caller does not have an associated
- transaction, the method is invoked without a
-
transaction scope.
-
-
Never: With this attribute the client is
- required to call the method without a transaction context, else the
- Container throws the java.rmi.RemoteException exception.
-
-
-
Database Service
-
-
This service is responsible for handling Datasource objects. A Datasource
-is a standard JDBC administrative object for handling connections to a
-database. The Database service creates and loads such datasources on the
-JOnAS server. Datasources to be created and deployed can be specified at
-JOnAS configuration time, or they can be created and deployed at server
-runtime using the JOnAS administration tools. The Database service is also
-responsible for connection pooling; it manages a pool of database connections
-to be used by the application components, thus avoiding many physical
-connection creations, which are time-consuming operations. The database
-service can now be replaced by the JDBC Resource Adapter, to be deployed by
-the J2EE CA Resource Service, which additionally provides JDBC
-PreparedStatement pooling.
-
-
Security Service
-
-
This service implements the authorization mechanisms for accessing J2EE
-components, as specified in the J2EE specification.
-
-
EJB security is based on the concept of roles. The
- methods can be accessed by a given set of roles. In order to access the
- methods, the user must be in at least one role of this set.
- The mapping between roles and methods (permissions) is done in the
- deployment descriptor using the security-role and
- method-permission elements. Programmatic security management is
- also possible using two methods of the EJBContext interface in order to
- enforce or complement security check in the bean code:
- getCallerPrincipal() and isCallerInRole (String
- roleName). The role names used in the EJB code (in the
- isCallerInRole method) are, in fact, references to actual security roles,
- which makes the EJB code independent of the security configuration
- described in the deployment descriptor. The programmer makes these role
- references available to the bean deployer or application assembler by way
- of the security-role-ref elements included in the
- session or entity elements of the deployment
- descriptor.
-
WEB security uses the same mechanisms, however permissions are defined
- for URL patterns instead of EJB methods. Thus, the security configuration
- is described in the Web deployment descriptor. Programmatically, the
- caller role is accessible within a web component via the
- isUserInRole (String roleName) method.
-
-
-
In JOnAS, the mapping between roles and user identification is done in the
-user identification repository. This user identification repository can be
-stored either in files, in a JNDI repository (such as LDAP), or in a
-relational database. This is achieved through a JOnAS implementation of the
-Realm for each Web container and through the JAAS login modules for Java
-clients. These Realms use authentication resources provided by JOnAS, which
-rely either on files, LDAP or JDBC. These realms are in charge of propagating
-the security context to the EJB container during EJB calls. JAAS login
-modules are provided for user authentication of Web Container and Java
-clients. Certificate-based authentication is also available, with
-CRLLoginModule login module for certificate revocation.
-
-
JOnAS also implements the Java Authorization Contract for Containers (JACC
-1.0) specification, allowing authorizations to be managed as java security
-permissions, and providing the ability to plug any security policy
-provider.
-
-
Messaging Service
-
-
Asynchronous EJB method invocation is possible on Message-driven Beans
-components. A Message-driven Bean is an EJB component that can be considered
-as a JMS (Java Message
-Service) MessageListener, i.e. which processes JMS messages
-asynchronously. It is associated with a JMS destination and its
-onMessage method is activated on the reception of messages sent by a
-client application to this destination. It is also possible for any EJB
-component to use the JMS API within the scope of transactions managed by the
-application server.
-
-
For supporting Message-driven Beans and JMS operations coded within
-application components, the JOnAS application server relies on a JMS
-implementation. JOnAS makes use of a third-party JMS implementation;
-currently the JORAM open source
-software is integrated and delivered with JOnAS, and other JMS provider
-implementations can easily be integrated. JORAM provides several noteworthy
-features: in particular, reliability (with a persistent mode), distribution
-(transparently to the JMS client, it can run as several servers, thus
-allowing load balancing), and the choice of TCP or SOAP as communication
-protocol for transmitting messages.
-
-
The JMS service is in charge of launching (or establishing connection to)
-the integrated JMS server, which may or may not run in the same JVM as JOnAS.
-It also provides connection pooling and thread pooling (for Message-driven
-Beans). Through this service, JOnAS provides facilities to create
-JMS-administered objects such as the connection factories and the
-destinations, either at server launching time or at runtime using the JOnAS
-administration tools.
-
-
Note that the same function of JMS implementation integration may now be
-achieved through a Resource Adapter, to be deployed by the J2EE CA Resource
-Service. Such a Resource Adapter (J2EE CA 1.5) is provided for JORAM.
-
-
J2EE CA Resource Service
-
-
The J2EE Connector Architecture (J2EE CA) allows the connection of
-different Enterprise Information Systems (EIS) to a J2EE application server.
-It is based on the Resource Adapter (RA), an architecture component
-comparable to a software driver, which connects the EIS, the application
-server, and the enterprise application (J2EE components). The RA is generally
-provided by an EIS vendor and provides a Java interface (the Common Client
-Interface or CCI) to the J2EE components for accessing the EIS (this can also
-be a specific Java interface). The RA also provides standard interfaces for
-plugging into the application server, allowing them to collaborate to keep
-all system-level mechanisms (transactions, security, and connection
-management) transparent from the application components.
-
-
-
The application performs "business logic" operations on the EIS data using
-the RA client API (CCI), while transactions, connections (including pooling),
-and security on the EIS are managed by the application server through the RA
-(system contract).
-
-
The JOnAS Resource service is in charge of deploying J2EE CA-compliant
-Resource Adapters (connectors), packaged as RAR files, on the JOnAS server.
-RAR files can also be included in EAR files, in which case the connector will
-be loaded by the application classloader. Once Resource Adapters are
-deployed, a connection factory instance is available in the JNDI namespace to
-be looked up by application components.
-
-
A J2EE CA 1.0 Resource Adapter for JDBC is available with JOnAS. It can
-replace the current JOnAS database service for plugging JDBC drivers and
-managing connection pools. It also provides JDBC PreparedStatement
-pooling.
-
-
A J2EE CA 1.5 Resource Adapter for JMS is available with JOnAS. It can
-replace the current JOnAS Messaging service for plugging JORAM.
-
-
Management Service
-
-
The Management service is needed to administrate a JOnAS server from the
-JOnAS administration console. Each server running this service is visible
-from the administration console. This service is based on JMX. Standard
-MBeans are defined within the JOnAS application server; they expose the
-management methods of the instrumented JOnAS server objects such as services,
-containers, the server itself. These MBeans implements the management model
-as specified in the J2EE Management Specification. The Management service
-runs a JMX server (if not available within the JDK, as is the case with JDK
-5). The MBeans of the JOnAS server are registered within this JMX server. The
-JOnAS administration console is a Struts-based Web application (servlet/JSP)
-that accesses the JMX server to present the managed features within the
-administration console. Thus, through a simple Web browser, it is possible to
-manage one or several JOnAS application servers. The administration console
-provides a means for configuring all JOnAS services (and making the
-configuration persistent), for deploying any type of application (EJB-JAR,
-WAR, EAR) and any type of resource (DataSources, JMS and Mail connection
-factories, J2EE CA connectors), all without the need to stop or restart the
-server. The administration console displays information for monitoring the
-servers and applications, such as used memory, used threads, number of EJB
-instances, the state of pools, which component currently uses which
-resources, etc.. When Tomcat is used as Web Container, the Tomcat Management
-is integrated within the JOnAS console. The concept of domain allows a set of
-servers to be managed from a single management console, clusters have been
-introduced within the console, allowing, for example, an application to be
-deployed on a predefined subset of JOnAS instances. The cluster management
-allows remote control and monitoring of cluster nodes; EJB and HTTP clusters
-resulting from HA and load balancing configurations are automatically
-detected and displayed in the console. A Management EJB (MEJB) is also
-delivered, providing access to the management features, as specified in the
-J2EE Management Specification. This MEJB is also accessible through Web
-Services. JASMINe, a new ObjectWeb
-project dedicated to cluster deployment and monitoring has been created.
-
-
Mail Service
-
-
A J2EE application component can send e-mail messages using JavaMailTM. The
-Mail service of the JOnAS application server provides the necessary resources
-to such application components. The Mail service creates mail factories and
-registers these resources in the JNDI namespace in the same way that the
-database service or the JMS service creates Datasources or
-ConnectionFactories and registers these objects in the JNDI namespace. There
-are two types of mail factories: javax.mail.Session and
-javax.mail.internet.MimePartDataSource.
-
-
WebServices Service
-
-
This service is implemented on top of AXIS and is used for the deployment
-of Web Services.
-
-
HA Service
-
-
This service is used for implementing Stateful Session Beans replication,
-when configuring high availibility at the EJB/RMI level within a clustered
-environment.
-
-
JOnAS Development and Deployment
-Environment
-
-
JOnAS Configuration and Deployment
-Facilities
-
-
Once JOnAS has been installed in a directory referenced by the JONAS_ROOT
-environment variable, it is possible to configure servers and to deploy
-applications into several execution environments. This is achieved using the
-JONAS_BASE environment variable. JONAS_ROOT and JONAS_BASE can be compared to
-the CATALINA_HOME and CATALINA_BASE variables of Tomcat. While JONAS_ROOT is
-dedicated to JOnAS installation, JONAS_BASE is used to specify a particular
-JOnAS instance configuration. JONAS_BASE designates a directory containing a
-specific JOnAS configuration, and it identifies subdirectories containing the
-EJB-JAR, WAR, EAR, and RAR files that can be loaded in this application
-environment. There is an ANT target in the JOnAS build.xml file for creating
-a new JONAS_BASE directory structure. Thus, from one JOnAS installation, it
-is possible to switch from one application environment to another by just
-changing the value of the JONAS_BASE variable. There are two ways to
-configure a JOnAS application server and load applications: either using the
-administration console or by editing the configuration files. There are also
-"autoload" directories for each type of application and resource (EJB-JAR,
-WAR, EAR, RAR) that allow the JOnAS server to automatically load the
-applications located in these directories when starting.
-
-
A tool named "newjc" is provided to deploy and configure a set of JOnAS
-servers within a cluster.
-
-
JOnAS provides several facilities for deployment:
-
-
For writing the deployment descriptors, plugins for Integrated
- Development Environments (IDE) provide some generation and editing
- features (Eclipse and JBuilder plugins are available). The NewBean JOnAS
- built-in tool generates template deployment descriptors. The Xdoclet tool
- also generates deployment descriptors for JOnAS. A JSR88-compliant (J2EE
- 1.4) deployment tool named "Dolphin" is available in beta version within
- the Ishmael
- ObjectWeb project.
-
Some basic tools for the deployment itself are the JOnAS GenIC command
- line tool and the corresponding ANT ejbjar task. The IDE plugins
- integrate the use of these tools for deployment operations.
-
-
-
Fractal Deployment Framework (FDF) is a tool for deploying and configuring
-the JOnAS software on a distributed environment.
-
-
JOnAS Development Environments
-
-
There are many plugins and tools that facilitate the development of J2EE
-applications to be deployed on JOnAS. IDE plugins for Eclipse (JOPE, Lomboz, and, of course, WTP) and JBuilder (Kelly) provide the
-means to develop, deploy, and debug J2EE components on JOnAS. The Xdoclet code-generation engine can
-generate EJB interfaces and deployment descriptors (standard and JOnAS
-specific ones), taking as input the EJB implementation class containing
-specific JavaDoc tags. The JOnAS NewBean tool generates templates of
-interfaces, implementation class, and deployment descriptors for any kind of
-EJB. Many development tools may work with JOnAS; refer to the JOnAS tools page for
-more details.
-
-
In addition, JOnAS is delivered with complete J2EE examples, providing a
-build.xml ANT file with all the necessary targets for compiling, deploying,
-and installing J2EE applications.
-
-
Clustering and Performance
-
-
Clustering for an application server generally makes use of three
-features: Load Balancing (LB), High Availability (HA) and Failover. Such
-mechanisms can be provided at the Web container level by dispatching requests
-to several Servlet/JSP engine instances, at the EJB container level by
-dispatching EJB requests to several EJB container instances, and at the
-database level by using several databases. A replicated JNDI naming is also
-necessary.
-
-
JOnAS provides Load Balancing, HA, and Failover at the WEB container level
-using the Apache Tomcat mod_jk plugin and an HTTP in memory
-session-replication mechanism based on JGroups. The plugin dispatches HTTP
-requests from the Apache web server to Tomcat instances running as JOnAS web
-containers. Server fluctuations are automatically taken into account. This
-plugin supports round-robin and weighted round-robin load-balancing
-algorithms, with a sticky session option.
-
-
Load balancing and HA are provided at the EJB container level in JOnAS.
-Operations invoked on EJB Home interfaces (EJB creation and retrieval) and
-invocations of business methods on stateless session beans are dispatched on
-the nodes of the cluster. The mechanism is based on a "clustered-aware"
-replicated JNDI registry using a Clustered remote Method Invocation protocol
-(CMI). The stubs contain the knowledge of the cluster and implement the
-load-balancing policy, which may be round-robin and weighted round-robin;
-these stubs are dynamically updated according to cluster topology changes
-(dynamic cluster). This load-balancing policy may be easily customized.
-Failover at the EJB level is provided by implementing a stateful session bean
-state replication mechanism that ensures the transaction and global
-consistency.
-
-
Load balancing and HA may also be provided at the JMS level, thanks to the
-JORAM HA capabilities.
-
-
The JOnAS clustering architecture is illustrated in the following
-figure.
-
-
-
Apache is used as the front-end HTTP server; Tomcat is used as the JOnAS
-web container. The JOnAS servers share the same database. The mod_jk plug-in
-provides Load Balancing / High Availability at the Servlet/JSP level.
-Failover is provided through the in-memory, session-replication mechanism.
-Load Balancing / High Availability is provided at the EJB level through the
-CMI protocol associated with the replicated, clustered-aware JNDI registry.
-Tomcat may or may not run in the same JVM as the EJB container. JOnAS
-provides some documentation for configuring such an architecture.
-
-
The use of the C-JDBC ObjectWeb
-project offers load balancing and high availability at the database level.
-The use of C-JDBC is transparent to the application (in our case to JOnAS),
-since it is viewed as a standard JDBC driver. However, this "driver"
-implements the cluster mechanisms (reads are load-balanced and writes are
-broadcasted). The database is distributed and replicated among several nodes,
-and C-JDBC load balances the queries between these nodes. An evaluation of
-C-JDBC using the TPC-W benchmark on a 6-node cluster has shown performance
-scaling linearly up to six nodes.
-
-
In addition to clustering solutions, JOnAS provides many mechanisms,
-intrinsic to the JOnAS server, for being highly scalable and efficient. This
-includes the following:
-
-
A pool of stateless session bean instances
-
A pool of entity bean instances, configurable for each entity bean
- within its deployment descriptor
-
Activation/passivation of entity beans, passivation can be controlled
- through the management console
-
Many locking policies for entity beans are available in the EJB 2.1
- container, in order to adapt the locking policy to the application needs,
- at the entity bean granularity level
-
Pools of connections, for JDBC, JMS, J2EE CA connectors
-
A pool of threads for message-driven beans
-
Session bean timeout can be specified at deployment
-
A "shared" flag in the specific deployment descriptor of an entity bean
- indicates whether the persistent representation of this entity bean is
- shared by several servers/applications, or whether it is dedicated to the
- JOnAS server where it is loaded. In the latter case, the optimization
- performed by JOnAS consists of not reloading the corresponding data
- between transactions
-
The usual EJB 1.1 "isModified" (or "Dirty") mechanism is available for
- avoiding storage of unmodified data
-
An optimization called "Data Prefetching" provides JDBC resultsets
- re-use by the EJB container (this optimization reduces the number of SQL
- statements executed by the EJB container).
-
-
-
Perspectives
-
-
As an open source implementation of an application server, JOnAS is
-constantly evolving to satisfy user requirements and to follow the related
-standards. The main JOnAS evolutions currently planned are the following:
-
-
The JOnAS services architecture will be re-engineered in order to
- provide more flexible, dynamic and adaptable configuration and management
- features. It will be achieved by using the OSGi technology and will be
- the first step of the JOnAS 5 development
-
Support of the Java EE 5 specification will be provided
-
JOnAS Management will continuously be improved
-
The clustering mechanisms will be improved
-
Advanced cluster configuration management and monitoring (including
- self management features) will be developed in the JASMINe project
-
-
-
Sun, Java, and all
-Java-based trademarks are trademarks or registered trademarks of Sun
-Microsystems, Inc. in the U.S. and other countries.
-
-
diff --git a/jonas_doc/core/olddoc/JOnASWebServices.html b/jonas_doc/core/olddoc/JOnASWebServices.html
deleted file mode 100644
index 7f8707b2e86071133e89c6190444beafedb49047..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/JOnASWebServices.html
+++ /dev/null
@@ -1,814 +0,0 @@
-
-
-
-
- Web Services with JOnAS
-
-
-
-
-
-
Web Services with JOnAS
-Starting with JOnAS 3.3, Web Services can be used within EJBs and/or
-servlets/JSPs. This integration conforms to the JSR 921(Web Service for J2EE
-v1.1) specification.
-
-
-
-
1. Web Services
-
-
A. Some Definitions
-WSDL:
-WSDL (Web Service Description Language
-v1.1) is an XML-based format for specifying the interface to a web
-service. The WSDL details the service's available methods and parameter
-types, as well as the actual SOAP endpoint for the service. In essence, WSDL
-is the "user's manual" for the web service.
-SOAP:
-SOAP (Simple Object Access Protocol
-v1.2) is an XML-based protocol for sending requests and responses to and
-from web services. It consists of three parts: an envelope defining message
-contents and processing, encoding rules for application-defined data types,
-and a convention for representing remote procedure calls and responses.
-JAX-RPC:
-JAX-RPC (Java Api for XML
-RPC v1.1) is the Java API for XML-based RPC. RPC (Remote Procedure
-Call) allows a client to execute procedures on other systems. The RPC
-mechanism is often used in a distributed client/server model in which the
-server defines a service as a collection of procedures that may be called by
-remote clients. In the context of Web services, RPCs are represented by the
-XML- based protocol SOAP when transmitted across systems.
-In addition to defining envelope structure and encoding rules, the SOAP
-specification defines a convention for representing remote procedure calls
-and responses. An XML-based RPC server application can define, describe and
-export a web service as an RPC-based service. WSDL (Web Service Description
-Language) specifies an XML format for describing a service as a set of
-endpoints operating on messages. With the JAX-RPC API, developers can
-implement clients and services described by WSDL.
-
-
-
-
B. Overview of a Web Service
-
-
Strictly speaking, a Web Service is a well-defined, modular, encapsulated
-function used for loosely coupled integration between applications' or
-systems' components. It is based on standard technologies, such as XML, SOAP,
-and UDDI.
-
-
Web Services are generally exposed and discovered through a standard
-registry service. With these standards, Web Services consumers (whether they
-be users or other applications) can access a broad range of information --
-personal financial data, news, weather, and enterprise documents -- through
-applications that reside on servers throughout the network.
-
-
Web Services use a WSDL Definition (refer to www.w3.org/TR/WSDL) as a contract
-between client and server (also called endpoint). WSDL defines the types to
-serialize through the network (described with XMLSchema), the messages to
-send and receive (composition, parameters), the portTypes (abstract view of a
-Port), the bindings (concrete description of PortType: SOAP, GET, POST, ...),
-the services (set of Ports), and the Port (the port is associated with a
-unique endpoint URL that defines the location of the Web Service).
-
-
A Web Service for J2EE is a component with some methods exposed and
-accessible by HTTP (through servlet(s)). Web Services can be implemented as
-Stateless Session Beans or as JAXRPC classes (a simple Java class, no
-inheritance needed).
-
-
-
-Figure 1. Web Services endpoints deployed within JOnAS (an external client
-code can access the endpoint via AxisServlet)
-
-Figure 2. Web Services client deployed within JOnAS (can access external Web
-Services)
-
-
The servlet is used to respond to a client request and dispatch the call
-to the designated instance of servant (the SSB or JAXRPC class exposed as Web
-Service). It handles the deserialization of incoming SOAP messages to
-transform SOAP XML into a Java Object, perform the call, and serialize the
-call result (or the thrown exception) into SOAP XML before sending the
-response message to the client.
-
-
-
-
2. Exposing a J2EE Component as
-a Web Service
-There are two types of J2EE components that can be exposed as Web Services
-endpoints: StateLess Session Beans and JAX-RPC classes. Web Services'
-Endpoints must not contain state information.
-
-A new standard Deployment Descriptor has been created to describe Web
-Services endpoints. This Descriptor is named "webservices.xml" and can be
-used in a webapp (in WEB-INF/) or in an EjbJar (in META-INF/). This
-Descriptor has its JOnAS-specific Deployment Descriptor
-(jonas-webservices.xml is optional).
-
-Refer to the webServices sample for example files.
-
-
A. JAX-RPC Endpoint
-A JAX-RPC endpoint is a simple class running in the servlet container (Tomcat
-or Jetty). SOAP requests are dispatched to an instance of this class and the
-response is serialized and sent back to the client.
-A JAX-RPC endpoint must be in a WebApp (the WAR file must contain a
-"WEB-INF/webservices.xml").
-
-
-
-
B. Stateless Session Bean
-Endpoint
-An SSB is an EJB that will be exposed (all or some of its methods) as a Web
-Service endpoint.
-In the ejb-jar.xml standard descriptor, a session bean, exposed as a web
-service, must now use the new service-endpoint tag. Here the developer
-defines the fully-qualified interface name of the web service. Notice that no
-other interfaces (home, remote, localhome, local) are needed with a session
-bean exposed as web service.
-
-Typically, an SSB must be in an EjbJar, and a "META-INF/webservices.xml" is
-located in the EjbJar file.
-
-
-
-
C. Usage
-
-
-
In this Descriptor, the developer describes the components that will be
-exposed as Web Services' endpoints; these are called the port-component(s). A
-set of port-components defines a webservice-description, and a
-webservice-description uses a WSDL Definition file for a complete description
-of the Web Services' endpoints.
-
-
Each port-component is linked to the J2EE component that will respond to
-the request (service-impl-bean with a servlet-link or ejb-link child element)
-and to a WSDL port (wsdl-port defining the port's QName). A list of JAX-RPC
-Handlers is provided for each port-component. The optional
-service-endpoint-interface defines the methods of the J2EE components that
-will be exposed (no inheritance needed).
-
-
A JAX-RPC Handler is a class used to read and/or modify the SOAP Message
-before transmission and/or after reception (refer to the JAX-RPC v1.1 spec.
-chap#12 "SOAP Message Handlers").The Session Handler is a simple example that
-will read/write SOAP session information in the SOAP Headers. Handlers are
-identified with a unique name (within the application unit), are initialized
-with the init-param(s), and work on processing a list of SOAP Headers defined
-with soap-headers child elements. The Handler is run as the SOAP actor(s)
-defined in the list of soap-roles.
-
-
A webservice-description defines a set of port-components, a WSDL
-Definition (describing the Web Service) and a mapping file (WSDL-2-Java
-bindings). The wsdl-file element and the jaxrpc-mapping-file element must
-specify a path to a file contained in the module unit (i.e., the war/jar
-file). Note that a URL cannot be set here. The specification also requires
-that the WSDLs be placed in a wsdl subdirectory (i.e., WEB-INF/wsdl or
-META-INF/wsdl); there is no such requirement for the jaxrpc-mapping-file. All
-the ports defined in the WSDL must be linked to a port-component. This is
-essential because the WSDL is a contract between the endpoint and a client
-(if the client uses a port not implemented/linked with a component, the
-client call will systematically fail).
-
-
-
As for all other Deployment Descriptors, a standard
-XML Schema is used to constrain the XML.
-
-
-
D. Simple Example (expose a JAX-RPC Endpoint) of webservices.xml
-
-
-
-
-
<?xml version="1.0"?>
-
- <webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-
- http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-
- version="1.1">
- <display-name>Simple Web Service Endpoint
- DeploymentDesc</display-name>
-
- <webservice-description>
- <!-- name must be unique in an Application unit
- -->
- <!--
- Should not contain spaces !!! -->
- <webservice-description-name>
- SimpleWebServiceEndpoint
- </webservice-description-name>
-
- <!-- Link to the WSDL file describing the
- endpoint -->
-
- <wsdl-file>WEB-INF/wsdl/warendpoint.wsdl</wsdl-file>
-
- <!-- Link to the mapping file describing
- binding between WSDL and Java -->
-
- <jaxrpc-mapping-file>WEB-INF/warEndpointMapping.xml</jaxrpc-mapping-file>
-
- <!-- The list of endpoints -->
- <port-component>
-
- <!-- Unique name of
- the port-component -->
- <!-- Should not contain spaces !!!
- -->
-
- <port-component-name>WebappPortComp1</port-component-name>
-
- <!-- The QName of the WSDL Port the
- J2EE port-component is linked to -->
- <!-- Must Refers to a port in
- associated WSDL document -->
- <wsdl-port
- xmlns:ns="http://wsendpoint.servlets.ws.objectweb.org">
-
- ns:wsendpoint1
- </wsdl-port>
-
- <!-- The endpoint
- interface defining methods exposed -->
- <!-- for the
- endpoint
- -->
-
- <service-endpoint-interface>
- org.objectweb.ws.servlets.wsendpoint.WSEndpointSei
- </service-endpoint-interface>
-
- <!-- Link to the J2EE
- component (servlet/EJB) -->
- <!-- implementing methods of the
- SEI
- -->
-
- <service-impl-bean>
- <!-- name of the
- servlet defining the JAX-RPC endpoint -->
- <!-- can
- be ejb-link if SSB is used (only in EjbJar!)
- -->
-
- <servlet-link>WSEndpoint</servlet-link>
- </service-impl-bean>
-
- <!-- The list of
- optional JAX-RPC Handlers -->
- <handler>
-
- <handler-name>MyHandler</handler-name>
-
- <handler-class>org.objectweb.ws.handlers.SimpleHandler</handler-class>
-
- <!-- A
- list of init-param for Handler configuration -->
-
- <init-param>
-
- <param-name>param1</param-name>
-
- <param-value>value1</param-value>
- </init-param>
- <init-param>
-
- <param-name>param2</param-name>
-
- <param-value>value2</param-value>
- </init-param>
- </handler>
- </port-component>
- </webservice-description>
- </webservices>
-
-
-
-
-
-
E. The optional jonas-webservices.xml
-
-The jonas-webservices.xml file is an optional deployment descriptor. This descriptor
-is used by WsGen to set some specifics for the generated webapp that is in charge of
-the SOAP request dispatching. Its role is to allow for the specifications of the
-webapp's name, context root, security settings and endpoint URL customization.
-
-Some parameters are only used if the web service is implemented by a Session Bean:
-
-
jonas:jonas-webservices/jonas:war: specify the filename of the webapp
-frontend generated for this EjbJar
-
jonas:jonas-webservices/jonas:context-root: specify the context root of the webapp
-frontend generated for this EjbJar
-
-
-
-War Name: Specifies the name of the generated
-WAR. Setting the <war> element is optional; if it is not specified, then the
-default naming convention is used to retrieve the WAR name from the ejbjar's name.
-
- Default Naming:
-<ejbjar-name>.jar will have an
-<ejbjar-name>.war WebApp.
-
-
-Context Root: Specifies the context root of the
-generated WAR. Setting the <context-root> element is optional; if it is not specified,
-then the default naming convention is used and the context root will be the same as the WAR's name.
-
-
- Default Naming:
-<webapp-name>.war will have a
-<webapp-name> context root.
-
-
-Endpoint URL Customization: Specifies the endpoint URL
-of a given jonas-port-component. Setting the <endpoint-url> element is optional; if it is not specified,
-then the default naming convention is used and the URL will look like /<context-root>/<port-component-name>/<wsdl:port-name>.
-
-
-Security: The security settings specify which
-security settings, if any, the generated webapp should use. Setting up security within this
-file is very similar to how security would be set up in a regular web.xml.
-
-
-
NOTE:
-When using the <endpoint-security-constraint>,
-<endpoint-login-config>, or
-<endpoint-security-role> elements, the j2ee namespace
-must be included in the jonas-webservices element (that is,
-xmlsn:j2ee="http://java.sun.com/xml/j2ee"), and the namespace
-for all elements within these tags (that is, the 'j2ee'
-in the example below) must be specified.
-
-
- Security Constraint:
-the <endpoint-security-constraint> specifies the <security-constraint>
-in the web.xml
-of the generated webapp.
-
- Login Config: the
-<endpoint-login-config> specifies
-the <login-config> in the web.xml of the generated webapp.
-
- Security Role: the
-<endpoint-security-role> specifies
-the <security-role> in the web.xml
-of the generated webapp.
-
- Realm: the
-<endpoint-realm> specifies the security
-realm for the generated webapp.
-
- Realm Name: the
-<endpoint-realm-name> specifies the
-name of the security realm for the generated webapp.
-
-
-
-Example:
-
-
-
-
-
-
-
-
-<?xml version="1.0"?>
-<jonas-webservices xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:j2ee:"http://java.sun.com/xml/ns/j2ee"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns http://www.objectweb.org/jonas/ns/jonas_j2ee_web_services_4_5.xsd">
-
- <!-- the name of the webapp in the EAR -->
- <!-- (it is the same as the one in application.xml) -->
- <war>dispatchingWebApp.war</war>
-
- <!-- the context root the webapp should use -->
- <context-root>endpoint</context-root>
-
- <jonas-port-component>
- <port-component-name>ssbEndpoint</port-component-name>
- <!-- We can specify with endpoint-uri the URL we want to have for the given port. -->
- <!-- Will be something like : http://<host>:<port>/<context-root>/services1/webservice -->
- <endpoint-uri>/services1/webservice</endpoint-uri>
- </jonas-port-component>
-
- <!-- everthing in this element will appear in the security-constraint -->
- <!-- element in the web.xml of the generated webapp -->
- <endpoint-security-constraint>
- <j2ee:web-resouce-collection>
- <j2ee:web-resource-name>Stateless Session Bean Endpoint</j2ee:web-resource-name>
- <j2ee:url-pattern>/*</j2ee:url-pattern>
- </j2ee:web-resource-collection>
- <j2ee:auth-constraint>
- <j2ee:role-name>admin</j2ee:role-name>
- </j2ee:auth-constraint>
- </endpoint-security-constraint>
-
- <!-- everything in this element will appear in the login-config -->
- <!-- element in the web.xml of the generated webapp -->
- <endpoint-login-config>
- <j2ee:auth-method>BASIC</j2ee:auth-method>
- <j2ee:realm-name>Endpoint Authentication Area</j2ee:realm-name>
- </endpoint-login-config>
-
- <!-- everything in this element will appear in the security-role -->
- <!-- element in the web.xml of the generated webapp -->
- <endpoint-security-role>
- <j2ee:role-name>admin</j2ee:role-name>
- </endpoint-security-role>
-
- <!-- the realm the generated webapp should use -->
- <endpoint-realm>memrlm_1</endpoint-realm>
-
- <!-- the name of the realm the generated webapp should use -->
- <endpoint-realm-name>Endpoint Authentication Area</endpoint-realm-name>
-
-</jonas-webservices>
-
-
-
-
-
-
F. Changes to jonas-web.xml
-JOnAS allows the developer to fully configure an application by setting the
-hostname, the context-root, and the port used to access the Web Services.
-This is done in the jonas-web.xml of the dispatching WebApp.
-host: configure the hostname to use
-in URL (must be an available web container host).
-port: configure the port number to
-use in URL (must be an available HTTP/HTTPS connector port number).
-
-When these values are not set, JOnAS will attempt to determine the default
-values for host and port.
-Limitations:
-- The host can only be determined when only one host is set for the web
-container.
-- The port can only be determined when only one connector is used by the web
-container.
-
-
-
3. The client of a Web
-Service
-An EJB or a servlet that wants to use a Web Service (as client) must declare
-a dependency on the Web Service with a service-ref element (same principle as for
-all *-ref elements).
-
-
-
A. The service-ref element
-The service-ref element declares reference to a Web Service used by a J2EE
-component in the web, EJB and Client application Deployment Descriptor.
-The component uses a logical name called a service-ref-name to lookup the
-service instance. Thus, any component that performs a lookup on a Web Service
-must declare a dependency (the service-ref element) in the standard
-deployment descriptor (web.xml, ejb-jar.xml or application-client.xml).
-
-Example of service-ref:
-
-
-
-
-
-
<service-ref>
- <!-- (Optional) A Web services
- description that can be used
- in administration
- tool. -->
- <description>Sample WebService
- Client</description>
-
- <!-- (Optional) The WebService
- reference name -->
- <display-name>WebService Client
- 1</display-name>
-
- <!-- (Optional) An icon for this
- WebService. -->
- <icon> <!-- ... --> </icon>
-
- <!-- The logical name for the reference
- that is used in the client source
- code. It is recommended, but not
- required that the name begin with
- 'services/' -->
-
- <service-ref-name>services/myService</service-ref-name>
-
- <!-- Defines the class name of the
- JAX-RPC Service interface that
- the client depends on. In most
- cases, the value will be:
- javax.xml.rpc.Service but a
- generated specific Service Interface
- class may be specified (requires
- WSDL knowledge and thus
- the wsdl-file element).
- -->
-
- <service-interface>javax.xml.rpc.Service</service-interface>
-
- <!-- (Optional) Contains the location
- (relative to the root of
- the module) of the web service WSDL
- description.
- - needs to be in the wsdl
- directory.
- - required if generated interface
- and sei are declared. -->
-
- <wsdl-file>WEB-INF/wsdl/stockQuote.wsdl</wsdl-file>
-
- <!-- (Optional) A file specifying the
- correlation of the WSDL definition
- to the interfaces (Service Endpoint
- Interface, Service Interface).
- - required if generated
- interface and sei (Service Endpoint
- Interface) are
- declared.-->
-
- <jaxrpc-mapping-file>WEB-INF/myMapping.xml</jaxrpc-mapping-file>
-
- <!-- (Optional) Declares the specific
- WSDL service element that is being
- referred to. It is not specified if
- no wsdl-file is declared or if
- WSDL contains only 1 service
- element. A service-qname is composed
- of a namespaceURI and a localpart.
- It must be defined if more than 1
- service is declared in
- the WSDL. -->
- <service-qname
- xmlns:ns="http://beans.ws.objectweb.org">
- ns:MyWSDLService
- </service-qname>
-
- <!-- Declares a client dependency on
- the container for resolving a Service
- Endpoint Interface to a WSDL port.
- It optionally associates the
- Service Endpoint Interface with a
- particular port-component. -->
- <port-component-ref>
-
-
- <service-endpoint-interface>
- org.objectweb.ws.beans.ssbendpoint.MyService
-
- </service-endpoint-interface>
-
- <!-- Defines a link to a port component
- declared in another unit
- of the
- application -->
-
- <!-- link is only used when an application module wants to access
- a -->
-
- <!-- web service colocated in the same application
- unit
- -->
-
- <port-component-link>ejb_module.jar#PortComponentName</port-component-link>
- </port-component-ref>
-
- <!--A list of Handlers to use for this
- service-ref -->
- <handler>
- <!-- Must be unique
- within the module. -->
-
- <handler-name>MyHandler</handler-name>
-
-
- <handler-class>org.objectweb.ws.handlers.myHandler</handler-class>
-
- <!-- A list of init-params (couple
- name/value) for Handler
-
- initialization -->
- <init-param>
-
- <param-name>param_1</param-name>
-
- <param-value>value_1</param-value>
- </init-param>
-
- <!-- A list of QNames specifying the
- SOAP Headers the handler
- will work on. Namespace and
- locapart values must be found
- inside the WSDL. -->
- <soap-header
- xmlns:ns="http://ws.objectweb.org">
-
- ns:MyWSDLHeader
- </soap-header>
-
- <!-- A list of SOAP actor
- definitions that the Handler will play
- as a role. A soap-role is a
- namespace URI. -->
-
- <soap-role>http://actor.soap.objectweb.org</soap-role>
-
- <!-- A list
- of port-name elements that defines the WSDL
- port-name that
- a handler should be
- associated with. If no port-name is specified,
- the handler is assumed to
- be associated with all ports of the
- service-ref.
- -->
-
- <port-name>myWSDLPort</port-name>
- </handler>
- </service-ref>
-
-
-
-
-
-
-
B. The jonas-service-ref element
-A jonas-service-ref must be specified for each service-ref declared in the
-standard Deployment Descriptor. The jonas-service-ref adds JOnAS-specific
-(and Web Service engine-specific) information to service-ref elements.
-
-Example of jonas-service-ref:
-
-
-
-
-
-
- <jonas-service-ref>
-
- <!-- Define the service-ref
- contained in the component
- deployment descriptor
- (web.xml, ejb-jar.xml, application-client.xml).
- used as a key to associate a
- service-ref to its correspondent
- jonas-service-ref-->
-
- <service-ref-name>services/myService</service-ref-name>
-
- <!-- Define the physical
- name of the resource. -->
-
- <jndi-name>webservice_1</jndi-name>
-
- <!-- A list of init-param used for specific
- configuration of
- the service -->
- <jonas-init-param>
-
- <param-name>param</param-name>
-
- <param-value>name</param-value>
- </jonas-init-param>
- </jonas-service-ref>
-
-
-
-
-
-
-
4. WsGen
-
-
WsGen is a new JOnAS tool that works in the same way as GenIC. It takes
-archive files (EJB-JAR, WAR, JAR client, EAR) and generates all the necessay
-components related to web services:
-
-
Creates vendor-specific web-services deployment files for the server
- side and, when needed, the client side (Axis will use its own wsdd
- format).
-
Creates a WebApp for each EJB-JAR exposing web services.
-
Generates and compiles client side artifacts (Services and Port
- Bindings implementations classes).
-
-
-
For example, to provide an EJB-exposing method as a web service, a
-developer creates a webservices.xml file packaged in EjbJar's
-META-INF directory. WsGen automatically creates a configured webapp (using an
-Axis servlet) and wraps it (ejbjar + webapp) in an EAR file.
-
-
With a JaxRpc class, WsGen adds a servlet (an Axis servlet) inside the
-existing web deployment descriptor and generates an Axis-specific
-configuration file.
-
-
When using service-ref (from ejbjars, web applications, or clients), WsGen
-automatically generates a Stub from WSDL (if a generated service interface
-name is provided).
-
-
Usage
-
-
WsGen is used typically from an ant build file. Simply add this taskdef
-under the ejbjar taskdef:
See the $JONAS_ROOT/examples/webservices samples for complete
-build scripts.
-
-
Note that the ejbjar/webapp/client archive must include WSDL,
-jax-rpc-mappings used in service-ref, or webservices.xml. When these
-files are used from a service-ref, they are added into the generic ejb-jar
-with the ejbjar ant task of JOnAS; you must ensure that they have been placed
-inside the srcdir given to the ejbjar task (otherwise, the ejbjar task cannot
-find them and will produce an error).
-
-
This task is a directory-based
-task and, as such, forms an implicit Fileset. This
-defines which files, relative to the srcdir, will be processed. The
-wsgen task supports all the attributes of Fileset to refine the set of files
-to be included in the implicit fileset.
-
-
-
-
-
Attribute
-
Description
-
Required
-
-
-
srcdir
-
Directory where file archive (EjbJar, War, Client, Ear) is
- located
-
Yes
-
-
-
destdir
-
Directory where generated files will be placed
-
No
-
-
-
verbose
-
Verbose mode (Defaults to false)
-
No
-
-
-
debug
-
Debug mode (Defaults to false)
-
No
-
-
-
javacopts
-
List of options given to the java compiler
-
No
-
-
-
jonasroot
-
Directory where JOnAS is installed
-
No
-
-
-
jonasbase
-
Directory where JOnAS configuration is stored
-
No
-
-
-
-
-
Wsgen is also usable from the command line with WsGen script (available on
-*nix and Windows).
This chapter is intended for advanced JOnAS users who are interested in
-understanding management facilities that JOnAS provides, and possibly
-extending these facilities for their application needs.
-
-
JOnAS management facilities are based on Management Beans (MBeans)
-compliant to JMX
-Specification. Moreover, JOnAS implements JSR 77 specification, which
-defines the management model for J2EE platforms.
-
-
About JOnAS MBeans and their use in
-JonaSAdmin
-
-
MBeans provide access to management functions such as configuration,
-deployment/undeployment, monitoring of resources and application modules.
-
-
MBeans are created not only by the different JOnAS services, but also by the
-components integrated in JOnAS (Web server Tomcat or Jetty, JORAM MOM, etc.).
-They are registered in the current MBean Server, which is started by each
-JOnAS server instance. Remote access to the MBean Server is facilitated by
-JMX remote connectors compliant to the JSR 160 specification. See more
-information about connectors here.
-
-
JonasAdmin application implements the management functions listed above
-using the different MBeans registered in the MBeanServer of the JOnAS
-instance currently being managed. This is usually the server on which
-JonasAdmin is deployed, but it may be another server running in the same
-management domain.
-
-
JonasAdmin also presents, in a structured way, all the registered MBeans,
-their attributes and operations. In the future, JonasAdmin will probably be
-extended to allow setting attributes and invoking operations.
-
-
Using JOnAS MBeans in a Management
-Application
-
-
In order to invoke a management operation on a MBean, the caller must
-access to the MBean server.
-
-
Local MBean Server
-
-
When the caller is located in the same JVM as the MBean Server, it can use
-javax.management.MBeanServerFactory class to obtain a reference
-to the MBean Server:
When the caller is remote, it can use a JMX remote connector to establish
-a connection with the MBean Server and obtain a
-javax.management.MBeanServerConnection object.
-
-
Suppose that the connector server has the following address:
-service:jmx:jrmp://host/jndi/jrmp://host:1099/jrmpconnector_jonas,
-which is the default for a JOnAS server called jonas.
A remote caller can also use the MEJB provided by the JOnAS distribution.
-A Management EJB implementation, compliant to the JSR 77, is packed in the
-mejb.ear installed in the
-JONAS_ROOT/ejbjars/autoload directory. Thus, the MEJB is
-automatically deployed at JOnAS start-up. Its Home is registered
-in JNDI under the name ejb/mgmt/MEJB. JOnAS distribution also
-contains an example using the MEJB in a J2EE application, the
-j2eemanagement sample.
-
-
-
-
Using the Management Web Service Endpoint
-
-
-A remote caller can use the Management Web Service endpoint packaged
-as a part of the mejb.ear installed in the
-JONAS_ROOT/ejbjars/autoload directory. Thus, the management
-endpoint is automatically deployed at JOnAS start-up. Check
- http://<hostname>:<port>/mejb/ManagementEndpoint/ManagementEndpoint?wsdl
- for the WSDL file on a running JOnAS instance. The endpoint allows light-weight
-clients to query JOnAS MBeans from virtually any platform by leveraging the
-platform-independant nature of Web Services.
-
-
-
Registering User MBeans
-
-
Application MBeans can be created and registered in the MBean server by
-calling registerMBean method on the MBeanServer
-object or createMBean method on the
-MBeanServerConnection object. Also, MBeans can be loaded using
-the m-let service, a dynamic loading mechanism provided by the JMX
-implementation. This mechanism allows loading MBeans from a remote URL. The
-information on the MBeans to load is provided in a m-let text file. Refer to
-JMX implementation documentation for details concerning this file. In addition,
-the howto document
-JOnAS and JMX, registering and manipulating MBeans
-illustrates the use of this m-let mechanism. In order
-to make an m-let text file accessible to JOnAS applications, it can be installed
-in the JONAS_ROOT/conf directory.
The target audience for this guide is the Client component provider, i.e.
-the person in charge of developing the Client components on the client side.
-It describes how the Client component provider should build the deployment
-descriptors of its Client components and how the client components should be
-packaged.
a client bundle in an .ear file. An ear can contain many java
- clients.
-
a class name which must be found in the CLASSPATH.
-
-
-
All the files required to launch the client container are in the
-JONAS_ROOT/lib/client.jar file. This jar includes a manifest
-file with the name of the class to launch. To launch the client container,
-simply type:
-
-
java -jar $JONAS_ROOT/lib/client.jar -?. This will launch the
-client container and display usage information about this client
-container.
-
-
To launch the client container on a remote computer, copy the client.jar
-and invoke the client container by typing java -jar
-path_to_your/client.jar.
-
-
The client that must be launched by the client container is given as an
-argument of the client container.
-example : java -jar client.jar myApplication.ear
-or java -jar client.jar myClient.jar.
-
-
Configuring client container
-
-
JNDI access
-
-
Defining the JNDI access and the protocol to use is an important part of
-configuration.
-The JOnAS server, as well as the ClientContainer, uses the values specified
-in the carol.properties file.
-This file can be used at different levels.
-The carol.properties is searched with the following priority
-(high to low):
-
-
the carol.properties specified by the
- -carolFile argument to the client container
-
the carol.properties packaged into the client application
- (the jar client)
-
if not located previously, it will use the
- carol.properties contained in the
- JONAS_ROOT/lib/client.jar.
-
-
-
A convenient way is to update the carol.properties of a
-client.jar with a customized carol.properties
-file. That is, use the jar -uf client.jar carol.properties
-command.
-
-
Trace configuration
-
-
The client container client.jar includes a
-traceclient.properties file. This is the same file as the one in
-JONAS_ROOT/conf directory.
-A different configuration file can be used for the traces by specifying the
-parameter -traceFile when invoking the client container.
-The file in the client.jar can be replaced with the jar
--uf client.jar traceclient.properties command.
-
-
Classpath configuration
-
-
Some jars/classes can be added to the client container. For example if a class requires some extra libraries/classes,
-the option -cp path/to/classes can be used.
-
The classloader of the client container will use the libraries/classes provided by the -cp flag.
-
-
-
Specifying the client to use (EAR case)
-
-
An ear can contain many java clients, which are described in the
-application.xml file inside the
-<module><java> elements.
-To invoke the client container with an ear, such as java -jar
-client.jar my.ear, specify the java client to use if there are many
-clients. Otherwise, it will take the first client.
-To specify the jar client to use from an ear, use the argument
--jarClient and supply the name of the client to use.
-The earsample example in the JOnAS examples has two java clients
-in its ear.
-
-
Specifying the directory for unpacking the ear (EAR case)
-
-
By default, the client container will use the system property
-java.io.tmpdir.
-To use another temporary directory, specify the path by giving the argument
--tmpDirto the client
-container.
-
-
Disable Automated WsGen
-
-
By default, the client container will apply WsGen (generation of web services artifacts) on all given archives.
-To disable that feature (because WsGen has already been applied on the application, or because
-the client contains no web services), add the -nowsgen option to the client container.
-
-
Examples
-
-
The earsample and jaasclient examples of the
-JOnAS examples are packaged for use by the client container.
-The first example demonstrates the client inside an ear. The second example
-demonstrates the use of a standalone client.
-
-
-
-
Defining the Client Deployment
-Descriptor
-
-
Principles
-
-
The Client component programmer is responsible for providing the
-deployment descriptor associated with the developed client components.
-
-
The client component provider's responsibilities and the Application
-Assembler's responsibilities are to provide an XML deployment descriptor that
-conforms to the deployment descriptor's XML DTD as defined in the Java
-TM Application Client Specification Version 1.4.(Refer to
-$JONAS_ROOT/xml/application-client_1_4.xsd or
-http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd).
-
-
To customize the Client components, information not defined in the
-standard XML deployment descriptor may be needed. Such information might
-include, for example, the mapping of the name of referenced resources to its
-JNDI name. This information can be specified during the deployment phase
-within another XML deployment descriptor that is specific to JOnAS. The
-JOnAS-specific deployment descriptor's XML schema is located in
-$JONAS_ROOT/xml/jonas-client_X_Y.xsd. The file name of the
-JOnAS-specific XML deployment descriptor must be
-'jonas-client.xml'.
-
-
JOnAS interprets the <!DOCTYPE> tag at the parsing of the deployment
-descriptor XML files.
-The parser first tries to get the specified DTD via the classpath, then it
-uses the specified URL (or path).
-
-
The parser gets the specified schema via the classpath (schemas are packaged
-in the $JONAS_ROOT/lib/common/ow_jonas.jar file).
-
-
The standard deployment descriptor (application-client.xml) should contain
-structural information that includes the following:
-
-
A Client description
-
Environment entries
-
EJB references
-
Resource references
-
Resource env references
-
The callback handler to use
-
-
-
The JOnAS-specific deployment descriptor (jonas-client.xml) may contain
-information that includes the following::
-
-
The JNDI name of the external resources referenced by a Client
- component
-
The JNDI name of the external resources environment referenced by a
- Client component
-
The JNDI name of the beans referenced by a Client component
-
The security aspects including the jaas file, the jaas entry, and a
- login/password to use for a specific callback handler
-
-
-
Examples of Client Deployment
-Descriptors
-
-
Example of a standard Client Deployment Descriptor
- (application-client.xml):
-
Although some characters, such as ">", are legal, it is good practice
-to replace them with XML entity references.
-
-
The following is a list of the predefined entity references for XML:
-
-
-
-
-
<
-
<
-
less than
-
-
-
>
-
>
-
greater than
-
-
-
&
-
&
-
ampersand
-
-
-
'
-
'
-
apostrophe
-
-
-
"
-
"
-
quotation mark
-
-
-
-
-
-
-
Client Packaging
-
-
Principles
-
-
Client components are packaged for deployment in a standard Java
-programming language Archive file called a jar file (Java ARchive).
-The document root contains a subdirectory called META-INF, which
-contains the following files and directories:
-
-
application-client.xml: The standard xml deployment descriptor
- in the format defined in the J2EE 1.4 Specification. Refer to
- $JONAS_ROOT/xml/application-client_1_4.xsd.
-
jonas-client.xml: The optional JOnAS specific xml deployment
- descriptor in the format defined in
- $JONAS_ROOT/xml/jonas-client_X_Y.xsd.
-
-
-
The manifest of this client jar must contain the name of the class to
-launch (containing the main method). This is defined by the value of the
-Main-Class attribute of the manifest file.
-For a standalone client (not bundled in an Ear), all the Ejb classes (except
-the skeleton) on which lookups will be performed must be included.
-
-
Example
-
-
Two examples of building a java client are provided.
-
-
-
The first is the build.xml of the
- earsample example with a java client inside the ear.
- Refer to the client1jar and client2jar targets.
-
The second is the build.xml of the
- jaasclient example with a java standalone client which
- performs a lookup on an EJB.
- Refer to the clientjars target.
This chapter is provided for advanced JOnAS users concerned with EAI
-(Enterprise Application Integration) and using the J2EE Connector
-Architecture principles (refer to the Appendix for an introduction to the connectors).
-The target audience for this guide is the Resource Adapter deployer and
-programmer. It describes the JOnAS specific deployment file
-(jonas-ra.xml) and the sample code to access deployed RARs.
-
-
Principles
-
-
Resource Adapters are packaged for deployment in a standard Java
-programming language Archive file called a rar file (Resource
-ARchive), which is described in the J2EE Connector Architecture
-specification.
-
-
The standard method for creating the jonas-ra.xml file is to use
-the RAConfig tool. For a complete description refer to RAConfig.
-
-
Defining the JOnAS Connector
-Deployment Descriptor
-
-
The jonas-ra.xml contains JOnAS specific information describing
-deployment information, logging, pooling, jdbc connections, and RAR config
-property values.
-
-
Deployment Tags:
-
-
jndiname: (Required) Name the RAR will be registered as. This value
- will be used in the resource-ref section of an EJB.
-
rarlink: Jndiname of a base RAR file. Useful for deploying
- multiple connection factories without having to deploy the complete
- RAR file again. When this is used, the only entry in RAR is a
- META-INF/jonas-ra.xml.
-
native-lib: Directory where additional files in the RAR should be
- deployed.
-
-
-
Logging Tags:
-
-
log-enabled: Determines if logging should be enabled for the
- RAR.
-
log-topic: Log topic to use for the PrintWriter logger, which
- allows a separate handler for each deployed RAR.
-
-
-
Pooling Tags:
-
-
pool-init: Initial size of the managed connection pool.
-
pool-min: Minimum size of the managed connection pool.
-
pool-max: Maximum size of the managed connection pool. Value of -1
- is unlimited.
-
pool-max-age: Maximum number of milliseconds to keep the managed
- connection in the pool. Value of 0 is an unlimited amount of
- time.
-
pstmt-max: Maximum number of PreparedStatements per managed
- connection in the pool. Only needed with the JDBC RA of JOnAS or
- another database vendor's RAR. Value of 0 is unlimited and -1
- disables the cache.
-
-
-
JDBC Connection Tags: Only valid with a Connection
- implementation of java.sql.Connection.
-
-
jdbc-check-level: Level of checking that will be done for the jdbc
- connection. Values are 0 for no checking, 1 to validate that the
- connection is not closed before returning it, and greater than 1 to
- send the jdbc-test-statement.
-
jdbc-test-statement: Test SQL statement sent on the connection if
- the jdbc-check-level is set accordingly.
-
-
-
Config Property Value Tags:
-
-
Each entry must correspond to the config-property specified in the
- ra.xml of the RAR file. The default values specified in the ra.xml will
- be loaded first and any values set in the jonas-ra.xml will
- override the specified defaults.
-
-
-
-
-
Deployment Descriptor Examples
-
-
The following portion of a jonas-ra.xml file shows the linking to
-a base RAR file named BaseRar. All properties from the base RAR will be
-inherited and any values given in this jonas-ra.xml will override
-the other values.
Resource Adapters are packaged for deployment in a standard Java
-programming language Archive file called an RAR file (Resource
-Adapter ARchive). This file can contain the following:
-
-
Resource Adapters' deployment descriptor
-
The RAR file must contain the deployment descriptors, which are made
- up of:
-
-
The standard xml deployment descriptor, in the format defined in
- the J2EE 1.4 specification. Refer to
- $JONAS_ROOT/xml/connector_1_5.xsd or
- http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd.
- This deployment descriptor must be stored with the name META-INF/ra.xml in
- the RAR file.
-
The JOnAS-specific XML deployment descriptor in the format
- defined in $JONAS_ROOT/xml/jonas-ra_X_Y.xsd. This JOnAS
- deployment descriptor must be stored with the name
- META-INF/jonas-ra.xml in the RAR file.
-
-
-
-
-
Resource adapter components (jar)
-
One or more jars which contain the java interfaces, implementation,
- and utility classes required by the resource adapter.
-
Platform-specific native libraries
-
One or more native libraries used by the resource adapter
-
Misc
-
One or more html, image files, or locale files used by the resource
- adapter.
-
-
-
Before deploying an RAR file, the JOnAS-specific XML must be configured
-and added. Refer to the RAConfig
-section for information.
-
-
Use and Deployment of a Resource
-Adapter
-
-
Accessing Resource Adapter involves the following steps:
-
-
The bean provider must specify the connection factory requirements by
- declaring a resource manager connection factory reference in its
- EJB deployment descriptor. For example:
-
- The mapping to the actual JNDI name of the connection factory
- (here adapt_1) is done in the JOnAS-specific deployment
- descriptor with the following element:
-
This means that the bean programmer will have access to a
- connection factory instance using the JNDI interface via the
- java:comp/env/eis/MyEIS name:
-
// obtain the initial JNDI naming context
- Context inictx = new InitialContext();
-
- // perform JNDI lookup to obtain the connection factory
- javax.resource.cci.ConnectionFactory cxf =
- (javax.resource.cci.ConnectionFactory)
- inictx .lookup("java:comp/env/eis/MyEIS");
- The bean programmer can then get a connection by calling the method
- getConnection on the connection factory.
-
- The returned connection instance represents an application-level handle
- to a physical connection for accessing the underlying EIS.
- After finishing with the connection, it must be closed using the
- close method on the Connection interface:
-
cx.close();
-
-
-
-
-
The resource adapter must be deployed before being used by the
- application. Deploying the resource adapter requires the following:
-
-
Build a JOnAS-specific resource adapter configuration
- file that will be included in the resource adapter.
- This jonas-ra XML file is used to configure the resource adapter in
- the operational environment and reflects the values of all
- properties declared in the deployment descriptor for the resource
- adapter, plus additional JOnAS-specific configuration properties.
- JOnAS provides a deployment tool RAConfig that is
- capable of building this XML file from an RA deployment descriptor
- inside an RAR file. Example:
-
RAConfig -path . -j adap_1 ra
-
- These properties may be specific for each resource adapter and its
- underlying EIS. They are used to configure the resource adapter via
- its managedConnectionFactory class. It is mandatory
- that this class provide getter and setter method for each of its
- supported properties (as it is required in the Connector
- Architecture specification).
-
After configuring the jonas-ra.xml file created above, it can be
- added to the resource adapter by executing the following:
-
RAConfig -u jonas-ra.xml ra
-
- This will add the xml file to the ra.rar file, which is now ready
- for deployment.
-
-
-
The JOnAS resource service must be configured and started at
- JOnAS launching time:
- In the jonas.properties file:
-
-
Verify that the name resource is included in the
- jonas.services property.
-
Use one of the following methods to deploy an RAR file:
-
-
The names of the resource adapter files (the '.rar'
- suffix is optional) must be added in the list of Resource
- Adapters to be used in the
- jonas.service.resource.resources property. If the
- '.rar' suffix is not used on the property, it will be used when
- trying to allocate the specified Resource Adapter.
-
Place the RAR file in the connectors autoload directory of
- $JONAS_BASE, default value is $JONAS_BASE/rars/autoload. Note
- that it may be different if
- jonas.service.resource.autoload in
- jonas.properties is configured differently.
-
Add the RAR via the "jonas admin -a xxx.rar"
- command.
-
Add the RAR via the JonasAdmin console.
-
-
-
-
-
-
-
-
-
JDBC Resource Adapters
-
-
These generic JDBC resource adapters are supplied by JOnAS and are a
-replacement for the DBM service. Refer to Configuring JDBC Resource
-Adapters for a complete description and usage guide.
-
-
Appendix: Connector Architecture
-Principles
-
-
The Java Connector Architecture allows the connection of different
-Enterprise Information Systems (EIS) to an application server such as JOnAS.
-It defines a way for enterprise applications (based on EJB, servlet, JSP or
-J2EE clients) to communicate with existing EIS. This requires the use of a
-third party software component called "Resource Adapter" for each type of
-EIS, which should be previously deployed on the application server. The
-Resource Adapter is an architecture component comparable to a software
-driver, which connects the EIS, the application server, and the enterprise
-application (J2EE components in the case of JOnAS as application server). The
-RA provides an interface (the Common Client Interface or CCI) to the
-enterprise application (J2EE components) for accessing the EIS. The RA also
-provides standard interfaces for plugging into the application server, so
-that they can collaborate to keep all system-level mechanisms (transactions,
-security, and connection management) transparent from the application
-components.
-
-
-
The resource adapter plugs into JOnAS and provides connectivity between
-the EIS, JOnAS, and the application. The application performs "business
-logic" operations on the EIS data using the RA client API (CCI), while
-transactions, connections (including pooling), and security on the EIS is
-managed by JOnAS through the RA (system contract).
EJB Programmer's Guide: Defining the
-Deployment Descriptor
-
-
Target Audience and Content
-
-
The target audience for this guide is the Enterprise Bean provider, i.e.
-the person in charge of developing the software components on the server
-side. It describes how the bean provider should build the deployment
-descriptors of its components.
The bean programmer is responsible for providing the deployment descriptor
-associated with the developed Enterprise Beans. The Bean Provider's
-responsibilities and the Application Assembler's responsibilities is to
-provide an XML deployment descriptor that conforms to the deployment
-descriptor's XML schema as defined in the EBJ specification version 2.1. (Refer
-to $JONAS_ROOT/xml/ejb-jar_2_1.xsd or
-http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd).
-
-
-
To deploy Enterprise JavaBeans on the EJB server, information not defined
-in the standard XML deployment descriptor may be needed. For example, this
-information may include the mapping of the bean to the underlying database
-for an entity bean with container-managed persistence. This information is
-specified during the deployment step in another XML deployment descriptor
-that is specific to JOnAS. The JOnAS-specific deployment descriptor's XML schema
-is located in $JONAS_ROOT/xml/jonas-ejb-jar_X_Y.xsd. The file
-name of the JOnAS-specific XML deployment descriptor must be the file name of
-the standard XML deployment descriptor prefixed by 'jonas-'.
-
-
The parser gets the specified schema via the classpath (schemas are packaged
-in the $JONAS_ROOT/lib/common/ow_jonas.jar file).
-
-
The standard deployment descriptor should contain structural information
-for each enterprise bean that includes the following:
-
-
the Enterprise bean's name,
-
the Enterprise bean's class,
-
the Enterprise bean's home interface,
-
the Enterprise bean's remote interface,
-
the Enterprise bean's type,
-
a re-entrancy indication for the entity bean,
-
the session bean's state management type,
-
the session bean's transaction demarcation type,
-
the entity bean's persistence management,
-
the entity bean's primary key class,
-
container-managed fields,
-
environment entries,
-
the bean's EJB references,
-
resource manager connection factory references,
-
transaction attributes.
-
-
-
The JOnAS-specific deployment descriptor contains information for each
-enterprise bean including:
-
-
the JNDI name of the Home object that implement the Home interface of
- the enterprise bean,
-
the JNDI name of the DataSource object corresponding to the resource
- manager connection factory referenced in the enterprise bean's class,
-
the JNDI name of each EJB references,
-
the JNDI name of JMS administered objects,
-
information for the mapping of the bean to the underlying database, if
- it is an entity with container-managed persistence.
The target audience for this guide is the Application Provider and
-Assembler, i.e. the person in charge of combining one or more components
-(ejb-jars and/or wars) to create a J2EE application. It describes how the
-J2EE components should be packaged to create a J2EE application.
The application programmer is responsible for providing the deployment
-descriptor associated with the developed application (Enterprise ARchive).
-The Application Assembler's responsibilities is to provide a XML deployment
-descriptor that conforms to the deployment descriptor's XML schema as defined in
-the J2EE specification version 1.4. (Refer to
-$JONAS_ROOT/xml/application_1_4.xsd or
-http://java.sun.com/xml/ns/j2ee/application_1_4.xsd).
-
-
To deploy J2EE applications on the application server, all information is
-contained in one XML deployment descriptor. The file name for the application
-XML deployment descriptor is application.xml and it must be
-located in the top level META-INF directory.
-
-
The parser gets the specified schema via the classpath (schemas are packaged
-in the $JONAS_ROOT/lib/common/ow_jonas.jar file).
-
-
Some J2EE application examples are provided in the JOnAS distribution:
-
-
$JONAS_ROOT/examples/alarm for The Alarm demo
-
$JONAS_ROOT/examples/cmp2 for The Cmp2 example
-
$JONAS_ROOT/examples/earsample for The EarSample example
-
$JONAS_ROOT/examples/petstore1.3 for The Blueprints Petstore application
-
-
-
The standard deployment descriptor should contain structural information
-that includes the following:
-
-
EJB components,
-
Web components,
-
Client components,
-
Alternate Deployment Descriptor for theses components,
-
Security role.
-
-
-
There is no JOnAS-specific deployment descriptor for the Enterprise
-ARchive.
-
-
-
-
Simple example of Application
-Deployment Descriptor
Although some characters, such as ">", are legal, it is good practice
-to replace them with XML entity references.
-
-
The following is a list of the predefined entity references for XML:
-
-
-
-
-
<
-
<
-
less than
-
-
-
>
-
>
-
greater than
-
-
-
&
-
&
-
ampersand
-
-
-
'
-
'
-
apostrophe
-
-
-
"
-
"
-
quotation mark
-
-
-
-
-
-
-
EAR Packaging
-
-
J2EE applications are packaged for deployment in a standard Java
-programming language Archive file called an ear file (Enterprise
-ARchive). This file can contain the following:
-
-
The web components (war)
-
One or more wars which contain the web components of the J2EE
- application. Due to the class loader hierarchy, when the wars are
- packaged in a J2EE application, it is not necessary to package classes
- of EJBs accessed by the web components in the WEB-INF/lib
- directory.
- Details about this class loader hierarchy are described in JOnAS class loader
- hierarchy.
-
The EJB components (ejb-jar)
-
One or more ejb-jars, which contain the beans of the J2EE
- application.
-
The RAR components (resource adapters)
-
One or more rars, which contain the resource adapters of the J2EE
- application.
-
The libraries (jar)
-
One or more jars which contain the libraries (tag libraries and any
- utility libraries) used for the J2EE application.
-
The J2EE deployment descriptor
-
The standard xml deployment descriptor in the format defined in the
- J2EE 1.4 specification. See
- $JONAS_ROOT/xml/application_1_4.xsd. This deployment
- descriptor must be stored with the name
- META-INF/application.xml in the ear file.
-
-
-
Example
-
-
Before building an ear file for a J2EE application, the ejb-jars and the
-wars that will be packaged in the J2EE application must be built and the XML
-deployment descriptor (application.xml) must be written.
-
-
Then, the ear file (<j2ee-application>.ear) can be
-built using the jar command:
-
cd <your_j2ee_application_directory>
- jar cvf <j2ee-application>.ear *
-
-The target audience for this guide is the Enterprise Bean provider, i.e. the
-person in charge of developing the software components on the server side,
-and more specifically the Entity Beans.
-
-
-An Entity Bean is comprised of the following elements, which are developed by
-the Enterprise Bean Provider:
-
-
The Component Interface is the client view of the bean. It
- contains all the "business methods" of the bean.
-
The Home Interface contains all the methods for the bean life
- cycle (creation, suppression) and for instance retrieval (finding one or
- several bean objects) used by the client application. It can also contain
- methods called "home methods," supplied by the bean provider, for
- business logic which is not specific to a bean instance.
-
The Primary Key class (for entity beans only) contains a subset
- of the bean's fields that identifies a particular instance of an entity
- bean. This class is optional since the bean programmer can alternatively
- choose a standard class (for example, java.lang.String)
-
The bean implementation class implements the business methods
- and all the methods (described in the EJB specification) allowing the
- bean to be managed in the container.
-
The deployment descriptor, containing the bean properties that
- can be edited at assembly or deployment time.
-
-Note that, according to the EJB 2.0 specification, the couple "Component
-Interface and Home Interface" can be either local or remote. Local
-Interfaces (Home and Component) are to be used by a client running in the
-same JVM as the EJB component. Create and finder methods of a local (or
-remote) home interface return local (or remote) component interfaces. An EJB
-component may have both remote and local interfaces, even if normally only
-one type of interface is provided. If an entity bean is the target of a
-container-managed relationship (refer to EJB 2.0 persistence), then it must
-have local interfaces.
-
-
The description of these elements is provided in the following
-sections.
-
-
Note that in this documentation, the term "Bean" always means "Enterprise
-Bean."
-
-
An entity bean represents persistent data. It is an object view of an
-entity stored in a relational database. The persistence of an entity bean can
-be handled in two ways:
-
-
Container-Managed Persistence: the persistence is implicitly
- managed by the container, no code for data access is supplied by the bean
- provider. The bean's state will be stored in a relational database
- according to a mapping description delivered within the deployment
- descriptor (CMP 1.1) or according to an implicit mapping (CMP 2.0).
-
Bean-Managed Persistence: the bean provider writes the database
- access operations (JDBC code) in the methods of the enterprise bean that
- are specified for data creation, load, store, retrieval, and remove
- operations (ejbCreate, ejbLoad, ejbStore, ejbFind..., ejbRemove).
-
-Currently, the platform handles persistence in relational storage systems
-through the JDBC interface. For both container-managed and bean-managed
-persistence, JDBC connections are obtained from an object provided at the EJB
-server level, the DataSource. The DataSource interface is defined in
-the JDBC 2.0 standard
-extensions. A DataSource object identifies a database and a means to access
-it via JDBC (a JDBC driver). An EJB server may propose access to several
-databases and thus provides the corresponding DataSource objects. DataSources
-are described in more detail in the section "Configuring JDBC DataSources."
-
-
The Home Interface
-In addition to "home business methods," the Home interface is used by any
-client application to create, remove, and retrieve instances of the entity
-bean. The bean provider only needs to provide the desired interface; the
-container will automatically provide the implementation. The interface must
-extend the javax.ejb.EJBHome interface if it is remote, or the
-javax.ejb.EJBLocalHome interface if it is local. The methods of a
-remote home interface must follow the rules for java RMI. The signatures of
-the "create" and "find..." methods should match the signatures of the
-"ejbCreate" and "ejbFind..." methods that will be provided later in the
-enterprise bean implementation class (same number and types of arguments, but
-different return types).
-
-
create methods:
-
-
The return type is the enterprise bean's component interface.
-
The exceptions defined in the throws clause must include the exceptions
- defined for the ejbCreate and ejbPostCreate methods, and must include
- javax.ejb.CreateException and java.rmi.RemoteException
- (the latter, only for a remote interface).
-
-remove methods:
-
-
The interfaces for these methods must not be defined, they are
- inherited from EJBHome or EJBLocalHome.
-
The method is void remove taking as argument the primary key
- object or the handle (for a remote interface).
-
The exceptions defined in the throws clause should be
- javax.ejb.RemoveException and java.rmi.RemoteException
- for a remote interface.
-
The exceptions defined in the throws clause should be
- javax.ejb.RemoveException and java.ejb.EJBException for
- a local interface.
-
-finder methods:
-
-
Finder methods are used to search for an EJB object or a collection of EJB
-objects. The arguments of the method are used by the entity bean
-implementation to locate the requested entity objects. For bean-managed
-persistence, the bean provider is responsible for developing the
-corresponding ejbFinder methods in the bean implementation. For
-container-managed persistence, the bean provider does not write these
-methods; they are generated at deployment time by the platform tools; the
-description of the method is provided in the deployment descriptor, as
-defined in the section "Configuring database
-access for container-managed persistence." In the Home interface, the
-finder methods must adhere to the following rules:
-
-
They must be named "find<method>" (e.g.
- findLargeAccounts).
-
The return type must be the enterprise bean's component interface, or a
- collection thereof.
-
The exceptions defined in the throws clause must include the exceptions
- defined for the matching ejbFind method, and must include
- javax.ejb.FinderException and java.rmi.RemoteException
- (the latter, only for a remote interface).
-
-At least one of these methods is mandatory: findByPrimaryKey, which
-takes as argument a primary key value and returns the corresponding EJB
-object.
-
-
home methods:
-
-
Home methods are methods that the bean provider supplies for business
- logic that is not specific to an entity bean instance.
-
The throws clause of every home method on the remote home interface
- includes the java.rmi.RemoteException.
-
Home methods implementation is provided by the bean developer in the
- bean implementation class as public static methods named
- ejbHome<METHOD_NAME>(...), where <METHOD_NAME> is
- the name of the method in the home interface.
-
-
-
Example
-The Account bean example, provided with the platform examples, is used to
-illustrate these concepts. The state of an entity bean instance is stored in
-a relational database, where the following table should exist, if CMP 1.1 is
-used:
-
-
public Account findByPrimaryKey(Integer
-pk)
- throws RemoteException,
-FinderException;
-
-
public Account findByNumber(int accno)
-
- throws RemoteException,
-FinderException;
-
-
public Enumeration findLargeAccounts(double
-val)
- throws RemoteException,
-FinderException;
-}
-
-
The Component Interface
-Business methods:
-
-
The Component Interface is the client's view of an instance of the entity
-bean. It is what is returned to the client by the Home interface after
-creating or finding an entity bean instance. This interface contains the
-business methods of the enterprise bean. The interface must extend the
-javax.ejb.EJBObject interface if it is remote, or the
-javax.ejb.EJBLocalObject if it is local. The methods of a remote
-component interface must follow the rules for java RMI. For each method
-defined in this component interface, there must be a matching method of the
-bean implementation class (same arguments number and types, same return type,
-same exceptions except for RemoteException).
-
-
Example
-public interface Account extends EJBObject {
- public double getBalance() throws
-RemoteException;
- public void setBalance(double d) throws
-RemoteException;
- public String getCustomer() throws
-RemoteException;
- public void setCustomer(String c) throws
-RemoteException;
- public int getNumber() throws
-RemoteException;
-}
-
-
The Primary Key Class
-The Primary Key class is necessary for entity beans only. It encapsulates the
-fields representing the primary key of an entity bean in a single object. If
-the primary key in the database table is composed of a single column with a
-basic data type, the simplest way to define the primary key in the bean is to
-use a standard java class (for example, java.lang.Integer or
-java.lang.String). This must have the same type as a field in the
-bean class. It is not possible to define it as a primitive field (for
-example, int, float or boolean). Then, it is only necessary to specify the
-type of the primary key in the deployment descriptor:
-
-And, for container-managed persistence, the field which represents the
-primary key:
-
<primkey-field>accno</primkey-field>
-The alternative way is to define its own Primary Key class, described as
-follows:
-
-
The class must be serializable and must provide suitable implementation of
-the hashcode() and equals(Object) methods.
-
-
For container-managed persistence, the following rules must be
-followed:
-
-
The fields of the primary key class must be declared as public.
-
The primary key class must have a public default constructor.
-
The names of the fields in the primary key class must be a subset of
- the names of the container-managed fields of the enterprise bean.
-
-
-
Example
-public class AccountBeanPK implements java.io.Serializable {
-
-
- public int accno;
-
-
public AccountBeanPK(int accno) { this.accno = accno; }
-
-
public AccountBeanPK() { }
-
-
-
- public int hashcode() { return accno; }
-
-
- public boolean equals(Object other) {
-
-
- ...
- }
-}
-
-
Special case: Automatic generation of primary keys field
-
-
There are two ways to manage the automatic primary key with JOnAS. The
-first method is closer to what is described in the EJB specification, i.e. an
-automatic PK is a hidden field, the type of which is not known even by the
-application. The second method is to declare a usual PK CMP field of type
-java.lang.Integer as automatic. The two cases are described below.
-
-
1) Standard automatic primary keys (from JOnAS 4.0.0)
-
-
In this case, an automatic PK is a hidden field, the type of which is not
-known even by the application. All that is necessary is to stipulate in the
-standard deployment descriptor that this EJB has an automatic PK, by
-specifying java.lang.Object as primkey-class. The primary key will be
-completely hidden to the application (no CMP field, no getter/setter method).
-This is valid for both CMP 2.x and CMP1 entity beans. The container will
-create an internal CMP field and generate its value when the entity bean is
-created.
// Primary key is not explicitly initialized during ejbCreate method
- // No cmp field corresponds to the primary key
- public Integer ejbCreateAddress(String street, String city,
- String state, String zip ) throws javax.ejb.CreateException {
- setStreet(street);
- setCity(city);
- setState(state);
- setZip(zip);
- return null;
- }
-
-
If nothing else is specified, and the JOnAS default CMP 2 database mapping
-is used, the JOnAS container will generate a database column with name
-JPK_ to handle this PK. However, it is possible to specify in
-the JOnAS-specific Deployment Descriptor the name of the column that will be
-used to store the PK value in the table, using the specific
-<automatic-pk-field-name> element, as follows (this is necessary for
-CMP2 legacy and for CMP1):
2) CMP field as automatic primary key (was already in JOnAS
-3.3.x)
-
-
The idea is to declare a usual PK CMP field of type java.lang.Integer as
-automatic, then it no longer appears in create methods and its value is
-automatically generated by the container at EJB instance creation time. But
-it is still a cmp field, with getter/setter methods, accessible from the
-application. Example:
-
-
In the standard DD, there is a usual primary key definition,
-Note: The automatic primary key is given a unique ID
-by an algorithm that is based on the system time;
-therefore, IDs may be not sequential.
-
-
-Important restriction: This algorithm will not work if used inside
-a cluster with the same entity bean that is being managed in several jonas servers.
-
-
The Enterprise Bean Class
-The EJB implementation class implements the bean's business methods of the
-component interface and the methods dedicated to the EJB environment, the
-interface of which is explicitly defined in the EJB specification. The class
-must implement the javax.ejb.EntityBean interface, must be defined
-as public, cannot be abstract for CMP 1.1, and must be abstract for
-CMP 2.0 (in this case, the abstract methods are the get and set accessor
-methods of the bean cmp and cmr fields). Following is a list of the EJB
-environment dedicated methods that the EJB provider must develop.
-
-
The first set of methods are those corresponding to the create and find
-methods of the Home interface:
-
-
public PrimaryKeyClass ejbCreate(...);
-
This method is invoked by the container when a client invokes the
- corresponding create operation on the enterprise Bean's home interface.
- The method should initialize instance's variables from the input
- arguments. The returned object should be the primary key of the created
- instance. For bean-managed persistence, the bean provider should develop
- here the JDBC code to create the corresponding data in the database. For
- container-managed persistence, the container will perform the database
- insert after the ejbCreate method completes and the return value
- should be null.
-
-
public voidejbPostCreate(...);
-
There is a matching ejbPostCreate method (same input parameters) for
- each ejbCreate method. The container invokes this method after the
- execution of the matching ejbCreate(...) method. During the ejbPostCreate
- method, the object identity is available.
-
-
public <PrimaryKeyClass or Collection>
- ejbFind<method> (...); // bean-managed persistence
- only
-
The container invokes this method on a bean instance that is not
- associated with any particular object identity (some kind of class method
- ...) when the client invokes the corresponding method on the Home
- interface. The implementation uses the arguments to locate the requested
- object(s) in the database and returns a primary key (or a collection
- thereof). Currently, collections will be represented as
- java.util.Enumeration objects or
- java.util.Collection. The mandatory FindByPrimaryKey
- method takes as argument a primary key type value and returns a primary
- key object (it verifies that the corresponding entity exists in the
- database). For container-managed persistence, the bean provider
- does not have to write these finder methods; they are generated at
- deployment time by the EJB platform tools. The information needed by the
- EJB platform for automatically generating these finder methods should be
- provided by the bean programmer. The EJB 1.1 specification does not
- specify the format of this finder method description; for JOnAS,
- the CMP 1.1 finder methods description should be provided in the
- JOnAS-specific deployment descriptor of the Entity Bean (as an SQL
- query). Refer to the section "Configuring
- database access for container-managed persistence." The EJB 2.0
- specification defines a standard way to describe these finder methods,
- i.e. in the standard deployment descriptor, as an EJB-QL query. Also
- refer to the section "Configuring
- database access for container-managed persistence." Then, the methods
- of the javax.ejb.EntityBean interface must be implemented:
-
-
public voidsetEntityContext(EntityContext ic);
-
Used by the container to pass a reference to the EntityContext to
- the bean instance. The container invokes this method on an instance
- after the instance has been created. Generally, this method is used
- to store this reference in an instance variable.
-
-
public voidunSetEntityContext();
-
Unset the associated entity context. The container calls this
- method before removing the instance. This is the last method the
- container invokes on the instance.
-
-
public voidejbActivate();
-
The container invokes this method when the instance is taken out
- of the pool of available instances to become associated with a
- specific EJB object. This method transitions the instance to the
- ready state.
-
-
public voidejbPassivate();
-
The container invokes this method on an instance before the
- instance becomes dissociated with a specific EJB object. After this
- method completes, the container will place the instance into the pool
- of available instances.
-
-
public voidejbRemove();
-
This method is invoked by the container when a client invokes a
- remove operation on the enterprise bean. For entity beans with
- bean-managed persistence, this method should contain the JDBC
- code to remove the corresponding data in the database. For
- container-managed persistence, this method is called
- before the container removes the entity representation in the
- database.
-
-
public voidejbLoad();
-
The container invokes this method to instruct the instance to
- synchronize its state by loading it from the underlying database. For
- bean-managed persistence, the EJB provider should code at this
- location the JDBC statements for reading the data in the database.
- For container-managed persistence, loading the data from the
- database will be done automatically by the container just
- before ejbLoad is called, and the ejbLoad method should only
- contain some "after loading calculation statements."
-
-
public voidejbStore();
-
The container invokes this method to instruct the instance to
- synchronize its state by storing it to the underlying database. For
- bean-managed persistence, the EJB provider should code at this
- location the JDBC statements for writing the data in the database.
- For entity beans with container-managed persistence, this
- method should only contain some "pre-store statements," since the
- container will extract the container-managed fields and write them to
- the database just after the ejbStore method call.
-
-
-
-
-
-
-
Example
-
-
The following examples are for container-managed persistence with EJB 1.1
-and EJB 2.0. For bean-managed persistence, refer to the examples delivered
-with your specific platform.
-
-
CMP 1.1
-
package eb;
-
-import java.rmi.RemoteException;
-import javax.ejb.EntityBean;
-import javax.ejb.EntityContext;
-import javax.ejb.ObjectNotFoundException;
-import javax.ejb.RemoveException;
-import javax.ejb.EJBException;
-
-public class AccountImplBean implements EntityBean {
-
- // Keep the reference on the EntityContext
- protected EntityContext entityContext;
-
- // Object state
- public Integer accno;
- public String customer;
- public double balance;
-
- public Integer ejbCreate(int val_accno, String val_customer, double val_balance) {
-
- // Init object state
- accno = new Integer(val_accno);
- customer = val_customer;
- balance = val_balance;
- return null;
- }
-
- public void ejbPostCreate(int val_accno, String val_customer, double val_balance) {
- // Nothing to be done for this simple example.
- }
-
- public void ejbActivate() {
- // Nothing to be done for this simple example.
- }
-
- public void ejbLoad() {
- // Nothing to be done for this simple example, in implicit persistence.
- }
-
- public void ejbPassivate() {
- // Nothing to be done for this simple example.
- }
-
-
- public void ejbRemove() {
- // Nothing to be done for this simple example, in implicit persistence.
- }
-
- public void ejbStore() {
- // Nothing to be done for this simple example, in implicit persistence.
- }
-
- public void setEntityContext(EntityContext ctx) {
- // Keep the entity context in object
- entityContext = ctx;
- }
-
- public void unsetEntityContext() {
- entityContext = null;
- }
-
- public double getBalance() {
- return balance;
- }
-
- public void setBalance(double d) {
- balance = balance + d;
- }
-
- public String getCustomer() {
- return customer;
- }
-
- public void setCustomer(String c) {
- customer = c;
- }
-
- public int getNumber() {
- return accno.intValue();
- }
-}
-CMP 2.0
-
import java.rmi.RemoteException;
-import javax.ejb.EntityBean;
-import javax.ejb.EntityContext;
-import javax.ejb.ObjectNotFoundException;
-import javax.ejb.RemoveException;
-import javax.ejb.CreateException;
-import javax.ejb.EJBException;
-
-public abstract class AccountImpl2Bean implements EntityBean {
-
- // Keep the reference on the EntityContext
- protected EntityContext entityContext;
-
-
- /*========================= Abstract set and get accessors for cmp fields ==============*/
-
- public abstract String getCustomer();
- public abstract void setCustomer(String customer);
-
- public abstract double getBalance();
- public abstract void setBalance(double balance);
-
- public abstract int getAccno();
- public abstract void setAccno(int accno);
-
- /*========================= ejbCreate methods ============================*/
-
-
- public Integer ejbCreate(int val_accno, String val_customer, double val_balance)
- throws CreateException {
-
- // Init object state
- setAccno(val_accno);
- setCustomer(val_customer);
- setBalance(val_balance);
- return null;
- }
-
- public void ejbPostCreate(int val_accno, String val_customer, double val_balance) {
- // Nothing to be done for this simple example.
- }
-
-
- /*====================== javax.ejb.EntityBean implementation =================*/
-
- public void ejbActivate() {
- // Nothing to be done for this simple example.
- }
-
- public void ejbLoad() {
- // Nothing to be done for this simple example, in implicit persistence.
- }
-
- public void ejbPassivate() {
- // Nothing to be done for this simple example.
- }
-
- public void ejbRemove() throws RemoveException {
- // Nothing to be done for this simple example, in implicit persistence.
- }
-
- public void ejbStore() {
- // Nothing to be done for this simple example, in implicit persistence.
- }
-
- public void setEntityContext(EntityContext ctx) {
-
- // Keep the entity context in object
- entityContext = ctx;
- }
-
- public void unsetEntityContext() {
- entityContext = null;
- }
-
- /**
- * Business method to get the Account number
- */
- public int getNumber() {
- return getAccno();
- }
-
-}
-For bean-managed persistence, data access operations are developed by
-the bean provider using the JDBC interface. However, getting database
-connections must be obtained through the javax.sql.DataSource
-interface on a datasource object provided by the EJB platform. This is
-mandatory since the EJB platform is responsible for managing the connection
-pool and for transaction management. Thus, to get a JDBC connection, in each
-method performing database operations, the bean provider must:
-
-
call the getConnection(...) method of the DataSource object, to
- obtain a connection to perform the JDBC operations in the current
- transactional context (if there are JDBC operations),
-
call the close() method on this connection after the database
- access operations, so that the connection can be returned to the
- connection pool (and be dissociated from the potential current
- transaction).
-
-A method that performs database access must always contain the getConnection
-and close statements, as follows:
-
-A DataSource object associates a JDBC driver with a database (as an ODBC
-datasource). It is created and registered in JNDI by the EJB server at launch
-time (refer also to the section "JDBC DataSources configuration").
-
-
A DataSource object is a resource manager connection factory for
-java.sql.Connection objects, which implements connections to a
-database management system. The enterprise bean code refers to resource
-factories using logical names called "Resource manager connection factory
-references." The resource manager connection factory references are special
-entries in the enterprise bean environment. The bean provider must use
-resource manager connection factory references to obtain the datasource
-object as follow:
-
-
Declare the resource reference in the standard deployment descriptor
- using a resource-ref element.
-
Lookup the datasource in the enterprise bean environment using the JNDI
- interface (refer to the section "Enterprise Bean's
- Environment").
-
-The deployer binds the resource manager connection factory references to the
-actual resource factories that are configured in the server. This binding is
-done in the JOnAS-specific deployment descriptor using the jonas-resource
-element.
-
-
Example
-The declaration of the resource reference in the standard deployment
-descriptor looks like the following:
-
-The <res-auth> element indicates which of the two resource manager
-authentication approaches is used:
-
-
Container: the deployer sets up the sign-on information.
-
Bean: the bean programmer should use the getConnection method
- with user and password parameters.
-
-The JOnAS-specific deployment descriptor must map the environment JNDI name
-of the resource to the actual JNDI name of the resource object managed by the
-EJB server. This is done in the <jonas-resource> element.
-
-The ejbStore method of the same Account example with bean-managed persistence
-is shown in the following example. It performs JDBC operations to update the
-database record representing the state of the entity bean instance. The JDBC
-connection is obtained from the datasource associated with the bean. This
-datasource has been instantiated by the EJB server and is available for the
-bean through its resource reference name, which is defined in the standard
-deployment descriptor.
-
-
In the bean, a reference to a datasource object of the EJB server is
-initialized:
Then, this datasource object is used in the implementation of the methods
-performing JDBC operations, such as ejbStore, as illustrated in the
-following:
-
public void ejbStore
- Connection conn = null;
- PreparedStatement stmt = null;
- try { // get a connection
- conn = ds.getConnection();
- // store Object state in DB
- stmt = conn.prepareStatement("update account set customer=?,balance=? where accno=?");
- stmt.setString(1, customer);
- stmt.setDouble(2, balance);
- Integer pk = (Integer)entityContext.getPrimaryKey();
- stmt.setInt(3, pk.accno);
- stmt.executeUpdate();
- } catch (SQLException e) {
- throw new javax.ejb.EJBException("Failed to store bean to database", e);
- } finally {
- try {
- if (stmt != null) stmt.close(); // close statement
- if (conn != null) conn.close(); // release connection
- } catch (Exception ignore) {}
- }
-}
-Note that the close statement instruction may be important if the server is
-intensively accessed by many clients performing entity bean access. If the
-statement is not closed in the finally block, since stmt is in the
-scope of the method, it will be deleted at the end of the method (and the
-close will be implicitly done). However, it may be some time before the Java
-garbage collector deletes the statement object. Therefore, if the number of
-clients performing entity bean access is important, the DBMS may raise a "too
-many opened cursors" exception (a JDBC statement corresponds to a DBMS
-cursor). Since connection pooling is performed by the platform, closing the
-connection will not result in a physical connection close, therefore opened
-cursors will not be closed. Thus, it is preferable to explicitly close the
-statement in the method.
-
-
It is a good programming practice to put the JDBC connection and JDBC
-statement close operations in a finally bloc of the try statement.
-
-
Configuring Database Access for
-Container-managed Persistence
-The standard way to indicate to an EJB platform that an entity bean has
-container-managed persistence is to fill the
-<persistence-type> tag of the deployment descriptor with the
-value "container," and to fill the <cmp-field> tag of the
-deployment descriptor with the list of container-managed fields (the fields
-that the container will have in charge to make persistent). The CMP version
-(1.x or 2.x) should also be specified in the <cmp-version> tag. In the
-textual format of the deployment descriptor, this is represented by the
-following lines:
-
-With container-managed persistence the programmer need not develop the
-code for accessing the data in the relational database; this code is included
-in the container itself (generated by the platform tools). However, for the
-EJB platform to know how to access the database and which data to read and
-write in the database, two types of information must be provided with the
-bean:
-
-
First, the container must know which database to access and how to
- access it. To do this, the only required information is the name of
- the DataSource that will be used to get the JDBC connection. For
- container-managed persistence, only one DataSource per bean should be
- used.
-
Then, it is necessary to know the mapping of the bean fields to the
- underlying database (which table, which column). For CMP 1.1 or CMP
- 2.0, this mapping is specified by the deployer in the JOnAS-specific
- deployment descriptor. Note that for CMP 2.0, this mapping may be
- entirely generated by JOnAS.
-
-The EJB specification does not specify how this information should be
-provided to the EJB platform by the bean deployer. Therefore, what is
-described in the remainder of this section is specific to JOnAS.
-
-
For CMP 1.1, the bean deployer is responsible for defining the mapping of
-the bean fields to the database table columns. The name of the DataSource can
-be set at deployment time, since it depends on the EJB platform
-configuration. This database configuration information is defined in the
-JOnAS-specific deployment descriptor via the jdbc-mapping element.
-The following example defines the mapping for a CMP 1.1 entity bean:
-jdbc_1 is the JNDI name of the DataSource object identifying the
-database. accountsample is the name of the table used to store the
-bean instances in the database. mAccno, mCustomer, and
-mBalance are the names of the container-managed fields of the bean
-to be stored in the accno, customer, and balance
-columns of the accountsample table. This example applies to
-container-managed persistence. For bean-managed persistence,
-the database mapping does not exist.
-
-
For a CMP 2.0 entity bean, only the jndi-name element of the
-jdbc-mapping is mandatory, since the mapping may be generated
-automatically (for an explicit mapping definition, refer to the "JOnAS Database Mapping" section of the Using CMP2.0 persistence chapter):
-For a CMP 2.0 entity bean, the JOnAS-specific deployment descriptor contains
-an additional element, cleanup, at the same level as the
-jdbc-mapping element, which can have one of the following values:
-
-
removedata
-
at bean loading time, the content of the tables storing the bean data
- is deleted
-
removeall
-
at bean loading time, the tables storing the bean data are dropped
- (if they exist) and created
-
none
-
do nothing
-
create
-
default value (if the element is not specified), at bean loading
- time, the tables for storing the bean data are created if they do not
- exist
-
-For CMP 1.1, the jdbc-mapping element can also contain information
-defining the behaviour of the implementation of a find<method>
-method (i.e. the ejbFind<method> method, that will be generated
-by the platform tools). This information is represented by the
-finder-method-jdbc-mapping element.
-
-
For each finder method, this element provides a way to define an SQL WHERE
-clause that will be used in the generated finder method implementation to
-query the relational table storing the bean entities. Note that the table
-column names should be used, not the bean field names. Example:
-The previous finder method description will cause the platform tools to
-generate an implementation of ejbFindLargeAccount(double arg) that returns
-the primary keys of the entity bean objects corresponding to the tuples
-returned by the "select ... from Account where balance > ?", where '?'
-will be replaced by the value of the first argument of the findLargeAccount
-method. If several '?' characters appear in the provided WHERE clause, this
-means that the finder method has several arguments and the '?' characters
-will correspond to these arguments, adhering to the order of the method
-signature.
-
-
In the WHERE clause, the parameters can be followed by a number, which
-specifies the method parameter number that will be used by the query in this
-position.
-Example: The WHERE clause of the following finder method can be:
-
Enumeration findByTextAndDateCondition(String text, java.sql.Date date)
-
- WHERE (description like ?1 OR summary like ?1) AND (?2 > date)
-Note that a <finder-method-jdbc-mapping> element for the
-findByPrimaryKey method is not necessary, since the meaning of this
-method is known.
-
-
Additionally, note that for CMP 2.0, the information defining the
-behaviour of the implementation of a find<method> method is
-located in the standard deployment descriptor, as an EJB-QL query
-(i.e. this is not JOnAS-specific information). The same finder method example
-in CMP 2.0:
-
<query>
- <query-method>
- <method-name>findLargeAccounts</method-name>
- <method-params>
- <method-param>double</method-param>
- </method-params>
- </query-method>
- <ejb-ql>SELECT OBJECT(o) FROM accountsample o WHERE o.balance > ?1</ejb-ql>
- </query>
-The datatypes supported for container-managed fields in CMP 1.1 are the
-following:
-
-
-
-
-
-
Java Type
-
JDBC Type
-
JDBC driver Access methods
-
-
-
boolean
-
BIT
-
getBoolean(), setBoolean()
-
-
-
byte
-
TINYINT
-
getByte(), setByte()
-
-
-
short
-
SMALLINT
-
getShort(), setShort()
-
-
-
int
-
INTEGER
-
getInt(), setInt()
-
-
-
long
-
BIGINT
-
getLong(), setLong()
-
-
-
float
-
FLOAT
-
getFloat(), setFloat()
-
-
-
double
-
DOUBLE
-
getDouble(), setDouble
-
-
-
byte[]
-
VARBINARY or LONGVARBINARY (1)
-
getBytes(), setBytes()
-
-
-
java.lang.String
-
VARCHAR or LONGVARCHAR (1)
-
getString(), setString()
-
-
-
java.lang.Boolean
-
BIT
-
getBoolean(), setObject()
-
-
-
java.lang.Integer
-
INTEGER
-
getInt(), setObject()
-
-
-
java.lang.Short
-
SMALLINT
-
getShort(), setObject()
-
-
-
java.lang.Long
-
BIGINT
-
getLong(), setObject()
-
-
-
java.lang.Float
-
REAL
-
getFloat(), setObject()
-
-
-
java.lang.Double
-
DOUBLE
-
getDouble(), setObject()
-
-
-
java.math.BigDecimal
-
NUMERIC
-
getBigDecimal(), setObject()
-
-
-
java.math.BigInteger
-
NUMERIC
-
getBigDecimal(), setObject()
-
-
-
java.sql.Date
-
DATE
-
getDate(), setDate()
-
-
-
java.sql.Time
-
TIME
-
getTime(), setTime()
-
-
-
java.sql.Timestamp
-
TIMESTAMP
-
getTimestamp(), setTimestamp()
-
-
-
any serializable class
-
VARBINARY or LONGVARBINARY (1)
-
getBytes(), setBytes()
-
-
-
-
-
(1) The mapping for String will normally be VARCHAR, but will turn into
-LONGVARCHAR if the given value exceeds the driver's limit on VARCHAR values.
-The case is similar for byte[] and VARBINARY and LONGVARBINARY values.
-
-
For CMP 2.0, the supported datatypes depend on the JORM mapper used.
-
-
-
Tuning Container for Entity Bean
-Optimizations
-JOnAS must make a compromise between scalability and performance. For that reason, several tags in the JOnAS-specific deployment
-descriptor have been introduced. For most applications, there is no need to change the default
-values for all these tags. See
-$JONAS_ROOT/xml/jonas-ejb-jar_4_7.xsd for a complete description
-of the JOnAS-specific deployment descriptor.
-
-
Note that if several of these elements are used, they should appear in the
-following order within the <jonas-entity> element:
-
-
is-modified-method-name
-
passivation-timeout
-
read-timeout
-
max-wait-time
-
inactivity-timeout
-
deadlock-timeout
-
shared
-
prefetch
-
hard-limit
-
max-cache-size
-
min-pool-size
-
cleanup
-
lock-policy
-
-
-
lock-policy
-The JOnAS ejb container is able to manage seven different lock-policies:
-
-
container-serialized (default)
-
The container ensures the
- transaction serialization. This policy is suitable for entity beans
- having non transacted methods that can modify the bean state.
- It works only if the bean is accessed from 1 jonas server (shared =
- false).
-
container-serialized-transacted
-
The container ensures the
- transaction serialization. This policy is suitable for most entity beans.
-
container-read-committed
-
This policy is similar to
- container-serialized-transacted, except that accesses outside transaction do not
- interfere with transactional accesses. This can help to avoid deadlocks in
- certain cases, when accessing a bean concurrently with and without a
- transactional context. The only drawback of this policy is that it
- consumes more memory (2 instances instead of 1).
-
container-read-uncommitted (deprecated)
-
All methods share the same
- instance (like container-serialized), but there is no synchronization.
- For example, this policy is of interest for read-only entity beans, or if
- the bean instances are very rarely modified. It will fail if two or more
- threads try to modify the same instance concurrently.
- This policy is deprecated because it can be replaced by container-read-write.
-
database
-
Allow the database to handle the transaction isolation.
- With this policy, it is possible to choose the transaction isolation in a
- database. This may be of interest for applications that heavily use
- transactional read-only operations, or when the flag shared is needed. It
- does not work with all databases and is not memory efficient.
-
read-only
-
The bean state is never written to the database.
- If the bean is shared, the bean state is read from the database regularly.
- Use the read-timeout tag to specify the timeout value.
-
container-read-write
-
All methods share the same
- instance (like container-serialized). A synchronization is done only when
- the instance is modified. No lock is taken while the instance is read only.
- This policy does not work if the bean is shared, nor does it work for CMP 1.x beans.
-
-
-
Important: If CMP1 beans are deployed, only the following policies should be used:
-
-
container-serialized
-
container-serialized-transacted
-
read-only
-
container-read-committed
-
database, but only with shared=true.
-
-
-
-
shared
-This flag will be defined as true if the bean persistent state can
-be accessed outside the JOnAS Server. When this flag is false, the
-JOnAS Server can do some optimization, such as not re-reading the bean state
-before starting a new transaction.
-The default value depends on the lock-policy:
-
-
false for container-serialized, container-read-uncommitted or container-read-write. For these 3 policies, shared=false is mandatory.
-
true in the other cases.
-
-Lock policy database works only if shared=true.
-
-
-
prefetch
-This is a CMP2-specific option. The default is false. This can be set to true
-if it is desirable to have a cache managed after finder methods execution, in
-order to optimize further accesses inside the same transaction.
-
-
Important note:
-
-
The prefetch will not be used for methods that have no transactional
- context.
-
It is impossible to set the prefetch option if the lock policy is
- container-read-uncommitted.
-
-
-
max-cache-size / hard-limit / max-wait-time
-This optional integer value represents the maximum number of instances in memory.
-The purpose of this value is to keep JOnAS scalable. The default value is "no
-limit". To save memory, this value should be set very low if it is known that
-instances will not be reused.
-Depending on whether hard-limit value is true or false, this max-cache-size value will
-be overtaken or not: In the case of hard-limit = true, the container will never allocate more
-instances than the max-cache-size value. When the limit is reached, the thread will be
-set to waiting until instances are released. It is possible to specify the maximum time to
-wait for an instance with the tag max-wait-time. The default is 0, which means "no wait".
-
-
min-pool-size
-This optional integer value represents the number of instances that will be
-created in the pool when the bean is loaded. This will improve bean instance
-create time, at least for the first instances. The default value is 0.
-When passivation occurs, for example if there are too many instances in memory,
-instances are released and placed in the pool only if min-pool-size is not
-reached. The intent is to try to keep at least min-pool-size instances in the pool of
-available instances.
-
-
is-modified-method-name
-To improve performance of CMP 1.1 entity beans, JOnAS implements the
-isModified extension. Before performing an update, the container calls a
-method of the bean whose name is identified in the
-is-modified-method-name element of the JOnAS-specific deployment
-descriptor. This method is responsible for determining if the state of the
-bean has been changed. By doing this, the container determines if it must
-store data in the database or not.
-
-
Note that this is useless with CMP2 entity beans, since this will be done
-automatically by the container.
-
-
Example
-
-
The bean implementation manages a boolean isDirty and implements
-a method that returns the value of this boolean: isModified
Methods that modify the value of the bean must set the flag
-isDirty to true.
-Methods that restore the value of the bean from the database must reset the
-flag isDirty to false. Therefore, the flag must be set to
-false in the ejbLoad() and ejbStore() methods.
-
-
passivation-timeout
-This flag is used only when lock-policy = container-serialized.
-When instances are accessed outside of any transaction, their state is kept in memory
-to improve performance. However, a passivation will occur in three situations:
-
-
When the bean is unloaded from the server, at least when the server
- is stopped.
-
When a transaction is started on this instance.
-
After a configurable timeout: passivation-timeout. If the bean is always accessed with no
- transaction, it may be prudent to periodically store the bean state on
- disk.
-
-This passivation timeout can be configured in the JOnAS-specific deployment
-descriptor, with the non-mandatory tag <passivation-timeout>. Example:
-
-This entity bean will be passivated every five second, if not accessed within
-transactions.
-
-
-
read-timeout
-This flag is used only when lock-policy = read-only.
-In case shared=true has been set, it is important to synchronize the bean
-state by reading it periodically from the storage.
-This is configurable with the read-timeout flag.
-Value is in seconds.
-
-
inactivity-timeout
-Bean passivation sends the state of the bean to persistent storage and removes from
-memory only the bean instance objects that are holding this state. All container objects handling
-bean access (remote object, interceptors, ...) are kept in memory so that future access
-will work, requiring only a reload
-operation (getting the state). It may be advantageous to conserve more memory and completely remove the
-bean instance from memory; this can be achieved through the <inactivity-timeout>
-element. This element is used to save memory when a bean has not been used for a long period of time.
-If the bean has not been used after the specified time (in seconds), all its
-container objects are removed
-from the server. If a client has kept a reference on a remote object and tries to use it, then the client will receive an
-exception.
-
-
Using CMP2.0 persistence
-
-
This section highlights the main differences between CMP as defined in EJB
-2.0 specification (called CMP2.0) and CMP as defined in EJB 1.1 specification
-(called CMP1.1). Major new features in the standard development and
-deployment of CMP2.0 entity beans are listed (comparing them to CMP1.1),
-along with JOnAS-specific information. Mapping CMP2.0 entity beans to the
-database is described in detail. Note that the database mapping can be
-created entirely by JOnAS, in which case the JOnAS-specific deployment
-descriptor for an entity bean should contain only the datasource and the
-element indicating how the database should be initialized.
-
-
Standard CMP2.0 Aspects
-
-
This section briefly describes the new features available in CMP2.0 as
-compared to CMP 1.1, and how these features change the development of entity
-beans.
-
-
Entity Bean Implementation Class
-
-
The EJB implementation class 1) implements the bean's business methods of
-the component interface, 2) implements the methods dedicated to the EJB
-environment (the interface of which is explicitly defined in the EJB
-specification), and 3) defines the abstract methods representing both the
-persistent fields (cmp-fields) and the relationship fields (cmr-fields). The
-class must implement the javax.ejb.EntityBean interface, be defined
-as public, and be abstract (which is not the case for CMP1.1, where it must
-not be abstract). The abstract methods are the get and set accessor methods
-of the bean cmp and cmr fields. Refer to the examples and details in the
-section "Developing Entity Beans" of
-the JOnAS documentation.
-
-
Standard Deployment Descriptor
-
-
The standard way to indicate to an EJB platform that an entity bean has
-container-managed persistence is to fill the
-<persistence-type> tag of the deployment descriptor with the
-value "container," and to fill the <cmp-field> tags of the
-deployment descriptor with the list of container-managed fields (the fields
-that the container will have in charge to make persistent) and the
-<cmr-field> tags identifying the relationships. The CMP
-version (1.x or 2.x) should also be specified in the <cmp-version> tag.
-This is represented by the following lines in the deployment descriptor:
Note that for running CMP1.1-defined entity beans on an EJB2.0 platform,
-such as JOnAS 3.x, you must introduce this
-<cmp-version> element in your deployment descriptors, since the
-default cmp-version value (if not specified) is 2.x.
-
-
Note that for CMP 2.0, the information defining the behaviour of the
-implementation of a find<method> method is located in
-the standard deployment descriptor as an EJB-QL query (this
-is not JOnAS-specific information).
-For CMP 1.1, this information is located in the JOnAS-specific deployment
-descriptor as an SQL WHERE clause specified in a
-<finder-method-jdbc-mapping> element.
-
-
Finder method example in CMP 2.0: for a findLargeAccounts(double
-val) method defined on the Account entity bean of the JOnAS eb
-example.
-
<query>
- <query-method>
- <method-name>findLargeAccounts</method-name>
- <method-params>
- <method-param>double</method-param>
- </method-params>
- </query-method>
- <ejb-ql>SELECT OBJECT(o) FROM accountsample o WHERE o.balance > ?1</ejb-ql>
- </query>
-
-
-
JOnAS EJBQL extension
-
-
LIMIT clause
-
-
The LIMIT feature has been added to the standard EJBQL
-query language. This feature enables you to retrieve just a portion
-of the results generated by the rest of a query.
- SELECT OBJECT(c) FROM jt2_Customer AS c ORDER BY c.id LIMIT ?1, 20
-
-
Note that this feature is currently not implemented on all the database types supported by JORM/MEDOR.
-
-
JOnAS Database mappers
-
-
For implementing the EJB 2.0 persistence (CMP2.0), JOnAS relies on the JORM framework. JORM
-itself relies on JOnAS DataSources (specified in DataSource properties files)
-for connecting to the actual database. JORM must adapt its object-relational
-mapping to the underlying database, for which it makes use of adapters called
-"mappers." Thus, for each type of database (and more precisely for each JDBC
-driver), the corresponding mapper must be specified in the DataSource. This
-is the purpose of the datasource.mapper property of the
-DataSource properties file. Note that all JOnAS-provided DataSource
-properties files (in JOnAS_ROOT/conf) already contain this property with the
-correct mapper.
-
-
-
-
-
property name
-
description
-
possible values
-
-
-
datasource.mapper
-
JORM database mapper
-
-
rdb: generic mapper (JDBC standard driver ...)
-
rdb.cloudscape: Cloudscape
-
rdb.db2: DB2
-
rdb.firebird: Firebird
-
rdb.hsql: HSQL
-
rdb.mckoi: McKoi Db
-
rdb.mysql: MySQL
-
rdb.oracle8: Oracle 8 and lesser versions
-
rdb.oracle: Oracle 9
-
rdb.postgres: PostgreSQL (>= 7.2)
-
rdb.sapdb: Sap DB
-
rdb.sqlserver: MS Sql Server
-
rdb.sybase: Sybase
-
-
-
-
-
-
-
Contact the JOnAS team to obtain a mapper for other databases.
-
-
The container code generated at deployment is now independent of the JORM mappers.
-Until JOnAS 4.1.4, the container code generated at deployment (GenIC or ejbjar ant task)
-was dependent on this mapper. It was possible to deploy (generate container code)
-a bean for several mappers in order to change the database (i.e. the
-DataSource file) without redeploying the bean. These mappers were
-specified as the mappernames argument of the GenIC command
-or as the mappernames attribute of the JOnAS ANT ejbjar
-task. The value was a comma-separated list of mapper names for which the
-container classes were generated. These mappernames options are now
-deprecated.
-
-
-
JOnAS Database Mapping (Specific Deployment
-Descriptor)
-
-
The mapping to the database of entity beans and their relationships may be
-specified in the JOnAS-specific deployment descriptor, in
-jonas-entity elements, and in jonas-ejb-relation elements.
-Since JOnAS is able to generate the database mapping, all the elements of the
-JOnAS-specific deployment descriptor defined in this section (which are
-sub-elements of jonas-entity or jonas-ejb-relation) are
-optional, except those for specifying the datasource and the initialization
-mode (i.e. the jndi-name of jdbc-mapping and
-cleanup). The default values of these mapping elements, provided in
-this section, define the JOnAS-generated database mapping.
-
-
Specifying and Initializing the Database
-
-
For specifying the database within which a CMP 2.0 entity bean is stored,
-the jndi-name element of the jdbc-mapping is necessary.
-This is the JNDI name of the DataSource representing the database storing the
-entity bean.
For a CMP 2.0 entity bean, the JOnAS-specific deployment descriptor
-contains an additional element, cleanup, to be specified before the
-jdbc-mapping element, which can have one of the following values:
-
-
removedata
-
at bean loading time, the content of the tables storing the bean data
- is deleted
-
removeall
-
at bean loading time, the tables storing the bean data are dropped
- (if they exist) and created
-
none
-
do nothing
-
create
-
default value (if the element is not specified), at bean loading
- time, the tables for storing the bean data are created if they do not
- exist.
-
-
-
It may be useful for testing purposes to delete the database data each
-time a bean is loaded. For this purpose, the part of the JOnAS-specific
-deployment descriptor related to the entity bean may look like the
-following:
Mapping CMP fields in CMP2.0 is similar to that of CMP 1.1, but in CMP2.0
-it is also possible to specify the SQL type of a column. Usually this SQL
-type is used if JOnAS creates the table (create value of the
-cleanup element), and if the JORM default chosen SQL type is not
-appropriate.
foreign-key-jdbc-name is the column name of the foreign key in the
-table of the source bean of the relationship-role.
-In this example, where the destination bean has a primary-key-field, it is
-possible to deduce that this foreign-key-jdbc-name column is to be associated
-with the column of this primary-key-field in the table of the destination
-bean.
-
-
Default values:
-
-
-
-
-
jonas-ejb-relation
-
Optional
-
-
-
foreign-key-jdbc-name
-
Optional.
- Default value is the abstract-schema-name of the destination bean,
- suffixed by _, and by its primary-key-field.
- B_idb in the example.
-
-
-
-
-
-
1-1 bidirectional relationships
-
-
Compared to 1-1 unidirectional relationships, there is a CMR field in both
-of the beans, thus making two types of mapping possible.
For the default mapping, the foreign key is in the table of the source
-bean of the first ejb-relationship-role of the ejb-relation. In the example,
-the default mapping corresponds to case 1, since the ejb-relationship-role
-a2b is the first defined in the ejb-relation a-b. Then, the
-default values are similar to those of the 1-1 unidirectional
-relationship.
In this case, the foreign key must be in the table of the bean which is on
-the "many" side of the relationship (i.e. in the table of the source bean of
-the relationship role with multiplicity many), t_B.
Optional.
- Default value is the abstract-schema-name of the destination bean of
- the "one" side of the relationship (i.e. the source bean of the
- relationship role with multiplicity one), suffixed by _, and
- by its primary-key-field.
- A_ida in the example.
-
-
-
-
-
-
1-N bidirectional relationships
-
-
Similar to 1-N unidirectional relationships, but with a CMR field in each
-bean.
In this case, the foreign key must be in the table of the bean which is on
-the "many" side of the relationship (i.e. in the table of the source bean of
-the relationship role with multiplicity many), t_B.
Optional.
- Default value is the abstract-schema-name of the destination bean of
- the "one" side of the relationship (i.e. the source bean of the
- relationship role with multiplicity one), suffixed by _, and
- by its primary-key-field.
- A_ida in the example.
-
-
-
-
-
-
N-1 unidirectional relationships
-
-
Similar to 1-N unidirectional relationships, but the CMR field is defined
-on the "many" side of the relationship, i.e. on the (source bean of the)
-relationship role with multiplicity "many."
In this case, the foreign key must be in the table of the bean which is on
-the "many" side of the relationship (i.e. in table of the source bean of the
-relationship role with multiplicity many), t_A.
Optional.
- Default value is the abstract-schema-name of the destination bean of
- the "one" side of the relationship (i.e. the source bean of the
- relationship role with multiplicity one), suffixed by _, and
- by its primary-key-field.
- B_idb in the example.
Optional.
- Default value is built from the abstract-schema-names of the beans,
- separated by _.
- A_B in the example.
-
-
-
foreign-key-jdbc-name
-
Optional.
- Default value is the abstract-schema-name of the destination bean,
- suffixed by _, and by its primary-key-field.
- B_idb and A_ida in the example.
-
-
-
-
-
-
N-M bidirectional relationships
-
-
Similar to N-M unidirectional relationships, but a CMR field is defined
-for each bean.
Optional.
- Default value is built from the abstract-schema-names of the beans,
- separated by _.
- A_B in the example.
-
-
-
foreign-key-jdbc-name
-
Optional.
- Default value is the abstract-schema-name of the destination bean,
- suffixed by _, and by its primary-key-field.
- B_idb and A_ida in the example.
-
-
-
-
-
-
CMR fields Mapping to composite
-primary-keys
-
-
In the case of composite primary keys, the database mapping should provide
-the capability to specify which column of a foreign key corresponds to which
-column of the primary key. This is the only difference between relationships
-based on simple primary keys. For this reason, not all types of relationship
-are illustrated below.
For the default mapping (values), the foreign key is in the table of the
-source bean of the first ejb-relationship-role of the ejb-relation. In the
-example, the default mapping corresponds to case 1, since the
-ejb-relationship-role a2b is the first defined in the ejb-relation a-b.
The target audience for this guide is the Enterprise Bean provider, i.e.
-the person in charge of developing the software components on the server
-side. It describes how an enterprise component can refer to values,
-resources, or other components in a way that is configurable at deployment
-time.
The enterprise bean environment is a mechanism that allows customization
-of the enterprise bean's business logic during assembly or deployment. The
-environment is a way for a bean to refer to a value, to a resource, or to
-another component so that the code will be independent of the actual referred
-object. The actual value of such environment references (or variables) is set
-at deployment time, according to what is contained in the deployment
-descriptor. The enterprise bean's environment allows the enterprise bean to
-be customized without the need to access or change the enterprise bean's
-source code.
-
-
The enterprise bean environment is provided by the container (i.e. the
-JOnAS server) to the bean through the JNDI interface as a JNDI context. The
-bean code accesses the environment using JNDI with names starting with
-"java:comp/env/".
-
-
Environment Entries
-
-
The bean provider declares all the bean environment entries in the
-deployment descriptor via the env-entry element. The deployer can
-set or modify the values of the environment entries.
-
-
A bean accesses its environment entries with a code similar to the
-following:
-
InitialContext ictx = new InitialContext();
- Context myenv = ictx.lookup("java:comp/env");
- Integer min = (Integer) myenv.lookup("minvalue");
- Integer max = (Integer) myenv.lookup("maxvalue");
-
-
-
In the standard deployment descriptor, the declaration of these variables
-are as follows:
Binding of the resource references to the actual resource manager
-connection factories that are configured in the EJB server is done in the
-JOnAS-specific deployment descriptor using the jonas-resource
-element.
The resource environment references are another example of environment
-entries. They allow the Bean Provider to refer to administered objects that
-are associated with resources (for example, JMS Destinations), by using
-logical names. Resource environment references are defined in the
-standard deployment descriptor.
-Binding of the resource environment references to administered objects in the
-target operational environment is done in the JOnAS-specific deployment
-descriptor using the jonas-resource-env element.
-
The EJB reference is another special entry in the enterprise bean's
-environment. EJB references allow the Bean Provider to refer to the homes of
-other enterprise beans using logical names. For such entries, using
-the subcontext java:comp/env/ejb is recommended.
-
-
The declaration of an EJB reference used for accessing the bean through
-its remote home and component interfaces in the standard deployment
-descriptor is shown in the following example:
The declaration of an EJB reference used for accessing the bean through
-its local home and component interfaces in the standard deployment
-descriptor is shown in the following example:
-Local interfaces are available in the same JVM as the bean providing this interface.
-The use of these interfaces also implies that the classloader of the component performing a lookup
- (bean or servlet component) is a child of the EJB classloader providing the local interface.
- Local interfaces, then, are not available to outside WARs or outside EJB-JARs
- even if they run in the same JVM. This is due to the fact that classes of
- the local interfaces are not visible on the client side.
- Putting them under the WEB-INF/lib folder of a WAR would not change
- anything as the two classes would be loaded by different classloaders,
- which will throw a "ClassCastException".
-
- To summarize, local interfaces are available only for
-
-
beans in a same ejb jar file.
-
from servlets to beans or ejbs to ejbs but in the same ear file.
-
-
-
-
If the referred bean is defined in the same ejb-jar or EAR file, the
-optional ejb-link element of the ejb-ref element can
-be used to specify the actual referred bean. The value of the ejb-link
-element is the name of the target enterprise bean, i.e. the name defined in
-the ejb-name element of the target enterprise bean. If the target enterprise
-bean is in the same EAR file, but in a different ejb-jar file, the name of
-the ejb-link element may be the name of the target bean, prefixed by the
-name of the containing ejb-jar file followed by '#' (e.g.
-"My_EJBs.jar#bean1"); prefixing by the name of the ejb-jar file is necessary
-only if some ejb-name conflicts occur, otherwise the name of the target bean
-is enough. In the following example, the ejb-link element has been
-added to the ejb-ref (in the referring bean SSA) and a part of the
-description of the target bean (SS1) is shown:
If the bean SS1 was not in the same ejb-jar file as SSA, but in another
-file named product_ejbs.jar, the ejb-link element could have been:
-
<ejb-link>product_ejbs.jar#SS1</ejb-link>
-
-
-
If the referring component and the referred bean are in separate files and
-not in the same EAR, the current JOnAS implementation does not allow use of
-the ejb-link element. In this case, to resolve the reference, the
-jonas-ejb-ref element in the JOnAS-specific deployment descriptor
-would be used to bind the environment JNDI name of the EJB reference to the
-actual JNDI name of the associated enterprise bean home. In the following
-example, it is assumed that the JNDI name of the SS1 bean home is
-SS1Home_one.
The bean locates the home interface of the other enterprise bean using the
-EJB reference with the following code:
-
InitialContext ictx = new InitialContext();
- Context myenv = ictx.lookup("java:comp/env");
- SS1Home home = (SS1Home)javax.rmi.PortableRemoteObject.narrow(myEnv.lookup("ejb/ses1"),
- SS1Home.class);
-
-
-
Deprecated
-EJBContext.getEnvironment() method
-
-
JOnAS provides support for EJB 1.0-style definition of environment
-properties. EJB1.0 environment must be declared in the
-ejb10-properties sub-context. For example:
The target audience for this guide is the application component provider,
-i.e., the person in charge of developing the software components on the server
-side (the business tier).
JOnAS supports two types of J2EE application components: Enterprise
-Beans and Web components. In addition to providing guides for
-construction of application components, guides are supplied for application
-assembly, deployment, and administration.
-
-
Enterprise Bean Creation
-
-
The individual in charge of developing Enterprise Beans should consult the
-Enterprise Beans Programmer's Guide for instructions on how to perform the
-following tasks:
-
-
Write the source code for the beans.
-
Specify the deployment descriptor.
-
Bundle the compiled classes and the deployment descriptor into an EJB
- JAR file.
-
-
-
This JOnAS documentation provides guides for developing the three types of
-enterprise bean:
Web designers in charge of JSP pages and software developers providing
-servlets can consult the Web Application Programmer's Guide.
-
-
The Developing Web
-Components guide explains how to construct Web components, as well as how
-to access Enterprise Beans from within the Web Components.
Web components can be used as Web application components or as
-J2EE application components. In both cases, a WAR file will be
-created, but the content of this file is different in the two situations. In
-the first case, the WAR contains the Web components and the Enterprise Beans.
-In the second case, the WAR does not contain the Enterprise Beans. The EJB
-JAR file containing the Enterprise Beans is packed together with the WAR file
-containing the Web components, into an EAR file.
-Principles and tools for providing WAR files are presented in WAR Packaging and
-the Deployment and
-Installation Guide.
-
-
J2EE Application Assembler
-
-
The application assembler in charge of assembling the application
-components already bundled in EJB JAR files and WAR files into a J2EE EAR
-file, can obtain useful information from the J2EE Application
-Assembler's Guide chapter.
-
-
Application Deployer and
-Administrator
-
-
JOnAS provides tools for the deployment and administration of Enterprise
-Beans (EJB JARs), Web applications (WARs), and J2EE applications (EARs).
The Administration Guide
-presents information about how to manage the JOnAS server and the JOnAS
-services that allow deployment of the different types of application
-components: EJB Container service, Web Container service, and EAR service.
-
-
JOnAS class loader hierarchy
-
-
This section describes a new and important key feature of the J2EE
-integration: the class loader hierarchy in JOnAS.
-
-
Understanding class loader
-hierarchy
-
-
An application is deployed by its own class loader. This means, for
-example, that if a WAR and an EJB JAR are deployed separately, the classes
-contained in the two archives are loaded with two separate classloaders with
-no hierarchy between them. Thus, the EJBs from within the JAR will not be
-visible to the Web components in the WAR.
-This is not acceptable in cases where the Web components of an application
-need to reference and use some of the EJBs (this concerns local references in
-the same JVM).
-
-
For this reason, prior to EAR files, when a Web application had to be
-deployed using EJBs, the EJB JAR had to be located in the
-WEB-INF/lib directory of the Web application.
-
-
Currently, with the J2EE integration and the use of the EAR packaging,
-class visibility problems no longer exist and the EJB JAR is no longer
-required in the WEB-INF/lib directory.
-
-
The following sections describe the JOnAS class loader hierarchy and
-explain the mechanism used to locate the referenced classes.
-
-
Commons class loader
-
-
The commons class loader is a JOnAS-specific class loader that will load
-all classes required to start the JOnAS server. This class loader has the
-system class loader as parent class loader. The commons class loader adds all
-the common libraries required to start the JOnAS server (J2EE apps, commons
-logging, objectweb components, etc.); it also loads the classes located in
-XTRA_CLASSPATH.
-
The JARs loaded by the commons class loader are located
-under the JONAS_ROOT/lib/commons and JONAS_BASE/lib/commons directories. You can
-extend this class loader by adding your own JARs inside these
-directories. If you are using a Jetty packaging,
-JONAS_ROOT/lib/jetty will be loaded too.
-
-
Note that the lib/ext extension mechanism is now
- deprecated. You should place additional JARs directly in the
- classloader directory (commons, apps,
- tools) under JONAS_ROOT and/or JONAS_BASE.
- You should now use the JONAS_BASE/lib/commons if you want to
- extend the commons ClassLoader, JONAS_BASE/lib/apps
- for apps ClassLoader and JONAS_BASE/lib/tools
- for tools ClassLoader.
- Notice that the JONAS_BASE extension directories are always
- loaded after JONAS_ROOT directories, so if the same class is in JONAS_ROOT/lib/commons
- and in JONAS_BASE/lib/commons, the one located in JONAS_ROOT/lib/commons will be used.
-
-
-
-
To have a library available for each component running inside JOnAS, add
-the required JAR files in the JONAS_ROOT/lib/commons directory or in
-the JONAS_BASE/lib/commons. All jars in subordinate directories will
-also be loaded.
-If a specific jar is needed only for a web application (i.e., need to use a
-version of a jar file which is different than a version loaded by JOnAS),
-change the compliance of the web application classloader to the java 2
-delegation model. Refer to the following: WEB class loader.
-It is also possible to use the extension mechanism, which is described in the
-section dependencies of the J2EE specification (section 8.1.1.28).
-
-
Application class loader
-
-
The application class loader is a JOnAS-specific class loader that will
-load all application classes required by the user applications. This implies
-that this loader will load all single RAR files. Thus, all applications
-have the visibility of the resource adapters classes. This class loader has the
-commons class loader as parent class loader.
-
The JARs loaded by the application class loader are
- located under the JONAS_ROOT/lib/apps directory,
- under JONAS_ROOT/lib/catalina/common/lib directory
- (CATALINA_HOME/common/lib if you are not using the
- Tomcat package) and under JONAS_BASE/lib/apps directory.
- You can extend this class loader by adding your own
- JARs inside these directories.
-
-
-
Tools class loader
-
-
The tools class loader is a JOnAS-specific class loader that will load all
-classes for which applications do not require visibility. (User applications
-will not have the ability to load the classes packaged in the tools class
-loader). For example, it includes the jakarta velocity and digester
-components. This class loader has the commons class loader as parent class
-loader.
-
The JARs loaded by the tools class loader are located under the
- JONAS_ROOT/lib/tools directory and under the
- JONAS_BASE/lib/tools directory. You can extend this class loader
- by adding your own JARs inside these directories.
-
-
-
Tomcat class loader
-
-
The tomcat class loader is a class loader that will load all classes of
-the tomcat server (CATALINA_HOME/server/lib directory). The
-classes of the common directory of tomcat
-(CATALINA_HOME/common/lib directory) are loaded by the
-application classloader and not by this tomcat classloader. Applications have
-the visibility of the classes and not the server classes. To have
-the visibility of the server classes, the context must have
-the privileged attribute set to true. This class loader
-has the application class loader as parent class loader.
-
The JARs loaded by the tomcat class loader are located
- under the JONAS_ROOT/lib/catalina/server/lib directory (if
- using Tomcat packaging, unless these libs are located under
- CATALINA_HOME/server/lib). You can extend this class
- loader by adding your own JARs inside this directory.
-
-
-
JOnAS class loaders
-
-
The JOnAS class loader hierarchy that allows the deployment of EAR
-applications without placing the EJB JAR in the WEB-INF/lib
-directory consists of the following:
-
-
EAR class loader
-
-
The EAR class loader is responsible for loading the EAR application. There
-is only one EAR class loader per EAR application. This class loader is the
-child of the application class loader, thus making JOnAS classes visible to
-it.
-
-
EJB class loader
-
-
The EJB class loader is responsible for loading all the EJB JARs of the
-EAR application, thus all the EJBs of the same EAR application are loaded
-with the same EJB classloader. This class loader is the child of the EAR
-class loader.
-
-
WEB class loader
-
-
The WEB class loader is responsible for loading the Web components. There
-is one WEB class loader per WAR file, and this class loader is the child of
-the EJB class loader. Using this class loader hierarchy (the EJB class loader
-is the parent of the WEB class loader) eliminates the problem of visibility
-between classes when a WEB component tries to reference EJBs; the classes
-loaded with the EJB class loader are definitely visible to the classes loaded
-by its child class loader (WEB class loader).
-
-
The compliance of the class loader of the web application to the java 2
-delegation model can be changed by using the jonas-web.xml file. This is
-described in the section "Defining the Web Deployment
-Descriptor."
-
-
If the java2-delegation-model element is set to false, the class loader of
-the web application looks for the class in its own repository before asking
-its parent class loader.
-
-
Conclusion
-
-
The resulting JOnAS class loader hierarchy is as follows:
As required by the J2EE v1.4 specification, application components
-(servlets, JSP pages and enterprise beans) can use JMS for Java messaging.
-Furthermore, applications can use Message-driven Beans for asynchronous EJB
-method invocation, as specified by the EJB 2.1 specification.
-
-
Starting with the JOnAS 3.1 version, JOnAS supports the Java Message
-Service Specification 1.1. Previously in JMS 1.0.2, client programming for
-Point-to-point and Pub/Sub domains was achieved using similar, but separate,
-class hierarchies. Now, JMS 1.1 offers a domain-independent approach to
-programming the client application. Thus, the programming model is simpler
-and it is now possible to engage queues and topics in the same
-transaction.
-
-
Enterprise Bean providers can use JMS Connection Factory resources via
-resource references, and JMS Destination resources (JMS Queues and JMS
-Topics) via resource environment references. Thus, they are able to
-provide JMS code, inside an EJB method or web component method, for sending
-or synchronously receiving messages to/from a JMS Queue or Topic.
-
-
The EJB container and the Web container can allow for JMS operations
-within a global transaction, which may include other resources such as
-databases.
-
-
JOnAS integrates a third party JMS implementation (JORAM) which is the default JMS
-service, and for which a J2EE1.4-compliant Resource Adapter archive file is
-also provided. Other JMS providers, such as SwiftMQ and WebSphere MQ,
-may easily be integrated.
-
-
Starting with release 4.1, a JMS provider can be integrated within JOnAS
-by deploying a corresponding resource adapter. This is the
-preferred method as the JMS service will eventually become deprecated in
-later JOnAS releases. Also, this method allows deployment of 2.1 MDBs (not
-possible with the JMS service).
-
-
For performing JMS operations, JMS-administered objects will be used by
-the application components, such as connection factories and destinations.
-Refer to the JMS Administration section for
-an explanation of how to create those objects.
-
-
JMS installation and configuration
-aspects
-To use JMS with JOnAS, no additional installation or configuration operations
-are required. JOnAS contains:
-
-
the Java[TM] Message Service API 1.1, currently integrated with the
- JOnAS distribution,
-
a JMS implementation. Currently, the OpenSource JORAM (http://joram.objectweb.org), is
- integrated with the JOnAS distribution, thus no installation is
- necessary.
-
-
-
Additionally, the SwiftMQ product
-and IBM's WebSphere MQ
-have been used with JOnAS.
-
-
Writing JMS operations within an
-application component
-To send (or synchronously receive) JMS messages, the component requires
-access to JMS-administered objects, i.e. Connection Factories for creating
-connections to JMS resources and Destination objects (Queue or Topic), which
-are the JMS entities used as destinations within JMS sending operations. Both
-are made available through JNDI by the JMS provider administration facility.
-
-
Refer to the JOnAS example jms as a supplement to this
-present reading. This example jms is described here.
-
-
Accessing the Connection Factory
-The EJB specification introduces the concept of Resource Manager
-Connection Factory References. This concept also appears in the J2EE v1.4
-specification. It is used to create connections to a resource manager. To
-date, three types of Resource Manager Connection Factories are
-considered:
-
JMS Connection factories (javax.jms.ConnectionFactory,
- javax.jms.QueueConnectionFactory and
- javax.jms.TopicConnectionFactory) are connection factories
- for JMS connection objects.
-
Java Mail Connection factories (javax.mail.Session or
- javax.mail.internet.MimePartDataSource) are connection
- factories for Java Mail connection objects.
-
-The connection factories of interest here are the second type, which should
-be used to get JMS Connection Factories.
-
-
Note that starting with JMS 1.1, it is recommended that only the
-javax.jms.ConnectionFactory be used (rather than
-javax.jms.QueueConnectionFactory or
-javax.jms.TopicConnectionFactory ). However, the new
-implementation is fully backwards compatible and existing applications will
-work as is.
-
-
The standard deployment descriptor should contain the following
-resource-ref element:
-This means that the programmer will have access to a
-ConnectionFactory object using the JNDI name
-java:comp/env/jms/conFact. The source code for obtaining the factory
-object is the following:
-
-The mapping to the actual JNDI name of the connection factory (as assigned by
-the JMS provider administration tool), CF in the example, is defined
-in the JOnAS-specific deployment descriptor with the following element:
-
-Accessing a JMS destination within the code of an application component
-requires using a Resource Environment Reference, which is represented
-in the standard deployment descriptor as follows:
-
-It is also possible for an application component to synchronously
-receive a message. An EJB method performing synchronous message reception on
-a queue is illustrated in the following:
-
-The contained JMS operations will be a part of the transaction, if there is
-one, when the JOnAS server executes the method.
-
-
Be sure to never send and receive a particular message in the same
-transaction, since the JMS sending operations are actually performed at
-commit time only.
-
-
The previous examples illustrate point-to-point messaging. However,
-application components can also be developed using the publish/subscribe JMS
-API, i.e. using the Topic instead of the Queue
-destination type. This offers the capability of broadcasting a message to
-several message consumers at the same time. The following example illustrates
-a typical method for publishing a message on a JMS topic and demonstrates how
-interfaces have been simplified since JMS 1.1.
Transactions and JMS sessions within an application component
-JMS session creation within an application component will result in different
-behaviors, depending on whether the session is created at execution time
-within or outside a transaction. In fact, the parameters of the
-createSession(boolean transacted, int acknowledgeMode) method are
-never taken into account.
-
-
If the session creation occurs outside a transaction, the parameters is
- considered as being transacted = false and acknowledgeMode =
- AUTO_ACKNOWLEDGE. This means that each operation of the session is
- immediately executed.
-
If the session creation occurs inside a transaction, the parameters
- have no meaning, the session may be considered as transacted, and the
- commit and rollback operations are handled by the JOnAS server at the
- level of the associated XA resource.
-
-
-
Authentication
-If your JMS implementation performs user authentication, the following
-methods can be used on Connection Factories:
-
-
createConnection(String userName, String password) on
- ConnectionFactory
-
createQueueConnection(String userName, String password) on
- QueueConnectionFactory
-
createTopicConnection(String userName, String password) on
- TopicConnectionFactory
-
-
-
Some programming rules and restrictions
-when using JMS within EJB
-This section presents some programming restrictions and rules for using JMS
-operations within entity components.
-
-
Connection Management
-Depending on the JMS implementation and the application, it may be desirable
-to keep the JMS connections open for the life of the bean instance or for the
-duration of the method call. These two programming modes are illustrated in
-the following example (this example illustrates a stateful session bean):
-
-To keep the connection open during the life of a bean instance, the
-programming style shown in the following example is preferred, since it
-avoids many connection opening and closing operations:
-
-Be aware that maintaining JMS objects in the bean state is not always
-possible, depending on the type of bean.
-
-
For a stateless session bean, the bean state is not maintained across
- method calls. Therefore, the JMS objects should always be initialized and
- defined in each method that performs JMS operations.
-
For an entity bean, an instance may be passivated, and only the
- persistent part of the bean state is maintained. Therefore, it is
- recommended that the JMS objects be initialized and defined in each
- method performing JMS operations. If these objects are defined in the
- bean state, they can be initialized in the ejbActivate method
- (if the connection is created in the ejbActivate method, be sure
- to close it in the ejbPassivate method).
-
For a stateful session bean (as shown in the previous example), JMS
- objects can be defined in the bean state. Stateful session bean instances
- can be passivated (not in the current version of JOnAS). Since connection
- factories and destinations are serializable objects, they can be
- initialized only in ejbCreate. However, be aware that a connection must
- be closed in ejbPassivate (with the state variable set to
- null) and recreated in ejbActivate.
-
-
-
Note that, due to a known problem with the Sun JDK 1.3 on Linux, the close
-of the connection can block. The problem is fixed with JDK 1.4.
-
-
Starting Transactions after JMS Connection or Session creation
-Currently, it is not possible to start a bean-managed transaction after the
-creation of a JMS session and have the JMS operations involved in the
-transaction. In the following code example, the JMS operations will not occur
-within the ut transaction:
-
-To have the session operations involved in the transaction, the session
-creation and close should be inside the transaction boundaries, and the
-connection creation and close operations can either be both outside the
-transaction boundaries or both inside the transaction boundaries, as follows:
-
-Programming EJB components with bean-managed transactions can result in
-complex code. Using container-managed transactions can help avoid problems
-such as those previously described.
-
-
JMS administration
-Applications using messaging require some JMS-administered objects:
-connection factories and destinations. These objects are
-created via the proprietary administration interface (not standardized) of
-the JMS provider. For simple cases, it is possible to have either the
-jms service or the JMS resource adapter perform administration
-operations during startup.
-
-
As provided, the default JMS service and JORAM adapter configurations
-automatically create six connection factories and two destination objects.
-
-
The six connection factories automatically created are described in the
-following table:
-
-
-
-
-
-
-
-
JNDI name
-
JMS type
-
Usage
-
-
-
CF
-
ConnectionFactory
-
To be used by an application component to create a Connection.
-
-
-
QCF
-
QueueConnectionFactory
-
To be used by an application component to create a
- QueueConnection.
-
-
-
TCF
-
TopicConnectionFactory
-
To be used by an application component to create a
- TopicConnection.
-
-
-
JCF
-
ConnectionFactory
-
To be used by any other Java component (for instance a client) to
- create a Connection.
-
-
-
JQCF
-
QueueConnectionFactory
-
To be used by any other Java component (for instance a client) to
- create a QueueConnection.
-
-
-
JTCF
-
TopicConnectionFactory
-
To be used by any other Java component (for instance a client) to
- create a TopicConnection.
-
-
-
-
-
-
The CF, QCF and TCF connection factories are managed connection
-factories. The application components should use only managed connection
-factories to allow JOnAS to manage the JMS resources created via these
-connection factories (the JMS sessions).
-In contrast, JCF, JQCF and JTCF are non-managed connection factories.
-They are used by Java components implementing a JMS client behavior, but
-running outside the application server.
-
-
The two destinations automatically created are described in the following
-table:
-
-
-
-
-
-
-
JNDI name
-
JMS type
-
Usage
-
-
-
sampleQueue
-
Queue
-
Can be equally used by an EJB component or a Java component.
-
-
-
sampleTopic
-
Topic
-
Can be equally used by an EJB component or a Java component.
-
-
-
-
-
-
JMS service administration
-For using the JMS service in the default configuration, it is only necessary
-to require the use of the JMS service in the jonas.properties file:
-
jonas.services security,jtm,dbm,jms,ejb
-
-
JOnAS will not create additional connection factories when using the
-default configuration. However, JOnAS can create requested destination
-objects at server launching time, if specified in the jonas.properties
-file. To do this, specify the JNDI names of the Topic and Queue destination
-objects to be created in a jonas.service.jms.topics and
-jonas.service.jms.queues property respectively, as follows:
-
jonas.service.jms.topics t1,t2 // JOnAS server creates 2 topic destinations (t1,t2)
- jonas.service.jms.queues myQueue // JOnAS server creates 1 queue destination (myQueue)
-It is recommended that programmers use resource references and
-resource environment references to access the connection factories and
-destination objects created by JOnAS, as already presented in the "Writing JMS operations within an application
-component" section.
-
-
JMS resource adapter configuration
-
-
Starting with JOnAS release 4.1, it is recommended that a JMS resource
-adapter be deployed instead of using the jms service. Refer to the
-JMS Resource Adapters configuration
-guide for an explanation.
-
-
Running an EJB performing JMS
-operations
-All that is necessary to have an Enterprise Bean perform JMS operations is:
-
-
-
jonas start
-
-
The Message-Oriented Middleware (the JMS provider implementation) is
-automatically started (or at least accessed) and the JMS-administered objects
-that will be used by the Enterprise Beans are automatically created and
-registered in JNDI.
-
-
Then, the EJB can be deployed as usual with:
-
jonas admin -a XX.jar
-
-
Accessing the Message-Oriented
-Middleware...
-
-
as a service...
-If the JOnAS property jonas.services contains the jms service,
-the JOnAS JMS service will be launched and will eventually try to launch a
-JMS implementation (e.g. the JORAM MOM or the SwiftMQ MOM).
-
-
For launching the MOM, consider the following possibilities:
-
-
Launching the MOM automatically in the JOnAS JVM
- This is done using the default values for the configuration options, i.e.
- keeping the JOnAS property jonas.service.jms.collocated value
- true in the jonas.properties file (see the
- jonas.properties file provided in $JONAS_ROOT/conf
- directory).
-
jonas.service.jms.collocated true
- In this case, the MOM will be launched automatically at server launching
- time (command jonas start).
-
- Note for using the JORAM MOM from a distant host:
- To use the JMS resources from a distant host, the hostname
- property value in the default a3servers.xml
- configuration file must be changed from localhost to the
- actual host name. See case 4 (Launching the MOM on another port
- number) for details on the JORAM configuration.
-
-
-
Launching the MOM in a separate JVM on the same host
- The JORAM MOM can be launched with its default options using the command:
-
- JmsServer
-
For other MOMs, use the proprietary command.
-
- In this case, the JOnAS property jonas.service.jms.collocated must
- be set to false in the jonas.properties file.
-
jonas.service.jms.collocated false
-
-
Launching the MOM on another host
- The MOM can be launched on a separate host. In this case, the JOnAS
- server must be notified that the MOM is running on another host via the
- JOnAS property jonas.service.jms.url in the
- jonas.properties file. For JORAM, its value should be the JORAM
- URL joram://host:port where host is the host name, and
- port the default JORAM port number, i.e. 16010 (For SwiftMQ, the
- value of the URL is similar to smqp://host:4001/timeout=10000).
-
Launching the MOM on another port number (for JORAM)
- To change the default JORAM port number requires a JORAM-specific
- configuration operation (modifying the a3servers.xml
- configuration file located in the directory where JORAM is explicitly
- launched). A default a3servers.xml file is provided in the
- $JONAS_ROOT/conf directory; this a3servers.xml file specifies
- that the MOM runs on the localhost using the JORAM default port number.
-
- To launch the MOM on another port number, change the args attribute of
- the service class="fr.dyade.aaa.mom.ConnectionFactory" element in the
- a3servers.xml file and update the jonas.service.jms.url
- property in the jonas.properties file.
-
- The default a3servers.xml file is located in $JONAS_ROOT/conf. To change
- the location of this file, the system property
- -Dfr.dyade.aaa.agent.A3CONF_DIR="your directory for a3.xml" must
- be passed.
-
-
-
Specifying JORAM's persistence mode
- When automatically starting JORAM, or when starting JORAM with the
- JmsServer command, the default mode is non-persistent. Meaning
- that in the event of a crash, the non-delivered and non-acknowledged
- messages are lost.
-
- In order to start a persistent JORAM server, guaranteeing message
- delivery even in case of failures, the Transaction system property
- should be set to fr.dyade.aaa.util.NTransaction.
-
Note: the MOM may be directly launched by the proprietary
- command. The command for JORAM is:
- java -DTransaction=fr.dyade.aaa.util.NullTransaction
- fr.dyade.aaa.agent.AgentServer 0 ./s0
-
This command corresponds to the default options used by the
- JmsServer command.
-
The server is not persistent when launched with this command. If
- persistence is required, the
- -DTransaction=fr.dyade.aaa.util.NullTransaction option should be
- replaced with the -DTransaction=fr.dyade.aaa.util.NTransaction
- option.
-
To change other MOM configurations (distribution, multi-servers, ...),
- refer to the JORAM documentation on http://joram.objectweb.org.
-
-
-
-
... or as a J2EE1.4 adapter
-
-
Starting with JOnAS release 4.1, a JMS server can be accessed through a
-resource adapter which may be deployed.
-
-
For deploying such a resource adapter, place the corresponding archive
-file (*.rar) in the JOnAS's rars/autoload
-directory, or declare it at the end of the jonas.properties
-file, or deploy it manually through the jonasAdmin tool.
-This example shows an EJB application that combines an Enterprise Bean
-sending a JMS message and an Enterprise Bean writing a Database (an Entity
-Bean) within the same global transaction. It is composed of the following
-elements:
-
-
A Session Bean, EjbComp, with a method for sending a message to a JMS
- topic.
-
An Entity Bean, Account (the one used in the sample eb with
- container-managed persistence), which writes its data into a relational
- database table and is intended to represent a sent message (i.e. each
- time the EjbComp bean sends a message, an entity bean instance will be
- created).
-
An EJB client, EjbCompClient, which calls the sendMsg method of the
- EjbComp bean and creates an Account entity bean, both within the same
- transaction. For a transaction commit, the JMS message is actually sent
- and the record corresponding to the entity bean in the database is
- created. For a rollback, the message is not sent and nothing is created
- in the database.
-
A pure JMS client MsgReceptor, outside the JOnAS server, the role of
- which is to receive the messages sent by the Enterprise Bean on the
- topic.
-
-
-
The Session Bean performing JMS operations
-The bean should contain code for initializing the references to JMS
-administered objects that it will use. To avoid repeating this code in each
-method performing JMS operations, it can be introduced in the
-ejbCreate method.
-
-This code has been intentionally cleared from all the elements in which it is
-not necessary for understanding the JMS logic aspects of the example, e.g.
-exception management.
-
-
The JMS-administered objects ConnectionFactory and Topic
-have been made available to the bean by a resource reference in the
-first example, and by a resource environment reference in the second
-example.
-The standard deployment descriptor should contain the following element:
-Note that the EjbComp SessionBean will use the administered objects
-automatically created by JOnAS in the default JMS configuration.
-
-
Because the administered objects are now accessible, it is possible to
-perform JMS operations within a method. The following occurs in the
-sendMsg method:
-The result of this client execution will be that:
-
-
the "Hello commit" message will be sent and the [222, 'JMS
- Sample OK', 0] record will be created in the database (corresponding
- to the entity bean 109 creation).
-
the "Hello rollback" message will never be sent and the
- [223, 'JMS Sample KO', 0] record will not be created in the
- database (since the entity bean 110 creation will be
- canceled).
-
-
-
A pure JMS client for receiving messages
-In this example, the messages sent by the EJB component are received by a
-simple JMS client that is running outside the JOnAS server, but listening for
-messages sent on the JMS topic "sampleTopic." It uses the ConnectionFactory
-automatically created by JOnAS named "JCF."
-
Configuring an environment to use login modules with java clients
-
-
The login modules for use by clients are defined in the file
-$JONAS_ROOT/conf/jaas.config. Example:
-
jaasclient {
- // Login Module to use for the example jaasclient.
-
- //First, use a LoginModule for the authentication
- // Use the resource memrlm_1
- org.objectweb.jonas.security.auth.spi.JResourceLoginModule required
- resourceName="memrlm_1"
- ;
-
- // Use the login module to propagate security to the JOnAS server
- // globalCtx is set to true in order to set the security context
- // for all the threads of the client container instead of only
- // on the current thread.
- // Useful with multithread applications (like Swing Clients)
- org.objectweb.jonas.security.auth.spi.ClientLoginModule required
- globalCtx="true"
- ;
-};
-
-
-
This file is used when a java client is launched with
-jclient, as a result of the following property being set by
-jclient:
--Djava.security.auth.login.config==$JONAS_ROOT/conf/jaas.config
-
-For more information about the JAAS authentication, refer to the
-JAAS
-authentication tutorial.
-
-
-
Example of a client
-
-
First, the CallbackHandler to use is declared. It can be a simple
- command line prompt, a dialog, or even a login/password to use.
- Example of CallbackHandler that can be used within JOnAS.
-
CallbackHandler handler1 = new LoginCallbackHandler();
- CallbackHandler handler2 = new DialogCallbackHandler();
- CallbackHandler handler3 = new NoInputCallbackHandler("jonas_user", "jonas_password");
-
-
-
Next, the LoginContext method with the previously defined
- CallbackHandler and the entry to use from the
- JONAS_ROOT/conf/jaas.config file is called.
- This example uses the dialog callbackhandler.
-
LoginContext loginContext = new LoginContext("jaasclient", handler2);
-
-
-
Finally, the login method on the LoginContext instance is called.
-
-
loginContext.login();
-
- If there are no exceptions, the authentication is successful.
- Authentication can fail if the supplied password is incorrect.
The EJB 2.1 specification defines a new kind of EJB component for
-receiving asynchronous messages. This implements some type of "asynchronous
-EJB component method invocation" mechanism. The Message-driven Bean (also
-referred to as MDB in the following) is an Enterprise JavaBean, not an Entity
-Bean or a Session Bean, which plays the role of a JMS MessageListener.
-
-
The EJB 2.1 specification contains detailed information about MDB. The Java
-Message Service Specification 1.1 contains detailed information about JMS.
-This chapter focuses on the use of Message-driven beans within the JOnAS
-server.
-
-
Description of a Message-driven Bean
-A Message-driven Bean is an EJB component that can be considered as a JMS
-MessageListener, i.e., processing JMS messages asynchronously; it implements
-the onMessage(javax.jms.Message) method, defined in the
-javax.jms.MessageListener interface. It is associated with a JMS
-destination, i.e., a Queue for "point-to-point" messaging or a Topic for
-"publish/subscribe." The onMessage method is activated on receipt of
-messages sent by a client application to the corresponding JMS destination.
-It is possible to associate a JMS message selector to filter the messages
-that the Message-driven Bean should receive.
-
-
JMS messages do not carry any context, thus the onMessage method
-will execute without pre-existing transactional context. However, a new
-transaction can be initiated at this moment (refer to the "Transactional aspects" section for more
-details). The onMessage method can call other methods on the MDB
-itself or on other beans, and can involve other resources by accessing
-databases or by sending messages. Such resources are accessed the same way as
-for other beans (entity or session), i.e., through resource references
-declared in the deployment descriptor.
-
-
The JOnAS container maintains a pool of MDB instances, allowing large
-volumes of messages to be processed concurrently. An MDB is similar in some
-ways to a stateless session bean: its instances are relatively short-lived,
-it retains no state for a specific client, and several instances may be
-running at the same time.
-
-
Developing a Message-driven
-Bean
-
-
The MDB class must implement the javax.jms.MessageListener and the
-javax.ejb.MessageDrivenBean interfaces. In addition to the
-onMessage method, the following must be implemented:
-
-
A public constructor with no argument.
-
public void ejbCreate(): with no arguments, called at the bean
- instantiation time. It may be used to allocate some resources, such as
- connection factories, for example if the bean sends messages, or
- datasources or if the bean accesses databases.
-
public void ejbRemove(): usually used to free the resources
- allocated in the ejbCreate method.
-
public void setMessageDrivenContext(MessageDrivenContext mdc):
- called by the container after the instance creation, with no transaction
- context. The JOnAS container provides the bean with a container context
- that can be used for transaction management, e.g., for calling
- setRollbackOnly(), getRollbackOnly(), getUserTransaction().
The destination associated to an MDB is specified in the deployment
-descriptor of the bean. A destination is a JMS-administered object,
-accessible via JNDI. The description of an MDB in the EJB 2.0 deployment
-descriptor contains the following elements, which are specific to MDBs:
-
-
the JMS acknowledgment mode: auto-acknowledge or dups-ok-acknowledge
- (refer to the JMS specification for the definition of these modes)
-
an eventual JMS message selector: this is a JMS concept which allows
- the filtering of the messages sent to the destination
-
a message-driven-destination, which contains the destination type
- (Queue or Topic) and the subscription durability (in case of Topic)
-
-
-
The following example illustrates such a deployment descriptor:
If the transaction type is "container," the transactional behavior of the
-MDB's methods are defined as for other enterprise beans in the deployment
-descriptor, as in the following example:
For the onMessage method, only the Required or
-NotSupported transaction attributes must be used, since there can be
-no pre-existing transaction context.
-
-
For the message selector specified in the previous example, the sent JMS
-messages are expected to have two properties, "Weight" and "LName," for
-example assigned in the JMS client program sending the messages, as
-follows:
Such a message will be received by the Message-driven bean. The message
-selector syntax is based on a subset of the SQL92. Only messages whose
-headers and properties match the selector are delivered. Refer to the JMS
-specification for more details.
-
-
The JNDI name of a destination associated with an MDB is defined in the
-JOnAS-specific deployment descriptor, within a jonas-message-driven
-element, as illustrated in the following:
Once the destination is established, a client application can send
-messages to the MDB through a destination object obtained via JNDI as
-follows:
-
-
Queue q = context.lookup("sampleTopic");
-
-
If the client sending messages to the MDB is an EJB component itself, it
-is preferable that it use a resource environment reference to obtain the
-destination object. The use of resource environment references is described
-in the JMS
-User's Guide (Writing JMS operations within an application component /
-Accessing the destination object section).
-
-
Administration aspects
-It is assumed at this point that the JOnAS server will make use of an
-existing JMS implementation, e.g., Joram, SwiftMQ.
-
-
The default policy is that the MDB developer and deployer are not
-concerned with JMS administration. This means that the developer/deployer
-will not create or use any JMS Connection factories and will not create a JMS
-destination (which is necessary for performing JMS operations within an EJB
-component, refer to the JMS User's Guide); they will simply define the type of
-destination in the deployment descriptor and identify its JNDI name in the
-JOnAS-specific deployment descriptor, as described in the previous section.
-This means that JOnAS will implicitly create the necessary administered
-objects by using the proprietary administration APIs of the JMS
-implementation (since the administration APIs are not standardized). To
-perform such administration operations, JOnAS uses wrappers to the JMS
-provider administration API. For Joram, the wrapper is
-org.objectweb.jonas_jms.JmsAdminForJoram (which is the default wrapper
-class defined by the jonas.service.jms.mom property in the
-jonas.properties file). For SwiftMQ, a
-com.swiftmq.appserver.jonas.JmsAdminForSwiftMQ class can be obtained
-from the SwiftMQ site.
-
-
For the purpose of this implicit administration phase, the deployer must
-add the 'jms' service in the list of the JOnAS services. For the example
-provided, the jonas.properties file should contain the following:
-
-jonas.services registry,security,jtm,dbm,jms,ejb // The jms service must be added
-jonas.service.ejb.descriptors samplemdb.jar
-jonas.service.jms.topics sampleTopic // not mandatory
-
-
The destination objects may or may not pre-exist. The EJB server will not
-create the corresponding JMS destination object if it already exists. (Refer
-also to JMS
-administration). The sampleTopic should be explicitly
-declared only if the JOnAS Server is going to create it first, even if the
-Message-driven bean is not loaded, or if it is used by another client before
-the Message-driven bean is loaded. In general, it is not necessary to declare
-the sampleTopic.
-
-
JOnAS uses a pool of threads for executing Message-driven
-bean instances on message reception, thus allowing large volumes of messages
-to be processed concurrently. As previously explained, MDB instances are
-stateless and several instances may execute concurrently on behalf of the
-same MDB. The default size of the pool of thread is 10, and it may be
-customized via the jonas property
-jonas.service.ejb.mdbthreadpoolsize, which is specified in
-the jonas.properties file as in the following example:
-
jonas.service.ejb.mdbthreadpoolsize 50
-
-
-
Running a Message-driven Bean
-
-
To deploy and run a Message-driven Bean, perform the following steps:
Create and register in JNDI the JMS destination object that will be
- used by the MDB.
-
This can be done automatically by the JMS service or explicitly by the
- proprietary administration facilities of the JMS provider (JMS
- administration). The JMS service creates the destination object if
- this destination is declared in the jonas.properties
- file (as specified in the previous section).
-
-
Deploy the MDB component in JOnAS.
-
Note that, if the destination object is not already created when
- deploying an MDB, the container asks the JMS service to create it based
- on the deployment descriptor content.
-
-
Run the EJB client application.
-
Stop the application.
-
When using JMS, it is very important to stop JOnAS using the
- jonas stop command; it should not be stopped directly by
- killing it.
-
-
-
-
Launching the Message-Oriented
-Middleware
-
-
If the configuration property jonas.services contains the
-jms service, then the JOnAS JMS service will be launched and may try to
-launch a JMS implementation (a MOM).
-
-
For launching the MOM, three possibilities can be considered:
-
-
Launching the MOM in the same JVM as JOnAS
-
This is the default situation obtained by assigning the
- true value to the configuration property
- jonas.service.jms.collocated in the
- jonas.properties file.
-
-jonas.services security,jtm,dbm,jms,ejb // The jms service must be in the list
-jonas.service.jms.collocated true
-
In this case, the MOM is automatically launched by the JOnAS JMS
- service at the JOnAS launching time (command jonas
- start).
-
-
Launching the MOM in a separate JVM
-
The Joram MOM can be launched using the command:
-
JmsServer
-
For other MOMs, the proprietary command should be used.
-
The configuration property
- jonas.service.jms.collocated must be set to
- false in the jonas.properties file. Setting
- this property is sufficient if the JORAM's JVM runs on the same host as
- JONAS, and if the MOM is launched with its default options (unchanged
- a3servers.xml configuration file under JONAS_BASE/conf
- or JONAS_ROOT/conf if JONAS_BASE not defined).
-
-jonas.services security,jtm,dbm,jms,ejb // The jms service must be in the list
-jonas.service.jms.collocated false
-
To use a specific configuration for the MOM, such as changing the
- default host (which is localhost) or the default connection port number
- (which is 16010), requires defining the additional
- jonas.service.jms.url configuration property as
- presented in the following case.
-
-
Launching the MOM on another host
-
This requires defining the jonas.service.jms.url
- configuration property. When using Joram, its value should be the Joram
- URL joram://host:port where host is the host
- name, and port is the connection port (by default, 16010).
- For SwiftMQ, the value of the URL is similar to the following:
- smqp://host:4001/timeout=10000.
-
-jonas.services security,jtm,dbm,jms,ejb // The jms service must be in the list
-jonas.service.jms.collocated false
-jonas.service.jms.url joram://host2:16010
-
-
-
-
-
Change Joram default configuration
-
As mentioned previously, the default host or default connection port
- number may need to be changed. This requires modifying the
- a3servers.xml configuration file provided by the JOnAS
- delivery in JONAS_ROOT/conf directory. For this, JOnAS must be configured
- with the property jonas.service.jms.collocated set to
- false, and the property
- jonas.service.jms.url set to
- joram://host:port. Additionally, the MOM must have been
- previously launched with the JmsServer command. This command defines a
- Transaction property set to
- fr.dyade.aaa.util.NullTransaction. If the messages need to
- be persistent, replace the
- -DTransaction=fr.dyade.aaa.util.NullTransaction option with
- the -DTransaction=fr.dyade.aaa.util.NTransaction option.
- Refer to the Joram documentation for more details about this command. To
- define a more complex configuration (e.g., distribution, multi-servers),
- refer to the Joram documentation on http://joram.objectweb.org.
-
-
-
-
Transactional aspects
-Because a transactional context cannot be carried by a message (according to
-the EJB 2.0 specification), an MDB will never execute within an existing
-transaction. However, a transaction may be started during the onMessage
-method execution, either due to a "required" transaction attribute
-(container-managed transaction) or because it is explicitly started within
-the method (if the MDB is bean-managed transacted). In the second case, the
-message receipt will not be part of the transaction. In the first case,
-container-managed transaction, the container will start a new transaction
-before de-queueing the JMS message (the receipt of which will, thus, be part
-of the started transaction), then enlist the resource manager associated with
-the arriving message and all the resource managers accessed by the onMessage
-method. If the onMessage method invokes other enterprise beans, the container
-passes the transaction context with the invocation. Therefore, the
-transaction started at the onMessage method execution may involve
-several operations, such as accessing a database (via a call to an entity
-bean, or by using a "datasource" resource), or sending messages (by using a
-"connection factory" resource).
-
-
Example
-JOnAS provides examples that are located in the
-examples/src/mdb install directory.
-samplemdb is a very simple example, the code of which is
-used in the previous topics for illustrating how to use Message-driven beans.
-
-sampleappli is a more complex example that shows how the
-sending of JMS messages and updates in a database via JDBC may be involved in
-the same distributed transaction.
-The following figure illustrates the architecture of this example
-application.
-
-
-
-
-
There are two Message-driven beans in this example:
-
-
StockHandlerBean
- is a Message-driven bean listening to a topic and receiving Map messages.
- The onMessage method runs in the scope of a transaction started
- by the container. It sends a Text message on a Queue (OrdersQueue) and
- updates a Stock element by decreasing the stock quantity. If the stock
- quantity becomes negative, an exception is received and the current
- transaction is marked for rollback.
-
OrderBean
- is another Message-driven bean listening on the OrdersQueue Queue. On
- receipt of a Text message on this queue, it writes the corresponding
- String as a new line in a file ("Order.txt").
-
-
-
-
The example also includes a CMP entity bean Stock that
-handles a stock table.
-
-
A Stock item is composed of a Stockid (String), which is the primary key,
-and a Quantity (int). The method decreaseQuantity(int qty) decreases the
-quantity for the corresponding stockid, but can throw a RemoteException
-"Negative stock."
-
-
The client application SampleAppliClient
-is a JMS Client that sends several messages on the topic
-StockHandlerTopic. It uses Map messages with three fields:
-"CustomerId," "ProductId," "Quantity." Before sending messages, this client
-calls the EnvBean
-for creating the StockTable in the database with known values in order
-to check the results of updates at the end of the test. Eleven messages are
-sent, the corresponding transactions are committed, and the last message sent
-causes the transaction to be rolled back.
-
-
Compiling this example
-
-
To compile examples/src/mdb/sampleappli, use Ant
-with the $JONAS_ROOT/examples/src/build.xml file.
-
-
Running this example
-
-The default configuration of the JMS service in jonas.properties
-is the following:
-
- jonas.services jmx,security,jtm,dbm,jms,ejb // The jms service must be added
- jonas.service.ejb.descriptors sampleappli.jar
- jonas.service.jms.topics StockHandlerTopic
- jonas.service.jms.queues OrdersQueue
- jonas.service.jms.collocated true
-
-This indicates that the JMS Server will be launched in the same JVM as the
-JOnAS Server, and the JMS-administered objects StockHandlerTopic
-(Topic) and OrdersQueue (Queue) will be created and registered
-in JNDI, if not already existing.
-
-
Run the JOnAS Server.
-
-
jonas start
-
-
Deploy the sampleappli container.
-
-
jonas admin -a sampleappli.jar
-
-
Run the EJB client.
-
-
jclient sampleappli.SampleAppliClient
-
-
Stop the server.
-
-
jonas stop
-
-
-
-
Tuning Message-driven Bean Pool
-A pool is handled by JOnAS for each Message-driven bean. The pool can be
-configured in the JOnAS-specific deployment descriptor with the following
-tags:
-
-
min-pool-size
-This optional integer value represents the minimum instances that will be
-created in the pool when the bean is loaded. This will improve bean instance
-creation time, at least for the first beans. The default value is 0.
-
-
max-cache-size
-This optional integer value represents the maximum number of instances of
-ServerSession that may be created in memory. The purpose of this value
-is to keep JOnAS scalable. The policy is the following:
-When the ConnectionConsumer ask for a ServerSession instance
-(in order to deliver a new message) JOnAS tries to give an instance from the
-ServerSessionPool. If the pool is empty, a new instance is created
-only if the number of yet created instances is smaller than the max-cache-size
-parameter. When the max-cache-size is reached, the ConnectionConsumer
-is blocked and it cannot deliver new messages until a ServerSession is
-eventually returned in the pool. A ServerSession is pushed into the
-pool at the end of the onMessage method.
-The default value is no limit (this means that a new instance of
-ServerSession is always created when the pool is empty).
-
-The values for max-cache-size should be set accordingly to jonas.service.ejb.maxworkthreads value.
-See Configuring JMS Service.
-
The target audience for this guide is the Enterprise Bean provider, i.e.
-the person in charge of developing the software components on the server
-side. It describes how the bean components should be packaged.
Enterprise Beans are packaged for deployment in a standard Java
-programming language Archive file, called an ejb-jar file. This file
-must contain the following:
-
-
The beans' class files
-
The class files of the remote and home interfaces, of the beans'
- implementations, of the beans' primary key classes (if there are any),
- and of all necessary classes.
-
The beans' deployment descriptor
-
The ejb-jar file must contain the deployment descriptors, which are
- made up of:
-
-
The standard xml deployment descriptor, in the format defined in
- the EJB 2.1 specification. Refer
- to $JONAS_ROOT/xml/ejb-jar_2_1.xsd or
- http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd
- . This deployment descriptor must be stored with the name
- META-INF/ejb-jar.xml in the ejb-jar file.
-
The JOnAS-specific XML deployment descriptor in the format
- defined in $JONAS_ROOT/xml/jonas-ejb-jar_X_Y.xsd. This
- JOnAS deployment descriptor must be stored with the name
- META-INF/jonas-ejb-jar.xml in the ejb-jar file.
-
-
-
-
-
Example
-
-
Before building the ejb-jar file of the Account entity bean example, the
-java source files must be compiled to obtain the class files and the two XML
-deployment descriptors must be written.
-
-
Then, the ejb-jar file (OpEB.jar) can be built using the jar
-command:
-
cd your_bean_class_directory
- mkdir META-INF
- cp .../eb/*.xml META-INF
- jar cvf OpEB.jar sb/*.class META-INF/*.xml
-
The target audience for this guide is the Enterprise Bean provider, i.e.
-the person in charge of developing the software components on the server
-side. It explains how security behavior should be defined.
The EJB architecture encourages the Bean programmer to implement the
-enterprise bean class without hard-coding the security policies and
-mechanisms into the business methods.
-
-
Declarative Security
-Management
-
-
The application assembler can define a security view of the
-enterprise beans contained in the ejb-jar file.
-The security view consists of a set of security roles. A security
-role is a semantic grouping of permissions for a given type of application
-user that allows that user to successfully use the application.
-The application assembler can define (declaratively in the deployment
-descriptor) method permissions for each security role. A method
-permission is a permission to invoke a specified group of methods for the
-enterprise beans' home and remote interfaces.
-The security roles defined by the application assembler present this
-simplified security view of the enterprise beans application to the deployer;
-the deployer's view of security requirements for the application is the small
-set of security roles, rather than a large number of individual methods.
-
-
Security roles
-
-
The application assembler can define one or more security roles
-in the deployment descriptor. The application assembler then assigns groups
-of methods of the enterprise beans' home and remote interfaces to the
-security roles in order to define the security view of the application.
-
-
The scope of the security roles defined in the security-role
-elements is the ejb-jar file level, and this includes all the enterprise
-beans in the ejb-jar file.
After defining security roles for the enterprise beans in the ejb-jar
-file, the application assembler can also specify the methods of the remote
-and home interfaces that each security role is allowed to invoke.
-
-
Method permissions are defined as a binary relationship in the deployment
-descriptor from the set of security roles to the set of methods of the home
-and remote interfaces of the enterprise beans, including all their super
-interfaces (including the methods of the javax.ejb.EJBHome and
-javax.ejb.EJBObject interfaces). The method permissions
-relationship includes the pair (R, M) only if the security role
-R is allowed to invoke the method M.
-
-
The application assembler defines the method permissions relationship in
-the deployment descriptor using the method-permission element as
-follows:
-
-
Each method-permission element includes a list of one or
- more security roles and a list of one or more methods. All the listed
- security roles are allowed to invoke all the listed methods. Each
- security role in the list is identified by the role-name
- element, and each method is identified by the method
- element.
-
The method permissions relationship is defined as the union of all the
- method permissions defined in the individual
- method-permission elements.
-
A security role or a method can appear in multiple
- method-permission elements.
-
-
-
It is possible that some methods are not assigned to any security roles.
-This means that these methods can be accessed by anyone.
-
-
The following example illustrates how security roles are assigned to
-methods' permissions in the deployment descriptor:
Because not all security policies can be expressed declaratively, the EJB
-architecture also provides a simple programmatic interface that the Bean
-programmer can use to access the security context from the business
-methods.
-
-
The javax.ejb.EJBContext interface provides two methods that
-allow the Bean programmer to access security information about the enterprise
-bean's caller.
-
public interface javax.ejb.EJBContext {
- ...
- //
- // The following two methods allow the EJB class
- // to access security information
- //
- java.security.Principal getCallerPrincipal() ;
- boolean isCallerInRole (String roleName) ;
- ...
-}
-
-
-
Use of getCallerPrincipal()
-
-
The purpose of the getCallerPrincipal() method is to allow
-the enterprise bean methods to obtain the current caller principal's name.
-The methods might, for example, use the name as a key to access information
-in a database.
-
-
An enterprise bean can invoke the getCallerPrincipal() method
-to obtain a java.security.Principal interface representing the
-current caller. The enterprise bean can then obtain the distinguished name of
-the caller principal using the getName() method of the
-java.security.Principal interface.
-
-
Use of isCallerInRole(String roleName)
-
-
The main purpose of the isCallerInRole(String roleName)
-method is to allow the Bean programmer to code the security checks that
-cannot be easily defined declaratively in the deployment descriptor using
-method permissions. Such a check might impose a role-based limit on a
-request, or it might depend on information stored in the database.
-
-
The enterprise bean code uses the isCallerInRole(String
-roleName) method to test whether the current caller has been assigned
-to a given security role or not. Security roles are defined by the
-application assembler in the deployment descriptor and are assigned to
-principals by the deployer.
-
-
Declaration of security roles referenced from the bean's code
-
-
The Bean programmer must declare in the security-role-ref
-elements of the deployment descriptor all the security role names used in the
-enterprise bean code. Declaring the security roles' references in the code
-allows the application assembler or deployer to link the names of the
-security roles used in the code to the actual security roles defined for an
-assembled application through the security-role elements.
The deployment descriptor in this example indicates that the enterprise
-bean Op makes the security checks using
-isCallerInRole("role1") in at least one of its business
-methods.
-
-
Linking security role references and security roles
-
-
If the security-role elements have been defined in the
-deployment descriptor, all the security role references declared in the
-security-role-ref elements must be linked to the security roles
-defined in the security-role elements.
-
-
The following deployment descriptor example shows how to link the security
-role references named role1 to the security role named
-tomcat.
In summary, the role names used in the EJB code (in the isCallerInRole
-method) are, in fact, references to actual security roles, which makes the
-EJB code independent of the security configuration described in the
-deployment descriptor. The programmer makes these role references available
-to the Bean deployer or application assembler via the
-security-role-ref elements included in the session
-or entity elements of the deployment descriptor. Then, the Bean
-deployer or application assembler must map the security roles defined in the
-deployment descriptor to the "specific" roles of the target operational
-environment (e.g. groups on Unix systems). However, this last mapping step is
-not currently available in JOnAS.
The target audience for this guide is the Enterprise Bean provider, i.e.
-the person in charge of developing the software components on the server side
-and, more specifically, the Session Beans.
A Session Bean is composed of the following parts, which are developed by
-the Enterprise Bean Provider:
-
-
The Component Interface is the client view of the bean. It
- contains all the "business methods" of the bean.
-
The Home Interface contains all the methods for the bean life
- cycle (creation, suppression) used by the client application.
-
The bean implementation class implements the business methods
- and all the methods (described in the EJB specification), allowing the
- bean to be managed in the container.
-
The deployment descriptor contains the bean properties that can
- be edited at assembly or deployment time.
-
-
-
Note that, according to the EJB 2.0 specification, the couple "Component
-Interface and Home Interface" may be either local or remote. Local
-Interfaces (Home and Component) are to be used by a client running in the
-same JVM as the EJB component. Create and finder methods of a local or remote
-home interface return local or remote component interfaces respectively. An
-EJB component can have both remote and local interfaces, even if typically
-only one type of interface is provided.
-
-
The description of these elements is provided in the following
-sections.
-
-
Note: in this documentation, the term "Bean" always means "Enterprise
-Bean."
-
-
A session bean object is a short-lived object that executes on behalf of a
-single client.There are stateless and stateful session beans.
-Stateless beans do not maintain state across method calls. Any instance of
-stateless beans can be used by any client at any time. Stateful session beans
-maintain state within and between transactions. Each stateful session bean
-object is associated with a specific client. A stateful session bean with
-container-managed transaction demarcation can optionally implement the
-SessionSynchronization interface. In this case, the bean objects will
-be informed of transaction boundaries. A rollback could result in a session
-bean object's state being inconsistent; in this case, implementing the
-SessionSynchronization interface may enable the bean object to update its
-state according to the transaction completion status.
-
-
The Home Interface
-
-
A Session bean's home interface defines one or more create(...)
-methods. Each create method must be named create and must
-match one of the ejbCreate methods defined in the enterprise Bean class. The
-return type of a create method must be the enterprise Bean's remote interface
-type.
-The home interface of a stateless session bean must have one create
-method that takes no arguments.
-
-
All the exceptions defined in the throws clause of an ejbCreate
-method must be defined in the throws clause of the matching create
-method of the home interface.
-
-
A remote home interface extends the javax.ejb.EJBHome
-interface, while a local home interface extends the
-javax.ejb.EJBLocalHome interface.
-
-
Example:
-
-
The following examples use a Session Bean named Op.
-
public interface OpHome extends EJBHome {
- Op create(String user) throws CreateException, RemoteException;
- }
-
-
-
A local home interface could be defined as follows (LocalOp
-being the local component interface of the bean):
The Component Interface is the client's view of an instance of the session
-bean. This interface contains the business methods of the enterprise bean.
-The interface must extend the javax.ejb.EJBObject interface if it is
-remote, or the javax.ejb.EJBLocalObject if it is local. The methods
-defined in a remote component interface must follow the rules for Java RMI
-(this means that their arguments and return value must be valid types for
-java RMI, and their throws clause must include the
-java.rmi.RemoteException). For each method defined in the component
-interface, there must be a matching method in the enterprise Bean's class
-(same name, same arguments number and types, same return type, and same
-exception list, except for RemoteException).
-
-
Example:
-
public interface Op extends EJBObject {
- public void buy (int Shares) throws RemoteException;
- public int read () throws RemoteException;
- }
-
-
-
The same type of component interface could be defined as a local interface
-(even if it is not considered good design to define the same interface as
-both local and remote):
-
public interface LocalOp extends EJBLocalObject {
- public void buy (int Shares);
- public int read ();
- }
-
-
-
The Enterprise Bean Class
-
-
This class implements the Bean's business methods of the component
-interface and the methods of the SessionBean interface, which are
-those dedicated to the EJB environment. The class must be defined as public
-and may not be abstract. The Session Bean interface methods that the
-EJB provider must develop are the following:
-
-
public void
- setSessionContext(SessionContext ic);
-
This method is used by the container to pass a reference to the
- SessionContext to the bean instance. The container invokes this method on
- an instance after the instance has been created. Generally, this method
- stores this reference in an instance variable.
-
-
public void ejbRemove();
-
This method is invoked by the container when the instance is in the
- process of being removed by the container. Since most session Beans do
- not have any resource state to clean up, the implementation of this
- method is typically left empty.
-
-
public void ejbPassivate();
-
This method is invoked by the container when it wants to passivate the
- instance. After this method completes, the instance must be in a state
- that allows the container to use the Java Serialization protocol to
- externalize and store the instance's state.
-
-
public voidejbActivate();
-
This method is invoked by the container when the instance has just
- been reactivated. The instance should acquire any resource that it has
- released earlier in the ejbPassivate() method.
-
-
-
-
A stateful session Bean with container-managed transaction demarcation can
-optionally implement the javax.ejb.SessionSynchronization interface.
-This interface can provide the Bean with transaction synchronization
-notifications. The Session Synchronization interface methods that the
-EJB provider must develop are the following:
-
-
public void afterBegin();
-
This method notifies a session Bean instance that a new transaction
- has started. At this point the instance is already in the transaction and
- can do any work it requires within the scope of the transaction.
-
-
public void afterCompletion(boolean
- committed);
-
This method notifies a session Bean instance that a transaction commit
- protocol has completed and tells the instance whether the transaction has
- been committed or rolled back.
-
-
public void beforeCompletion();
-
This method notifies a session Bean instance that a transaction is
- about to be committed.
-
-
-
-
Example:
-
package sb;
-
-import java.rmi.RemoteException;
-import javax.ejb.EJBException;
-import javax.ejb.EJBObject;
-import javax.ejb.SessionBean;
-import javax.ejb.SessionContext;
-import javax.ejb.SessionSynchronization;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-// This is an example of Session Bean, stateful, and synchronized.
-
-public class OpBean implements SessionBean, SessionSynchronization {
-
- protected int total = 0; // actual state of the bean
- protected int newtotal = 0; // value inside Tx, not yet committed.
- protected String clientUser = null;
- protected SessionContext sessionContext = null;
-
- public void ejbCreate(String user) {
- total = 0;
- newtotal = total;
- clientUser = user;
- }
-
- public void ejbActivate() {
- // Nothing to do for this simple example
- }
-
- public void ejbPassivate() {
- // Nothing to do for this simple example
- }
-
- public void ejbRemove() {
- // Nothing to do for this simple example
- }
-
- public void setSessionContext(SessionContext sessionContext) {
- this.sessionContext = sessionContext;
- }
-
- public void afterBegin() {
- newtotal = total;
- }
-
- public void beforeCompletion() {
- // Nothing to do for this simple example
-
- // We can access the bean environment everywhere in the bean,
- // for example here!
- try {
- InitialContext ictx = new InitialContext();
- String value = (String) ictx.lookup("java:comp/env/prop1");
- // value should be the one defined in ejb-jar.xml
- } catch (NamingException e) {
- throw new EJBException(e);
- }
- }
-
- public void afterCompletion(boolean committed) {
- if (committed) {
- total = newtotal;
- } else {
- newtotal = total;
- }
- }
-
- public void buy(int s) {
- newtotal = newtotal + s;
- return;
- }
-
- public int read() {
- return newtotal;
- }
-}
-
-
-
Tuning Stateless Session Bean Pool
-JOnAS handles a pool for each stateless session bean. The pool can be
-configured in the JOnAS-specific deployment descriptor with the following
-tags:
-
-
min-pool-size
-This optional integer value represents the minimum instances that will be
-created in the pool when the bean is loaded. This will improve bean instance
-creation time, at least for the first beans. The default value is 0.
-
-
max-cache-size
-This optional integer value represents the maximum of instances in memory.
-The purpose of this value is to keep JOnAS scalable. The policy is the
-following:
-At bean creation time, an instance is taken from the pool of free instances.
-If the pool is empty, a new instance is always created. When the instance
-must be released (at the end of a business method), it is pushed into the
-pool, except if the current number of instances created exceeds the
-max-cache-size, in which case this instance is dropped. The default
-value is no limit.
-
-
The target audience for this guide is the Enterprise Bean provider, i.e.
-the person in charge of developing the software components on the server
-side. It describes how to define the transactional behaviour of an EJB
-application.
For container-managed transaction management, the transactional behaviour
-of an enterprise bean is defined at configuration time and is part of the
-assembly-descriptor element of the standard deployment descriptor. It is
-possible to define a common behaviour for all the methods of the bean, or to
-define the behaviour at the method level. This is done by specifying a
-transactional attribute, which can be one of the following:
-
-
NotSupported: if the method is called within a
- transaction, this transaction is suspended during the time of the method
- execution.
-
Required: if the method is called within a
- transaction, the method is executed in the scope of this transaction,
- else, a new transaction is started for the execution of the method, and
- committed before the method result is sent to the caller.
-
RequiresNew: the method will always be executed within
- the scope of a new transaction. The new transaction is started for the
- execution of the method, and committed before the method result is sent
- to the caller. If the method is called within a transaction, this
- transaction is suspended before the new one is started and resumed when
- the new transaction has completed.
-
Mandatory: the method should always be called within
- the scope of a transaction, else the container will throw the
- TransactionRequired exception.
-
Supports: the method is invoked within the caller
- transaction scope; if the caller does not have an associated transaction,
- the method is invoked without a transaction scope.
-
Never: The client is required to call the bean without
- any transaction context; if it is not the case, a
- java.rmi.RemoteException is thrown by the container.
-
-This is illustrated in the following table:
-
-
-
-
-
Transaction Attribute
-
Client transaction
-
Transaction associated with enterprise Bean's
- method
-
-
-
NotSupported
-
-
-
-
T1
-
-
-
-
-
-
-
-
-
-
Required
-
-
-
-
T1
-
-
T2
-
-
T1
-
-
-
-
RequiresNew
-
-
-
-
T1
-
-
T2
-
-
T2
-
-
-
-
Mandatory
-
-
-
-
T1
-
-
error
-
-
T1
-
-
-
-
Supports
-
-
-
-
T1
-
-
-
-
-
T1
-
-
-
-
Never
-
-
-
-
T1
-
-
-
-
-
error
-
-
-
-
-
-
-
-
In the deployment descriptor, the specification of the transactional
-attributes appears in the assembly-descriptor as follows:
In this example, for all methods of the AccountImpl bean which are not
-explicitly specified in a container-transaction element, the default
-transactional attribute is Supports (defined at the bean-level), and the
-transactional attributes are Required and Mandatory (defined at the
-method-name level) for the methods getBalance and setBalance respectively.
-
-
Bean-managed Transaction
-
-
A bean that manages its transactions itself must set the
-transaction-type element in its standard deployment descriptor
-to:
-
<transaction-type>Bean</transaction-type>
-
-
-
To demarcate the transaction boundaries in a bean with bean-managed
-transactions, the bean programmer should use the
-javax.transaction.UserTransaction interface, which is defined on an
-EJB server object that may be obtained using the
-EJBContext.getUserTransaction() method (the SessionContext object or
-the EntityContext object depending on whether the method is defined on a
-session or on an entity bean). The following example shows a session bean
-method "doTxJob" demarcating the transaction boundaries; the UserTransaction
-object is obtained from the sessionContext object, which should have been
-initialized in the setSessionContext method (refer to the example of the session
-bean).
Another way to do this is to use JNDI and to retrieve UserTransaction with
-the name java:comp/UserTransaction in the initial context.
-
-
Distributed Transaction
-Management
-
-
As explained in the previous section, the transactional behaviour of an
-application can be defined in a declarative way or coded in the bean and/or
-the client itself (transaction boundaries demarcation). In any case, the
-distribution aspects of the transactions are completely transparent to the
-bean provider and to the application assembler. This means that a transaction
-may involve beans located on several JOnAS servers and that the platform
-itself will handle management of the global transaction. It will perform the
-two-phase commit protocol between the different servers, and the bean
-programmer need do nothing.
-
-
Once the beans have been developed and the application has been assembled,
-it is possible for the deployer and for the administrator to configure the
-distribution of the different beans on one or several machines, and within
-one or several JOnAS servers. This can be done without impacting either the
-beans code or their deployment descriptors. The distributed configuration is
-specified at launch time. In the environment properties of an EJB server, the
-following can be specified:
-
-
which enterprise beans the JOnAS server will handle,
-
if a Java Transaction Monitor will be located in the same Java Virtual
- Machine (JVM) or not.
-
-
-
To achieve this goal, two properties must be set in the
-jonas.properties file, jonas.service.ejb.descriptors and
-jonas.service.jtm.remote. The first one lists the beans that will be
-handled on this server (by specifying the name of their ejb-jar files), and
-the second one sets the Java Transaction Monitor (JTM) launching mode:
-
-
if set to true, the JTM is remote, i.e. the JTM must be
- launched previously in another JVM,
-
if set to false, the JTM is local, i.e. it will run in the
- same JVM as the EJB Server.
The Java Transaction Monitor can run outside any EJB server, in which case
-it can be launched in a stand-alone mode using the following command:
-
TMServer
-
-
-
-
Using these configuration facilities, it is possible to adapt the beans
-distribution to the resources (cpu and data) location, for optimizing
-performance.
-
-
The following figure illustrates four cases of distribution configuration
-for three beans.
-
-
-
-
Case 1: The three beans B1, B2, and B3 are located on the same JOnAS
- server, which embeds a Java Transaction Monitor.
-
Case 2: The three beans are located on different JOnAS servers, one of
- them running the Java Transaction Monitor, which manages the global
- transaction.
-
Case 3: The three beans are located on different JOnAS servers, the
- Java Transaction Monitor is running outside of any JOnAS server.
-
Case 4: The three beans are located on different JOnAS servers. Each
- server is running a Java Transaction Monitor. One of the JTM acts as the
- master monitor, while the two others are slaves.
-
-
-
These different configuration cases may be obtained by launching the JOnAS
-servers and eventually the JTM (case 3) with the adequate properties. The
-rational when choosing one of these configurations is resources location and
-load balancing. However, consider the following pointers:
-
-
if the beans should run on the same machine, with the same server
- configuration, case 1 is the more appropriate;
-
if the beans should run on different machines, case 4 is the more
- appropriate, since it favours local transaction management;
-
if the beans should run on the same machine, but require different
- server configurations, case 2 is a good approach.
The target audience for this guide is the Web component provider, i.e. the
-person in charge of developing the Web components on the server side. It
-describes how the Web component provider should build the deployment
-descriptors of its Web components and how the web components should be
-packaged.
A Web Component is a generic term which denotes both JSP pages and
-Servlets. Web components are packaged in a .war file and can be
-deployed in a JOnAS server via the web container service. Web
-components can be integrated in a J2EE application by packing the
-.war file in an .ear file (refer to the J2EE Application Programmer's
-Guide).
-
-
The JOnAS distribution includes a Web application example: The EarSample example.
-
-
The directory structure of this application is the following:
-
-
-
-
-
etc/xml
-
contains the web.xml file describing the web application
-
-
-
etc/resources/web
-
contains html pages and images; JSP pages can also be placed
- here.
-
-
-
src/org/objectweb/earsample/servlets
-
servlet sources
-
-
-
src/org/objectweb/earsample/beans
-
beans sources
-
-
-
-
-
The bean directory is not needed if beans coming from another application
-will be used.
-
-
The JSP pages
-
-
Java Server Pages (JSP) is a technology that allows regular, static HTML,
-to be mixed with dynamically-generated HTML written in Java programming
-language for encapsulating the logic that generates the content for the page.
-Refer to the Java Server
-PagesTM and the Quickstart guide for
-more details.
-
-
Example:
-
-
The following example shows a sample JSP page that lists the content of a
-cart.
-
<!-- Get the session -->
- <%@ page session="true" %>
-
- <!-- The import to use -->
- <%@ page import="java.util.Enumeration" %>
- <%@ page import="java.util.Vector" %>
-
- <html>
- <body bgcolor="white">
- <h1>Content of your cart</h1><br>
- <table>
- <!-- The header of the table -->
- <tr bgcolor="black">
- <td><font color="lightgreen">Product Reference</font></td>
- <td><font color="lightgreen">Product Name</font></td>
- <td><font color="lightgreen">Product Price</font></td>
- </tr>
-
- <!-- Each iteration of the loop display a line of the table -->
- <%
- Cart cart = (Cart) session.getAttribute("cart");
- Vector products = cart.getProducts();
- Enumeration enum = products.elements();
- // loop through the enumeration
- while (enum.hasMoreElements()) {
- Product prod = (Product) enum.nextElement();
- %>
- <tr>
- <td><%=prod.getReference()%></td>
- <td><%=prod.getName()%></td>
- <td><%=prod.getPrice()%></td>
- </tr>
- <%
- } // end loop
- %>
- </table>
- </body>
- </html>
-
-
-
It is a good idea to hide all the mechanisms for accessing EJBs from JSP
-pages by using a proxy java bean, referenced in the JSP page by the
-usebean special tag. This technique is shown in the alarm example, where the .jsp files
-communicate with the EJB via a proxy java bean ViewProxy.java.
-
-
The Servlets
-
-
Servlets are modules of Java code that run in an application server for
-answering client requests. Servlets are not tied to a specific client-server
-protocol. However, they are most commonly used with HTTP, and the word
-"Servlet" is often used as referring to an "HTTP Servlet."
-
-
Servlets make use of the Java standard extension classes in the packages
-javax.servlet (the basic Servlet framework) and
-javax.servlet.http (extensions of the Servlet framework for
-Servlets that answer HTTP requests).
-
-
Typical uses for HTTP Servlets include:
-
-
processing and/or storing data submitted by an HTML form,
-
providing dynamic content generated by processing a database query,
The following example is a sample of a Servlet that lists the content of a
-cart.
-This example is the servlet version of the previous JSP page example.
-Through the JOnAS web container service, it is possible to access an
-enterprise java bean and its environment in a J2EE-compliant way.
-
-
The following sections describe:
-
-
How to access the Remote Home interface of a bean.
-
How to access the Local Home interface of a bean.
-
How to access the environment of a bean.
-
How to start transactions in servlets.
-
-Note that all the following code examples are taken from the The EarSample example provided in the JOnAS
-distribution.
-
-
Accessing the Remote Home interface of a bean:
-In this example the servlet gets the Remote Home interface OpHome
-registered in JNDI using an EJB reference, then creates a new instance of the
-session bean:
-
-This is the corresponding part of the web.xml file:
-
<env-entry>
- <env-entry-name>envEntryString</env-entry-name>
- <env-entry-value>This is a string from the env-entry</env-entry-value>
- <env-entry-type>java.lang.String</env-entry-type>
- </env-entry>
-
-
Starting transactions in servlets:
-The servlet wants to start transactions via the UserTransaction:
-
The Web component programmer is responsible for providing the deployment
-descriptor associated with the developed web components. The Web component
-provider's responsibilities and the application assembler's responsibilities
-are to provide an XML deployment descriptor that conforms to the deployment
-descriptor's XML schema as defined in the Java TM Servlet
-Specification Version 2.4. (Refer to
-$JONAS_ROOT/xml/web-app_2_4.xsd or
-http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd).
-
-
-
To customize the Web components, information not defined in the standard
-XML deployment descriptor may be needed. For example, the information may
-include the mapping of the name of referenced resources to its JNDI name.
-This information can be specified during the deployment phase, within another
-XML deployment descriptor that is specific to JOnAS. The JOnAS-specific
-deployment descriptor's XML schema is located in
-$JONAS_ROOT/xml/jonas-web-app_X_Y.xsd. The file name of the
-JOnAS-specific XML deployment descriptor must be the file name of the
-standard XML deployment descriptor prefixed by 'jonas-'.
-
-
The parser gets the specified schema via the classpath (schemas are packaged
-in the $JONAS_ROOT/lib/common/ow_jonas.jar file).
-
-
The standard deployment descriptor (web.xml) should contain structural
-information that includes the following:
-
-
The Servlet's description (including Servlet's name, Servlet's class or
- jsp-file, Servlet's initialization parameters),
-
Environment entries,
-
EJB references,
-
EJB local references,
-
Resource references,
-
Resource env references.
-
-
-
The JOnAS-specific deployment descriptor (jonas-web.xml) may contain
-information that includes:
-
-
The JNDI name of the external resources referenced by a Web
- component,
-
The JNDI name of the external resources environment referenced by a Web
- component,
-
The JNDI name of the referenced bean's by a Web component,
-
The name of the virtual host on which to deploy the servlets,
-
The name of the context root on which to deploy the servlets,
-
The compliance of the web application classloader to the java 2
- delegation model or not.
-
-
-
<host> element: If the configuration file of the web container
-contains virtual hosts, the host on which the WAR file is deployed can be
-set.
-
-
<context-root> element: The name of the context on which the
-application will be deployed should be specified. If it is not specified, the
-context-root used can be one of the following:
-
-
If the war is packaged into an EAR file, the context-root used is the
- context specified in the application.xml file.
-
If the war is standalone, the context-root is the name of the war file
- (i.e, the context-root is jonasAdmin for jonasAdmin.war).
-
-If the context-root is / or empty, the web application is deployed as ROOT
-context (i.e., http://localhost:9000/).
-
-
<java2-delegation-model> element: Set the compliance to the java 2
-delegation model.
-
-
If true: the web application context uses a classloader, using the Java
- 2 delegation model (ask parent classloader first).
-
If false: the class loader searches inside the web application first,
- before asking parent class loaders.
Example of a standard Web Deployment Descriptor (web.xml):
-
<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
-
- <servlet>
- <servlet-name>Op</servlet-name>
- <servlet-class>org.objectweb.earsample.servlets.ServletOp</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Op</servlet-name>
- <url-pattern>/secured/Op</url-pattern>
- </servlet-mapping>
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Protected Area</web-resource-name>
- <!-- Define the context-relative URL(s) to be protected -->
- <url-pattern>/secured/*</url-pattern>
- <!-- If you list http methods, only those methods are protected -->
- <http-method>DELETE</http-method>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
- <http-method>PUT</http-method>
- </web-resource-collection>
- <auth-constraint>
- <!-- Anyone with one of the listed roles may access this area -->
- <role-name>tomcat</role-name>
- <role-name>role1</role-name>
- </auth-constraint>
- </security-constraint>
-
- <!-- Default login configuration uses BASIC authentication -->
- <login-config>
- <auth-method>BASIC</auth-method>
- <realm-name>Example Basic Authentication Area</realm-name>
- </login-config>
-
- <env-entry>
- <env-entry-name>envEntryString</env-entry-name>
- <env-entry-value>This is a string from the env-entry</env-entry-value>
- <env-entry-type>java.lang.String</env-entry-type>
- </env-entry>
-
- <!-- reference on a remote bean without ejb-link-->
- <ejb-ref>
- <ejb-ref-name>ejb/Op</ejb-ref-name>
- <ejb-ref-type>Session</ejb-ref-type>
- <home>org.objectweb.earsample.beans.secusb.OpHome</home>
- <remote>org.objectweb.earsample.beans.secusb.Op</remote>
- </ejb-ref>
-
- <!-- reference on a remote bean using ejb-link-->
- <ejb-ref>
- <ejb-ref-name>ejb/EjbLinkOp</ejb-ref-name>
- <ejb-ref-type>Session</ejb-ref-type>
- <home>org.objectweb.earsample.beans.secusb.OpHome</home>
- <remote>org.objectweb.earsample.beans.secusb.Op</remote>
- <ejb-link>secusb.jar#Op</ejb-link>
- </ejb-ref>
-
- <!-- reference on a local bean -->
- <ejb-local-ref>
- <ejb-ref-name>ejb/OpLocal</ejb-ref-name>
- <ejb-ref-type>Session</ejb-ref-type>
- <local-home>org.objectweb.earsample.beans.secusb.OpLocalHome</local-home>
- <local>org.objectweb.earsample.beans.secusb.OpLocal</local>
- <ejb-link>secusb.jar#Op</ejb-link>
- </ejb-local-ref>
-</web-app>
-
-
-
Example of a specific Web Deployment Descriptor (jonas-web.xml):
-
<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<jonas-web-app xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.objectweb.org/jonas/ns/jonas-web-app_4_0.xsd" >
-
- <!-- Mapping between the referenced bean and its JNDI name, override the ejb-link if
- there is one in the associated ejb-ref in the standard Web Deployment Descriptor -->
- <jonas-ejb-ref>
- <ejb-ref-name>ejb/Op</ejb-ref-name>
- <jndi-name>OpHome</jndi-name>
- </jonas-ejb-ref>
-
- <!-- the virtual host on which deploy the web application -->
- <host>localhost</host>
-
- <!-- the context root on which deploy the web application -->
- <context-root>web-application</context-root>
-</jonas-web-app>
-
-
-
-
-
-
Tips
-
-
Although some characters, such as ">", are legal, it is good practice
-to replace them with XML entity references. The following is a list of the
-predefined entity references for XML:
-
-
-
-
-
<
-
<
-
less than
-
-
-
>
-
>
-
greater than
-
-
-
&
-
&
-
ampersand
-
-
-
'
-
'
-
apostrophe
-
-
-
"
-
"
-
quotation mark
-
-
-
-
-
-
-
WAR Packaging
-
-
Web components are packaged for deployment in a standard Java programming
-language Archive file called a war file (Web ARchive), which is a
-jar similar to the package used for Java class libraries. A
-war has a specific hierarchical directory structure. The top-level
-directory of a war is the document root of the application.
-
-
The document root is where JSP pages, client-side classes and archives,
-and static web resources are stored. The document root contains a
-subdirectory called WEB-INF, which contains the following files and
-directories:
-
-
web.xml: The standard xml deployment descriptor in the format
- defined in the Java Servlet 2.4 Specification. Refer to
- $JONAS_ROOT/xml/web-app_2_4.xsd.
-
jonas-web.xml: The optional JOnAS-specific XML deployment
- descriptor in the format defined in
- $JONAS_ROOT/xml/jonas-web_X_Y.xsd.
-
classes: a directory that contains the servlet classes and
- utility classes.
-
lib: a directory that contains jar archives of libraries (tag
- libraries and any utility libraries called by server-side classes). If
- the Web application uses Enterprise Beans, it can also contain
- ejb-jars. This is necessary to give to the Web components the
- visibility of the EJB classes.
- However, if the war is intended to be packed in a ear, the
- ejb-jars must not be placed here. In this case, they are directly
- included in the ear. Due to the use of the class loader hierarchy,
- Web components have the visibility of the EJB classes.
- Details about the class loader hierarchy are described in JOnAS class loader
- hierarchy.
-
-
-
Example
-
-
Before building a war file, the java source files must be compiled
-to obtain the class files (located in the WEB-INF/classes directory)
-and the two XML deployment descriptors must be written.
-
-
Then, the war file (<web-application>.war) is built using the
-jar command:
-
cd <your_webapp_directory>
- jar cvf <web-application>.war *
-
-
-
During the development process, an 'unpacked version' of the war file can
-be used. Refer to Configuring Web
-Container Service for information about how to use directories for the
-web application.
This chapter is intended for advanced JOnAS users who require that some
-"external" services run along with the JOnAS server. A service is something
-that may be initialized, started, and stopped. JOnAS itself already defines a
-set of services, some of which are cornerstones of the JONAS Server. The
-JOnAS pre-defined services are listed in Configuring JOnAS services.
-
-
J2EE application developers may need to access other services, for example
-another Web container or a Versant container, for their components. Thus, it
-is important that such services be able to run along with the application
-server. To achieve this, it is possible to define them as JOnAS services.
-
-
This chapter describes how to define a new JOnAS service and how to
-specify which service should be started with the JOnAS server.
-
-
Introducing a new Service
-
-
The customary way to define a new JOnAS service is to encapsulate it in a
-class whose interface is known by JOnAS. More precisely, such a class
-provides a way to initialize, start, and stop the service. Then, the
-jonas.properties file must be modified to make JOnAS aware of this
-service.
-
-
Defining the Service class
-
-
A JOnAS service is represented by a class that implements the interface
-org.objectweb.jonas.service.Service, and, thus should implement
-the following methods:
-
-
public void init(Context ctx) throws ServiceException;
-
public void start() throws ServiceException;
-
public void stop() throws ServiceException;
-
public boolean isStarted();
-
public String getName();
-
public void setName(String name);
-
-
-
It should also define a public constructor with no argument.
-
-
These methods will be called by JOnAS for initializing, starting, and
-stopping the service. Configuration parameters are provided to the
-initialization method through a naming context. This naming context is built
-from properties defined in the jonas.properties file as
-explained in the following section.
-
-
The Service class should look like the following:
-
package a.b; import javax.naming.Context; import javax.naming.NamingException; import org.objectweb.jonas.service.Service; import org.objectweb.jonas.service.ServiceException; ..... public class MyService implements Service { private String name = null; private boolean started = false; ..... public void init(Context ctx) throws ServiceException { try { String p1 = (String) ctx.lookup("jonas.service.serv1.p1"); ..... } catch (NamingException e) { throw new ServiceException("....", e); } ..... } public void start() throws ServiceException { ..... this.started = true; } public void stop() throws ServiceException { if (this.started) { this.started = false; ..... } } public boolean isStarted() { return this.started; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
-
-
Modifying the jonas.properties file
-
-
The service is defined and its initialization parameters specified in the
-jonas.properties file. First, choose a name for the service
-(e.g. "serv1"), then do the following:
-
-
add this name to the jonas.services property; this
- property defines the set of services (comma-separated) that will be
- started with JOnAS, in the order of this list.
-
add a jonas.service.serv1.class property specifying the
- service class.
-
add as many jonas.service.serv1.XXX properties specifying
- the service initialization parameters, as will be made available to the
- service class via the Context argument of the init
- method.
-
-
-
This is illustrated as follows:
-
jonas.services .......,serv1 jonas.service.serv1.class a.b.MyService jonas.service.serv1.p1 value
-
-
Using the New Service
-The new service has been given a name in jonas.properties. With
-this name, it is possible to get a reference on the service implementation
-class by using the ServiceManager method: getService(name). The
-following is an example of accessing a Service:
-
// Get a reference on MyService. try { sv = (MyService) ServiceManager.getInstance().getService("serv1"); } catch (ServiceException e) { Trace.errln("Cannot find MyService:"+e); }
-
-
Adding the class of the new service to JOnAS
-
-
Package the class of the service into a .jar file and add the jar in the
-JONAS_ROOT/lib/ext directory.
-All the libraries required by the service can also be placed in this
-directory.
-
-
Advanced Understanding
-
-
Refer to the JOnAS sources for more details about the classes mentioned in
-this section.
If all of these services are required, they will be launched in the
-following order: registry, jmx, security,
-jtm,dbm,mail,jms,resource,ejb, ws,
-web, ear.
-jmx, security, dbm, mail, resource are
-optional when you are using service ejb.
-
-
registry must be launched first.
-(Note that for reasons of compatability with previous versions of JOnAS, if
-registry is unintentionally not set as the first service to launch,
-JOnAS will automatically launch the registry service.)
-
-Note that dbm, jms, resource, and ejb depend on
-jtm.
-Note that ear depends on ejb and web (that provide the
-ejb and web containers), thus these services must be launched before the
-ear service.
-Note that ear and web depends on ws, thus the ws service must be launched before the
-ear and web service.
-
-It is possible to launch a stand-alone Transaction Manager with only the
-registry and jtm services.
-
-
jonas.service.serv1.class a.b.MyService jonas.service.serv1.p1 John
-
-
The ServiceException
-
-
The org.objectweb.jonas.service.ServiceException exception is
-defined for Services. Its type is java.lang.RuntimeException.
-and it can encapsulate any java.lang.Throwable.
-
-
The ServiceManager
-
-
The org.objectweb.jonas.service.ServiceManager class is
-responsible for creating, initializing, and launching the services. It can
-also return a service from its name and list all the services.
New JOnAS (Java Open Application
-Server) element for the current JOnAS version
-
-
The <jonas> nested element uses the
-GenIC-specific tool to build JOnAS-specific stubs and skeletons
-and construct a JAR file which may be deployed to the JOnAS Application
-Server. The build process will always determine if the EJB stubs/skeletons
-and the EJB-JAR file are up to date, and it will perform the minimum amount
-of work required.
-
-
A naming convention for the EJB descriptors is most commonly used to
-specify the name for the completed JAR file. For example, if the EJB
-descriptor ejb/Account-ejb-jar.xml is located in the descriptor
-directory, the <jonas> element will search for a
-JOnAS-specific EJB descriptor file named
-ejb/Account-jonas-ejb-jar.xml, and a JAR file named
-ejb/Account.jar will be written in the destination directory.
-The <jonas> element can also use the JOnAS naming
-convention. Using the same example, the EJB descriptor can also be named
-ejb/Account.xml (no base name terminator here) in the descriptor
-directory. The <jonas> element will then search for a
-JOnAS-specific EJB descriptor file called ejb/jonas-Account.xml.
-This convention does not strictly follow the ejb-jar naming convention
-recommendation, but it is supported for backward compatibility with previous
-version of JOnAS.
-
-
Note that when the EJB descriptors are added to the JAR file, they are
-automatically renamed META-INF/ejb-jar.xml and
-META-INF/jonas-ejb-jar.xml.
-
-
Furthermore, this naming behaviour can be modified by specifying
-attributes in the ejbjar task (for example, basejarname, basenameterminator,
-and flatdestdir) as well as the iplanet element (for example, suffix). Refer
-to the appropriate documentation for more details.
-
-
Parameters:
-
-
-
-
-
Attribute
-
Description
-
Required
-
-
-
destdir
-
The base directory into which the generated JAR files
- will be written. Each JAR file is written in directories which
- correspond to their location within the "descriptordir"
- namespace.
-
Yes
-
-
-
jonasroot
-
The root directory for JOnAS.
-
Yes
-
-
-
jonasbase
-
The base directory for JOnAS. If omitted, it defaults
- to jonasroot.
-
No
-
-
-
classpath
-
The classpath used when generating EJB stubs and
- skeletons. If omitted, the classpath specified in the "ejbjar" parent
- task will be used. If specified, the classpath elements will be
- prefixed to the classpath specified in the parent "ejbjar" task. A
- nested "classpath" elements can also be used. Note that the needed
- JOnAS JAR files are automatically added to the classpath.
-
No
-
-
-
keepgenerated
-
true if the intermediate Java source
- files generated by GenIC must not be deleted. If omitted, it defaults
- to false.
-
No
-
-
-
nofastrmic
-
if true, the external RMIC compiler is used
- by GenIC. The default is false, which means the internal
- fast RMIC compiler is used.
-
No
-
-
-
nocompil
-
true if the generated source files must
- not be compiled via the java and rmi compilers. If omitted, it
- defaults to false.
-
No
-
-
-
novalidation
-
true if the XML deployment descriptors
- must be parsed without validation. If omitted, it defaults to
- false.
-
No
-
-
-
javac
-
Java compiler to use. If omitted, it defaults to the
- value of build.compiler property.
-
No
-
-
-
javacopts
-
Options to pass to the java compiler.
-
No
-
-
-
protocols
-
Comma-separated list of protocols (chosen within
- jeremie, jrmp, iiop, cmi) for which stubs should be generated.
- Default is jrmp,jeremie.
-
No
-
-
-
rmicopts
-
Options to pass to the rmi compiler.
-
No
-
-
-
verbose
-
Indicates whether or not to use -verbose switch. If
- omitted, it defaults to false.
-
No
-
-
-
additionalargs
-
Add additional args to GenIC.
-
No
-
-
-
keepgeneric
-
true if the generic JAR file used as
- input to GenIC must be retained. If omitted, it defaults to
- false.
-
No
-
-
-
suffix
-
String value appended to the JAR filename when creating each JAR.
- If omitted, it defaults to ".jar".
-
No
-
-
-
nogenic
-
If this attribute is set to true, JOnAS's
- GenIC will not be run on the EJB JAR. Use this if you prefer to run
- GenIC at deployment time. If omitted, it defaults to
- false.
-
No
-
-
-
jvmopts
-
Additional args to pass to the GenIC JVM.
-
No
-
-
-
invokecmd
-
If this attribute is set to true, GenIC will
- use the Javac sun class to avoid using 'javac' command line. This is
- useful for users getting 'java.io.Exception CreateProcess' because of too
- long command lines. Defaults to false.
-
No
-
-
-
-
-
As noted above, the jonas element supports additional <classpath>
-nested elements.
-
-
Examples
-
-
-Note : To avoid java.lang.OutOfMemoryError, the element
-jvmopts can be used to change the default memory usage.
-
-
-
This example shows ejbjar being used to generate deployment jars using a
-JOnAS EJB container. This example requires the naming standard to be used for
-the deployment descriptors. Using this format creates a EJB JAR file for each
-variation of '*-jar.xml' that is located in the deployment descriptor
-directory.
This example shows ejbjar being used to generate a single deployment jar
-using a JOnAS EJB container. This example does require the deployment
-descriptors to use the naming standard. This creates only one ejb jar file -
-'TheEJBJar.jar'.
Previous versions of the JOnAS EjbJar Ant task have some
-limitations—especially when you are developing webservices.
-
-
In previous versions of JOnAS, jonas-ejb-jar constructed the JAR for you, using
-information gathered from the ejb-jar.xml and from the classes themselves
-(dependencies using BCEL).
-But if you have a Session Bean exposed as a webservice,
-you want to have more files in your archive (webservices.xml,
-JAX-RPC mapping file, WSDL + imported WSDL
-definitions + imported XML Schema).
-
-
The older task did not package these files inside the archive, and
-therefore, when GenIC loaded the descriptors, some dependencies were
-missing, causing GenIC to throw an exception.
-
-
The solution is to let the developer create the JAR file, so that
-the exact content of the file can be controlled.
-
-
The file should have at least the following content:
-
-
-
-
META-INF/ejb-jar.xml
-
META-INF/jonas-ejb-jar.xml
-
**/*.class
-
-
-
-
Notice that webservices files are optional.
-
-
-
Task Attributes
-
-
The genic task supports most attributes of the
-jonas-ejb-jar task.
-
-
Differences:
-
-
Removed destdir: JAR files are directly modified
-
Removed classpath: classpath is now set as inner element
-
Removed novalidation: validation attribute is used now
-
Removed keepgeneric: not meaningful (input JAR is already specific)
-
-
Removed suffix: not meaningful (no JAR generated)
-
Removed nogenic: not meaningful (we want to run GenIC)
-
-
-
-
-
-
Attribute
-
Description
-
Required
-
-
-
jonasroot
-
The root directory for JOnAS.
-
Yes (Can be read from ${jonas.root} property if not set)
-
-
-
-
jonasbase
-
The base directory for JOnAS. If omitted, it defaults
- to jonasroot.
-
No
-
-
-
-
keepgenerated
-
true if the intermediate Java source
- files generated by GenIC must not be deleted. If omitted, it defaults
- to false.
-
No
-
-
-
nofastrmic
-
if true, the external RMIC compiler is used
- by GenIC. The default is false, which means the internal
- fast RMIC compiler is used.
-
No
-
-
-
-
-
nocompil
-
true if the generated source files must
- not be compiled via the Java and RMI compilers. If omitted, it
- defaults to false.
-
No
-
-
-
-
validation
-
true if the XML deployment descriptors
- must be parsed with validation. If omitted, it defaults to
- true.
-
No
-
-
-
-
javac
-
Java compiler to use. If omitted, it defaults to the
- value of build.compiler property.
-
No
-
-
-
javacopts
-
-
Options to pass to the Java compiler.
-
No
-
-
-
protocols
-
Comma-separated list of protocols (chosen from
- jeremie, jrmp, iiop, cmi) for which stubs should be generated.
- Default is jrmp,jeremie.
-
-
No
-
-
-
rmicopts
-
Options to pass to the RMI compiler.
-
No
-
-
-
-
verbose
-
Indicates whether or not to use -verbose switch. If
- omitted, it defaults to false.
-
No
-
-
-
-
additionalargs
-
Add additional arguments to GenIC.
-
No
-
-
-
jvmopts
-
Additional arguments to pass to the GenIC JVM.
-
-
No
-
-
-
jvmdebug
-
Indicates whether you want to debug the forked JVM; it
- defaults to false. The JVM will be suspended and waiting
- a connection on port 12345.
-
No
-
-
-
-
invokecmd
-
If this attribute is set to true, GenIC will
- use the Javac sun class to avoid using 'javac' command line. This is
- useful for users getting 'java.io.Exception CreateProcess' because of too
- long command lines. Defaults to false.
-
No
-
-
-
-
-
-
-
-
-
-
Nested Element
-
Description
-
Required
-
-
-
classpath
-
The additional classpath entries used when generating EJB stubs and
- skeletons.
-
No
-
-
-
-
fileset
-
Points out the ejb-jars that will be processed by GenIC.
- Note that you can add as many filesets as you want (useful if
- your JARs are in different directories).
The intent of the cluster daemon is to enable the remote control of the JOnAS clustered
-instances through a JMX interface.
-
-
In a cluster configuration, the cluster daemon is the bootstrap of the JOnAS instances.
-
-
There is at least one cluster daemon instance per machine.
-
-
-
-
Configuration
-
-
In the same manner as a classic JOnAS instance, the cluster daemon reads its configuration
-in a directory pointed to by a JONAS_BASE variable (or JONAS_ROOT if JONAS_BASE is not set).
-All the default JONAS_BASE subdirectories and files are not required; the mandatory ones are:
-
-
-
-
-
element
-
description
-
-
-
$JONAS_BASE/conf
-
Configuration directory
-
-
-
$JONAS_BASE/logs
-
Log directory
-
-
-
$JONAS_BASE/conf/carol.properties
-
Carol configuration file describing the protocol and its parameters (used for the JMX interface)
-
-
-
$JONAS_BASE/conf/trace.properties
-
Trace/Error log configuration file
-
-
-
$JONAS_BASE/conf/jonas.properties
-
This file must be present for enabling the cluster daemon starting but
- its content is not read, the file can be empty
-
-
-
-
$JONAS_BASE/conf/clusterd.xml
-
Cluster daemon configuration file, lists the local JOnAS instances and describes
- their environment (see below)
-
-
-
-
-
-
clusterd.xml
-
-
The JOnAS instances controlled by a cluster daemon are configured in the clusterd.xml file.
Cluster daemon instance name. Used for building the connector url.
-
-
-
domain-name
-
Domain name to use for launching the JOnAS instance when it is not specified in the start command
-
-
-
jonas-interaction-mode
-
Starting mode of the JOnAS instances: loosely-coupled corresponds to background and tighly-coupled
- corresponds to foreground
-
-
-
server/name
-
Name of the JOnAS instance
-
-
-
server/description
-
Description of the JOnAS instance
-
-
-
server/java-home
-
JDK home directory to use for launching the JOnAS instance
-
-
-
server/jonas-root
-
JOnAS binaries directory to use for launching the JOnAS instance
-
-
-
server/jonas-base
-
JOnAS configuration directory to use for launching the JOnAS instance
-
-
-
server/xprms
-
JVM parameters to set when launching the JOnAS instance
-
-
-
server/auto-boot
-
If true, start the JOnAS instance when launching the cluster daemon
-
-
-
server/jonas-cmd
-
Optional parameter. If set, specifies the script to use for starting/stopping the JOnAS instance. This user script can set the required environnement and perform some pre or post processing. By default, the jonas command is used.
-
-
-
-
-
domain.xml
-
-
The cluster daemons must be specified and associated to the JOnAS instances in the domain.xml file
-for permitting the remote control of the cluster.
The JMX remote url of the cluster daemon adheres to the following syntax:
-
service:jmx:rmi://host/jndi/rmi://host:port/protocolconnector_name
- with the following meanings:
-
-
host: ip alias or ip address of the machine that hosts the cluster daemon
- (by default localhost, can be overridden through the carol.properties file)
-
-
port: tcp listen port of the registry embedded in the cluster daemon
- (by default 1806, can be overridden through the carol.properties file)
-
-
protocol: protocol used for accessing the JMX interface (by default irmi, can be overridden
- through the carol.properties file)
-
name: cluster daemon instance name (defined in the clusterd.xml file)
-
-
-
Running the Cluster Daemon
-
-
The cluster daemon is started using the command jclusterd. The possible options are:
-
-
-
-
-
-
option
-
description
-
-
-
start
-
Start the cluster daemon.
-
-
-
-
stop
-
Stop the cluster daemon.
-
-
-
-
-DdomainName
-
Domain name to use for starting the JOnAS instance. This value is used when it is defined both here and in the clusterd.xml file.
-
-
-
-
-carolFile <my-carol.properties>
-
Path to the carol.properties file to use. If not specified, the file is loaded from $JONAS_BASE/conf.
- If the file is not found, the default values (localhost, 1806, irmi) are used.
-
-
-
-confFile <my-clusterd.xml>
-
Path to the clusterd.xml file to load. If not specified, the file is loaded from $JONAS_BASE/conf.
-
-
-
-
-
JMX Interface
-
-
The cluster daemon provides a JMX interface that enables control of the JOnAS instances. The following operations are
-available:
Start all the JOnAS instances known in the cluster daemon configuration.
- The parameter domainName (optional) enables the ability to specifiy the domain name.
- The parameter prm (optional) enables the ability to set some JVM parameters.
-
-
-
-
void stopJOnAS(String name)
-
Stop a JOnAS instance identified by its name
-
-
-
String stopAllJOnAS()
-
Stop all the JOnAS instances known in the cluster daemon configuration
-
-
-
String getJavaHome4Server(String name)
-
Get the JAVA_HOME defined for a JOnAS server
-
-
-
String getJonasRoot4Server(String name)
-
Get the JONAS_ROOT defined for a JOnAS server
-
-
-
String getJonasBase4Server(String name)
-
Get the JONAS_BASE defined for a JOnAS server
-
-
-
void reloadConfiguration()
-
Reload the configuration file of the cluster daemon
This guide describes how to configure Apache, Tomcat, and JOnAS
-to install a cluster.
-
Clustering with JOnAS uses the following:
-
-
the Apache/Tomcat plug-in mod_jk. This
-plug-in allows use of the Apache HTTP server in front of one or
-several Tomcat JSP/Servlet engines, and provides the capability of
-forwarding some of the HTTP requests (typically those concerning
-the dynamic pages, i.e., JSP and Servlet requests) to Tomcat
-instances.
-
-
-
the In-Memory-Session-Replication technique based
-on the TCP based group communication protocol to provide failover
-at servlet/JSP level.
-
-
-
the CMI protocol to support load balancing at EJB
-level for stateless beans and replications for stateful session
-beans.
-
-
This document describes one architecture with all the clustering
-functionalities available in JOnAS, the configuration of
-architectures integrating one of those functionalities, and other
-possible configurations.
-
For hands-on practice, this document uses the sampleCluster2
-JOnAS example.
-
-
-
Architecture
-
The architecture shown in the following illustration provides
-all the clustering functionality available in JOnAS: 1) Apache as the
-front-end HTTP server, 2) JOnAS/Tomcat as the J2EE Container, and 3) a shared database.
-
This architecture provides:
-
-
Load balancing: Requests can be dispatched over a set of
-servers to distribute the load. This improves the "scalability" by
-allowing more requests to be processed concurrently.
-
-
-
High Availability (HA): Having several servers able to
-fulfill a request makes it possible to ensure that, if a server
-dies, the request can be sent to an available server (thus the
-load-balancing algorithm ensures that the server to which the
-request will be sent is available). Therefore, "Service
-Availability" is achieved.
-
-
-
Failover: This feature ensures that, at the web level (JSP/Servlet), if one server goes
- down another server is able to
-transparently take over. Similarly, at the EJB level, if one server
-goes down another transparently takes over. That is, requests will be
-switched to another server without service disruption, thus achieving
- Continuity.
-
- At the Servlet / JSP level, the mod_jk plug-in
-provides Load Balancing / High Availability and the
-Tomcat-Replication module provides Failover.
- At the EJB level, the CMI protocol and JNDI replication provides Load Balancing / High Availability.
-Replication of Stateful EJBs provides failover.
- The database is shared by the JOnAS servers.
-
The sampleCluster2 application, presented later in this document, can be deployed on such an architecture.
-
-
-
Used
- symbols
-
-
-
-
-
-
A node (computer) that hosts one or more servers
-
-
-
-
-
-
-
-
-
A web container
-
-
-
-
An ejb container
-
-
-
-
-
A JOnAS instance that hosts a web container
-
-
-
-
A JOnAS instance that hosts an ejb container
-
-
-
-
-
A JOnAS instance that hosts a web container and an ejb
-container
-
-
-
-
-
-
-
-
-
An Apache server with the mod_jk module
-
-
-
-
-
-
-
-
Load
- balancing at web level with mod_jk
-
The following illustration describes how Apache, mod_jk, and
-JOnAS/Tomcat Containers interact:
-
-
This example uses mod_jk, but an alternative configuration
-using Enhydra Director
-is also possible. (see
-config)
-
Mod_jk is a plug-in (module) that handles the communication and
-load balancing between Apache and Tomcat.
-
Mod_jk uses the concept of worker. A worker is a Tomcat instance
-that is running to perform servlet requests coming from the web
-server. Each worker is identified to the web server by the host on
-which it is located, the port where it listens, and the
-communication protocol that is used to exchange messages.
-
AJP13 is the preferred TCP/IP sockets protocol that mod_jk uses
-for communicating between the web server and Tomcat workers.
-
In this configuration there is one worker for each Tomcat
-instance and one worker (this
-is a specific worker with no host and no port number) that will handle the load balancing.
-All workers
-are defined in a file called worker.properties.
-
Note: this module can also be used for site partitioning.
-
-
-
Session
- Replication at web level
-
The following illustration shows that the HTTP session replication
-feature has been added to the architecture:
-
-
The term "session replication" is used when the current service
-state is being replicated across multiple application instances. Session replication occurs when the information stored in an
-HttpSession is replicated from, in this example, one servlet engine
-instance to another. This could be almost any type of data, such as items contained in
-a shopping cart or information being entered on an insurance
-application. Anything being stored in the session must be
-replicated for the service to failover without a disruption.
-
The solution chosen for achieving Session replication is called
-all-to-all replication. Tomcat uses a proprietary protocol based on
-TCP for the all-to-all replication.
-
-
-
Load
- Balancing at EJB level
-
The following illustration shows that load balancing at EJB
-level is now included in the architecture:
-
-
CMI is a new ORB used by JOnAS to provide clustering for load
-balancing and high availability. It provides replication of the
-JNDI registries among all EJB containers. Several instances of
-JOnAS can be started together in a cluster to share their EJBs. It
-is possible to start the same EJB on each JOnAS, or to distribute
-their load. A URL referencing several JOnAS instances can be
-provided to the clients. At lookup time, a client randomly chooses
-one of the available servers to request the required bean. Each
-JOnAS instance has the knowledge (through JGroups) of the
-distribution of the Beans in the cluster. An answer to a lookup is
-a special clustered stub, containing stubs to each instance known
-in the cluster. Each method call on the Home (or Remote for the SSB)
-of the bean can be issued by the stub to a new instance in order to balance the load on the
-cluster. The default algorithm used for load distribution is
-currently a weighted round robin with local preference.
-
-
Session Replication at EJB level
-
The following illustration shows that the EJB session replication
-feature has been added to the architecture:
-
-
The term "session replication" is used when the current service
-state is being replicated across multiple application instances.
-Session replication occurs when the information stored in an SFSB state
-is replicated from, in this example, one EJB container
-instance to another. This could be almost any type of data (that is serializable),
-such as items contained in
-a shopping cart or information being entered on an insurance
-application. Anything being stored in the session must be
-replicated for the service to failover without a disruption.
-
The solution chosen for achieving Session replication is based on a horizontal
-approach implemented both through CMI and the JOnAS's ha service.
-See here for more detailed information
sampleCluster2 is an application that demonstrates the clustering features.
-A jsp/servlet follows the requests movements across the cluster.
-As shown in the illustration below, it can be deployed over four
-JOnAS instances. Two
-have WEB containers and the other two have EJB containers.
-
-
The application is composed of three EJBs: a stateful session bean, a stateless
-session bean, and an entity bean. These EJBs are instantiated by the web interface.
-When the user connects to the web interface for the first time, an HTTP session is created.
-During this process a
-stateful session bean is created in one of the JOnAS nodes where
-the EJB container is started. The handle of this stateful session
-bean is added to the HTTP session (see note). Next, the web
-interface creates a new instance of the stateless session bean. The
-first time, no entity bean is created. The useful information from
-the stateless session bean (JOnAS node name, number of instances)
-is set in the stateful session bean.
-
The user can see the result in the web interface where all the
-necessary information is displayed. The user should now execute the
-same servlet several times in order to see the changes made by the
-cluster. Each time the servlet is executed, it may be
-executed on a different node (JOnAS with web container).
-
The servlet gets a reference to the stateful session bean
-(through the handle). After that, a new stateless session bean is
-created and its information is passed to the stateful session bean. On
-every tenth instantiation of the stateless session bean, an entity bean is created.
-
However, the stateless session bean may be instantiated in a
-different EJB container than the stateful session bean. This
-sample uses local interfaces between the stateless session bean
-and the entity bean. As a result, the entity bean is created in the
-same EJB container as the stateless session bean.
-
The entity bean writes the time and the name of the node in the
-database.
-
Note: The handle enables getting a reference to the stateful session bean
-when the JVM has changed.
This section provides information about installing JOnAS /Tomcat, Apache, mod_jk.
-
The versions assumed here are: JOnAS 4.8.x /Tomcat 5.5.x, Apache
-2.2.x, and mod_jk 1.2.15 (or later).
-
-
Logon as any user <user> on the host <hostname>
-that will run the cluster.
- Note that you do not need to be ‘root’ to
-perform any of these steps or to run the cluster.
-
-
-
Enter mkdir cluster
- to make a directory in which the
-supporting software (apache…) will be installed and the cluster will be
- deployed (in the next section also).
-
-
-
Enter cd cluster
- to change directory to cluster.
For the sampleCluster2, JONAS_ROOT=$HOME/cluster/JONAS_4_8_3 (or later) is assumed.
-
-
-
A JOnAS instance, also called a worker for mod_jk, is
-JONAS_ROOT and a JONAS_BASE.
-
-
-
Even though there are four JOnAS instances (four JONAS_BASE), only
-one installation of JOnAS (one JONAS_ROOT) is needed.
-
-
-
It is recommended that the environment variables set in the
-<user>’s .bash_profile (.profile on AIX) file be added.
-
export JAVA_HOME=<location where java was installed>
-
export ANT_HOME=<location where ant was installed>
-
export JONAS_ROOT=$HOME/cluster/JONAS_4_8_3
-
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
-
Windows Notes:
-
-
For the sampleCluster2, JONAS_ROOT=c:\cluster\JONAS_4_8_3 (or later) is assumed.
-
-
-
A JOnAS instance, also called a worker for mod_jk, is
-JONAS_ROOT and a JONAS_BASE.
-
-
-
Even though there are four JOnAS instances (four JONAS_BASE) only
-one installation of JOnAS (one JONAS_ROOT) is needed.
-
-
-
It is recommended that the environment variables set in
-the user environment variables
- My Computer | Properties | Advanced | Environment Variables be added.
For this sample, Apache will run as <user> (rather than
-'root').
-Below, <prefix> refers to the install folder for Apache.
-This sample uses prefix = $APACHE_HOME=
-$HOME/cluster/apache2.
-
-
Download under cluster, the Apache server tarball source code
-from the Apache
-site.
-Extract the source code.
- tar xvfz httpd-2_0_XX.tar.gz
-
-
-
Choose an available listen
-port above 1024 (since this is not being run as ‘root’).
- This sample uses 8080. To verify that it is unused, use the following command.
-
-netstat -an | grep 8080
-
-
-
Configure, compile, and install.
-
-cd $HOME/cluster/httpd-2.2.0
-./configure
-–-prefix=$HOME/cluster/apache2 --with-port=8080
-
-make
-make install
-
-
-
- Note: The $HOME/cluster/apache2/conf/httpd.conf file may need to be edited to change the "User" and "Group" lines to match the desired user and group.
- Note: A binary version is also available at the Apache
-site.
-
-
Run and Stop Apache HTTP server to verify the installation.
-
-
Run Apache HTTP server.
-
-<prefix>/bin/apachectl start
-
-
-
Verify at least one httpd process is running.
-ps -ef | grep httpd
-
-
-
Verify that there is a listener.
-
-netstat -an | grep 8080
-
-
-
Use a web browser to connect to
-http://<hostname>:8080
-Check that apache returns the string ‘It
-Works!’
-
-
-
Stop Apache HTTP server for now – it will be restarted
-later after the JOnAS instances have been started.
-
-<prefix>/bin/apachectl stop
-
-
Notes:
-
-
The following environment variables are not required but are convenient. They are used in sampleCluster2.
-
-export APACHE_HOME=$HOME/cluster/apache2
- export PATH=$PATH:$APACHE_HOME/bin
-
-
-
It is also recommended that the <user>’s
-.bash_profile (.profile on AIX) file be updated with the lines
-above.
-<prefix> is the install folder for Apache. By default, it
-is C:\Program Files\Apache Group.
-
-
Download the Apache HTTP installer from the Apache site.
- The current version is apache_2.0.55-win32-x86-no_ssl.msi.
-
-
-
Choose a Listen port, for example, 8080
-
-
-
Enter netstat -an to verify it is unused.
- If either
-port 80 or 8080 is not available, the
-<prefix>\Apache2\conf\http.conf file must be edited after
-installation.
- Edit the line 'Listen 8080'.
-
-
-
Install by running the installer.
- The installer creates an 'Apache HTTP Server' group in the Start
-Menu.
-
-
Run and Stop Apache HTTP server:
-
-
Select StartMenu -> Programs ->
-Apache HTTP Server -> Control Apache Server
--- Start Apache Server in Console.
-
-
-
Open 'Task Manager', select 'Applications', verify 'Start
-Apache in Console' is running.
-
-
-
Enter netstat -an to verify that there is a
- listener.
-
-
-
Stop Apache HTTP server.
-
-
-
- Click on exit button on the windows title bar.
-
-
-
-
For further information about installing Apache HTTP server
-please refer to the Apache
-Site.
-
-
-
Installing
- the JK Module
-
Mod_jk will be installed in the same <user> account as
-Apache.
Download under cluster, the mod_jk tarball source code from the
-Tomcat Site.
-
-Extract the source code.
-
-tar xvfz jakarta-tomcat-connectors-1-2-15-src.tar.gz
-
-
A mod_jk.so file should now have been created under $APACHE_HOME/modules.
-The process for making apache aware of this new file will be performed in the
-next chapter.
-
-Note: For some distributions, a binary version may be
-available at the Tomcat site.
-
For further installation information, refer to the
-Tomcat
-Site.
Download the mod_jk connector.
-
- - Connect to the following url in a browser
-
-http://tomcat.apache.org/download-connectors.cgi
-
- - Select the browse download area link. This will take you to a
-mirror site.
- - Select jk
- - Select binaries
- - Select win32
- - Select jk-1.2.15
- - Select mod_jk-apache-2.0.55.so to start the download.
-
-
Copy the downloaded file to <prefix>/apache2/modules.
-
-
-
Rename the file mod_jk.so.
-
-
-
For further
- installation information, refer to the Tomcat
- Site.
-
-
-
Configuring the network
-
-
-The localhost must be mapped to a non lookback IP by editing the hosts file: either /etc/hosts in a linux system or c:/Windows/system32/etc/hosts for
-the Windows OS.
-
-
-
-
Configuring the Cluster
-
-
Configuring the JOnAS nodes
-
-
The cluster configurations can be built either manually or automatically by the newjc tool provided with JOnAS. Note that this tool
-is tailored for quickly generating a cluster configuration collocated to a single machine. If the cluster is spanned over several machines, either
-the configuration can be manually created from scratch or it can be generated by newjc. Then it must be modified to take into account
-the distributed aspects. Both methods are described below.
Note: A WebApp deployed into a Cluster must have a
-special distributable element set in its WEB-INF/web.xml.
-The following is an example of a web.xml deployment descriptor:
-
Note: For sampleCluster2, in the JOnAS-specific deployment
-descriptor, tag shared is set to true for the entity beans involved. When this flag is set to true, multiple instances of the same
-entity bean in different JOnAS servers can access a common database
-concurrently.
-
The following is an example of a deployment descriptor generated by newjc with the
-flag shared set to true. Deployment descriptors are in jonas_ejb_jar.xml in the ejbs.jar file in sampleCluster2.ear.
-
<jonas-ejb-jar>
- <jonas-entity>
- .
-. .
-
-<shared>true</shared>
- .
-. .
-
</jonas-entity>
-</jonas-ejb-jar>
-
-
-
SampleCluster2 Deployment
-
-
Directory
- Structure:
-
sampleCluster2 is located under
-$JONAS_ROOT/examples/sampleCluster2.
-
/lib libraries needed by the aplication
-to run
-
/output generated ear, jar, war files
-
/src source code
-
-
Compiling sampleCluster2:
-
-
Logon as user <user>.
-Make sure this user has the Java, Ant, and JOnAS environment set
-(from the above installation).
-
-
-
cd $JONAS_ROOT/examples/sampleCluster2
-
-
-
-
export JONAS_BASE=$HOME/cluster/jb1
-to set JONAS_BASE for the first instance.
-
-
-
-
-
ant install
-
-As a result, the application file sampleCluster2.ear is copied to
-the $JONAS_BASE/apps/autoload directory for the first instance.
-Since the ear is copied to the autoload directory, deployment will
-be automatic at JOnAS startup.
-
-
-
Repeat steps 3 and 4 for the three remaining
-instances (steps will be shorter as the compile has been done in step 1).
-
-
Note: sampleCluster2 contains both a war file for the web
-application and a jar file for the EJB. JOnAS will only deploy the
-war file to instances with a web container. Similarly, it will only
-deploy the jar file on instances with an EJB container.
-
-
-
Running sampleCluster2
-
-
Logon as user <user>.
-
-
-
cd $JONAS_ROOT/examples/sampleCluster2
-
-
-
Start all four JOnAS instances:
-
-./jcl4sc2 (jcl4sc2.bat for a Windows environment)
-
-
-This script executes
-jonas start –n nodeX, for X=1,2,3,4.
-
-
-
The following graphic shows an example "SessionServlet Output" page.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
The following is an explanation of the information shown in the "SessionServlet
-Output" page above.
-
Home of sampleCluster2
-
-
Open a
-session: creates a new session
-
-
Release
-a session: invalidates the http session and if a cookie is
-present, it will be made obsolete
-
-
Check a
-session: checks to see if a session is valid
-
-
After click on open session link
-
-
getRequestURL:
-indicates the number of requests for the indicated URL
-
-
from
-<Client_IP>: Client requesting the page
-
-
to
-<JOnAS_IP>: JOnAS web-container that has executed the servlet
-
-
Request
-path:
- - Servlet:
-the node-name(-n nodeX) of the
-JOnAS web-container that has executed the servlet
- - Stateless EJB: the node-name(-n nodeX) of the JOnAS ejb-container where the stateless session
- bean has been
-created
-
-
Session
-Data : New Session : false: indicates if a new http session has been created in the web
-container
-
-
Session
-ID: id of the http session
-
-
Creation Time:
-date of the http session creation
-
-
Last
-Accessed:
-date of the last access to the session
-
-
JOnAS
-instance=<node-name>: ejb-container where the stateful ejb has been created
-
-
Table
- - servlet running on: web-container that has executed the servlet
- - stateless bean created: ejb-container that has created the stateless session bean
- - stateless bean total calls: number of instantiations of the stateless bean on a specific
-node
- - stateless bean instance count
- - entity bean created: if an entity bean has been created, this indicates the
- node-name of the EJB
- container that created the entity bean links
- - Ask again: executes the servlet again
- - release session: invalidates the opened http session and if a cookie is present,
-it will be made obsolete
- - check session: checks to see if the session is valid
- - home: returns to the main page
-
-
After click on check session link
-
-
-JSessionID: id of the http session
-
-links:
- - go to session: returns to the opened session
- - check session: checks to see if the session is valid
- - home: returns to the main page
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/olddoc/howto/Firewall.html b/jonas_doc/core/olddoc/howto/Firewall.html
deleted file mode 100644
index 4e280d7d2e2b012b7b35bc8d3ef8e4d344a2c487..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/howto/Firewall.html
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-Using JOnAS through a Firewall
-
-
-
-
-
Configuring RMI for use through a Firewall
-
-
By default, the RMI protocol in JOnAS uses a random port at each startup,
-which implies that there is no way to configure a firewall as the port number
-changes each time the system restarts.
-
-
-
However, as of JOnAS version 4.4.1, you can easily configure the RMI port number
-by setting only one property per protocol in the
-$JONAS_BASE/conf/carol.properties file.
-
-
-
To configure the RMI exported-port number, edit the
-$JONAS_BASE/conf/carol.properties file
-to change the following protocols from 0 (choose a random port number) to the
-port number you want:
-
-
-
-
For the RMI/JRMP protocol, change:
-
-carol.jrmp.server.port=0
-
-
-
-
For the RMI/Jeremie protocol, change:
-
-carol.jeremie.server.port=0
-
-
-
-
For the RMI/IIOP protocol, change:
-
-carol.iiop.server.port=0
-
-
-
-
-
Note:
-The jonas.orb.port property has been moved from the
-$JONAS_BASE/conf/jonas.properties file to the
-$JONAS_BASE/conf/carol.properties file, as the latter is the file
-in which the registry ports and protocols were already being set.
-In previous JOnAS versions the jonas.orb.port property
-was not useful in multi-protocols mode as it allowed only one port number
-to be set for a single protocol.
-Also, the jonas.orb.port property was working only for RMI/JRMP
-and for objects using the PortableRemoteObject class for their export.
-
The JMS API provides a separate domain for each messaging approach, point-to-point or
-publish/subscribe. The point-to-point domain is built around the concept of queues, senders and receivers.
-The publish/subscribe domain is built around the concept of topic, publisher and subscriber.
-Additionally it provides a unified domain with common interfaces that enable the use of queue and topic.
-This domain defines the concept of producers and consumers.
-The classic sample uses a very simple configuration (centralized) made of one server hosting a queue and a topic.
-The server is administratively configured for accepting connection requests from the anonymous user.
-
-
JMS clustering aims to offer a solution for both the scalability and the high availability for the JMS accesses.
-This document gives an overview of the JORAM capabilities for clustering a JMS application in the J2EE context.
-The load-balancing and fail-over mechanisms are described and a user guide describing how to build such a configuration
-is provided. Further information is available in the JORAM documentation here.
-
-
Configuration
-
-
The following information will be presented:
-
-
Load balancing throw cluster topic and cluster queue.
- The distributed capabilities of JORAM will be examined.
-
How to present the JORAM HA enabling to ensure the high availability of the JORAM server.
-
How to build an MDB clustering architecture with both JOnAS and JORAM enabling to build
- an MDB based application ensuring the high availability.
-
-
-
Getting started :
-
-
Install and configure two JOnAS instances (see here). The newjc tool may be used for generating the initial configuration of the JMS cluster. The tool may be run with the default inputs except for the architecture (bothWebEjb) and number of nodes (2). See here for further information about the newjc tool.
-
JOnAS's examples newsamplemdb and newsamplemdb2 will be used to illustrate the configuration. First they must be compiled. Go to $JONAS_ROOT/examples/src and do ant install.
-
-
-
Load balancing
-
-
JORAM distributed configuration
-
-
Two instances of JOnAS are configured ("J1" and "J2"). Each JOnAS instance has a dedicated collocated JORAM server: server
- "S1" for JOnAS "J1", "S2" for "J2". Those two servers are aware of each other.
-
-
Set a JORAM distributed configuration:
-
-
-
Go to $JONAS_BASE/conf and edit the a3servers.xml file (same for the 2 instances). 2 instances are defined in the same domain network. The persistent mode is enabled.
-
For each instance, edit the ra.xml embedded in the joram_for_jonas_ra.rar (by using unjar command manually or with the jonasAdmin's RA editor) and check the following element according to the a3servers.xml content
-
For each instance, edit the joramAdmin.xml, update the connection factories definition, the user definition
-according to the local JORAM server configuration
-
See here for more information about a JORAM distributed configuration.
-
-
Why use clustered Topic?
-
-
A non hierarchical topic might also be distributed among many servers. Such a topic, to be
-considered as a single logical topic, is made of topic representatives, one per server. Such an architecture allows a publisher to publish messages on a representative of the topic. In the example, the publisher works with the representative on server 1. If a subscriber subscribed to any other representative (on server 2 in the example), it will get the messages produced by the publisher.
-
-
Load balancing of topics is very useful because it allows distributed topic subscriptions across the cluster.
-
-
-
-
-
General scenario for Topic
-
-
The following scenario and general settings are proposed:
-
-
The cluster topic is composed of two elements : mdbTopic1 defined hosted by JORAM server S1 and mdbTopic2 hosted by JORAM server S2.
-
The jndi name 'mdbTopic' is set for the local representative, ie mdbTopic1 for S1 et mdbTopic2 for S2.
-
At the server side, a MDB is listening the local representative 'mdbTopic'.
-
A client connects to the J1 or J2 server and sends 10 messages to the topic 'mdbTopic'.
-
Each message is received twice, one per cluster element.
-
-
-
-
-
-
Topic cluster definition in joramAdmin.xml
-
-
-The cluster definition with the topics must be added in $JONAS_BASE/conf/joramAdmin.xml file.
-The connection factories and the anonymous user must be defined with the local server id and the local server port number
-according to the a3servers.xml content. Here only the cluster related elements are shown:
-
The joramAdmin.xml file has to be loaded when all cluster members are started since some remote
- cluster elements are defined. An alternative consists in splitting the configuration into two different files
- joramAdmin-local.xml and joramAdmin-cluster.xml, the first one containing only the local elements and the
- second one, both local and remote elements. At the JOnAS starting, a script could copy the right file
- to joramAdmin.xml according to the others members presence (joramAdmin-local.xml if it's the first member
- which starts and joramAdmin-cluster.xml if all the cluster members are started).
-
-
Run the sample
-
-
Deploy the application, for example, create a deploy.sh file:
The fact that each message appears on the two different JOnAS servers consoles shows the messages broadcasting between the
-topic elements.
-
-
Load-balancing for Queue
-
-
Globally, the load balancing in the context of queues may be meaningless in comparison of load balancing topic.
-It would be a bit like load balancing a stateful session bean instance (which just requires failover).
-But the JORAM distributed architecture enables :
-
-
equilibrating the load of the queue access between several JORAM server nodes, it's a queue load-balancing at the server side.
-
load-balancing the load at the client side.
-
-
-
First scenario for Queue : distribution of the load at the server side
-
-
Here is a diagram of what is going to happen for the Queue and the message:
-
-
-
-
A load balancing message queue may be needed for a high rate of messages.
-A clustered queue is a cluster of queues exchanging messages depending on their load. The example has a cluster of two queues.
-A heavy producer accesses its local queue and sends messages. It quickly becomes loaded and decides to forward messages to the other queue of its cluster which is not under heavy load.
-
-
For this case some parameters must be set:
-
-
period: period (in ms) of activation of the load factor evaluation routine for a queue
-
producThreshold: number of messages above which a queue is considered loaded, a load factor evaluation launched, messages forwarded to other queues of the cluster
-
consumThreshold: number of pending "receive" requests above which a queue will request messages from the other queues of the cluster
-
autoEvalThreshold: set to "true" for requesting an automatic revaluation of the queues' thresholds values according to their activity
-
waitAfterClusterReq: time (in ms) during which a queue that requested something from the cluster is not authorized to do it again
-
-
-
For further information, see the JORAM documentation here.
-
-
The scenario for Queue is similar to the topic one. A client sent messages to a queue in S1. MDB gets messages
-from each local cluster queue representative. After having sent a burst of messages to the server S1,
-the load distribution should occur and message should be moved to S2.
-
-
-
The Queue definition in $JONAS_BASE/conf/joramAdmin.xml file is as following :
The procedure is similar to the topic example described above, just use the newsamplemdb2 example rather than
-newsample one.
-
-
Second scenario for Queue : load-balancing at the client side
-
-
Principle
-
-
The load-balancing is done at the client side. A server is selected randomly among the cluster members
-at the first message sending or through the 'location' java property. And then, for a given client, all the messages
-are sent to the same server unless the java property resetting.
-
-
-
-
For setting the load-balancing at the client side, the client application must use a clustered connection factory that
-embeds the network connection parameters of the cluster members. This factory must be registered in the JORAM's
-distributed JNDI for ensuring that the client gets an up to date object. A complete description of the
-JORAM JNDI setting is given here and the main parameters
-are given below :
-
-
Setting of the JORAM's distributed jndi
-
-
At first, the a3servers.xml file must enhanced with the JORAM's jndi service as following :
Only the JMS objects must be registered in the JORAM's jndi. The standard routing mechanism is used through a jndi.properties file
-put in each $JONAS_BASE/conf directory :
The port number must be adapted according to the local server configuration (16401 for S1 and 16402 for S2). The 'scn' prefix
-is defined for identifying the objects to bind or to lookup in this registry.
-
-
Setting of the clustered connection factories
-
-
The clustered connection factories are defined in the $JONAS_BASE/conf/joramAdmin.xml file as following :
Note that the cluster queue definition is symetric accross the cluster members. The well known jndi name is set
-on the cluster object (and not in the local representative as for the topic cluster).
-
-
Note that same for the topic declaration, the joramAdmin.xml file has to be loaded when all cluster members
- are started since some remote cluster elements are defined.
- An alternative consists in splitting the configuration into two different files
- joramAdmin-local.xml and joramAdmin-cluster.xml, the first one containing only the local elements and the
- second one, both local and remote elements. At the JOnAS starting, a script could copy the right file
- to joramAdmin.xml according to the others members presence (joramAdmin-local.xml if it's the first member
- which starts and joramAdmin-cluster.xml if all the cluster members are started).
-
-
MDB configuration
-
-
The message driven bean must be configured with the queue registered in the JORAM jndi ('scn:/comp' selector).
- Edit the deployment descriptor file (ejb-jar.xml) :
A server is chosen at the first message sending. A switch may be forced through the resetting of the 'location' java
-property. Below a new server election is requested for each odd iteration.
The procedure is similar to the topic and queue ones described above, just adapt the newsamplemdb2 example with
-the configuration and code given previously.
-
-
-
JORAM HA and JOnAS
-
-
Generality
-
-
-
-
An HA server is actually a group of servers, one of which is the master server that coordinates the other slave servers. An external server that communicates with the HA server is actually connected to the master server.
-
Each replicated JORAM server executes the same code as a standard server except for the communication with the clients.
-
In the example, the collocated clients use a client module (newsamplemdb). If the server replica is the master, then the connection is active enabling the client to use the HA JORAM server. If the replica is a slave, then the connection opening is blocked until the replica becomes the master.
-
-
Configuration
-
-
Several files must be changed to create a JORAM HA configuration:
-
-
a3servers.xml
-
-
A clustered server is defined by the element "cluster". A cluster owns an identifier and a name defined by the attributes "id" and "name" (exactly like a standard server). Two properties must be defined:
-
-
"Engine" must be set to "fr.dyade.aaa.agent.HAEngine" which is the class name of the engine that provides high availability.
-
"nbClusterExpected" defines the number of replicas that must be connected to the group communication channel used before this replica starts. By default it is set to 2. If there are more than two clusters, this specification must be inserted in the configuration file. If there are two clusters, this specification is not required.
-
-
In the case of one server and one replica, the value must be set to 1.
For each replica, an element "server" must be added. The attribute "id" defines the identifier of the replica inside the cluster. The attribute "hostname" gives the address of the host where the replica is running. The network is used by the replica to communicate with external agent servers, i.e., servers located outside of the cluster and not replicas.
-
-
This is the entire configuration for the a3servers.xml file of the first JOnAS instance jb1:
Each connection factory has its own specification. One is in case of the Queue, one for Topic, and one for no define arguments. Each time the hatcp url must be entered, the url of the two instances. In the example, it is localhost:16010 and localhost:16020. It allows the client to change the instance when the first one is dead.
-
After this definition the user, the queue and topic can be created.
-
-
ra and jonas-ra.xml files
-
-
First, in order to recognize the cluster, a new parameter must be declared in these files.
Here the name is not really appropriate but in order to keep some coherence this name was used. In fact it represents a replica so it would have been better to call it replicaId.
-
-
Consequently, for the first JOnAS instance, copy the code just above. For the second instance, change the value to 1 (in order to signify this is another replica).
-
-
Illustration
-
First launch the two JOnAS bases. Create a runHa.sh file in which the following code will be added:
Messages are sent on the JOnAS base which was launched before. Launch it again and kill the current JOnAS. The second JOnAS will automatically wake up and take care of the other messages.
-
-
-
MDB Clustering
-
-
Generality
-
-
This is a proposal for building an MDB clustering based application.
-
-
This is like contested Queues. i.e., there is more than one receiver on different machines receiving from the queue. This load balances the work done by the queue receiver, not the queue itself.
-
-
The HA mechanism can be mixed with the load balancing policy based on clustered destinations. The load is balanced between several HA servers. Each element of a clustered destination is deployed on a separate HA server.
-
-
-
-
Configuration
-
Here is the supposed configuration (supposed because it has not been verifed).
-
-
-
-
-
Illustration
-
The configuration must now be tested, as follows:
-
-
First make JA1 crash and verify that messages are spread between JB1 and JB2.
-
Then make JB2 crash and verify that messages are spread between JA1 and JA2.
-
Finally make JA1 and JB2 crash and verify that messages are spread between JA2 and JB1.
JOnAS release 4.1 dramatically simplifies the use of a distributed JORAM
-platform from within JOnAS servers. For example, such a configuration allows
-a bean hosted by JOnAS instance "A" to send messages on a JORAM queue, to
-which a MDB hosted by JOnAS instance "B" listens.
-
-
This advancement is due to the following:
-
-
JORAM Resource Adapter allows a much more refined configuration than
- the JMS service did.
-
JORAM provides a distributed JNDI server which allows JOnAS instances
- to share information.
-
-
-
Before going through this chapter, it is highly recommended that the JORAM Resource Adapter
-configuration guide be reviewed.
-
-
Scenario and general architecture
-
-
The following scenario and general settings are proposed:
-
-
Two instances of JOnAS are run (JOnAS "A" and JOnAS "B"). JOnAS A hosts
- a simple bean providing a method for sending a message on a JORAM queue.
- JOnAS B hosts a message-driven bean listening on the same JORAM
- queue.
-
Each JOnAS instance has a dedicated collocated JORAM server: server
- "s0" for JOnAS A, "s1" for JOnAS B. Those two servers are aware of each
- other.
-
The queue is hosted by JORAM server s1.
-
An additional JNDI service is provided by the JORAM servers that will
- be used for storing the shared information (basically, the queue's naming
- reference).
-
-
-
Common configuration
-
-
The JORAM servers are part of the same JORAM platform described by the
-following a3servers.xml configuration file:
This configuration describes a platform made up of two servers, "s0" and
-"s1", hosted by machines "hostA" and "hostB", listening on ports 16010,
-providing a distributed JNDI service (more info on JORAM's JNDI may be found
-here).
-
-
Each JOnAS server must hold a copy of this file in its conf/
-directory. In its jonas.properties file, each must declare the
-joram_for_jonas_ra.rar as a resource to be deployed (and each
-should remove jms from its list of services).
-
-
Specific configuration
-
-
JOnAS A embeds JORAM server s0. The
-jonas-ra.xml descriptor packaged in the
-joram_for_jonas_ra.rar archive file must provide the following
-information:
The other default settings do not need to be changed.
-
-
JOnAS B embedds JORAM server s1. The
-jonas-ra.xml descriptor packaged in the
-joram_for_jonas_ra.rar archive file must provide the following
-properties values:
The scn:comp/ prefix is a standard way to specify which JNDI
-provider should be used. In this case, the shared queue will be bound to
-JORAM's distributed JNDI server, and may be retrieved from both JOnAS A and
-JOnAS B. To provide this mechanism, both JOnAS servers must provide access to
-a standard jndi.properties file. For JOnAS A, the file looks as
-follows, and should be placed in its conf/ directory:
The simple bean on JOnAS A needs to connect to its local
-JORAM server and access the remote queue. The following is an example of
-consistent resource definitions in the deployment descriptors:
The ConnectionFactory is retrieved from the local JNDI registry of the
-bean. However, the Queue is retrieved from the distributed JORAM JNDI server,
-because its name starts with the scn:comp/ prefix. It is the same
-queue to which the message-driven bean on JOnAS B listens.
-For doing so, its activation properties should be set as follows:
-Starting with version 4.1.4 JOnAS provides support for remote connection to the
-MBean server in a standard way.
-
-
The target audience for this document is the management application
- developer or the administrator, intending to use standard JMX RMI
- connectors to access the MBean Server running in a JOnAS server.
-
-
-
What is JSR 160 ?
-The JSR 160 is a JMX Remoting specification which extends the JSR 3 specification
-by providing a standard API to connect to remote JMX-enabled applications.
-
-Currently, JSR 160 has defined a mandatory connector based on RMI (that
-supports both RMI/JRMP and RMI/IIOP).
-
-
Support for JSR 160 connectors in JOnAS is based on the
- MX4J JMX
- implementation.
-
-
-
Connector servers created by JOnAS
-Previous and current JOnAS versions implement a proprietary remote object allowing
-connection to the MBean server. This object is registered in JNDI under the name
-'RMIConnector_jonasServerName'. It can be accessed using any of
-the communication protocols support by JOnAS (RMI/JRMP, RMI/IIOP, JEREMIE -
-see Choosing the Protocol).
-
-JSR 160 support implies providing standard connector server objects. The JMX service
-creates at start-up one or several such objects, depending on the JOnAS configuration
-(in this case, depending on the content of carol.properties file).
-To create a client connector, the client side needs to know the URL of the connector
-server. Below we present the URLs that can be used by the clients depending on the
-protocol they choose.
-
Currently only 2 protocols can be used by JSR-160 connectors:
-RMI/JRMP and RMI/IIOP.
-
-
Using a RMI/JRMP Connector
-This connector can be used if the jrmp protocol is set in the
- carol.protocols list.
-
-The client has to construct a JMXServiceURL using the following
-String, possibly modified according to the JOnAS-specific configuration:
-service:jmx:rmi:///jndi/rmi://host:port/jrmpconnector_jonasServerName
-where host is the host on which is running the JOnAS server to be managed.
-The port number is given in the carol.properties file.
-
Then, a JMXConnector has to be created and connected to the connector server
- using the JMX Remote API.
-
-This connector can be used if the iiop protocol is set in the
- carol.protocols list.
-
-The client code is similar to the JRMP case, but the String to be used to construct the JMXServiceURL
-must adhere to the following model:
-"service:jmx:iiop:///jndi/iiop://host:port/iiopconnector_jonasServerName"
This document presents the internal architectural design of the JOnAS
-application server. It contains many links toward the JOnAS documentation,
-for detailed descriptions of some aspects.
-
-
JOnAS Service based Architecture
-
-
Design Principles
-
-
JOnAS's service-based architecture provides for high modularity and
-configurability of the server. It allows to apply a component-model approach
-at the middleware level, and makes the integration of new modules easy (e.g.
-for open source contributors). It also provides a way to start only the
-services needed by a particular application, thus saving valuable system
-resources. JOnAS services are manageable through JMX.
-
-
JOnAS is designed with services in mind. A service typically provides
-system resources to containers. Most of the components of the JOnAS
-application server are pre-defined JOnAS services. However, it is possible
-and easy for an advanced JOnAS user to define a service and to integrate it
-into JOnAS. Because J2EE applications do not necessarily need all services,
-it is possible to define, at JOnAS server configuration time, the set of
-services that are to be launched at server start.
-
-
The JOnAS architecture is illustrated in the following figure, showing WEB
-and EJB containers relying on JOnAS services. Two thin clients are also shown
-in this figure, one of which is the JOnAS administration console (called
-JonasAdmin).
-
-
-
All these services correspond to JOnAS components. The JOnAS Service
-principle is described in detail within the JOnAS documentation, in the Creating
-a New JOnAS Service section of the Advanced Topic chapter. Please read
-this document to understand the JOnAS components wrapping within services.
-Generally, a JOnAS service Serv1 implementation may be found
-in the package org.objectweb.jonas.serv1, where an interface
-of the service may be found, Serv1Service, with an
-implementation, Serv1ServiceImpl, and an MBean for the
-service management purpose (as described below in the JOnAS Management
-Architecture section), Serv1ServiceImplMBean class.
-
-
An application server such as JOnAS must provide a complex class loading
-scheme, which is described in the JOnAS
-classloader hierarchy section of the J2EE Application Programmer's Guide
-of the JOnAS documentation.
-
-
The following of this section describes the existing JOnAS services.
-
-
Communication and Naming Service
-
-
This service (also called "Registry") is used for launching the RMI
-registry, the CosNaming and/or the CMI registry
-depending on the JOnAS configuration (CAROL configuration, which specifies
-which communication protocols are to be used). There are different registry
-launching modes: in the same JVM or not, automatically if not already
-running. CAROL enables multi-protocol runtime support and deployment, which
-avoids having to redeploy components when changing the communication
-protocol.
-
-
JOnAS may run several distributed processing environments, thanks to the
-integration of the CAROL (Common
-Architecture for RMI ObjectWeb Layer) ObjectWeb project, which allows
-simultaneous support of several communication protocols:
-
-
RMI using the Sun proprietary protocol JRMP
-
RMI on IIOP
-
CMI, the "Cluster aware" distribution protocol of JOnAS
-
-
-
This service provides the JNDI API to application components and to other
-services in order to bind and lookup remote objects (e.g. EJB Homes) and
-resource references (JDBC DataSource, Mail and JMS connection factories,
-etc.).
-
-
-
-
EJB Container Service
-
-
This service is in charge of loading the EJB components and their
-containers. EJB containers consist of a set of Java classes that implement
-the EJB specification and a set of interposition classes that interface the
-EJB components with the services provided by the JOnAS application server.
-The role of the interposed classes is to manage transactions, security, ...
-Interposition classes are specific to each EJB component and are generated by
-the deployment tool called GenIC.
-This tool is developed using the Velocity template based generation tool.
-
-
For each EJB component XXX, GenIC generates the following classes:
-
-
JOnASXXXBean = bean instance
-
JOnASXXXHandle = handle
-
JOnASXXXHome = Home implementation
-
JOnASXXXLocalHome = LocalHome implementation
-
JOnASXXXRemote = implements the bean Remote interface
-
JOnASXXXLocal = implements the bean Local interface
-
-
-
These files are generated with Velocity from templates located in org.objectweb.jonas_ejb.genic
-(*.vm). Moreover, stubs and skeletons are generated, depending on the
-specified protocol (jrmp/iiop), several protocols may be specified,
-in this case several stubs/skeletons will be generated. CAROL is used to hide
-the differencies between protocols.
-
-
For implementing Container-Managed Persistence of EJB 2.0 and EJB 2.1
-(CMP2), JOnAS relies on the ObjectWeb JORM (Java Object Repository Mapping)
-and MEDOR (Middleware Enabling
-Distributed Object Requests) frameworks. JORM supports complex mappings of
-EJBs to database tables, as well as several types of persistency support
-(relational databases, object databases, LDAP repositories, etc.). JORM is
-responsible for bean persistence. MEDOR is used to evaluate ejb-ql
-queries.
-
-
Generic objects used for entity beans are derived to be used by JORM:
-
-
JEntitySwitch implements PBinding (JORM), and is responsible for
- Database accesses
-
The bean instance implements the PAccessor interface.
-
-
-
Typically, the PBinding uses the PAccessor to set and get field values in
-the bean instance.
-
-
The lock policy is enforced in the JEntitySwitch class. Actually, this
-class is specialized depending on the lock policy used:
-
-
JEntitySwitchCS = container serialized
-
JEntitySwitchCRC = container read committed
-
JEntitySwitchCRU = container read uncommitted
-
JEntitySwitchDB = database
-
JEntitySwitchRO = read only
-
-
-
The detailed picture of the JOnAS CMP architecture is provided below:
-
-
-
Each jar file is implemented in a separate Container. Each Container has a
-swapper that is used to periodically write bean instances
-
-
on disk, and release memory instances from the cache when JOnAS needs more
-memory.
-
-
For Message driven beans, the factory implements ServerSessionPool
-interface. For each instance, an object (JMessageDrivenBean) is created : It
-implements ServerSession, MessageListener, Runnable, and MessageDrivenContext
-interfaces.
-
-
JOnAS configuration provides a means for specifying a set of ejb-jar files
-to be loaded at server startup by the EJB container service. Ejb-jar files
-can also be deployed at server runtime using the JOnAS administration
-tools.
-
-
JOnAS also implements the Timer Service features as specified in EJB
-2.1.
-
-
WEB Container Service
-
-
This service is in charge of running a Servlet/JSP Engine in the JVM of
-the JOnAS server and of loading web applications ("war" files) within this
-engine. Currently, this service can be configured to use Tomcat or Jetty. Servlet/JSP engines are
-integrated within JOnAS as "web containers," i.e. such containers provide the
-web components with access to the system resources (of the application
-server) and to EJB components, in a J2EE-compliant way.
-
-
JOnAS configuration provides a means for specifying that this service be
-launched during JOnAS initialization. Additionally, JOnAS configuration
-provides a means for specifying a set of war files to be loaded at JOnAS
-startup. War files may also be deployed at server runtime using the JOnAS
-administration tools. User management for Tomcat/Jetty and JOnAS has been
-unified. The class-loading delegation policy (priority to the Webapp
-classloader or to the parent classloader) can be configured.
-
-
The
-web container service is implemented by using an abstract
-class (AbsJWebContainerServiceImpl) which needs to be extended to
-implement the specific Tomcat
-or Jetty
-part.
-The interface
-of this service defines common methods like starting, stopping the
-embedded server, or deploy/undeploy war files. Also, these public methods are
-available through an MBean.
-The class for Catalina 5.0 is named CatalinaJWebContainerServiceImpl
-and for Jetty 5.5 it is JettyJWebContainerServiceImpl.
-For Catalina 5.5, the name of the package is
-org.objectweb.jonas.web.catalina55 instead of
-org.objectweb.jonas.web.catalina50.
-To integrate a new web container, a new package
-org.objectweb.jonas.web.xxx should be added and the service
-class should extend AbsJWebContainerServiceImpl class.
There is another package for all the stuff concerning the parsing and the
-handling of web deployment descriptors. This is the package org.objectweb.jonas_web.deployment
-which is composed of api package (used by web container service) and the
-other subpackages are only used internally for parsing and managing the XML
-files.
-The only import which should occur within a web container service
-implementation should be the api package and not the other subpackages. This
-allows to change the implementation of parsing/analyzing XML files without
-changing the services code.
-
-
Ear Service
-
-
This service is used for deploying complete J2EE applications, i.e.
-applications packaged in EAR files, which themselves contain ejb-jar files
-and/or war files. This service handles the EAR files and delegates the
-deployment of the war files to the WEB Container service and the ejb-jar
-files to the EJB Container service. It handles creating the appropriate class
-loaders, in order for the J2EE application to execute properly.
-
-
For deploying J2EE applications, JOnAS must be configured to launch the
-EAR service and to specify the set of EAR files to be loaded. EAR files can
-also be deployed at server runtime using the JOnAS administration tools.
-
-
This service is implemented by the EarServiceImpl
-class. This class is linked to other services which should be started. The
-ear service needs an EJB service and a WebContainer service to allow to send
-EJBs of an EAR to the EJB service and to send web components to the web
-container service.
-This service is pretty simple, it unpacks EAR, resolves "Class-Path:" entries
-of MANIFEST files and ejb-link elements, and set up JACC security. Once
-everything is correctly setup, it send components to each service (ejb or
-web) which will deploy them by using information provided by the Ear
-service.
-
-
As explained in web container service, all the parsing/handling of XML
-deployment descriptors is done in another package which is for Ear service
-the org.objectweb.jonas_ear.deployment
-package.
-
-
Transaction Service
-
-
This service encapsulate a Java Transaction Monitor called JOTM (a project from ObjectWeb). It is a
-mandatory service which handles distributed transactions. It provides
-transaction management for EJB components as defined in their deployment
-descriptors. It handles two-phase commit protocol against any number of
-Resource Managers (XA Resources). For J2EE, a transactional resource may be a
-JDBC connection, a JMS session, or a J2EE CA Resource Adapter connection. The
-transactional context is implicitly propagated with the distributed requests.
-The Transaction Monitor can be distributed across one or more JOnAS servers;
-thus a transaction may involve several components located on different JOnAS
-servers. This service implements the JTA 1.0.1 specification, thus allowing
-transactions from application components or from application clients to be
-explicitly started and terminated. Starting transactions from application
-components is only allowed from Web components, session beans, or
-message-driven beans (only these two types of beans, which is called
-"Bean-managed transaction demarcation").
This service is responsible for handling Datasource objects. A Datasource
-is a standard JDBC administrative object for handling connections to a
-database. The Database service creates and loads such datasources on the
-JOnAS server. Datasources to be created and deployed can be specified at
-JOnAS configuration time, or they can be created and deployed at server
-runtime using the JOnAS administration tools. The Database service is also
-responsible for connection pooling; it manages a pool of database connections
-to be used by the application components, thus avoiding many physical
-connection creations, which are time-consuming operations.
-The database service should now be replaced by the JDBC Resource Adapter, to be deployed
-by the J2EE CA Resource Service (see below), which additionally provides JDBC
-PreparedStatement pooling.
-
-
For supporting Message-driven Beans and JMS operations coded within
-application components, the JOnAS application server relies on a JMS
-implementation. JOnAS makes use of a third-party JMS implementation;
-currently the JORAM open source
-software is integrated and delivered with JOnAS, the SwiftMQ product has also been used in
-previous versions of JOnAS, and other JMS provider implementations can easily
-be integrated. JORAM provides several noteworthy features: in particular,
-reliability (with a persistent mode), distribution (transparently to the JMS
-client, it can run as several servers, thus allowing load balancing), and the
-choice of TCP or SOAP as communication protocol for transmitting messages.
-
-
The JMS service is in charge of launching (or establishing connection to)
-the integrated JMS server, which may or may not run in the same JVM as JOnAS.
-It also provides connection pooling and thread pooling (for Message-driven
-Beans). Through this service, JOnAS provides facilities to create
-JMS-administered objects such as the connection factories and the
-destinations, either at server launching time or at runtime using the JOnAS
-administration tools.
Note that the same function of JMS implementation integration should now
-be achieved through a Resource Adapter, to be deployed by the J2EE CA
-Resource Service (see below). Such a Resource Adapter (J2EE CA 1.5) is provided for
-JORAM. The Messaging service will become deprecated.
-
-
J2EE CA Resource Service
-
-
The J2EE Connector Architecture (J2EE CA) allows the connection of
-different Enterprise Information Systems (EIS) to a J2EE application server.
-It is based on the Resource Adapter (RA), an architecture component
-comparable to a software driver, which connects the EIS, the application
-server, and the enterprise application (J2EE components). The RA is generally
-provided by an EIS vendor and provides a Java interface (the Common Client
-Interface or CCI) to the J2EE components for accessing the EIS (this can also
-be a specific Java interface). The RA also provides standard interfaces for
-plugging into the application server, allowing them to collaborate to keep
-all system-level mechanisms (transactions, security, and connection
-management) transparent from the application components.
-The application performs "business logic" operations on the EIS data using
-the RA client API (CCI), while transactions, connections (including pooling),
-and security on the EIS are managed by the application server through the RA
-(system contract).
-
-
The JOnAS Resource service is in charge of deploying J2EE CA-compliant
-Resource Adapters (connectors), packaged as RAR files, on the JOnAS server
-(such connectors will be loaded in the Application classloader). RAR files
-can also be included in EAR files, in which case the connector will be loaded
-by classloader of the EAR. Once Resource Adapters are deployed, a connection
-factory instance is available in the JNDI namespace to be looked up by
-application components.
A J2EE CA 1.5 Resource Adapter for JDBC is available with JOnAS. It can
-replace the current JOnAS database service for plugging JDBC drivers and
-managing connection pools. It also provides JDBC PreparedStatement
-pooling.
-
-
A J2EE CA 1.5 Resource Adapter for JMS is available with JOnAS. It can
-replace the current JOnAS Messaging service for plugging JORAM.
-
-
-
Security Service
-
-
This service implements the authorization mechanisms for accessing J2EE
-components, as specified in the J2EE specification.
-
-
In JOnAS, the mapping between roles and user identification is done in the
-user identification repository. This user identification repository can be
-stored either in files, in a JNDI repository (such as LDAP), or in a
-relational database. This is achieved through a JOnAS implementation of the
-Realm for each Web container and through the JAAS login modules for Java
-clients. These Realms use authentication resources provided by JOnAS, which
-rely either on files, LDAP or JDBC. These realms are in charge of propagating
-the security context to the EJB container during EJB calls. JAAS login
-modules are provided for user authentication of Web Container and Java
-clients. Certificate-based authentication is also available, with
-CRLLoginModule login module for certificate revocation.
-
-
JOnAS also implements the Java Authorization Contract for Containers (JACC
-1.0) specification, allowing authorizations to be managed as java security
-permissions, and providing the ability to plug any security policy
-provider.
-
-
More details about security handling within JOnAS is provided within the
-Configuring
-Security section of the JOnAS Configuration Guide.
-
-
There are 3 major packages for implementing the security in JOnAS.
-
-
The first package is org.objectweb.security
- which is composed of two important classes. A SecurityContext class which
- contains Principal names, J2EE roles, etc. and the SecurityCurrent which
- manages the current SecurityContext of each J2EE component.
- SecurityContext object is associated to a ThreadLocal object. There is an
- exception for the client container: In this case, the SecurityContext is
- available for all the JVM and not only for one thread. This allows to
- have multi-thread applications like swing/awt applications to have always
- a SecurityContext object.
-
-
The second package is org.objectweb.jonas.security.
- This package contains the implementation of the security service, the
- JAAS login modules (and the JAAS callbacks) provided by JOnAS. The
- classes used to interact with external authentication like
- Datasource/LDAP/Files are present in the realm subpackage. It contains
- also RMI interceptors for JOnAS protocols like rmi/jrmp,
- rmi/iiop. For IIOP protocol, this package contains CSIv2 interceptors to
- allow security propagation over iiop which is required for J2EE 1.4.
- (org.objectweb.jonas.security.iiop).
- To be compliant with J2EE 1.4, JOnAS setup the JACC provider with classes
- which are in the package org.objectweb.jonas.security.jacc.
- Note that this package doesn't contains the JACC provider, but only the
- classes to configure the JACC provider which is set by JOnAS
- administrator. The last subpackage and not the least is the subpackage
- implementing the specific Realm for Tomcat or Jetty by relying on
- existing JOnAS classes. It consists in simple wrapper classes. These
- classes are in package
- org.objectweb.jonas.security.realm.web.xxx where xxx is
- catalina50, catalina55, jetty50, etc.
-
-
The third package is the org.objectweb.jonas_lib.security
- package.
- This package contains the JACC provider which is used by default. Users
- can use their own JACC provider by setting properties at the JVM startup.
- The classes in this package implement/extend classes defined by the JSR 115
-
-
-
-
-
Management Service
-
-
The Management service is needed to administrate a JOnAS server from the
-JOnAS administration console. Each server running this service is visible
-from the administration console. This service is based on JMX. Standard
-MBeans are defined within the JOnAS application server; they expose the
-management methods of the instrumented JOnAS server objects such as services,
-containers, the server itself. These MBeans implements the management model
-as specified in the J2EE Management Specification. The Management service
-runs a JMX server
- , and is implemented in the org.objectweb.jonas.jmx
-package. The MBeans of the JOnAS server are registered within this JMX
-server. The JOnAS administration console is a Struts-based Web application
-(servlet/JSP) that accesses the JMX server to present the managed features
-within the administration console. Thus, through a simple Web browser, it is
-possible to manage one or several JOnAS application servers. The
-administration console provides a means for configuring all JOnAS services
-(and making the configuration persistent), for deploying any type of
-application (EJB-JAR, WAR, EAR) and any type of resource (DataSources, JMS
-and Mail connection factories, J2EE CA connectors), all without the need to
-stop or restart the server. The administration console displays information
-for monitoring the servers and applications, such as used memory, used
-threads, number of EJB instances, which component currently uses which
-resources, etc.. When Tomcat is used as Web Container, the Tomcat Management
-is integrated within the JOnAS console. A Management EJB (MEJB) is also
-delivered, providing access to the management features, as specified in the
-J2EE Management Specification.
-
-
Discovery Service
-
-
The discovery service is used to support domain management. A JOnAS
-management domain is composed of a set of JOnAS servers that are running
-under the same management authority and are identified by a domain name. The
-servers in a domain may be administred by a management application running on
-one server in the domain; this is the master server. The managed servers are
-slaves. The discovery service is based on a mutlicast communication
-infrastructure allowing message broadcasting in order to publish the
-connector-server addresses and state changes of the servers in the domain.
-The master servers listen to these discovery messages. Moreover, they are
-able to broadcast messages asking the servers in the domain to identify
-themselves
-
-
Mail Service
-
-
A J2EE application component can send e-mail messages using JavaMailTM. The
-Mail service of the JOnAS application server provides the necessary resources
-to such application components. The Mail service creates mail factories and
-registers these resources in the JNDI namespace in the same way that the
-database service or the JMS service creates Datasources or
-ConnectionFactories and registers these objects in the JNDI namespace. There
-are two types of mail factories: javax.mail.Session and
-javax.mail.internet.MimePartDataSource.
This service is implemented on top of AXIS and is used for the deployment of
-Web Services. Only a very small part of the deployment work is done during
-the installation time: most of the work is done offline with a tool like
-GenIC, WsGen.
-
-
-
-
Offline ws processing (WsGen)
-
-
-WsGen
-is the offline tool that is responsible of all generation operations for a
-given archive. It can process EjbJar, WebApp, AppClient and Ear. It will
-unpack the input archive if needed (ear/war case), read the deployment
-descriptor of the given component and will generate artifact accordingly. 3
-types of artifacts can be generated:
-
-
-
-
-
axis specific deployment descriptor (*.wsdd) for client and server
- side
-
java classes representing client WS Stubs and some Helper classes
- for complex types
-
new archives: a configured webapp for each EjbJar with WS, and an
- Ear that wraps EjbJar + generated WebApp
-
-
-
-
-
-
-
WsGen will build server side artifacts if a webservices.xml descriptor is
-found in the archive (can be an EjbJar or a WebApp):
-
-
-
-
-
If the processed archive is an EjbJar, a WebApp will be generated
- and its web.xml customized for Axis, a Wrapping Ear will be generated
- too (only if the EjbJar is not part of an application yet)
-
a server side axis deployment descriptor is generated accordingly
- to the WSDL, Mapping file and Service Endpoint Interface
-
-
-
-
-
-
-
Client side artifacts are generated only if WsGen find some service-ref
-elements in web.xml, ejb-jar.xml or application-client.xml:
-
-
-
-
-
Service implementation + Stub(s) implementation of the SEI(s) are
- generated from WSDL + mapping file (we use EWS: a specialized WSDL2Java tool
- that looks inside jaxrpc mapping file)
-
-
client side axis deployment descriptor is generated for JAX-RPC
- Handler setup and operations descriptions
-
for each serialized bean, an Helper class is built to help during
- ser/deser process
-
-
-
-
-
Runtime processing
-
-
-
Webservice service
-
-
-This JOnAS service is used to set some Axis property at JOnAS startup and is
-in charge of some webservice specific deployment operations:
-
-
-
-
-
Endpoint URL creation from hostname, HTTP port and webapp
- configuration
-
WSDL Publication with WSDLHandler: J2EE server are required to
- publish all WSDL definitions of exposed components, from now, JOnAS
- can publish the WSDLs in the file system or inside a registry (jUDDI,
- ...). Notice that Registry publication is a minimalist
- implementation
-
-
-
-
-
-
component context update
-
-
-Each component that want to be client of a webservices has to declare a
-dependency on that webservice using service-ref (like ejb-ref, ...). At
-deploy time, each container (web, ejb and client) is responsible to create
-and fill the Context of each deployed component. Each container has a
-createCompponentContext() method (web, ejb, client) that have been updated to
-handle service-ref.
-Each service-ref is bound in the Component Context as a Reference configured
-to permit the javax.xml.rpc.Service creation (using an ObjectFactory) when
-the client performs the lookup.
-
-
-
-
WSDL publication by URL
-
-
-Besides WSDL publication done by the ws service with WSDLHandler, Axis give
-us an elegant way to obtain the service WSDL with just a simple URL: you just
-have to append to the endpoint URL the String ?WSDL to retrieve the desired
-WSDL.
-In JOnAS, this idea has been reused and enhanced for allowing handling of
-import/include of WSDL definition to other XML Document (WSDL or Schema) and
-this, recursivly ! Append ?JWSDL (Notice the J !) to your endpoint URL and
-you'll see the WSDL packaged inside your webapp (no runtime generation) with
-some updates (URL endpoints + imports/includes).
-
-
-
-
2 main packages:
-
-
-
org.objectweb.jonas_ws: contains all XML descriptors handling code
- (deployment/xml deployment/api + deployment/lib) and WsGen code
-
org.objectweb.jonas.ws: contains runtime classes WSService + Axis glue
- for JOnAS
As previously explained, JOnAS Management is based on JMX. Standard MBeans
-are defined within the JOnAS application server; they expose the management
-methods of the instrumented JOnAS server objects such as services,
-containers, the server itself. They are registered within the JMX server
-embedded within the JOnAS Management Service, and may then be accessed by any
-JMX client.
-
-
-
-
-
-
-
-
Related documentation:
-
-
Domain
-Management in JOnAS (explain the domain management feature of JOnAS,
-available from JOnAS 4.4 only)
-
-
Discovery
-Service Configuration (description of the discovery service, used for
-domain support, available from JOnAS 4.4 only)
-
-
JSR160
-Support in JOnAS (explain the principles to remotely access to the JOnAS
-MBeans server, e.g. for remote management, used by the domain management
-features)
Clustering for an application server generally makes use of three
-features: Load Balancing (LB), High Availability (HA) and Failover. Such
-mechanisms can be provided at the Web container level by dispatching requests
-to several Servlet/JSP engine instances, at the EJB container level by
-dispatching EJB requests to several EJB container instances, and at the
-database level by using several databases. A replicated JNDI naming is also
-necessary.
-
-
JOnAS provides Load Balancing, HA, and Failover at the WEB container level
-using the Apache Tomcat mod_jk plugin and an HTTP in memory
-session-replication mechanism provided with Tomcat. The plugin dispatches
-HTTP requests from the Apache web server to Tomcat instances running as JOnAS
-web containers. Server fluctuations are automatically taken into account.
-This plugin supports round-robin and weighted round-robin load-balancing
-algorithms, with a sticky session option.
-
-
Load balancing and HA are provided at the EJB container level in JOnAS.
-Operations invoked on EJB Home interfaces (EJB creation and retrieval) are
-dispatched on the nodes of the cluster. The mechanism is based on a
-"clustered-aware" replicated JNDI registry using a Clustered remote Method
-Invocation protocol (CMI). The stubs contain the knowledge of the cluster and
-implement the load-balancing policy, which may be random, round-robin and
-weighted round-robin. Failover at the EJB level will be provided by
-implementing a stateful session bean state replication mechanism.
-
-
The JOnAS clustering architecture is illustrated in the following
-figure.
-
-
-
JOnAS provides documentation for configuring such an architecture, the JOnAS
-Clustering Document.
-
-
The use of the C-JDBC ObjectWeb
-project offers load balancing and high availability at the database level.
-The use of C-JDBC is transparent to the application (in our case to JOnAS),
-since it is viewed as a standard JDBC driver. However, this "driver"
-implements the cluster mechanisms (reads are load-balanced and writes are
-broadcasted). The database is distributed and replicated among several nodes,
-and C-JDBC load balances the queries between these nodes. An evaluation of
-C-JDBC using the TPC-W benchmark on a 6-node cluster has shown performance
-scaling linearly up to six nodes.
-
-
In addition to clustering solutions, JOnAS provides many mechanisms,
-intrinsic to the JOnAS server, for being highly scalable and efficient. This
-includes the following:
-
-
A pool of stateless session bean instances
-
A pool of entity bean instances, configurable for each entity bean
- within its deployment descriptor
-
Activation/passivation of entity beans, passivation can be controlled
- through the management console
-
Pools of connections, for JDBC, JMS, J2EE CA connectors. For database
- connection pooling, many tuning capabilities are provided: see the
- section JDBC connection pool configuration of the Configuring
- JDBC DataSource section of the JOnAS configuration guide.
-
A pool of threads for message-driven beans
-
Session bean timeout can be specified at deployment
-
A "shared" flag in the specific deployment descriptor of an entity bean
- indicates whether the persistent representation of this entity bean is
- shared by several servers/applications, or whether it is dedicated to the
- JOnAS server where it is loaded. In the latter case, the optimization
- performed by JOnAS consists of not reloading the corresponding data
- between transactions.
-
The usual EJB 1.1 "isModified" (or "Dirty") mechanism is available for
- avoiding storage of unmodified data.
-
An optimization called "Data Prefetching" provides JDBC resultsets
- re-use by the EJB container (this optimization reduces the number of SQL
- statements executed by the EJB container)
-
Adapting the entity bean lock policy to the application, the following
- policies are available: container-serialized, container-read-committed,
- container-read-uncommitted, database, read-only.
-
-
-
Optimizations related to entity beans are described in the Tuning
-Container for Entity Bean Optimizations section of the JOnAS
-documentation. More details about available CMP tuning features are provided
-below.
-
-
CMP Tuning Features
-
-
JOnAS provides many CMP tuning features, which may be specified through
-server specific deployment elements, at the entity bean level (so that one
-policy per component may be defined).
-
-
-
-
1) Lock Policy (Concurrent Access)
-
-
The <lock-policy> elements may have the following value:
-
-
Container-serialized (default): The container ensures
- the transaction serialization. This policy is suitable for most entity
- beans, particularly if the bean is accessed only from this container
- (shared = false).
-
Container-read-committed: This policy is similar to
- container-serialized, except that accesses outside transaction do not
- interfere with transactional accesses. This can avoid deadlocks in
- certain cases, when accessing a bean concurrently with and without a
- transactional context. The only drawback of this policy is that it
- consumes more memory (2 instances instead of 1).
-
Container-read-uncommitted: all methods share the same
- instance (like container-serialized), but there is no synchronization.
- For example, this policy is of interest for read-only entity beans, or if
- the bean instances are very rarely modified. It will fail if 2 or more
- threads try to modify the same instance concurrently.
-
Database: Let the database deal with transaction
- isolation. With this policy, you can choose the transaction isolation in
- your database. This may be of interest for applications that heavily use
- transactional read-only operations, or when the flag shared is needed. It
- does not work with all databases and is not memory efficient.
-
Read-only: The bean is never written to database. If
- the bean is shared, the bean state is read from database regularly.
-
-
-
Note: If you deploy CMP1 beans, you should use the default policy only
-(container-serialized), unless your beans are "read-only". In this latter
-case, you can use container-read-uncommitted.
-
-
2) Database dedicated access
-
-
JOnAS can do some data access optimization if the persistent state of an
-entity bean is accessed only by the JOnAS server. The optimization consists
-in not re-reading the bean state before starting a new transaction if the
-bean is already in memory. Indeed, as nobody else can modify the state of the
-bean on the persistent support, it is not necessary to re-read it. This may
-be specified to JOnAS by using the <shared> element
-and setting it to false. If the <shared> element is set to true, it
-means that the bean persistent state can be accessed outside the JOnAS
-Server, and then the optimization cannot be done. The default value is false
-if lock-policy is container-serialized, and true in the other cases.
-
-
3) Data pre-fetching
-
-
The <prefetch> element is a CMP2-specific option.
-The default is false. This can be set to true if it is desirable to have a
-cache managed after finder methods execution, in order to optimize further
-accesses, inside the same transaction.
-
-
Important notes:
-
-
The prefetch is not be used for methods that have no transactional
- context.
-
It is impossible to set the prefetch option if the lock policy is
- container-read-uncommitted.
-
-
-
4) Instances pooling / caching
-
-
Four elements allow specifying entity beans instances management.
-
-
- The first one, <max-cache-size>, is an integer
-value that represents the maximum number of instances in memory. The purpose
-of this value is to keep JOnAS scalable. The default value is "no limit". To
-save memory, this value should be set very low if you know that instances
-will not be reused.
-
-
- The second one, <min-pool-size>, is an integer
-value representing the number of instances that will be created in the pool
-when the bean is loaded. This will improve bean instance creation time, at
-least for the first instances. The default value is 0.
-
-
- The third one, <passivation-timeout>, allows
-tuning the entity bean instances passivation activity (saving memory by
-sending instances on the persistent support), in accordance with the previous
-persistence tuning elements. Entity bean instances are passivated at the end
-of each transaction and reactivated at the beginning of the next transaction,
-when the shared flag has been set to true. In case shared has been set to
-false, a passivation will occur only if max-cache-size has been reached. In
-the event that these instances are accessed outside a transaction, their
-state is kept in memory to improve performance. However, a passivation will
-occur in three situations:
-
-
When the bean is unloaded from the server, at least when the server is
- stopped.
-
When a transaction is started on this instance.
-
After a configurable timeout. If the bean is always accessed with no
- transaction, it may be prudent to periodically store the bean state on
- disk.
-
-
-
- The fourth one is <inactivity-timeout>: Bean
-passivation sends to persistent storage the state of the bean and removes
-from memory only the bean instance objects holding this state. All container
-objects handling bean access (remote object, interceptors ...) are kept in
-memory so that future access will work, only requiring a reload operation
-(getting the state). You may want to save more memory and completely remove
-the bean instance from memory, this may be achieved through the
-<inactivity-timeout> element. This element is used to save memory when
-a bean has not been used for a long time. After the time specified, in
-seconds, and if the bean has not been used meanwhile, all its container
-objects are removed from the server. If a client has kept a reference on a
-remote object, it will get an exception if it tries to use it.
-
-
5) Db Connections pooling
-
-
For database access, JOnAS provides a sophisticated connection pools
-management. See the Configuring
-JDBC Datasource section of the JOnAS Configuration Guide (available soon
-for the JDBC connector). Connection pooling saves the high cost of physical
-connection creation by maintaining a pool of such connections. Connection
-pools may be tuned using the following properties:
-
-
Conmaxage: number of minutes a connection can be kept
- in the pool. After this time, the connection will be closed, if
- minconpool limit has not been reached.
-
Maxopentime: Maximum time (in mn) a connection can be
- left busy. If the caller has not issued a close() during this time, the
- connection will be closed automatically.
-
Minconpool: Minimum number of connections in the pool.
- Setting a positive value here ensures that the pool size will not go
- below this limit during the datasource lifetime.
-
Maxconpool: Maximum number of connections in the pool.
- Limiting the max pool size avoids errors from the database.
-
Samplingperiod: Sampling period for JDBC monitoring.
- nb of seconds between 2 measures.
-
Maxwaittime: Maximum time (in seconds) to wait for a
- connection in case of shortage. Valid only if maxconpool has been
- set.
-
Maxwaiters: Maximum of concurrent waiters for a JDBC
- Connection. Valid only if maxconpool has been set.
-
-
-
6) PreparedStatement pooling
-
-
The JOnAS JDBC connector manages pools of JDBC PreparedStatements.
-
-
-
-
Sun, Java, and all
-Java-based trademarks are trademarks or registered trademarks of Sun
-Microsystems, Inc. in the U.S. and other countries.
-
-
diff --git a/jonas_doc/core/olddoc/howto/JonasMBeansHowTo.html b/jonas_doc/core/olddoc/howto/JonasMBeansHowTo.html
deleted file mode 100644
index b2e3f43e5a5d4b004e1ea61573d70548955a369b..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/howto/JonasMBeansHowTo.html
+++ /dev/null
@@ -1,419 +0,0 @@
-
-
-
-
-
- JOnAS and JMX, registering and manipulating MBeans
-
-
-
-
-
Howto: JOnAS and JMX, registering and manipulating MBeans
-
By Jonny Way.
-
Introduction
-
-
JMX (Java Management eXtensions) is an API for managing, among other
-things, J2EE applications. JOnAS (version 4 and above) integrates the MX4J
-open-source JMX server and registers a number of MBeans. The web-based
-JonasAdmin application acts as a JMX client, enabling viewing and
-manipulation of these MBeans.
-
-
It maybe desirable for an application to expose its own MBeans via the JMX
-server to allow application management (using, for example, MC4J). JOnAS
-currently does not provide a prebuilt method for registering MBeans with its
-JMX server. The intent of this document is to illustrate one method of registering
-application-specific MBeans with the JOnAS JMX server based on the m-let
-service.
-
-
ServletContextListener
-
-
The basic task of registering an MBean with the JOnAS JMX server is
-accomplished by the following implementation of the ServletContextListener
-interface. This implementation reads a number of MLet files, which specify the
-MBeans to be registered, and attempts to register those beans during the web
-application context initialization.
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ReflectionException;
-import javax.management.MBeanServer;
-import javax.management.MBeanException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServerFactory;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.loading.MLet;
-import javax.management.loading.MLetMBean;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextListener;
-
-import org.apache.log4j.Logger;
-
-/**
- * ServletContextListener designed to register JMX MBeans into
- * an existing JMX server when the application starts up. The
- * MBeans to be loaded are specified in the MLet files whose
- * names are given in the servlet context parameter with the name mletFiles,
- * in a semi-colon delminated list (although this is not really
- * needed as multiple mlets can be specifyed in one file, it might
- * be useful). Note that the filename are relative to the WEB-INF
- * directory of the servlet context being listened to.
- *
- * Note, that this listener should precede (in web.xml) any other that depend
- * on the MBeans being registered.
- *
- * Note that the MBean registration is sensitive to classloader issues. For
- * example, when registering the MBeans in the JMX server provided by
- * the Jonas application server any libraries required by the MBeans need
- * to be in the central lib directory (lib/ext).
- *
- *
- * @author Jonny Wray
- *
- */
-public class MBeanRegistrationListener implements ServletContextListener {
-
- private static final String MLET_DOMAIN = "MBeanRegistrationListener";
- private static final String MLET_BEAN_NAME = MLET_DOMAIN+":Name=MLet";
- private static final String MLETFILE_INITPARAM_NAME = "mletFiles";
- private static final Logger log = Logger.getLogger(MBeanRegistrationListener.class);
-
-
- private MBeanServer lookForExistingServer(){
- List mbeanServers = MBeanServerFactory.findMBeanServer(null);
- if(mbeanServers != null && mbeanServers.size() > 0){
- return (MBeanServer)mbeanServers.get(0);
- }
- return null;
- }
-
- private MBeanServer getMBeanServer(){
- MBeanServer server = lookForExistingServer();
- if(server == null){
- server = MBeanServerFactory.createMBeanServer(MLET_DOMAIN);
- }
- return server;
- }
-
-
- public void contextDestroyed(ServletContextEvent arg0) {
- log.info("Destroy event");
- // Anything that needs to be done here on deregistering of the
- // web application?
- }
-
-
- private List getMLetURLs(String filenames){
- List urls = new ArrayList();
- StringTokenizer tok =
- new StringTokenizer(filenames, ";");
- while(tok.hasMoreTokens()){
- String filename = tok.nextToken();
- URL configURL = Thread.currentThread().getContextClassLoader().getResource(filename);
- if(configURL == null){
- log.error("Cound not load MLet file resource from "+filename+" using current thread context classloader");
- }
- else{
- urls.add(configURL);
- }
- }
- return urls;
- }
-
- private List getMLetURLs(ServletContext context, String filenames){
- List urls = new ArrayList();
- StringTokenizer tok =
- new StringTokenizer(filenames, ";");
- while(tok.hasMoreTokens()){
- String filename = "/WEB-INF/"+tok.nextToken();
- URL configURL = null;
- try {
- configURL = context.getResource(filename);
- }
- catch (MalformedURLException e) {
- log.error("URL for "+filename+" is malformed", e);
- }
- if(configURL == null){
- log.error("Cound not find MLet file resource from "+filename+" in servlet context");
- }
- else{
- urls.add(configURL);
- }
- }
- return urls;
- }
-
- /**
- * Dynamically register the MBeans specified in the list
- * of MLet files (relative to /WEB-INF/) specified in servlet context parameter
- * mletFiles as a semi-colon deliminated list of file names.
- *
- * The algorithm looks for already running JMX servers and uses
- * the first it comes across. If no servers are running, then
- * it creates one.
- *
- * Note, the interface does not define any exceptions to be
- * thrown. Currently, any exceptions thrown during registration
- * are logged at error level and then ignored. This seems
- * reasonable, as these may or may not be a fatal event. In
- * this way the registration process reports its failure and
- * the application context initialization continues.
- */
- public void contextInitialized(ServletContextEvent arg0) {
- log.info("Initializing event");
- String filenames = arg0.getServletContext().getInitParameter(MLETFILE_INITPARAM_NAME);
- if(filenames != null && filenames.length() > 0){
- MBeanServer server = getMBeanServer();
- if(server != null){
- try{
- ObjectName name = new ObjectName(MLET_BEAN_NAME);
- if(!server.isRegistered(name)){
- log.info("Creating new MLetMBean for dynamic registration");
- MLetMBean mletService = new MLet();
- server.registerMBean(mletService, name);
- }
- List urls = getMLetURLs(arg0.getServletContext(), filenames);
- for(int i=0;i < urls.size();i++){
- URL url = (URL)urls.get(i);
- try {
- log.info("Registering MBeans from MLet file "+url);
- Set loadedMBeans = (Set)server.invoke(name, "getMBeansFromURL",
- new Object[]{url}, new String[]{URL.class.getName()});
-
- processRegisteredMBeans(loadedMBeans);
- }
- catch (InstanceNotFoundException e) {
- log.error("Unable to register MBeans from MLet file "+url, e);
- }
- catch (MBeanException e) {
- log.error("Unable to register MBeans from MLet file "+url, e);
- }
- catch (ReflectionException e) {
- log.error("Unable to register MBeans from MLet file "+url, e);
- }
- }
- }
- catch(MalformedObjectNameException e){
- log.error("Unable to register the MLetMBean", e);
- }
- catch(NotCompliantMBeanException e){
- log.error("Unable to register the MLetMBean", e);
- }
- catch(MBeanRegistrationException e){
- log.error("Unable to register the MLetMBean", e);
- }
- catch(InstanceAlreadyExistsException e){
- log.error("Unable to register the MLetMBean", e);
- }
- }
- else{
- log.error("MBeanServer not found and could not be created. Not registering MBeans.");
- }
- }
- else{
- log.error("No mletFiles servlet context parameter found.");
- }
- }
-
- private void processRegisteredMBeans(Set loadedMBeans) {
- log.debug("Loaded beans: "+loadedMBeans.size());
- Iterator it = loadedMBeans.iterator();
- while(it.hasNext()){
- Object o = it.next();
- if(o instanceof ObjectInstance){
- ObjectInstance inst = (ObjectInstance)o;
- log.info("Registered: "+inst.getObjectName());
- }
- else if(o instanceof Throwable){
- Throwable err = (Throwable)o;
- log.error("Error registering MBeans", err);
- }
- }
- }
-
-}
-
-
-
-
Configuration
-
-
In order to use the above ServletContextListener, it must be configured
-in the web.xml of the web application that wants to register the MBeans. For
-example, the following lines added to the web.xml will result in the
-registeration of the MBeans specified in the application.mlet file under the
-WEB-INF directory. Multiple MLet files can be specified in a comma-separated
-list.
Registration of MBeans results in their construction by the JMX server. As
-such, any classes the MBean is dependent on must be available to the JMX
-server, in lib/ext.
-
-
HibernateService Extension
-
-
The Hibernate distribution provides an implementation of
-HibernateServiceMBean in the class HibernateService. In the MLet file above,
-an extension of this class is specified that allows the HibernateService to be
-configured from an external file, such as the standard hibernate.cfg.xml
-file. There are a number of situations where it is desirable to use the Hibernate mapped
-classes outside of Jonas running a JMX server. This allows the
-Hibernate mapping files and properties to be specified in one place and used in multiple
-situations. If this is not needed, then the HibernateService class can be
-used directly.
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import net.sf.hibernate.HibernateException;
-import net.sf.hibernate.jmx.HibernateService;
-
-import org.apache.commons.digester.Digester;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.xml.sax.SAXException;
-/**
- * Extension of the HibernateService class to add configuration
- * ability from a Hibernate XML configuration file.
- *
- * @author Jonny Wray
- *
- */
-public class ConfigurableHibernateService extends HibernateService {
-
- private static Log log = LogFactory.getLog(ConfigurableHibernateService.class);
-
- /**
- * Configure this HibernateService from an XML file
- *
- * @param filename The Hibernate XML configuration file, for example hibernate.cfg.xml
- * @param jndiName The JNDI name that the session factory will be registered under
- * @param datasourceName The name of the datasource used by the session factory
- * @throws HibernateException If there's a problem reading the configuration file
- */
- public ConfigurableHibernateService(String filename, String jndiName, String datasourceName)
- throws HibernateException{
-
- init(filename, jndiName, datasourceName);
- start();
- }
-
- private void init(String filename, String jndiName, String datasourceName) throws HibernateException {
- if(log.isDebugEnabled()){
- log.debug("Configuring Hibernate JMX MBean with filename "+filename+
- ", JNDI name "+jndiName+" and datasource "+datasourceName);
- }
- try{
- URL url = this.getClass().getClassLoader().getResource(filename);
- Digester mappingDigester = configureMappingDigester();
- List results = (List)mappingDigester.parse(url.openStream());
- Iterator it = results.iterator();
- while(it.hasNext()){
- StringBuffer buffer = (StringBuffer)it.next();
- addMapResource(buffer.toString());
- log.debug("Adding mapping resource "+buffer.toString());
- }
-
- Digester propertyDigester = configurePropertyDigester();
- Map resultMap = (Map)propertyDigester.parse(url.openStream());
- it = resultMap.keySet().iterator();
- while(it.hasNext()){
- String key = (String)it.next();
- String value = (String)resultMap.get(key);
- setProperty("hibernate."+key, value);
- log.debug("Adding property ("+key+","+value+")");
- }
- setJndiName(jndiName);
- setDatasource(datasourceName);
- }
- catch(IOException e){
- throw new HibernateException(e);
- }
- catch(SAXException e){
- throw new HibernateException(e);
- }
- }
-
- private Digester configureMappingDigester(){
- Digester digester = new Digester();
- digester.setClassLoader(this.getClass().getClassLoader());
- digester.setValidating(false);
- digester.addObjectCreate("hibernate-configuration/session-factory", ArrayList.class);
-
- digester.addObjectCreate("hibernate-configuration/session-factory/mapping", StringBuffer.class);
- digester.addCallMethod("hibernate-configuration/session-factory/mapping", "append", 1);
- digester.addCallParam("hibernate-configuration/session-factory/mapping", 0, "resource");
- digester.addSetNext("hibernate-configuration/session-factory/mapping", "add");
-
- return digester;
- }
-
- private Digester configurePropertyDigester(){
- Digester digester = new Digester();
- digester.setClassLoader(this.getClass().getClassLoader());
- digester.setValidating(false);
- digester.addObjectCreate("hibernate-configuration/session-factory", HashMap.class);
-
- digester.addCallMethod("hibernate-configuration/session-factory/property", "put", 2);
- digester.addCallParam("hibernate-configuration/session-factory/property", 0, "name");
- digester.addCallParam("hibernate-configuration/session-factory/property", 1);
-
- return digester;
- }
-}
-
-
This document was written after integration work done with JOnAS 3.3 and
-3.3.1 and WebSphere MQ 5.3.
-
This document may be used only when working with JOnAS 3.3
-
Since JOnAS 4.8 a specific resource adaptor JCA JOnAS-MQ is available for accessing to WebSphere MQ.
-The corresponding documentation is currently being written and will be available soon.
WebSphere MQ, contrary to JORAM or SwiftMQ, cannot run collocated with
-JOnAS. WebSphere MQ is an external software which must be independently
-administered and configured.
-
-
Administering WebSphere MQ consists of the following:
-
-
Creating and configuring resources (such as queues) through the
- WebSphere MQ Explorer tool.
-
Creating the corresponding JMS objects (javax.jms.Queue,
- javax.jms.Topic, javax.jms.QueueConnectionFactory,
- etc.), and binding them to a registry.
-
-
-
The link between JOnAS and WebSphere MQ is established via the registry.
-WebSphere MQ JMS objects are bound to the JOnAS registry. JMS lookups will
-then return the WebSphere MQ JMS objects, and messaging will take place
-through these objects.
-
-
Given the complex configuration of WebSphere MQ JMS objects, it is not
-possible to create these objects from JOnAS. Therefore, during the starting
-phase, a JOnAS server expects that WebSphere MQ JMS objects have already been
-bound to the registry. Thus it is necessary to start an independent registry
-to which WebSphere MQ can bind its JMS objects, and which can also be used by
-the starting JOnAS server. The start-up sequence looks like the following:
-
-
Starting a registry.
-
Creating and binding WebSphere MQ JMS objects.
-
Launching the JOnAS server.
-
-
-
The following architecture is proposed:
-
-
A JOnAS server (e.g., called "Registry") providing only a registry.
-
A JOnAS server (e.g., called "EJB") using the registry service of
- server "Registry."
-
A WebSphere MQ server running locally.
-
-
-
Setting the JOnAS Environment
-
-
The proposed architecture requires running two JOnAS server instances. For
-this, the following steps are proposed:
-
-
Create two base directories: e.g., JONAS_REGISTRY and
- JONAS_EJB.
-
Set the JONAS_BASE environment variable so that it points to the
- JONAS_REGISTRY directory.
-
In the $JONAS_ROOT directory, type: ant create_jonasbase.
-
Set the JONAS_BASE environment variable so that it points to the
- JONAS_EJB directory.
-
In the $JONAS_ROOT directory, type: ant create_jonasbase.
-
-
-
The JOnAS servers can now be configured independently.
-
-
Configuring the "Registry" server
-
-
The "Registry" server is the JOnAS server that will host the registry
-service. Its configuration files are in JONAS_REGISTRY/conf.
-
-
In the jonas.properties files, declare only the registry and jmx
-services:
-
-
jonas.services registry,jmx
-
-
In the carol.properties file, declare the jeremie protocol:
-
-
carol.protocols=jeremie
-
-
Its port can also be configured:
-
-
carol.jeremie.url=jrmi://localhost:2000
-
-
Configuring the "EJB" server
-
-
The "EJB" server is the JOnAS server that will be used as the application
-server. Its configuration files are in JONAS_EJB/conf. Libraries
-must be added in JONAS_EJB/lib/ext.
-
-
In the jonas.properties files, set the registry service as remote:
The configuration file of the JMS administration tool must be edited so
-that the JOnAS registry is used for binding the JMS objects. This file is the
-JMSAdmin.config file located in WebSphereMQ's Java/bin
-directory. Set the factory and provider URL as follows:
The JOnAS's client.jar library must also be added to the
-classpath for WebSphere MQ.
-
-
When starting, JOnAS expects JMS objects to have been created and bound to
-the registry. Those objects are connection factories, needed for connecting
-to WebSphere MQ destinations, and destinations.
-
-
JOnAS automatically tries to access the following factories:
-
-
An XAConnectionFactory, bound with name "wsmqXACF".
-
An XAQueueConnectionFactory, bound with name "wsmqXAQCF".
-
An XATopicConnectionFactory, bound with name "wsmqXATCF".
-
A ConnectionFactory, bound with name "JCF".
-
A QueueConnectionFactory, bound with name "JQCF".
-
A TopicConnectionFactory, bound with name "JTCF".
-
-
-
If one of these objects cannot be found, JOnAS will print a message that
-looks like the following:
-
-
JmsAdminForWSMQ.start : WebSphere MQ
-XAConnectionFactory could not be retrieved from JNDI
-
-
This does not prevent JOnAS from working. However, if there is no
-connection factory available, no JMS operations will be possible from
-JOnAS.
-
-
If destinations have been declared in the jonas.properties file,
-JOnAS will also expect to find them. For example, if the following
-destinations are declared:
The server expects to find the following JMS objects in the registry:
-
-
A Queue, bound with name "sampleQueue".
-
A Topic, bound with name "sampleTopic".
-
-
-
If one of the declared destination cannot be retrieved, the following
-message appears and the server stops:
-
-
JOnAS error:
-org.objectweb.jonas.service.ServiceException : Cannot init/start service
-jms': org.objectweb.jonas.service.ServiceException : JMS Service Cannot
-create administered object: java.lang.Exception: WebSphere MQ Queue creation
-impossible from JOnAS
-
-
Contrary to connection factories, the JOnAS administration tool allows
-destinations to be created. Since it is not possible to create WebSphere MQ
-JMS objects from JOnAS, this will work only if the destinations are
-previously created and bound to the registry.
-
-
For example, if you want to create a queue named "myQueue" through the
-JonasAdmin tool, this will only work if:
-
-
A queue has been created through the WebSphere MQ Explorer tool.
-
The corresponding JMS Queue has been created and bound to the
- registry with the name "myQueue".
-
-
-
To launch WebSphere MQ administration tool, type: JMSAdmin
-
-
The following prompt appears: InitCtx>
-
-
To create a QueueConnectionFactory and binding it with name
-"JQCF", type:
-
-
InitCtx> DEF QCF(JQCF)
-
-
More parameters can be entered (for example for specifying the queue
-manager).
-
-
To create a Queue that represents a WebSphere MQ queue named
-"myWSMQqueue", and to bind it with name "sampleQueue", type:
-
-
InitCtx> DEF Q(sampleQueue)
-QUEUE(myWSMQqueue)
-
-
Objects bound in the registry can be viewed by typing:
-
-
InitCtx> DIS CTX
-
-
Starting the application
-
-
To start the registry server:
-
-
Clean the local CLASSPATH: set/export CLASSPATH="".
-
Set the JONAS_BASE variable so that it points to
- JONAS_REGISTRY.
-
Start the JOnAS server: jonas start -n Registry.
-
-
-
To administer WebSphere MQ:
-
-
In WebSphere MQ's Java/bin directory, launch the JMSAdmin
- tool: JMSAdmin.
-
Create the needed JMS objects.
-
-
-
To start the EJB server:
-
-
Clean the local CLASSPATH: set/export CLASSPATH="".
-
Set the JONAS_BASE variable so that it points to
- JONAS_EJB.
-
Start the JOnAS server: jonas start -n EJB.
-
-
-
To start an EJB client:
-
-
Add in the jclient classpath the ibm.com.mq.jar and
- ibm.com.mqjms.jar libraries.
-
Launch the client: jclient ...
-
-
-
Limitations
-
-
Using WebSphere MQ as JMS transport within JOnAS has some limitations, as
-compared with using JORAM or SwiftMQ.
-
-
First of all, WebSphere MQ is compliant with the old 1.0.2b JMS
-specifications. Code that is written following the JMS 1.1 latest spec (such
-as the jms samples provided with JOnAS) will not work with WebSphere MQ.
-
-
Depending on the WebSphere MQ distribution, JMS Publish/Subscribe may not
-be available. In this case, the message-driven bean samples provided with
-JOnAS will not work. For this reason, a specific sample is provided.
-
-
Finally, for an unknown reason, asynchronous consumption of messages
-(through message-driven beans) does not work in transactional mode. Further
-inquiry is needed to resolve this issue.
-
-
diff --git a/jonas_doc/core/olddoc/howto/Win32Service.html b/jonas_doc/core/olddoc/howto/Win32Service.html
deleted file mode 100644
index 8e846bdcbe4a036374a7190b9eb3cf7ac642a54d..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/howto/Win32Service.html
+++ /dev/null
@@ -1,261 +0,0 @@
-
-
-
-
- Execute JOnAS as WIN32 Service
-
-
-
-
-
Howto: Execute JOnAS as a WIN32 Service
-
-
This document describes the procedures necessary to run JOnAS as a system
-service on Microsoft Windows platforms. This applies starting from JOnAS
-3.3.2.
-
-
Instructions
-
-
This procedure uses ANT targets that are introduced in JOnAS 3.3.2. The
-procedure also uses the Java Service Wrapper open source project which must
-be downloaded and installed separately.
-
-
Download and Install Java Service Wrapper
-
-
Download Java
- Service Wrapper version 3.0.5 or later, and unzip the package to a
- directory in the local filesystem.
-
Set WRAPPER_HOME environment variable to the root
- directory for Java Service Wrapper.
-
For example, if the package for Wrapper version 3.0.5 is unzipped into
- c:\jsw, then SET WRAPPER_HOME=c:\jsw\wrapper_win32_3.0.5
-
-
-
-
create_win32service
-
-
Before JOnAS can be run as a WIN32 service, it is necessary to create a
-Java Service Wrapper configuration file. Prior to executing the steps in this
-section, it is necessary to create a JONAS_BASE directory as described in the
-JOnAS Configuration Guide.
-
-
Verify that JAVA_HOME is set as a system environment variable.
-
Verify that JONAS_BASE and WRAPPER_HOME environment variables are
- set.
-
Set %JONAS_ROOT% as the current directory.
-
Set environment variables required for JOnAS execution
- (see list below).
-
Execute ant [-Djonas.name=<server_name>]
- create_win32service.
-
-
-
-
The -Djonas.name=<server_name> parameter is optional. If
- not specified, the default server name is 'jonas'.
-
-
-
Environment Variables
-
-Prior to executing create_win32service it is necessary to
-set environment variables as required for JOnAS execution. The values
-of the environment variables are saved in the wrapper_ext.conf file
-as wrapper properties.
-
-
-
CLASSPATH (*)
-
JAVA_OPTS
-
JONAS_OPTS
-
TOMCAT_OPTS
-
JETTY_OPTS
-
-
-* The config_env.bat file is used to configure JDBC drivers
-in the CLASSPATH. Any changes to config_env.bat will affect the
-CLASSPATH environment variable, and therefore requires that
-the wrapper configuration be updated by running
-create_win32service.
-
-
The wrapper configuration must be updated whenever any of these
-environment variables are modified.
-Refer to the Modify JOnAS
-Configuration section for more information.
-
-
-
install_win32service
-
-
After the %JONAS_BASE% directory has been updated for use with Java
-Service Wrapper, JOnAS can be installed as a WIN32 service using the
-install_win32service ant target. Prior to installing the
-configuration as a WIN32 service, the configuration can be tested as a
-standard console application. Refer to the
-Testing configuration section for more
-information. The following steps will install the service.
-
-
Verify that JONAS_BASE and WRAPPER_HOME environment variables are
- set.
-
Set %JONAS_ROOT% as the current directory.
-
Execute ant install_win32service. As an alternative,
- the service may be installed from a DOS command window using the
- jonas ntservice install command.
-
-
-
By default, the service is configured to start automatically each time
-Windows starts. If the administrator would prefer to start the service
-manually, modify the wrapper.ntservice.starttype parameter in the
-%JONAS_BASE%\conf\wrapper.conf file. Set the value as described in the
-comments found in the wrapper.conf file.
-
-
uninstall_win32service
-
-
When it is no longer desirable to run JOnAS as a Windows service, the
-service can be uninstalled using the uninstall_win32service ant
-target.
-
-
Verify that JONAS_BASE and WRAPPER_HOME environment variables are
- set.
-
Set %JONAS_ROOT% as the current directory.
-
Verify that the service has been stopped.
-
Execute ant uninstall_win32service. As an alternative,
- the service may be uninstalled from a DOS command window using the
- jonas ntservice uninstall command.
-
-
-
Start JOnAS Service
-
-
To start the JOnAS service, open the Service Control Manager (Control
-Panel Services) window, select the JOnAS service and start the service.
-As an alternative, the service may be started from a DOS command window
-using the jonas ntservice start command.
-
-
By default, JOnAS will be started automatically each time Windows is
-started. After installing the service, it can be started manually to avoid
-the need to reboot Windows.
-
-
NOTE:
-Any environment variables referenced within either of the
-wrapper.conf and wrapper_ext.conf files must be defined as system
-environment variables.
-
-
-
Stop JOnAS Service
-
-
To stop the JOnAS service, open the Service Control Manager window, select
-the JOnAS service and stop the service. As an alternative, the service may be stopped
-from a DOS command window using the
-jonas ntservice stop command.
-
-
Status of JOnAS Service
-
-
The status of the JOnAS service may be obtained from a DOS command window using the
-jonas ntservice status command.
-
-
Files Managed by
-create_win32service
-
-
The create_win32service ant target copies files from
-the Java Service Wrapper installation directory and generates a configuration
-file in the %JONAS_BASE% directory. The following files are managed by the
-create_win32service ant target.
-
-
lib\wrapper.jar
-
lib\wrapper.dll
-
-
-
conf\wrapper.conf (*)
-
conf\wrapper_ext.conf (**)
-
-
-
* wrapper.conf contains Java Service Wrapper
-configuration properties. This file is copied to the conf directory
-by the CREATE_JONASBASE command. Changes made to this file are
-not affected by subsequent execution of the create_win32service target.
-
** wrapper_ext.conf contains Java Service Wrapper
-configuration properties specific to the JOnAS service. This file is
-generated by the create_win32service ant target. Any changes made to
-this file will be lost when the create_win32service target is
-executed.
-
-
Modify JOnAS Configuration
-
-
In addition to the files located in the conf directory, JOnAS
-configuration is affected by the contents of
-%JONAS_ROOT%\bin\nt\config_env.bat, and by the following environment variables,
-CLASSPATH, JAVA_OPTS, JONAS_OPTS, TOMCAT_OPTS, JETTY_OPTS.
-If changes are made to config_env.bat, or any of these
-environment variables, it is necessary to update the
-Java Service Wrapper configuration files.
-
-JOnAS memory usage is controlled by the -Xms and -Xms JVM arguments. Prior
-to running create_win32service, set the JAVA_OPTS environment variable with
-the desired values for -Xms and -Xmx. The create_win32service target will
-generate these values as wrapper.java.additional parameters in the
-wrapper_ext.conf file.
-
-
Update Wrapper Configuration
-
-
Stop the JOnAS service using the Windows Service Control Manager,
- or the jonas ntservice stop command line.
-
Make changes to config_env.bat, and the
- CLASSPATH, JAVA_OPTS, JONAS_OPTS, TOMCAT_OPTS, JETTY_OPTS
- environment variables as needed.
-
Update the Java Service Wrapper configuration. Refer to the create_win32service section for
- details.
-
Test the updated configuration. Refer to the Testing configuration section for more
- information.
-
Restart the JOnAS service using the Windows Service Control Manager,
- or the jonas ntservice start command line.
-
-
-
-Note: Changes to the JOnAS configuration files located in the
-%JONAS_BASE%\conf directory do not affect the contents of the
-wrapper_ext.conf file. When making changes to the files located in the
-conf directroy, it is only necessary to stop the service and restart
-the service for the changes to take effect.
-
-
-
-
Testing Configuration
-
-
After the Java Service Wrapper configuration files have been generated, it
-is possible to test the configuration in a console window before installing
-the configuration as a WIN32 service.
-
-
Verify that JONAS_BASE environment variable is set.
-
Execute jonas ntservice console.
-
-
-
The Java Service Wrapper will start as a console application and load
-JOnAS using the configuration generated by the create_win32service
-ant target.
-
-
Note that this test procedure is using environment variables that
-are set for the current user. Verify that any environment
-variables used in the wrapper.conf and/or wrapper_ext.conf files
-are also set as system environment variables.
-
-
-
Enter CTRL-C to terminate JOnAS. After pressing Ctrl-C, the
-Java Service Wrapper displays the following messages to the execution report,
-and/or log file.
-
wrapper | CTRL-C trapped. Shutting down.
-jvm 1 | 2003-12-02 15:25:20,578 : AbsJWebContainerServiceImpl.unRegisterWar
- : War /G:/w32svc/webapps/autoload/ctxroot.war no longer available
-jvm 1 | Stopping service Tomcat-JOnAS.
-wrapper | JVM exited unexpectedly while stopping the application.
-wrapper | <-- Wrapper Stopped.
Generating the JOnAS's cluster configuration with newjc
-
-
Running newjc
-
newjc is a tool included in
- JOnAS that constructs and configures the JOnAS bases (JOnAS
- instances) for the cluster. It also creates the configuration
- files needed for mod_jk.
-This tool is located under
-$JONAS_ROOT/examples/sampleCluster2/newjc.
-
newjc can be used to configure cluster configurations other than
-sampleCluster2. These configuration files are basic and can
-be edited as needed to fit site requirements.
-
newjc can customize some of the characteristics of the cluster through
-the build-jc.properties, build-db.properties, build-master.properties and jonas-newjc.properties files.
-
The default configuration is located at
-$JONAS_ROOT/examples/sampleCluster2/newjc/build-jc.properties. This
-file should not require modifications for sampleCluster2, unless there
-are port conflicts. Port assignments for sampleCluster2 are
-also summarized in
-$JONAS_ROOT/examples/sampleCluster2/PortConfiguration.txt. This
-file is for documentation only and is not used by newjc.
-
-
Running newjc to configure sampleCluster2
-
-
Before newjc is run for the first time on Linux, create
-the following directory: $HOME/jc.config/lib
-
mkdir –p $HOME/jc.config/lib
-
Run newjc.
-
cd $JONAS_ROOT/examples/sampleCluster2/newjc
-
./newjc.sh
-
Here is an example output. Script output is in gray. User inputs are black
-and bold.
-
-
-
-
Buildfile: ./build-jc.xml
-
init:
-
create_jonas_cluster:
-
[input] Choose your output directory :
-[default : ${myenv.JONAS_BASE}] :
-
/home/<user>/cluster
-
[input] Choose your prefix for the JONAS_BASE
-directories : [default : jb] :
-
jb
-
[input] Choose your protocol : [default :
-cmi] :(jrmp,jeremie,iiop,cmi,)
-
cmi
-
[input] Choose your database : [default :
-hsql] :
-
hsql
-
[input] Choose your WebContainer : [default :
-tomcat] :(tomcat,)
[input] Choose the number of web instances :
-[default : 2] :
-
2
-
[input] Choose the number of ejb instances :
-[default : 2] :
-
2
-
-
-
-
/// newjc output deleted for brevity
-
Files created by newjc will be discussed in the following
-section.
-
Note: On Windows the steps are the same, except,
-
create the folder C:\Documents and
-Settings\<user>\jc.config\lib
-
Run the newjc.cmd
-
For more information about newjc refer
-to the ObjectWeb site.
-
-
-
-Review newjc output
-
Newjc created tomcat_jk.conf
-and
-workers.properties files. For sampleCluster2 they are located in
-/home/<user>/cluster/conf/jk.
-The #Web section of build-jc.properties defines configuration
-parameters set in these files by newjc.
-tomcat_jk.conf contains apache directives supported in
-httpd.conf or apache2.conf. They are isolated in a separate file for modularity,
-then included in
-httpd.conf or apache2.conf.
-
-newjc also generated four JOnAS instances
-(JONAS_BASE) in directories jb1, jb2, jb3 and jb4 under
-/home/<user>/cluster. Configuration files are all in the conf
-directory of each JOnAS instance. The files pertinent to cluster
-are described below.
-
jb1 and jb2 are sampleCluster2 JOnAS web container instances. jb3 and jb4 are sampleCluster2 JOnAS EJB container instances.
-
newjc generated a script (jcl4sc2) for controlling the cluster (start/stop/kill).
-
-
carol.properties and jgroups-cmi.xml
-
The #Carol section of build-jc.properties defines configuration
-parameters set in the carol.propetries file and jgroups-cmi.xml by
-newjc.
-
This allows JNDI replication to support load balancing at the
-EJB level using the CMI protocol.
-
Note: The multicast address and port must be identically
-configured for all JOnAS/Tomcat instances.
-
-
jonas.properties
-
The #Services section of build-jc.properties defines
-configuration parameters set in the jonas.properties file by
-newjc.
-
-
server.xml
-
The #Web section of build-jc.properties defines some
-configuration parameters set in the server.xml file by newjc.
-In particular, a connector XML element for AJP1.3 protocol is
-defined, as well as a jvmRoute to support load balancing at the
-web level, via this connector.
-
A Cluster XML element was also added. It defines parameters for
-achieving Session replication at the web level with
-JOnAS.
Note: The jvmRoute name generated by newjc is the
-same as the name of the associated worker defined in
-worker.properties. This will ensure the Session
-affinity.
-
-
jcl4sc2 (jcl4sc2.bat)
-
These files are scripts to run the sampleCluster2 cluster on Linux and Windows.
-
-
Tell Apache about mod_jk
-
-To make apache aware of this new file, edit <prefix>/conf/httpd.conf.
-Copy and paste the following line after the Dynamic Shared Object
-(DSO) Support section.
-
-Include
-conf/jk/tomcat_jk.conf
-
Move the jk directory created by newjc under the APACHE structure:
- # Shared Memory Filename ( Only for Unix platform )
- # required by loadbalancer
- JkShmFile conf/jk/jk.shm
- # Assign specific URL to Tomcat workers
- # A mount point from a context to a Tomcat worker
- JkMount /sampleCluster2 loadbalancer
- JkMount /sampleCluster2/* loadbalancer
- # A mount point to the status worker
- JkMount /jkmanager jkstatus
- JkMount /jkmanager/* jkstatus
- # Enable the Jk manager access only from localhost
- <Location /jkmanager/>
- JkMount jkstatus
- Order deny,allow
- Deny from all
- Allow from 127.0.0.1
- </Location>
-
-
-
-
workers.properties
-
- This file should contain the list of workers first:
-
- worker.list=<a comma separated list of worker names>
- then the properties of each worker:
- worker.<worker name>.<property>=<property
- value>
-
The following is an example of a workers.properties file:
-
# List the workers' names
- worker.list=loadbalancer,jkstatus
- # ----------------
- # Second worker
- # ----------------
- worker.worker2.port=9011
- worker.worker2.host=server2
- worker.worker2.type=ajp13
- worker.worker2.lbfactor=1
- # Disable worker2 for all requests except failover
- #worker.worker2.disabled=True
- # ----------------------
- # Load Balancer worker
- # ----------------------
- worker.loadbalancer.type=lb
- worker.loadbalancer.balanced_workers=worker1,worker2
- #Specifies whether requests with session's id should be routed to the same worker
- #worker.loadbalancer.sticky_session=false
Port number of the remote Tomcat instance listening for defined protocol requests
-
host:
Host name or IP address of the backend JOnAS/Tomcat node.
- Can be set to localhost when the cluster members are collocated to a single machine.
-
type:
Type of the worker (can be one of ajp13, ajp14, jni, status or lb)
-
The status worker makes it possible to manage loadbalancing parameters and status through a web interface. In the above example, use URL http://localhost/jkmanager
-
lbfactor:
An integer number indicating how much a worker has to work
-
example:
- worker1.lbfactor = 2
- worker2.lbfactor = 1
- worker1 receives 2 times more requests than worker2
-
sticky_session:
- Round robin where the mod_jk sends the request to a server. When session replication is activated in JOnAS, the session will not be lost.
-
redirect:
worker name to use when the current worker is in error state
-
disabled:
True/False - default status of the current worker
-
The redirect/disabled parameters make it possible to define a failover configuration between 2 workers. In the above example, the lb redirects the requests to worker 2 if worker 1 is in error state. In other cases, worker 2 will not receive any requests, thus acting as a hot standby.
- This depends on the distribution being used. Here apache 2 is assumed and it is considered
- that mod_jk.so is available.
-
- # Include the user configurations:
- Include conf/jk/tomcat_jk.conf
-
-
-
-
-
Configure Tomcat
-To configure Tomcat, perform the following configuration steps for each
-Tomcat server with the right AJP port number.
-
-
Configure Tomcat for the connector AJP13. In the file conf/server.xml
- of the JOnAS installation directory, add the AJP connector related to the worker
- (if not already there):
-
<!-- Define an AJP 1.3 Connector on port 9010 -->
- <Connector
-
- port="9010" minProcessors="5"
- maxProcessors="75"
- acceptCount="10" debug="20" protocol="AJP/1.3"/>
-
-
Explanations:
-
-
port:
-
The TCP port number on which this Connector will create a server socket and await incoming connections.
-
-
-
minProcessor:
-
The minimum number of processors to start at intialization time. If not specified, this attribute is set to 5.
-
-
maxProcessor:
-
The maximum number of processors allowed.
-
-
acceptCount:
-
The maximum queue length for incoming connection requests when all possible requests processing threads are in use. Any requests received when the queue is full will be refused.
-
-
-
debug:
-
The debugging detail level of log messages generated by this component, with higher numbers creating more detailed output.
-
-
protocol:
-
This attribute must be AJP/1.3 to use the AJP handler.
Define the jvmRoute.
- In the file conf/server.xml of the JOnAS installation directory, add a
- unique route to the Catalina engine with the right worker name.
- Replace the line:
- <Engine name="Standalone" defaultHost="localhost"
- debug="0">
- with:
- <Engine jvmRoute="worker1" name="Standalone"
- defaultHost="localhost" debug="0">
-
-
Explanations:
-
name:
-
Logical name of this Engine, used in log and error messages
-
-
jvmRoute:
-
Uniquely identifies the Tomcat server to the Apache server
- Name has been specified in workers.properties
-
-
-
defaultHost:
-
Identifies the Host that will process requests directed to host names on this server
-
-
debug:
-
The level of debugging detail logged by this Engine
-
-
-
-
Note: The jvmRoute name should be the same as the name of the
- associated worker defined in workers.properties. This will ensure the
- Session affinity.
-
- Refer to the Engine Container documentation.
-
-
-
-
Configure HTTP session replication with Tomcat
-
-
-
The mod_jk is used to illustrate the Session Replication. Therefore,
- first perform the configuration steps presented in the chapter Load
- Balancing at Web level with mod_jk.
-
On the JOnAS servers, open the
- <JONAS_BASE>/conf/server.xml file and configure the
- <context> as described:
-
-
Use a browser to access the welcome page, usually index.html.
-
-
-
Ejb clustering
-
-
Note: More detailed information is available in the CMI guide .
-
-
CMI Configuration (JNDI & EJB load balancing)
-
-
In the case of EJB level clustering (CMI), the client may be either a fat
-Java client (e.g., a Swing application), or a Web application (i.e.,
-Servlets/JSPs running within JOnAS). In the second case, the JOnAS server
-running the Web client should be configured in the same way as the other
-nodes of the cluster.
-
-
In the build.properties of the application, set the protocol name to
- cmi before compilation:
- protocols.names=cmi
-
In the file $JONAS_BASE/conf/carol.properties of each server (in the directory
- $JONAS_BASE/conf) and of a fat Java client, set the protocol to cmi:
- carol.protocols=cmi
-
In the file $JONAS_BASE/conf/carol.properties of each server of the cluster, configure
- the url, the jgroups stack, the jgroups group name and the round-robin weight factor,
- etc.
-
- The following is a configuration example:
- # java.naming.provider.url property
- carol.cmi.url=cmi://localhost:2002
-
- # JGroups configuration file
- carol.cmi.jgroups.conf=jgroups-cmi.xml
-
-
- # Groupname for Javagroups
- carol.cmi.multicast.groupname=G1
-
- # Factor used for this server in weighted round robin algorithms
- carol.cmi.rr.factor=100
-
For a fat Java client, specify the list of registries available in the
- carol.properties file:
- carol.cmi.url=cmi://server1:port1[,server2:port2...]
-
-
The JGroups configuration stack is defined in the file $JONAS_BASE/conf/jgroups-cmi.xml.
- It describes the protocols list and their parameters, e.g., the UDP protocol contains
- the multicast address parameter. UDP protocol is set by default and can be changed
- dynamically.
-
-
-
-
Note 1: The multicast address and port defined in the $JONAS_BASE/conf/jgroups-cmi.xml
-and the group name defined in the $JONAS_BASE/conf/carol.properties file must be the same for all
-JOnAS nodes in the cluster.
-
-
Note 2: If Tomcat Replication associated to cmi is used, the multicast
-addresses of the two configurations must be different. Same requirement for
-the EJB high availability configuration.
-
-
Note 3: If the cluster is defined across several machines, the CMI url has to be set with the real ip
-address or ip alias and not the loopback address.Otherwise, the EJBs won't be reachable from the remote machines.
-
-
EJB high availability
-
-
This section describes how to enable the EJB replication framework (SFSB).
-
-
- 1) enable and configure the ha service in the jonas.properties file of each ejb container. For example,
-
- # Set the ha service
- jonas.services registry,jmx,jtm,db,security,resource,ejb,ws,web,ear,ha,discovery
-
- # Set the name of the implementation class of the HA service.
- jonas.service.ha.class org.objectweb.jonas.ha.HaServiceImpl
-
- # Set the group communication framework to use
- jonas.service.ha.gcl jgroups
-
- # Set the JGroups configuration file name
- jonas.service.ha.jgroups.conf jgroups-ha.xml
-
- # Set the JGroups group name
- jonas.service.ha.jgroups.groupname jonas-rep
-
- # Set the SFSB backup info timeout. The info stored in the backup node is # removed when the timer expires.
- jonas.service.ha.timeout 600
-
- # Set the datasource for the tx table
- jonas.service.ha.datasource jdbc_1
-
-
-
- 2) Create a table ha_transactions in the database related to the specified datasource for handling the transaction context. For example,
-
-
-
-
diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/c-jdbc.html b/jonas_doc/core/olddoc/howto/clusterdetails/c-jdbc.html
deleted file mode 100644
index 2b3f66fdd1f9807a23b0b7eb4403022b33786020..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/howto/clusterdetails/c-jdbc.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
- How To Setup A C-JDBC Database Cluster
-
-
-
-
How To Setup A C-JDBC Database Cluster
-Note: for further information about configuration of a RAIDB1 C-JDBC cluster, refer to the C-JDBC documentation. This configuration starts three HSQLDB instances that are formed by C-JDBC as RAIDB1. This means that the same data is stored in two different databases and one database is used as a recovery log.
-
-
- Extract the C-JDBC archive in a folder.
- tar xvfz c-jdbc-xx-bin.tar.gz
-
-
-
- Set the environment variables.
- export JAVA_HOME=<Path to JDK HOME>
- export CJDBC_HOME=<Path to the CJDBC HOME>
-
-
-
- Modify the $CJDBC_HOME/demo/demo-raidb1.sh file.
- The ports for the HSQLDB instances must be modified to
- match the sampleCluster2 configuration. Change the ports for the three databases
- to 11001, 11002, 11003.
-
-
-
-Edit the C-JDBC virtual database file: $CJDBC_HOME/config/virtualdatabase/hsqldb-raidb1.xml
-Modify the ports according to the values defined in the section above. To avoid problems in the Datasource configuration of JOnAS, you must also set a password for the user to log in (VirtualLogin element). Warning if you choose another username than default value user, modify also the vLogin attribute of ConnectionManager elements.
-
- Start the cluster (HSQLDB instances and then C-JDBC controller).
- $CJDBC_HOME/demo/demo-raidb1.sh
-
-
-
- Connect to the C-JDBC controller using the JDBC driver ($CJDBC_HOME/drivers/c-jdbc-driver.jar) and the URL:
- jdbc:cjdbc://localhost:25322/myDB with username: <user> and password: <pass>
- Use the password you set in $CJDBC_HOME/config/virtualdatabase/hsqldb-raidb1.xml file.
-
-
Sample C-JDBC DataSource configuration file to use in JOnAS:
-
-###################### C-JDBC DataSource configuration example
-#
-#####
-#DataSource configuration
-#
-#datasource.name jdbc_1
-datasource.url jdbc:cjdbc://localhost:25322/myDB
-datasource.classname org.objectweb.cjdbc.driver.Driver
-datasource.username user
-datasource.password pass
-# WARNING: you must specify the mapper of the databases used as
-# backend by C-JDBC. It is not possible to use a heterogenious c-jdbc
-# configuration here.
-datasource.mapper rdb.hsql
-
- Download the Tomcat (or Jetty) module from the ObjectWeb site.
-
-
-
-
- Download the binaries or sources for the Apache module.
- Remark: You can also download an entire distribution of Apache webserver in which the module is already included and configured.
-
-
-
-
- Configure the apache director module.
- File: $APACHE_HOME/conf/enhydra_director.conf
-
- Example configuration:
-
- <?xml version="1.0"?>
- <!DOCTYPE EnhydraDirectorConfig SYSTEM "EnhydraDirectorConfig.dtd">
- <EnhydraDirectorConfig>
- <Application prefix="/sampleCluster2/">
- <AppServer host="localhost" port="9999" weight="1" />
- <AppServer host="localhost" port="8888" weight="1" />
- </Application>
- <Status prefix="/status">
- <Restrict server="127.0.0.1" />
- <Restrict client="127.0.0.1" />
- </Status>
- </EnhydraDirectorConfig>
-
- Remark: In this configuration, the connector is configured to forward the requests for one web application (load balancing and fail over). The second (sampleCluster2 example) is running on one machine, but on different ports. Furthermore, the /status context allows you to enable, disable and change some parameters of the director configuration. The /status context is only available on the machine where director is running in this sample configuration.
-
-
-
Copy the tomcat module (tomcat-director.jar) to $CATALINA_HOME/server/lib or $JONAS_ROOT/lib/catalina/server/lib.
- Note: For the JOnAS+Tomcat package use: $JONAS_ROOT/lib/catalina/server/lib
- For a standalone Tomcat installation use: $CATALINA_HOME/server/lib
-
-
- Configure the connector in the tomcat configuration ($CATALINE_HOME/conf/server.xml).
- Example configuration:
-Add these lines to the configuration where the other connectors (AJP, ...) are defined:
-
-Using TomCat 5.0.x as servlet container
- <!-- Define a Director Connector on port 8888 -->
- <Connector className="org.enhydra.servlet.connectionMethods.EnhydraDirector.EnhydraDirectorConnectionMethod"
- port = "8888"
- threadTimeout = "300"
- clientTimeout = "30"
- sessionAffinity = "false"
- queueSize = "400"
- numThreads = "200"
- bindAddress = "(All Interfaces)"
- authKey = "(Unauthenticated)"
- />
-
-Using TomCat 5.5.x as servlet container
-<!-- Define a Director Connector on port 8888 -->
-<Connector className="org.enhydra.servlet.connectionMethods.EnhydraDirector.DirectorProtocol"
- port = "8888"
- threadTimeout = "300"
- clientTimeout = "30"
- sessionAffinity = "false"
- queueSize = "400"
- numThreads = "200"
- bindAddress = "(All Interfaces)"
- authKey = "(Unauthenticated)"
-/>
-
-Remark: The session affinity attribute is set to false because the session replication is activated in JOnAS. Otherwise, a new session is created when Director switches between the instances.
- The Director connector may coexiste with the mod_jk connector.
-
-Restart Apache.
-
-
-Restart JOnAS.
-
-
-
-
diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html b/jonas_doc/core/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html
deleted file mode 100644
index 494db8c0406a704c4313ef39b0f245304591a774..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
-
-
- Migrating from mod_jk2 to mod_jk with embedded Tomcat
-
-
-
-
Migrating from mod_jk2 to mod_jk with embedded Tomcat
-
-Note: This document shows one of several
-ways to migrate mod_jk2 settings to work
-with mod_jk instead. The mod_jk2 reference setup can be found here.
-Also, all references to jonas-server should be replaced by the hostname of
-the target machine
-for which you want to configure mod_jk.
-Replace ${JONAS_BASE} and ${APACHE_HOME} with appropriate values.
-
-
1. Edit the file $JONAS_BASE/conf/server.xml; locate and uncomment
-the
-following line:
-
- Replace the base Engine tag in which a jvmRoute
-with the standard engine is used.
- For example, comment out the line that looks similar to the
-following:
-
-
-Note: Always
-backup files like server.xml before editing.
-
-2. Now you can
-either let tomcat generate the mod_jk.conf file automatically,
- which will setup forwarding for a
-limited set of applications, or you can create a
- custom mod_jk.conf file where you can specify
-applications to forward and
- customize configuration information.
-
-Note: The
-automatically generated file cannot be customized since it is re-written
-
-every time tomcat is restarted by the user.
-
- a)
-To enable automatic generation, insert the following into the
-server.xml
-
- file nested under the base <Server> tag:
-
-
- When jonas/tomcat is restarted, there will be
- a file created under
-
-$JONAS_BASE/lib/catalina/conf/auto called mod_jk.conf.
-
-
-
-b) If you want to create a custom file, the recommendation is to place
-a file
- named
-mod_jk.conf under $JONAS_BASE/conf/jk.
-
- You can view this file as the equivalent of the
-$APACHE_HOME/conf.d/JOnAS.conf in
-
- the mod_jk2 directions; however, it is
-not a direct replacement.
-
-
- A simple mod_jk.conf file that can be used is:
-
# Load the mod_jk module if not loaded. <IfModule !mod_jk.c> LoadModule jk_module "$APACHE_HOME/modules/mod_jk.so" </IfModule>
# Specify location of worker file and log file. Worker file will follow shortly. JkWorkersFile "$JONAS_BASE/conf/jk/workers.properties" JkLogFile "$JONAS_BASE/logs/mod_jk.log"
# When and how much logging. JkLogLevel emerg
# This is a little awkward. It seems mod_jk associates applications it will # map to tomcat based on the virtual host. If for instance I wish to visit # the jonasAdmin application through http://jonas-server/jonasAdmin from another # machine and I have the following setting then the application behaves # perfectly normally, i.e, behaves as one would expect if you # were using the application directly using the appropriate port (9000). # However, if you try using http://localhost/jonasAdmin from jonas-server # without the explicit VirtualHost declaration, only the directory contents # are mapped. No processing on the tomcat is carried out, so struts based # applications will fail to work. That is the reason why we explicitly # mention both virtual hosts. <VirtualHost jonas-server> ServerName jonas-server JkMount /cmp2 ajp13 JkMount /cmp2/* ajp13 JkMount /alarm ajp13 JkMount /alarm/* ajp1 JkMount /earsample ajp13 JkMount /earsample/* ajp13 JkMount /jonasAdmin ajp13 JkMount /jonasAdmin/* ajp13 </VirtualHost>
-3. Now tell apache to use this file. Backup the
-file: $APACHE_HOME/conf/httpd.conf.
- Edit the /etc/httpd/conf/httpd.conf file and
-insert:
-
Include ${JONAS_BASE}/conf/jk/mod_jk.conf
- Note: replace ${JONAS_BASE} with
-appropriate value.
-
- Locate
-and comment out the following line in the same file:
-
-
LoadModule jk2_module modules/mod_jk2.so
-
-4.Now create
-a workers.properties file. This can be placed in
- $JONAS_BASE/conf/jk/workers.properties.
- A sample that has been used successfully is:
-
# workers.java_home should point to your Java installation. Normally # you should have a bin and lib directories beneath it. # workers.java_home=/usr/lib/jvm/java
# # You should configure your environment slash... ps=\ on NT and / on UNIX # and maybe something different elsewhere. # ps=/
# #------ DEFAULT worket list ------------------------------------------ #--------------------------------------------------------------------- # # # The workers that your plugins should create and work with # # Add 'inprocess' if you want JNI connector worker.list=ajp13 # , inprocess
# # Defining a worker named worker1 and of type worker1 # Note that the name and the type do not have to match. # worker.ajp13.port=9009 worker.ajp13.host=jonas-server worker.ajp13.type=ajp13
Once all this is completed, restart jonas followed by httpd.
-Follow that up with a quick test by visiting: http://${HOSTNAME}/jonasAdmin.
-
-You should be able to use the application as normal.
-You can now use cmp2, earsample, alarm and jonasAdmin using mod_jk
-instead.
-
2. Edit (~line 208) httpd.conf to add the loading of mod_jk2.so:
-
-# Adding jk2_module reference.
-LoadModule jk2_module modules/mod_jk2.so
-
-
-
3. Edit $APACHE_HOME/conf.d/JOnAS.conf
-with the following content:
-
-Alias /docs/jonas "$JONAS_BASE/doc/jonas-4.1.2"
-<Directory "$JONAS_BASE/doc/jonas-4.1.2">
- Options Indexes MultiViews
- AllowOverride None
- Order allow,deny
- Allow from all
-</Directory>
-
-Alias /webapps/jonas "$JONAS_BASE/webapps/jonas"
-<Directory "$JONAS_BASE/webapps/jonas">
- Options Indexes MultiViews
- AllowOverride None
- Order allow,deny
- Allow from all
-</Directory>
-
-<IfModule mod_jk2.c>
-
-<Location /earsample>
- JkUriSet group jonas
-</Location>
-
-<Location /jonasAdmin>
- JkUriSet group jonas
-</Location>
-
-<Location /cmp2>
- JkUriSet group jonas
-</Location>
-
-<Location /alarm>
- JkUriSet group jonas
-</Location>
-
-</IfModule>
-
-
-
4. Edit/create $APACHE_HOME/conf/workers2.properties
-with the following content:
-
-[logger]
-level=DEBUG
-
-
-# Shared memory handling. Needs to be set.
-[shm]
-info=Scoreboard. Required for reconfiguration and status with
-multiprocess servers
-file=$APACHE_HOME/logs/jk2.shm
-size=1048576
-debug=0
-disabled=0
-
-
-# The channel configuration shall be consistent with
-# the configuration of JOnAS in server.xml
-# port = port of the AJP (jk2) connector
-# tomcatId = jvmRoute attribute of the <Engine> element
-[channel.socket:toJonas01]
-info=channel to a JOnAS instance - tomcatId shall be identical to
-jvmRoute in the server.xml file of the JOnAS instance
-host=localhost
-port=9009
-group=jonas
-
-
-[status:status]
-info=provides info on the connecteur usage
-
-
-[uri:$/jkstatus*]
-info=get the connector usage info at /jkstatus
-group=status:status
-
-5. On the JOnAS side, edit $JONAS_BASE/conf/server.xml
-with the following content:
-
-6. Comment out all lines in $JONAS_BASE/conf/jk2.properties.
-
-7. Restart jonas and httpd services:
-
-service jonas restart; service httpd restart
-
8. Deploy cmp2.ear and alarm.ear.
-
-
9. Those apps are available at:
-
-http://<hostname>/cmp2
-http://<hostname>/earsample
-http://<hostname>/alarm
-http://<hostname>/jonasAdmin
-
-2. Now you can
-either let tomcat generate the mod_jk.conf file automatically,
- which will setup forwarding for a limited set of
-applications, or you can create a
- custom mod_jk.conf file.
- The automatically generated file cannot be
-customized since it is re-written every time
- tomcat is restarted by the user.
-a) To enable automatic generation insert the following into the
-server.xml file nested under the base <Server>
-tag:
-
- When jonas/tomcat is restarted, there will be a file
-created under $JONAS_BASE/conf/auto called mod_jk.conf.
-
-b) If you want to create a custom file, the recommendation is to place
-mod_jk.conf under $JONAS_BASE/conf/jk.
- A simple mod_jk.conf file that can be used is:
-
# Load the mod_jk module if not loaded. <IfModule !mod_jk.c> LoadModule jk_module "$APACHE_HOME/modules/mod_jk.so" </IfModule>
# Specify location of worker file and log file. Worker file will follow shortly. JkWorkersFile "$JONAS_BASE/conf/jk/workers.properties" JkLogFile "$JONAS_BASE/logs/mod_jk.log"
# When and how much logging. JkLogLevel emerg
# This is a little awkward. It seems mod_jk associates applications it will # map to tomcat based on the virtual host. If for instance I wish to visit # the jonasAdmin application through http://jonas-server/jonasAdmin from another # machine and I have the following setting then the application behaves # perfectly normally, i.e, struts kicks in as expected, form based # authentication and forwarding is done exactly as one would expect if you # were using the application directly using the appropriate port (9000). # However, if you try using http://localhost/jonasAdmin from jonas-server # without the explicit VirtualHost declaration, only the directory contents # are mapped. So we need to explicitly mention both virtual hosts. <VirtualHost jonas-server> ServerName jonas-server JkMount /olstore ajp13 JkMount /olstore/* ajp13 JkMount /jonasAdmin ajp13 JkMount /jonasAdmin/* ajp13 </VirtualHost> # ajp13 is infact the worker name used in workers.properties. <VirtualHost localhost> ServerName localhost JkMount /olstore ajp13 JkMount /olstore/* ajp13 JkMount /jonasAdmin ajp13 JkMount /jonasAdmin/* ajp13 </VirtualHost>
-
3. To tell apache to use this file, edit the
-$APACHE_HOME/conf/httpd.conf file and insert:
-
-
Include ${JONAS_BASE}/conf/jk/mod_jk.conf
-Note: Replace ${JONAS_BASE} with appropriate value.
-
4.Create
-a workers.properties file. This can be placed in
-
-
$JONAS_ROOT/conf/jk/workers.properties
-A sample that has been used successfully is:
-
# workers.java_home should point to your Java installation. Normally # you should have a bin and lib directories beneath it. # workers.java_home=/usr/lib/jvm/java
# # You should configure your environment slash... ps=\ on NT and / on UNIX # and possibly something different elsewhere. # ps=/
# #------ DEFAULT worket list ------------------------------------------ #--------------------------------------------------------------------- # # # The workers that your plugins should create and work with # # Add 'inprocess' if you want JNI connector worker.list=ajp13 # , inprocess
# # Defining a worker named worker1 and of type worker1 # Note that the name and the type do not have to match. # worker.ajp13.port=9009 worker.ajp13.host=jonas-server worker.ajp13.type=ajp13
-
-Once all this is completed, restart httpd and ensure that
-jonas/tomcat is up. You can follow that up with a quick test by visiting: http://host_name/jonasAdmin.
-You should now be able to use the application as normal.
-
-
-
diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/sequoia.html b/jonas_doc/core/olddoc/howto/clusterdetails/sequoia.html
deleted file mode 100644
index f52292b6e1a6007c0461945ff463f331cfccc7b0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/olddoc/howto/clusterdetails/sequoia.html
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-How To Setup A Sequoia Database Cluster
-
-
-
-
-
How To Setup A Sequoia Database Cluster
-
-
Sequoia is a transparent middleware solution for offering clustering, load balancing and failover services for any database. The purpose of this howto is to explain how to setup a Sequoia database cluster with JOnAS, and more precisely a RAIDB1 cluster composed of three HSQLDB databases and one Sequoia controller. This configuration allows to replicate the data in two different databases. The third database is used as recovery log. For further informaton about Sequoia and its configuration, please refer to the Sequoia documentation.
-
-
-
-
Download the Sequoia binaries from the Sequoia site.
-
-
-
-
Extract the Sequoia archive in a folder. For instance:
-tar xvfz sequoia-x.y-bin.tar.gz
-
-
-
-
Set the environment variables.
-export JAVA_HOME=<Path to JDK home>
-export SEQUOIA_HOME=<Path to the Sequoia home>
-
-
-
-
Modify the $SEQUOIA_HOME/demo/demo-raidb1.sh file.
-The ports for the HSQLDB instances must be modified to match the sampleCluster2 configuration. Change the ports for the three databases to 11001, 11002, 11003.
-
-
-
-
Modify the Sequoia virtual database file: $SEQUOIA_HOME/config/virtualdatabase/hsqldb-raidb1.xml
-Change the ports according to the values defined in the section above. To avoid problems in the Datasource configuration of JOnAS, modify also the password for the user to log in (VirtualLogin element). Warning if you choose another username than default value (user), modify also the vLogin attribute of ConnectionManager elements.
-
-
-
-
Start the cluster (HSQLDB instances and then Sequoia controller).
-$SEQUOIA_HOME/demo/demo-raidb1.sh
-
-
-
-
-
Connect to the Sequoia controller using the $SEQUOIA_HOME/drivers/sequoia-driver.jar JDBC driver and the URL:
-jdbc:sequoia://localhost:25322/myDB with username: <user> and password: <pass>
-Use the password you set in $CJDBC_HOME/config/virtualdatabase/hsqldb-raidb1.xml file.
-
-
Sample Sequoia DataSource configuration file to use in JOnAS:
-
-###################### Sequoia DataSource configuration example
-#
-#####
-DataSource configuration
-#
-datasource.name jdbc_1
-datasource.url jdbc:sequoia://localhost:25322/myDB
-datasource.classname org.continuent.sequoia.driver.Driver
-datasource.username user
-datasource.password pass
-# WARNING: you must specify the mapper of the databases used as
-# backend by Sequoia. It is not possible to use a heterogenious
-# Sequoia configuration here.
-datasource.mapper rdb.hsql
-
Download the binary version of a J2SE SDK 1.4 from the java Sun web site into the appropriate
-directory. Launch the executable file:
-
-
./j2sdk-1_<version number>-<system>.bin for Unix
-
-./j2sdk-1_<version number>-<system>.sh for Linux
- j2sdk-1_<version number>-windows-i586.exe for Windows
-
-
Set the JAVA_HOME environment variable and update the path:
-
-
export JAVA_HOME=<Installation Directory>
-PATH=$JAVA_HOME/bin:$PATH (on Windows :
-PATH=%JAVA_HOME%/bin;%PATH%)
-
-
ANT 1.6 installation
-
-
Download the binary version of Ant 1.6 from the Ant Apache web site. Untar
-or Unzip it into the appropriate directory:
-
-
tar -jxvf apache-ant-1.6.1-bin.tar.bz2
-(or unzip apache-ant-1.6.1-bin.zip)
-
-
Set the ANT_HOME environment variable and update the path:
-
-
export ANT_HOME=<Installation Directory>
-PATH=$PATH;$ANT_HOME/bin (on Windows : PATH=%ANT_HOME%/bin;%PATH%)
-
-
Download bcel-5.1.tar.gz from the Jakarta
-web site and install bcel-5.1.jar in the directory
-$ANT_HOME/lib.
-
-
JOnAS/Web Container installation
-
-
Download the binary version of JOnAS with Tomcat or Jetty from the ObjectWeb
-forge web site.
-Choose a location for the JOnAS installation.
-Be aware that if you have already installed a previous version of JOnAS in
-this location, the new installation will overwrite the existing files, thus
-customized configuration files may be lost. Therefore, it is prudent to save
-these files before starting the installation process.
-The installation process consists of untaring the downloaded file.
-Change to the directory in which JOnAS will be installed and untar this file,
-using
-the tar -zxvf jonas.tgz command. Note that this file can be
-opened with winzip on Windows.
-After installing the JOnAS product, set the following environment
-variable:
Before using JOnAS, complete the following setup activities:
-
-
If a CATALINA_HOME or CATALINA_BASE or
- JETTY_HOME environment variable has already been set, it
- should be unset. JOnAS will set these variables, without requiring any
- modifications.
-
Based on the data source being used, create a file <data
- source>.properties (templates are located in the directory
- $JONAS_ROOT/conf). Then add the data source file name
- (without the extension .properties) to the
- jonas.properties file:
- jonas.service.dbm.datasource
- <data source>
- Add the JDBC driver in $JONAS_ROOT/lib/ext or in
- $JONAS_BASE/lib/ext directory.
-
If required, configure the Mail service (for PetStore or the example
- mailsb, for example). JOnAS provides two types of mail factories:
- javax.mail.Session and
- javax.mail.internet.MimePartDataSource. Two types of files
- that can be adapted to fit your installation are located in the directory
- $JONAS_ROOT/conf: MailSession1.properties and
- MailMimePartDS1.properties. Then, in the
- jonas.properties file, define the
- jonas.service.mail.factories property:
- jonas.service.mail.factories
- MailSession1,MailMimePartDS1
-
-
-
Starting JOnAS and running some
-examples
-
-
If the Setup step has not been
-completed as described, JOnAS may not work.
-
-Use the command jonas check to verify that the
-environment is correct.
-
-
-If the environment is correct, JOnAS is
-ready to use.
-Do a jonas start, then use a browser to go http://localhost:9000/. (Modify this url
-with the appropriate hostname.)
-From the root context in which JOnAS was deployed, you can execute the
-earsample, access the JOnAS administration application, as well as perform
-other functions.
Download the binary version of J2SE SDK 1.4 from the java Sun web site into the appropriate
-directory. Launch the executable file:
-
-
./j2sdk-1_<version number>-<system>.bin for Unix
-
-./j2sdk-1_<version number>-<system>.sh for Linux
- j2sdk-1_<version number>-windows-i586.exe for Windows
-
-
Set the JAVA_HOME environment variable and update the path:
-
-
export JAVA_HOME=<Installation Directory>
-PATH=$JAVA_HOME/bin:$PATH (on Windows: PATH=%JAVA_HOME%/bin;%PATH%)
-
-
Ant 1.6 installation
-
-
Download the binary version of Ant 1.6 from the Ant Apache web site. Untar
-or Unzip it into the appropriate directory:
-
-
tar -jxvf apache-ant-1.6.x-bin.tar.bz2
-(or unzip apache-ant-1.6.x-bin.zip)
-
-
Set the ANT_HOME environment variable and update the path:
-
-
export ANT_HOME=<Installation Directory>
-PATH=$PATH;$ANT_HOME/bin (on Windows: PATH=%ANT_HOME%/bin;%PATH%)
-
-
Download bcel-5.x.tar.gz from the Jakarta
-web site and install bcel-5.x.jar in the directory
-$ANT_HOME/lib.
-
-
Tomcat 5.5.x installation
-
-
Download the binary version of Tomcat 5.5.x from the Jakarta
-Tomcat web site. Untar it into the appropriate directory:
-
-
tar -xvf jakarta-tomcat-5.5.x.tar.gz
-
-
Set the CATALINA_HOME environment variable:
-
-
export CATALINA_HOME=<Installation Directory>
-JONAS_BASE directory can be used as CATALINA_BASE: export
-CATALINA_BASE=$JONAS_BASE
-Configuration information for the Realm and users is provided at the Setup process.
-
-
Jetty 5.1.x installation
-
-
Download the binary version of Jetty 5.1.x from the
-Jetty web site. Untar it into the appropriate directory:
-
-
tar -xvf jetty-5.1.x-all.tar.gz
-
-
Set the JETTY_HOME environment variable:
-
export JETTY_HOME=<Installation Directory>
-
-
JOnAS installation
-
-
Download the binary version of JOnAS from the ObjectWeb web
-site.
-Choose a location for the JOnAS installation.
-Be aware that if you have already installed a previous version of JOnAS in
-this location, the new installation will overwrite existing files, thus
-customized configuration files may be lost. Therefore, it is prudent to save
-these files before starting the installation process.
-The installation process consists of untaring the downloaded file.
-Change to the directory in which JOnAS is to be installed and untar this
-file, using
-the tar -zxvf jonas.tgz command.
-After installing the JOnAS product, set the following environment
-variable:
Do an ant install in the JONAS_ROOT directory to
-unpack the jar files necessary to build jonas.jar and
-client.jar.
-
-
Setup
-
-
Before using JOnAS, the following setup activities must be completed:
-
-
Based on the data source being used, create a file <data
- source>.properties (templates are located in the directory
- $JONAS_ROOT/conf). Then, add the data source file name
- (without the extension .properties) to the
- jonas.properties file:
- jonas.service.dbm.datasource
- <data source>
- Add the JDBC driver in $JONAS_ROOT/lib/ext or in
- $JONAS_BASE/lib/ext directory.
-
JONAS_BASE directory can be used as CATALINA_BASE: export
- CATALINA_BASE=$JONAS_BASE so it will use the JOnAS realms.
-
If required, configure the Mail service (for PetStore or the example
- mailsb for instance). Two types of files that can be adapted to fit your
- installation are located in the directory $JONAS_ROOT/conf:
- MailSession1.properties and
- MailMimePartDS1.properties. Then, in the
- jonas.properties file, define the
- jonas.service.mail.factories property:
- jonas.service.mail.factories
- MailSession1,MailMimePartDS1
-
-
-
Compile the examples as follows:
-ant install in the directory
-$JONAS_ROOT/examples
-
-
diff --git a/jonas_doc/core/pom.xml b/jonas_doc/core/pom.xml
deleted file mode 100644
index 6b1b0f93004b0432f3c319ae053ada9be519c083..0000000000000000000000000000000000000000
--- a/jonas_doc/core/pom.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
- jonas-doc-src
- org.ow2.jonas.documentation
- 5.3.0-M8-SNAPSHOT
-
- 4.0.0
- org.ow2.jonas.documentation
- jonas-doc-en-deployment-plan
- JOnAS Documentation Source :: Core
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- src
-
-
-
-
-
- maven-antrun-plugin
- 1.4
-
-
- process-resources
-
-
-
-
-
-
- run
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/Glossary.xml b/jonas_doc/core/src/docbook/doc-en/Glossary.xml
deleted file mode 100644
index dc6a98873d066121a32ca9f380cf141ea9b76d44..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/Glossary.xml
+++ /dev/null
@@ -1,490 +0,0 @@
-
-
-
- Glossary
-
-
-
- Axis
-
-
- Java platform for creating and deploying web services
- applications
-
-
-
-
- CAROL
-
-
- Library allowing the use of different RMI implementations.
-
-
-
-
- CMI
-
-
- (Clustered Method Invocation) is the cluster protocol for high
- availability, load-balancing and fail-over
-
-
-
-
- EasyBeans
-
-
- An Open source and lightweight EJB3 container that can be embedded
- in and other
- application servers. It is an project.
-
-
-
-
- EIS
-
-
- Enterprise Information Systems
-
-
-
-
- EJB
-
-
- Enterprise JavaBeans technology is the server-side component
- architecture for the Java Platform, Enterprise Edition (Java EE). EJB
- technology enables rapid development of distributed, transactional,
- secure and portable applications based on Java technology.
-
-
-
-
- Hibernate
-
-
- A Java-based object-relational mapping and persistence
- framework.
-
-
-
-
- IIOP
-
-
- Inter-operable Internet Object Protocol. It is the CORBA RPC
- standard protocol on TCP/IP.
-
-
-
-
- JAAS
-
-
- The Java Authentication and Authorization Service is a set of APIs
- that enable services to authenticate and enforces access controls upon
- users.
-
-
-
-
- JACC
-
-
- Java Authorization Contract for Containers
-
-
-
-
- Jakarta Commons
- Logging
-
-
- Wrapper around a variety of logging API implementations.
-
-
-
-
- Java EE
-
-
- Java Platform, Enterprise Edition. A standard for developing
- portable, robust, scalable and secure server-side Java
- applications.
-
-
-
-
- JAXP
-
-
- Java API for XML Processing. Provides the validating and parsing
- capabilities for XML documents.
-
-
-
-
- JAXR
-
-
- Java API for XML Registries. Defines a standard API for Java
- platform applications to access and programmatically interact with
- different kinds of XML-based metadata registries.
-
-
-
-
- JAX-RPC
-
-
- Java APIs for XML based RPC.
-
-
-
-
- JAX-WS
-
-
- Java API for XML-based Web Services. A Java programming language
- API for creating web services.
-
-
-
-
- J2CA
-
-
- J2EE Connector Architecture is a standard for facilitating the
- integration of application servers with heterogeneous Enterprise
- Information Systems (EISs).
-
-
-
-
- J2EE
-
-
- Java 2 Platform, Enterprise Edition. A standard for developing
- portable, robust, scalable and secure server-side Java applications up
- to version 1.5 of the Java Platform.
-
-
-
-
- JDBC
-
-
- Java Database Connectivity. The JDBC API provides a call-level API
- for SQL-based database access.
-
-
-
-
- JDK
-
-
- The Java Development Kit is set of Java tools (compiler, jvm,
- library ...) for developing Java programs.
-
-
-
-
- JDO
-
-
- The Java Data Objects API is a standard interface-based Java model
- abstraction for persistence.
-
-
-
-
- Jetty
-
-
- A pure java open-source, standards-based, web server
- implementation.
-
-
-
-
- JGroups
-
-
- A toolkit for reliable multicast communication.
-
-
-
-
- JMS
-
-
- Java Message Service is a Java Message Oriented Middleware (MOM)
- API.
-
-
-
-
- JMX
-
-
- Java Management Extensions. A Java technology that supplies tools
- for managing and monitoring applications.
-
-
-
-
- JNDI
-
-
- Java Naming Directory Interface. A standard API/SPI for the
- naming
- interface.
-
-
-
-
- JORAM
-
-
- The Java Open Reliable Asynchronous Messaging is an open source
- implementation of the JMS API built on top of the ScalAgent distributed
- agent technology and hosted by .
-
-
-
-
- JORM
-
-
- Java Object Repository Mapping is an project that provides an
- adaptable persistence service.
-
-
-
-
- JOTM
-
-
- Java Open reliable Transaction Manager is an open source
- implementation of the JTA APIs hosted by .
-
-
-
-
- JPA
-
-
- Java Persistence API. A Simpler Programming Model for Entity
- Persistence.
-
-
-
-
- JSF
-
-
- JavaServer Faces is a technology that simplifies building user
- interfaces for JavaServer applications.
-
-
-
-
- JSP
-
-
- JavaServer Pages is a technology that provides a simplified, fast
- way to create dynamic web content.
-
-
-
-
- JSTL
-
-
- JavaServer Pages Standard Tag Library. An extension to the JSP
- specification that adds a tag library of JSP tags for common tasks, such
- as, XML data processing, conditional execution, loops and
- internationalization.
-
-
-
-
- JTA
-
-
- Java Transaction API. Standard Java interfaces between the
- transaction manager and the parties involved in a distributed
- transaction system: the resource manager, the application server, and
- the transactional applications.
-
-
-
-
- JRE
-
-
- Java Runtime Environment.
-
-
-
-
- JRMP
-
-
- Java Remote Method Protocol is a Java RMI standard
- protocol.
-
-
-
-
- JVM
-
-
- The Java Virtual Machine.
-
-
-
-
- JWSDL
-
-
- Java APIs for WSDL. Provides a standard set of Java APIs for
- representing, manipulating, reading and writing WSDL (Web Services
- Description Language) documents, including an extension mechanism for
- WSDL extensibility.
-
-
-
-
- Log4j
-
-
- A Java-based logging utility from the Apache Software Foundation.
- It is used primarily as a debugging tool.
-
-
-
-
- Monolog
-
-
- The
- solution for logging.
-
-
-
-
- MX4J
-
-
-
- An Open Source implementation of the Java Management Extensions
- (JMX) and of the JMX Remote API (JSR 160) specifications.
-
-
-
-
- P6Spy
-
-
- An open source Java tool that intercepts and logs all database
- statements that use JDBC.
-
-
-
-
- RMI
-
-
- Remote Method Invocation. This is the java standard specification
- for RPC technology.
-
-
-
-
- RPC
-
-
- Remote Procedure Call is a technology that allows a subroutine or
- procedure to execute in another address space.
-
-
-
-
- SAAJ
-
-
- SOAP with Attachments API for Java. Provides a standard way to
- send XML documents over the Internet from the Java platform.
-
-
-
-
- Speedo
-
-
- An open source implementation of the JDO 1.0.1 specification
- hosted by .
-
-
-
-
- Struts
-
-
- Apache Struts is an open-source framework for developing Java EE
- web applications. It uses and extends the Java Servlet API to encourage
- developers to adopt the model-view-controller architectural
- pattern.
-
-
-
-
- Tomcat
-
-
- Apache Tomcat is the servlet container that is used in the
- official Reference Implementation for the Java Servlet and JavaServer
- Pages.
-
-
-
-
- Velocity
-
-
- The Apache Velocity Engine is a free open-source templating
- engine.
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/JSR160_support.xml b/jonas_doc/core/src/docbook/doc-en/admin/JSR160_support.xml
deleted file mode 100644
index 9df122bf65b42d22ad4a019634cf3960f98b224e..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/JSR160_support.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
- JSR 160 support in JOnAS
-
-
-
-
- Target Audience and Rationale
-
-
- JOnAS provides support for remote connection to the MBean server in a standard way based on the JMX Remote API.
-
-
-
-
-
- What is JSR 160 ?
-
-
- The JSR 160 specifies the JMX Remote API which extends the JMX specification by providing a standard way to
- connect to remote JMX-enabled applications.
-
- Currently, JSR 160 has defined a mandatory connector based on RMI
- (that supports both RMI/JRMP and RMI/IIOP).
-
-
-
-
-
-
- Connector servers created by JOnAS
-
-
- JSR 160 support implies providing standard connector server objects.
- The JMX service creates at start-up one or several such objects, depending
- on the protocols configuration (defined in
- carol.properties file). To create a client connector, the
- client side needs to know the URL of the connector server. Below we
- present the URLs that can be used by the clients depending on the protocol
- they choose.
-
-
-
- Currently only 2 protocols can be used by JSR-160 connectors:
- RMI/JRMP and RMI/IIOP.
-
-
-
-
-
- Using a RMI/JRMP Connector
-
- This connector can be used if the jrmp protocol
- is set in the carol.protocols list.
-
- The client has
- to construct a JMXServiceURL using the following
- String , possibly modified according to the JOnAS-specific
- configuration:
- service:jmx:rmi:///jndi/rmi://host:port/jrmpconnector_ jonasServerName
- where host is the host on which is running the
- JOnAS server to be managed. The port number is given in the
- carol.properties file. Then, a
- JMXConnector has to be created and connected to the connector
- server using the JMX Remote API.
-
-
-
-
-
-
-
- Example 1:
-
-
-
-
- Hashtable environment = null;
- JMXServiceURL address = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://host:1099/jrmpconnector_jonas");
- JMXConnector connector = JMXConnectorFactory.newJMXConnector(address, environment);
- connector.connect(environment);
-
-
-
-
-
- Using a RMI/IIOP Connector
-
- This connector can be used if the iiop protocol
- is set in the carol.protocols list.
-
- The client code
- is similar to the JRMP case, but the String to be used to
- construct the JMXServiceURL must adhere to the following
- model: "service:jmx:iiop:///jndi/iiop://host:port/iiopconnector_
- jonasServerName"
-
-
-
-
-
-
-
- Example 2:
-
-
-
-
- Hashtable environment = null;
- JMXServiceURL address = new JMXServiceURL("service:jmx:iiop:///jndi/iiop://host:2001/iiopconnector_jonas");
- JMXConnector connector = JMXConnectorFactory.newJMXConnector(address, environment);
- connector.connect(environment);
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/admindefs.xml b/jonas_doc/core/src/docbook/doc-en/admin/admindefs.xml
deleted file mode 100644
index 0fec73195188e5e559672d7d6aaa12658ad5ddfa..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/admindefs.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
- Administration targets
-
-
- This section presents the possible targets of a JOnAS administrator.
- An administrator may act on the following targets:
-
-
-
- An individual JOnAS server.
-
-
-
- A management domain.
-
-
-
- A management cluster.
-
-
-
- The servers composing a management domain can be grouped into one ore
- more clusters. These are clustered servers. A domain may have clustered and
- un-clustered servers.
-
- Each target is identified by a unique name.
-
-
-
- A JOnAS server name is given by the value of the -n
- option used in the jonas start command (the default name is
- jonas).
-
-
-
- The domain name is given by the value of the
- domain.name environment variable (by default, a server is
- started in a domain having the server's name). See How to configure a domain
- for more details.
-
-
-
- The naming of the clusters depend on configuration parameters
- which are different for the different cluster types.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/adminfunctions.xml b/jonas_doc/core/src/docbook/doc-en/admin/adminfunctions.xml
deleted file mode 100644
index e9211915e7633b570b1f5b24ba9581c4bb556f47..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/adminfunctions.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
- Administration functions
-
-
- This section presents the operations provided to the JOnAS
- administrator.
-
- These operations depend on the management target.
-
-
- Server administration
-
- JOnAS administration mainly provides monitoring and configuration
- functions. Moreover, administrator can dynamically install/deploy/undeploy
- applications and/or resources on a running server.
-
- All the functions are proposed by the JonasAdmin application, wereas
- the jonas
- admin command supports only a part of these functions.
-
-
-
- Domain administration
-
- Domain administration is mainly based on JonasAdmin.
-
- It allows consulting the domain map (shows the servers and
- clusters in the domain) and modify this map.
-
- Moreover, monitoring of the domain is provided: shows state
- evolution of servers and clusters, and statistics on resources used by
- the different servers in the domain.
-
- Finally, dynamic install/deploy/undeploy operations are extended at
- the domain level: the applications source is the administaror server and
- operation's target may be one ore more servers and/or clusters in the
- domain.
-
-
-
- Cluster administration
-
- Administrator may create clusters, add and/or remove servers to/from
- clusters. Allowed operations depend on the cluster type.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/adminmbeans.xml b/jonas_doc/core/src/docbook/doc-en/admin/adminmbeans.xml
deleted file mode 100644
index a481b01e4d5550041973b0179a0b547603f9d745..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/adminmbeans.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
- The JOnAS MBeans
-
-
- JOnAS administration is based on the standard MBeans defined by the
- J2EE Management Specification, and on more MBeans provided by JOnAS itself
- and by components integrated integrated in JOnAS: Tomcat/Jetty server, JORAM
- platform, JMX Server, etc.
-
-
- Standard MBean
-
- All the MBeans defined by the J2EE Management Specification are
- provided by JOnAS. These MBeans respect the naming conventions and are
- registered in the JMX server embeded in any JOnAS instance.
-
-
- J2EEServer
-
- The J2EEServer MBean provides attributes and methods for the
- server management. For example, it supports resource and application
- deployment. It also provides server configuration and monitoring
- information.
-
-
-
- J2EEDomain
-
- The J2EEDomain MBean provides domain management operation support.
- Most of the exposed operations are usefull only in the case of a master
- instance.
-
-
-
-
- Other MBeans MBeans
-
- Proprietary MBeans are registered by JOnAS and by the integrated
- components in order to allow management of services or specific
- resources.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/admintools.xml b/jonas_doc/core/src/docbook/doc-en/admin/admintools.xml
deleted file mode 100644
index 53559074aa35804b9fc9afae0771b07d3a3d1edc..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/admintools.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-Administration tools
-
-
- This section presents the means offered to a JOnAS administrator to
- act on an administration target:
-
-
-
- The JOnAS commands, particulary the
-
- jonas admin
- command.
-
-
-
-
- Management applications deployed on a JOnAS server. This may by the JonasAdmin web application, or any
- custom J2EE management application based on the .
-
-
- Any generic JMX management console connected to a target
- server via a JMX Remote Connector .
-
-
-
- WebService clients using the WebService end-point exposed by the
- Management EJB
-
-
-
- Other mechanisms like ant tasks.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/adminuse.xml b/jonas_doc/core/src/docbook/doc-en/admin/adminuse.xml
deleted file mode 100644
index 7953e86e560fe786801284feb45022fe4db7289d..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/adminuse.xml
+++ /dev/null
@@ -1,299 +0,0 @@
-
-
-
- Using JonasAdmin
-
-
- Once started, JonasAdmin can administer the JOnAS server in which it
- is running. If the host server is a master, JonasAdmin can also administer
- the rest of the servers running in the domain.
-
-
-
- Running JonasAdmin
-
-
- Once the JonasAdmin application deployed on a server, the
- administration console is accessible at the URL:
- http://<hostname>:<portnumber>/jonasAdmin/ using any web
- browser.
-
- <hostname> is the name of the host where the Servlet container
- is running and <portnumber> is the http port number (default is
- 9000).
-
- After logging in, the left-hand frame in the Welcome page displays
- the management tree associated with the JOnAS server running JonasAdmin.
- The management tree's root is Domain , which allows to the
- domain management facilities in case of a master server.
-
- In the image below, JonasAdmin is running on the master server named
- jonas within a domain also named
- jonas. It is immediately apparent that
- this is a master server, as we have a Monitoring and a Deployment sub-tree
- under the Domain root node.
-
-
-
-
-
-
- ???
-
- JonasAdmin
-
-
-
-
-
-
- The management tree in this figure allows access to the following
- main management facilities:
-
-
-
- Domain administration with domain level deployment
- facilities.
-
-
-
- Current server administration
-
-
-
- Server monitoring
-
-
-
- Logging management
-
-
-
- Communication protocols management
-
-
-
- Active services presentation and configuration
-
-
-
- Dynamic deployment at the current server level
-
-
-
- Resources management
-
-
-
- Security management
-
-
-
-
-
- Joram platform administration
-
-
-
- MBeans browsing
-
-
-
-
-
-
- Server management
-
-
- Displays general information about the administered JOnAS server,
- including the JMX server and the WEB server, and provides the capability
- of listing the content of the Registry.
-
-
-
- Server monitoring
-
-
- Presents memory usage, a count of the threads created by JOnAS,
- and other monitoring information concerning managed services and
- resources.
-
-
-
-
- Logging management
-
-
- Allows the administrator to configure the JOnAS Logging system.
- Additionally, if Tomcat is used as the WEB container service
- implementation, it allows creation of new access log valves.
-
-
-
-
- Communication protocols management
-
-
- This management facility relates to the integration of Tomcat
- management in JonasAdmin. It currently presents connectors defined in
- the Tomcat configuration and allows for the creation of new HTTP, HTTPS,
- or AJP connectors. Note that the Protocols sub-tree is
- not presented if Jetty is used as the WEB container service
- implementation.
-
-
-
-
- Active services presentation and configuration
-
-
- All the active services have a corresponding sub-tree in the
- Services tree.
-
- Managing the various container services consists of presenting
- information about the components deployed in these containers. New
- components can be deployed using the dynamic deployment facilities
- presented in the next section.
-
- Similarly, the services that allow management of the different
- types of resources (DataSources, Resource Adapters and Mail resources)
- also provide information about the resources being deployed.
- Additionally, deployed resources (DataSources or MailFactories) can be
- reconfigured and their new configuration made persistent by using a
- Save button.
-
- The transaction service management allows reconfiguration
- (possibly persistent) and presents monitoring information about
- transactions managed by JOnAS.
-
-
-
-
- Dynamic deployment with JonasAdmin
-
-
- A very useful management operation is the capability of installing
- (upload), deploying, undeploying or removeing stand-alone J2EE
- components (JAR, WAR, RAR packages) or J2EE applications (EAR packages)
- in the administered server using the Deployment
- sub-tree.
-
- The administrator's task is facilitated by the display of the list
- of deployable modules, the list of deployed modules, and the capability
- of transferring modules from one list to another (which corresponds to
- deploy/undeploy operations.
-
- The deployable modules can be installed in directories specific to
- their type, for example, the deployable JARs are un-deployed JARs
- installed in JONAS_BASE/ejbjars/ directory, or in the
- JONAS_BASE/deploy directory.
-
- The Deployment sub-tree also allows a J2EE package
- to be uploaded from the local file system to the corresponding directory
- of the administered server ( install operation), and the
- opposite remove operation.
-
-
-
-
- Resources management
-
-
- The Resources sub-tree provides the capability of
- loading or creating new resources managed by the active services.
-
-
-
-
- Security management
-
-
- The Security sub-tree presents existing security
- realms and allows the creation of new realms of different types: memory,
- datasource, and ldap realms.
-
-
-
-
-
- Note regarding persistent reconfiguration facilities
-
-
- It is important to note that JOnAS and Tomcat have different
- approaches to reconfiguration persistency. In JOnAS, every
- Save operation is related to a service or a resource
- reconfiguration. For example, the administrator can reconfigure a service
- and a resource, but choose to save only the new resource configuration. In
- Tomcat, the Save operation is global to all configuration
- changes that have been performed. For example, if a new HTTP connector is
- reconfigured and a new context created for a web application, both
- configuration changes are saved when using the Save
- button.
-
-
-
-
- Domain management
-
-
- First recall that domain management functions are accessible only
- when JonasAdmin is deployed on a master server. The Domain
- tree contains only one Server sub-tree, the currently
- administered server, which is initially the server hosting
- JonasAdmin.
-
- Domain management principal function is to present the domain
- topology: list all the servers and clusters belonging to the domain. It
- also allows modification of the domain topology by adding new servers and
- clusters to the domain, removing servers and moving servers to/from
- clusters.
-
- The domain management page also presents servers that are not yet
- started but are specified as belonging to the domain in the new
- configuration file named domain.xml . Also, a server can be
- added to the domain when it has been started without having the discovery
- service enabled.
-
- An essential domain management function is that the administrator
- can switch from the master to any of the other servers in the domain.
- Currently, JonasAdmin allows only one category of global domain level
- management operation, the deployment operation. Using any
- other management operation requires switching to the server to be
- administered.
-
- Domain level deployment allows for deploying one or
- more J2EE packages (JARs, WARs, RARs or EARs), which are installed in the
- corresponding master directory (ejbjars, webaps, rars or apps), into any
- running server in the domain. A deployment operation target
- may be a server but also a cluster. The deploy operation
- may have three semantics:
-
-
-
- deploy only (create container) - which is useful when the
- package is already installed on the target server.
-
-
-
- distribute only - which means install the package in the
- target's corresponding directory
-
-
-
- distribute and (re)deploy the package, with optionally replacing
- the current package with the new one.
-
-
-
- Note that at domain level deployment the Upload and
- Remove operations are only related to the master server
- itself.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/install.xml b/jonas_doc/core/src/docbook/doc-en/admin/install.xml
deleted file mode 100644
index 17609c583223522fb971d775af6efcc621234759..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/install.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
- Installing JonasAdmin
-
-
- As with any web application, JonasAdmin requires a servlet server to be installed.
- Make sure that the web service is listed in the jonas.services property
- in the jonas.properties
- configuration file.
-
-
- Designed as a web application, JonasAdmin is packed in a WAR and installed under the
-
- JONAS_BASE/deploy/
-
- directory.
-
-
-
- Once the server started, JonasAdmin is automatically deployed if the depmonitor
- service is activated. Otherwise, JonasAdmin can be deployed manually using the
-
- jonas admin
- command.
-
-
-
- When accessing JonasAdmin, the administrator must provide identification and authentication.
- The
-
- jonas-realm.xml
-
- configuration file contains a memory realm definition named
-
- memrlm_1
-
- , which is referenced in both
-
- tomcat6-server.xml
-
- (for Tomcat) and
-
- jetty.xml
-
- (for Jetty) configuration files. The default user name (
- jonas
- ) and password (
- jonas
- ) corresponding to the
-
- admin
-
- role can be modified here.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/mejb.xml b/jonas_doc/core/src/docbook/doc-en/admin/mejb.xml
deleted file mode 100644
index 6524dbd754258d37a3d7aafd6be294f8b7ba30ab..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/mejb.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- Management EJB Component
-
-
- The MEJB is specified by the J2EE Management Specification which
- defines the J2EE Management Model.
-
- The MEJB component exposes the managed objects within the JOnAS
- platform as JMX manageable resources (MBeans). It is packed in an ejb-jar
- file installed in the JONAS_ROOT/deploy directory, and therefore it can be
- loaded at server start-up.
-
- The MEJB component is registered in JNDI under the name
- ejb/mgmt/MEJB.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/mejbaccess.xml b/jonas_doc/core/src/docbook/doc-en/admin/mejbaccess.xml
deleted file mode 100644
index cfa7be8bb5d8a3fe08f2c4c452737bf5260bdcdf..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/mejbaccess.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
- Access to the Management EJB Component
-
- Access to the MEJB provided by the distribution is now
- role secured. The client application that wants to access it must have
- one of the following roles:
-
-
-
- mejb-user
-
-
- for accessing to the read-only operation of the MEJB
-
-
-
-
- mejb-admin
-
-
- role allowing access for all operation of the MEJB
-
-
-
-
- Unauthorized access is forbidden
-
- This snippet includes all of the elements needed to specify
- security roles in the web.xml file of a web application client of
- MEJB
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Protected Area</web-resource-name>
- <!-- Define the context-relative URL(s) to be protected -->
- <url-pattern>/*</url-pattern>
- <!-- If you list http methods, only those methods are protected -->
- <http-method>DELETE</http-method>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
- <http-method>PUT</http-method>
- </web-resource-collection>
- <auth-constraint>
- <!-- Anyone with one of the listed roles may access this area -->
- <role-name>mejb-admin</role-name>
- </auth-constraint>
- </security-constraint>
-
- <!-- Default login configuration uses BASIC authentication -->
- <login-config>
- <auth-method>BASIC</auth-method>
- <realm-name>JOnAS Realm</realm-name>
- </login-config>
-
- <!-- Security roles referenced by this web application -->
- <security-role>
- <role-name>mejb-admin</role-name>
- </security-role>
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/admin/threadStackDump.xml b/jonas_doc/core/src/docbook/doc-en/admin/threadStackDump.xml
deleted file mode 100644
index 302ffa6207ed43dace1d6a8cfdd31fb3ee348cc6..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/admin/threadStackDump.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
- JOnAS thread dump feature
-
-
- The aim of JOnAS thread dump feature is to provide an access to a
- thread stack dump from the underlying JVM of a running JOnAS server for
- monitoring purpose. The thread dump access is done through a JMX connection
- to the JOnAS "J2EEServer" MBean (named such as
- "$domainname:j2eeType=J2EEServer,name=$jonasname" depending on the JOnAS
- domain and server name). This feature gathers few operations directly
- available on JOnAS server through a JMX connection to the "J2EEServer" MBean
- " or through a Flex visualization module integrated in the web-based
- JonasAdmin application.
-
-
-
- Available operations
-
-
- A set of operations is available on the remote server, it can be
- accessed by any JMX client connecting to the JOnAS J2EEServer Mbean. Here
- is a list of the available operations with an example using the
- JConsole:
-
-
-
- getThreadStackDump
-
- This operation gives the JVM thread stack dump as a string. The
- result of this operation is the same as reading the attribute
- threadStackDump.
-
-
-
- logThreadStackDump
-
- This operation logs the JVM thread stack dump in JOnAS log file
- (level:info).
-
-
-
- printThreadStackDump
-
- This operation prints the JVM thread stack dump in a given file
- on the remote server.
-
-
-
- getThreadStackDumpList
-
- This operation gives the JVM thread stack dump as a TabularData
- object. The composition of the returned object is a set of
- properties-values elements, each element representing a givean thread.
- Thus, such a structured object can be easily used in a script.
-
-
-
- For instance, the above operations can be easily tried using the
- JConsole diplaying the following interface:
-
-
-
-
-
-
- ???
-
- JonasAdmin
-
-
-
-
-
-
- Here is a result of the getThreadStackDumpList operation given by the
- JConsole. Navigation between elements is done using right and left arrows,
- each thread properties are displayed.
-
-
-
-
-
-
- ???
-
- JonasAdmin
-
-
-
-
-
-
- Please note all the above operations are also available through the
- MBeanCmd
- Dump Command
-
-
-
-
- JonasAdmin visualization module
-
-
- JonasAdmin web application provides a Flex module that lets you view
- all threads information. This module is available in the "Monitoring" node
- from the "Server JOnAS" section by clicking on the "StackDump" tab.
-
-
-
-
-
-
- ???
-
- JonasAdmin
-
-
-
-
-
-
- If JOnAs is started as a master ("jonas.master" property in the
- "jonas.properties" file is set to "true"), the thread stack dump
- visualization module is available for the current administrated server.
- Thus a master can access the thread stack dump of any server from the same
- domain through jonasAdmin stackDump visualization module by switching the
- current administrated server.
-
- The visualization module shows all threads name and id from the JVM.
- Threads can be ordered by names or ids by clicking on the header of the
- related column. A selection of one or more threads can be done by clicking
- on names or ids. Selected threads information such as priority, state or
- stacktrace appear in a column to the right.
-
- The Refresh button refreshes the
- threads list from the underlying JVM.
-
- The Select all button allows to
- select all the threads from the JVM to get the complete "stacktrace"
- information from the server.
-
- The Copy to clipboard button allows
- to copy all selected threads information in the clipboard so they could be
- pasted in a file to be kept. (Please also note that any part from the
- right column can be selected using the mouse and copied with a right
- click).
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/administration_guide.xml b/jonas_doc/core/src/docbook/doc-en/administration_guide.xml
deleted file mode 100644
index 8f1f6ba643c320ebab798b5fe0dd40c141c16129..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/administration_guide.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
- Administration Guide
-
-
-
- JOnAS Team
-
-
-
-
- Danes
-
- Adriana
-
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- March 2009
-
-
-
-
- Introduction
-
-
-
-
-
-
-
-
-
-
-
-
-
- JonasAdmin
-
-
- JonasAdmin is an administration tool providing a user friendly
- graphical console.
-
- JonasAdmin was developed using the Struts framework; it uses
- standard technologies such as Java Servlets and JavaServer Pages and
- JMX.
-
-
-
-
-
-
-
-
- The administration components
-
-
-
-
-
-
-
-
-
-
-
- JMX Remote connectors support
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/ant_tasks.xml b/jonas_doc/core/src/docbook/doc-en/ant_tasks.xml
deleted file mode 100644
index 867129bcbe45860ad62141a594462ef807f67da0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/ant_tasks.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
- Ant Tasks for JOnAS User Manual
-
-
-
- CoqPhilippe
-
-
-
- DanesAdriana
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- March 2009
-
-
-
-
- Introduction
-
-
-
-
-
-
-
- JOnAS Ant Tasks
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_ejbjar.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_ejbjar.xml
deleted file mode 100644
index 624836084a5707650fc691eb9ec9d46ec1a5bc8e..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_ejbjar.xml
+++ /dev/null
@@ -1,415 +0,0 @@
-
-ejbjar Ant Task
-
- Description
-
- The
-
- <jonas>
-
- nested element uses the
-
- GenIC
-
- -specific tool to build JOnAS-specific stubs and skeletons and construct a JAR file which may be deployed to the JOnAS Application Server. The build process will always determine if the EJB stubs/skeletons and the EJB-JAR file are up to date, and it will perform the minimum amount of work required.
-
-
- A naming convention for the EJB descriptors is most commonly used to specify the name for the completed JAR file. For example, if the EJB descriptor
-
- ejb/Account-ejb-jar.xml
-
- is located in the descriptor directory, the
-
- <jonas>
-
- element will search for a JOnAS-specific EJB descriptor file named
-
- ejb/Account-jonas-ejb-jar.xml
-
- , and a JAR file named
-
- ejb/Account.jar
-
- will be written in the destination directory. The
-
- <jonas>
-
- element can also use the JOnAS naming convention. Using the same example, the EJB descriptor can also be named
-
- ejb/Account.xml
-
- (no base name terminator here) in the descriptor directory. The
-
- <jonas>
-
- element will then search for a JOnAS-specific EJB descriptor file called
-
- ejb/jonas-Account.xml
-
- . This convention does not strictly follow the ejb-jar naming convention recommendation, but it is supported for backward compatibility with previous version of JOnAS.
-
-
- Note that when the EJB descriptors are added to the JAR file, they are automatically renamed
-
- META-INF/ejb-jar.xml
-
- and
-
- META-INF/jonas-ejb-jar.xml
-
- .
-
-
- Furthermore, this naming behaviour can be modified by specifying attributes in the ejbjar task (for example, basejarname, basenameterminator, and flatdestdir) as well as the iplanet element (for example, suffix). Refer to the appropriate documentation for more details.
-
-
- Parameters:
-
-
-
-
-
-
- Attribute
-
-
- Description
-
-
- Required
-
-
-
-
-
-
- destdir
-
-
- The base directory into which the generated JAR files will be written. Each JAR file is written in directories which correspond to their location within the "
-
- descriptordir
-
- " namespace.
-
-
- Yes
-
-
-
-
- jonasroot
-
-
- The root directory for JOnAS.
-
-
- Yes
-
-
-
-
- jonasbase
-
-
- The base directory for JOnAS. If omitted, it defaults to
-
- jonasroot.
-
-
-
- No
-
-
-
-
- classpath
-
-
- The classpath used when generating EJB stubs and skeletons. If omitted, the classpath specified in the "ejbjar" parent task will be used. If specified, the classpath elements will be prefixed to the classpath specified in the parent "ejbjar" task. A nested "classpath" elements can also be used. Note that the needed JOnAS JAR files are automatically added to the classpath.
-
-
- No
-
-
-
-
- keepgenerated
-
-
-
- true
-
- if the intermediate Java source files generated by GenIC must not be deleted. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- nofastrmic
-
-
- if
-
- true
-
- , the external RMIC compiler is used by GenIC. The default is
-
- false
-
- , which means the internal fast RMIC compiler is used.
-
-
- No
-
-
-
-
- nocompil
-
-
-
- true
-
- if the generated source files must not be compiled via the java and rmi compilers. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- novalidation
-
-
-
- true
-
- if the XML deployment descriptors must be parsed without validation. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- javac
-
-
- Java compiler to use. If omitted, it defaults to the value of
-
- build.compiler
-
- property.
-
-
- No
-
-
-
-
- javacopts
-
-
- Options to pass to the java compiler.
-
-
- No
-
-
-
-
- protocols
-
-
- Comma-separated list of protocols (chosen within jeremie, jrmp, iiop, cmi) for which stubs should be generated. Default is
-
- jrmp,jeremie
-
- .
-
-
- No
-
-
-
-
- rmicopts
-
-
- Options to pass to the rmi compiler.
-
-
- No
-
-
-
-
- verbose
-
-
- Indicates whether or not to use -verbose switch. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- additionalargs
-
-
- Add additional args to GenIC.
-
-
- No
-
-
-
-
- keepgeneric
-
-
-
- true
-
- if the generic JAR file used as input to GenIC must be retained. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- suffix
-
-
- String value appended to the JAR filename when creating each JAR. If omitted, it defaults to ".jar".
-
-
- No
-
-
-
-
- nogenic
-
-
- If this attribute is set to
-
- true
-
- , JOnAS's GenIC will not be run on the EJB JAR. Use this if you prefer to run GenIC at deployment time. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- jvmopts
-
-
- Additional args to pass to the GenIC JVM.
-
-
- No
-
-
-
-
- invokecmd
-
-
- If this attribute is set to
-
- true
-
- , GenIC will use the Javac sun class to avoid using 'javac' command line. This is useful for users getting 'java.io.Exception CreateProcess' because of too long command lines. Defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
-
-
- As noted above, the jonas element supports additional <classpath> nested elements.
-
-
- Examples
-
-
- Note :
- To avoid
-
- java.lang.OutOfMemoryError
-
- , the element
-
- jvmopts
-
- can be used to change the default memory usage.
-
-
- This example shows ejbjar being used to generate deployment jars using a JOnAS EJB container. This example requires the naming standard to be used for the deployment descriptors. Using this format creates a EJB JAR file for each variation of '*-jar.xml' that is located in the deployment descriptor directory.
-
-
- <ejbjar srcdir="${build.classes}"
- descriptordir="${descriptor.dir}">
- <jonas destdir="${deploymentjars.dir}"
- jonasroot="${jonas.root}"
- protocols="jrmp,iiop"/>
- <include name="**/*.xml"/>
- <exclude name="**/jonas-*.xml"/>
- <support dir="${build.classes}">
- <include name="**/*.class"/>
- </support>
- </ejbjar>
-
- This example shows ejbjar being used to generate a single deployment jar using a JOnAS EJB container. This example does require the deployment descriptors to use the naming standard. This creates only one ejb jar file - 'TheEJBJar.jar'.
-
-
- <ejbjar srcdir="${build.classes}"
- descriptordir="${descriptor.dir}"
- basejarname="TheEJBJar">
- <jonas destdir="${deploymentjars.dir}"
- jonasroot="${jonas.root}"
- suffix=".jar"
- protocols="${genic.protocols}"/>
- <include name="**/ejb-jar.xml"/>
- <exclude name="**/jonas-ejb-jar.xml"/>
- </ejbjar>
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_genic.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_genic.xml
deleted file mode 100644
index 128c1dc4ab829b5f458f1296c4ac5c6870cd59e2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_genic.xml
+++ /dev/null
@@ -1,443 +0,0 @@
-
-genic Ant Task
-
- Why is there a new task?
-
-
- Previous versions of the JOnAS EjbJar Ant task have some limitations, especially when you are developing webservices.
-
-
- In previous versions of JOnAS, jonas-ejb-jar constructed the JAR for you, using information gathered from the ejb-jar.xml and from the classes themselves (dependencies using BCEL). But if you have a Session Bean exposed as a webservice, you want to have more files in your archive (
-
- webservices.xml
-
- ,
-
- JAX-RPC mapping file
-
- ,
-
- WSDL
-
- + imported
-
- WSDL definitions
-
- + imported
-
- XML Schema
-
- ).
-
-
- The older task did not package these files inside the archive, and therefore, when GenIC loaded the descriptors, some dependencies were missing, causing GenIC to throw an exception.
-
-
- The solution is to let the developer create the JAR file, so that the exact content of the file can be controlled.
-
-
- The file should have at least the following content:
-
-
-
- META-INF/ejb-jar.xml
-
-
- META-INF/jonas-ejb-jar.xml
-
-
- **/*.class
-
-
-
- Notice that webservices files are optional.
-
-
- Task Attributes
-
-
- The
-
- genic
-
- task supports most attributes of the
-
- jonas-ejb-jar
-
- task.
-
-
- Differences:
-
-
-
- Removed
-
- destdir
-
- : JAR files are directly modified
-
-
- Removed
-
- classpath
-
- : classpath is now set as inner element
-
-
- Removed
-
- novalidation
-
- : validation attribute is used now
-
-
- Removed
-
- keepgeneric
-
- : not meaningful (input JAR is already specific)
-
-
- Removed
-
- suffix
-
- : not meaningful (no JAR generated)
-
-
- Removed
-
- nogenic
-
- : not meaningful (we want to run GenIC)
-
-
-
-
-
-
-
- Attribute
-
-
- Description
-
-
- Required
-
-
-
-
-
-
- jonasroot
-
-
- The root directory for JOnAS.
-
-
- Yes (Can be read from ${jonas.root} property if not set)
-
-
-
-
- jonasbase
-
-
- The base directory for JOnAS. If omitted, it defaults to
-
- jonasroot
-
- .
-
-
- No
-
-
-
-
- keepgenerated
-
-
-
- true
-
- if the intermediate Java source files generated by GenIC must not be deleted. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- nofastrmic
-
-
- if
-
- true
-
- , the external RMIC compiler is used by GenIC. The default is
-
- false
-
- , which means the internal fast RMIC compiler is used.
-
-
- No
-
-
-
-
- nocompil
-
-
-
- true
-
- if the generated source files must not be compiled via the Java and RMI compilers. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- validation
-
-
-
- true
-
- if the XML deployment descriptors must be parsed with validation. If omitted, it defaults to
-
- true
-
- .
-
-
- No
-
-
-
-
- javac
-
-
- Java compiler to use. If omitted, it defaults to the value of
-
- build.compiler
-
- property.
-
-
- No
-
-
-
-
- javacopts
-
-
- Options to pass to the Java compiler.
-
-
- No
-
-
-
-
- protocols
-
-
- Comma-separated list of protocols (chosen from jeremie, jrmp, iiop, cmi) for which stubs should be generated. Default is
-
- jrmp,jeremie
-
- .
-
-
- No
-
-
-
-
- rmicopts
-
-
- Options to pass to the RMI compiler.
-
-
- No
-
-
-
-
- verbose
-
-
- Indicates whether or not to use -verbose switch. If omitted, it defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
- additionalargs
-
-
- Add additional arguments to GenIC.
-
-
- No
-
-
-
-
- jvmopts
-
-
- Additional arguments to pass to the GenIC JVM.
-
-
- No
-
-
-
-
- jvmdebug
-
-
- Indicates whether you want to debug the forked JVM; it defaults to
-
- false
-
- . The JVM will be suspended and waiting a connection on port 12345.
-
-
- No
-
-
-
-
- invokecmd
-
-
- If this attribute is set to
-
- true
-
- , GenIC will use the Javac sun class to avoid using 'javac' command line. This is useful for users getting 'java.io.Exception CreateProcess' because of too long command lines. Defaults to
-
- false
-
- .
-
-
- No
-
-
-
-
-
-
-
-
-
-
- Nested Element
-
-
- Description
-
-
- Required
-
-
-
-
-
-
- classpath
-
-
- The additional classpath entries used when generating EJB stubs and skeletons.
-
-
- No
-
-
-
-
- fileset
-
-
- Points out the ejb-jars that will be processed by GenIC. Note that you can add as many filesets as you want (useful if your JARs are in different directories).
-
-
- Yes (at least 1)
-
-
-
-
-
-
- Example:
-
-
-
- First, define this new task:
-
-<taskdef name="genic"
- classname="org.objectweb.jonas.ant.GenICTask"
- classpath="${jonas.root}/lib/common/ow_jonas_ant.jar" />
-
-
-
- Then use it:
-
-
- Create the JAR file :
-
-
-<jar destfile="${temp.ejbjars.dir}/my-ejbjar.jar">
- <metainf dir="${etc.dir}/META-INF" />
-
- <fileset dir="${classes.dir}">
- <include name="org/objectweb/jonas/myejbjar/*.class" />
- </fileset>
-</jar>
-
-
-
- Process this JAR with the GenIC task :
-
-
-<genic keepgenerated="true"
- protocols="${protocols.names}">
-
- <fileset dir="${temp.dir}">
- <include name="ejbjars/my-ejbjar.jar" />
- </fileset>
-</genic>
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonas.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonas.xml
deleted file mode 100644
index 3b56ac4a96bf69c368e2b303a841ed9451c15565..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonas.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-jonas Ant Task
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonasbase.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonasbase.xml
deleted file mode 100644
index ae25efcd664afe0a96fc8fdf93bfd2f585cc86d3..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonasbase.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-jonasbase Ant Task
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_newjc.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_newjc.xml
deleted file mode 100644
index 3a63a08f0b2c9f285431ee3ebd5ed55b4adba606..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_newjc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-newjc Ant Task
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_property.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_property.xml
deleted file mode 100644
index 8a6020dca9c6a7f65b6d3c91716afd2ac3cd4a99..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_property.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-property Ant Task
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_serverdeploy.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_serverdeploy.xml
deleted file mode 100644
index 19254192e0378fdaa2faee2f9c0380b7dcacf0b1..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_serverdeploy.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-serverdeploy Ant Task
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_wsgen.xml b/jonas_doc/core/src/docbook/doc-en/anttasks/ant_wsgen.xml
deleted file mode 100644
index 5aaa6885180f97f7247993c395db2049116c7bf2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_wsgen.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-wsgen Ant Task
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/clustering-variables.xml b/jonas_doc/core/src/docbook/doc-en/clustering/clustering-variables.xml
deleted file mode 100644
index 94164be4c682bb27bf8ac94e070979c99e2136df..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/clustering-variables.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
- Variables used
-
- This document is an hidden document only used for defining string
- variables used elsewhere in the documentation.
-
-
- Remember that a variable MUST
- have an xml:id attribute to be referenced
- correctly.
-
-
- Logical Cluster
-
- TomcatCluster
-
- CmiCluster
-
- HaCluster
-
- JoramCluster
-
- JoramHa
-
- JkCluster
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/ejb.xml b/jonas_doc/core/src/docbook/doc-en/clustering/configuration/ejb.xml
deleted file mode 100644
index 5a86fbeb092ac7ce0f61ff1bae974c4c4f5d4879..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/ejb.xml
+++ /dev/null
@@ -1,1476 +0,0 @@
-
-
-
- EJB clustering with CMI and HA service
-
-
- Introduction
-
-
- CMI and HA service do provide the following clustering features:
-
-
-
- JNDI high availability through the registry replication and the multi-target lookup
-
-
- EJB load-balancing and fail-over through the CMI cluster proxy
-
-
- for the EJB2.1 home interface (SSB, SFSB, EB)
-
-
- for the EJB2.1 remote interface (SSB)
-
-
- for the EJB3 (SSB, SFSB)
-
-
-
-
- EJB high availability with the HA service
-
-
- for the EJB2.1 SFSB
-
-
- EJB3 support being under development
-
-
-
-
-
-
-
-
-
-
-
-
-
- CMI
-
- CMI
- is an OW2 project providing a framework to define and configure clusters of RMI objects. CMI is embedded both in JOnAS and EasyBeans projects.
-
-
-
- The main features are :
-
- Support of EJB2 and EJB3
- Definition of the cluster logic with simple POJO (policy and strategy)
- Delivery of a set of predefined policies (round robin, first available, random, ...) and strategies (weighted, local preference, ...)
- Dynamic update of the policy and strategy from the server side
- Smooth shutdown of a cluster member
- JMX management
- Separation of the control flow and the service flow
- multi-protocols support: jrmp, irmi, iiop
-
-
-
- CMI described in this section is CMI v2 available in JOnAS 5 (not in JOnAS 4).
-
-
-
-
-
-
-
-
-
-
- HA service
-
- HA service provides High Availability for the EJB. A first implementation based on the Horizontal replication is delivered for EJB2.1.
- Other solutions are under development: Terracotta based and pair replication.
-
- High Availability with Horizontal Replication
-
-
-
- Stateful session beans (EJB2.1) can be replicated since JOnAS 4.7 in order to provide high availability in the case of failures in clustered environments.
- A new service called High Availability (HA) has been included in JOnAS to provide replication mechanisms.
- JOnAS HA also requires the cluster method invocation (CMI) protocol.
-
-
- From JOnAS 4.8, a new replication algorithm based on a horizontal replication approach is available. The algorithm improves the algorithm implemented for JOnAS 4.7 with the following enhancements:
-
-
-
- Replication of SFSBs with references to EBs: The algorithm can replicate SFSBs that reference EB by means of both, local or remote interfaces.
-
-
- Transaction awareness: The algorithm is transaction aware, meaning that the state is not replicated if the transaction aborts.
-
-
- Exactly-once semantics: Each transaction is committed exactly once at the DB if the client does not fail. If the client fails, each transaction is committed at most once at the DB
-
-
-
- EJB replication Description
-
- Update-everywhere mode
-
-
- JOnAS implements an update-everywhere replication protocol according to the database replication terminology (See the J. Gray et al.'s paper ''The dangers of replication and a solution'' in proceedings of the ACM SIGMOD 96's conference, Canada). In this protocol, a client can connect to any server. When the client calls the create() method on the SFSB's Home interface, the server the client connects to is selected following a round-robin scheme. All the requests from the client to the SFSB will be processed by this server until the client calls the remove() method on the remote interface. The rest of the servers will act as backups for that client. Before sending the response to the client, the SFSB's state is sent to the backups.
-
-
- If the server fails, another server among the backups will be selected to serve the client requests, first restoring the current state of the SFSBs from the state information stored in the HA local service. From this point on, this server will receive the new client requests.
-
-
- The supported replication scenarios are shown in the following figure:
-
-
-
-
-
-
-
- OW2
- Replication scenarios in JOnAS 4.8
-
-
-
-
-
-
-
- Transaction aware fail-over
-
-
- The horizontal approach aims to guarantee that the transactions are kept consistent when a fail-over occurs. They are either aborted or restored for ensuring the exactly-once semantics. During a fail-over, the new primary uses a special table in the database for storing the transaction identifier and enabling to find out if the transaction was committed or not.
-
-
- If the transaction is aborted due to the primary failure, then the new primary will not find the transaction identifier in the special table. The request will be replayed.
-
-
- If the transaction is committed, then the new primary will find the transaction identifier, which means that the transaction was committed. The request won't be replayed; the replicated result is returned.
-
-
- Beyond the SFSB replication, the algorithm enables the building of applications (stateful or stateless) with a high level of reliability and integrity.
-
-
-
-
-
-
-
-
- Configuring an EJB farm
-
- At the server side
-
- The setting of an EJB farm is achieved by
-
- configuring the CMI service
- configuring the registry distribution
- configuring the EJB application
-
-
-
-
-
- Registry distribution (server mode)
-
- By default, CMI relies on JGroups group-communication protocol for ensuring the global registry distribution. The parameters are gathered in the:
-
-
-
- $JONAS_BASE/conf/cmi-config.xml for specifying the JGroups configuration file name and the JGroups group name.
-
-
- $JONAS_BASE/conf/jgroups-cmi.xml file for the settings of the jgroups protocol stack. By default, the JGroups configuration uses the UDP
- protocol and the multicast IP for broadcasting the registry updates. A TCP-based stack can be used in a network environment that does not allow
- the use of multicast IP or when a cluster is distributed over a WAN.
-
-
-
-
-
-
-
-
-
- For example, the jgroups-cmi.xml file may contain the following stack configuration:
-
- JGroups's configuration stack
-
-<config>
- <UDP mcast_addr="224.0.0.35"
- mcast_port="35467"
- tos="8"
- ucast_recv_buf_size="20000000"
- ucast_send_buf_size="640000"
- mcast_recv_buf_size="25000000"
- mcast_send_buf_size="640000"
- loopback="false"
- discard_incompatible_packets="true"
- max_bundle_size="64000"
- max_bundle_timeout="30"
- use_incoming_packet_handler="true"
- ip_ttl="2"
- enable_bundling="true"
- enable_diagnostics="true"
- thread_naming_pattern="cl"
-
- use_concurrent_stack="true"
-
- thread_pool.enabled="true"
- thread_pool.min_threads="1"
- thread_pool.max_threads="25"
- thread_pool.keep_alive_time="5000"
- thread_pool.queue_enabled="false"
- thread_pool.queue_max_size="100"
- thread_pool.rejection_policy="Run"
-
- oob_thread_pool.enabled="true"
- oob_thread_pool.min_threads="1"
- oob_thread_pool.max_threads="8"
- oob_thread_pool.keep_alive_time="5000"
- oob_thread_pool.queue_enabled="false"
- oob_thread_pool.queue_max_size="100"
- oob_thread_pool.rejection_policy="Run"/>
-
- <PING timeout="2000"
- num_initial_members="3"/>
- <MERGE2 max_interval="30000"
- min_interval="10000"/>
- <FD_SOCK/>
- <FD timeout="2000" max_tries="3" shun="true"/>
- <VERIFY_SUSPECT timeout="1500" />
- <BARRIER />
- <pbcast.NAKACK max_xmit_size="60000"
- use_mcast_xmit="false" gc_lag="0"
- retransmit_timeout="300,600,1200,2400,4800"
- discard_delivered_msgs="true"/>
- <UNICAST timeout="300,600,1200,2400,3600"/>
- <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
- max_bytes="400000"/>
- <VIEW_SYNC avg_send_interval="60000" />
- <pbcast.GMS print_local_addr="true" join_timeout="3000"
- join_retry_timeout="2000" shun="true" />
- <SEQUENCER/>
- <FC max_credits="20000000"
- min_threshold="0.10"/>
- <!--pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/-->
- <pbcast.STATE_TRANSFER />
- <!-- pbcast.FLUSH /-->
-</config>
-
-
-
- You can find more information about JGroups and about the stack configuration
- here.
-
-
- All the members of a cluster share the same JGroups configuration.
-
-
- If several cluster partitions are required over a single LAN,
- several JGroups configurations must be configured with different values for the following parameters:
-
-
-
- JGroups group name
-
-
- JGroups multicast address
-
-
- JGroups multicast port
-
-
-
- When a new node appears in the cluster, its registry content is synchronized automatically.
-
-
- When a node disappears, JGroups notifies the other's member of the node leaving and the registry entries related to this node are removed.
-
-
-
- Configuring an EJB application for Load-Balancing
-
- Informations must be put in the EJB meta-datas for clustering them.
- The following section gives a description of the clustering parameters of the EJBs and indicates how to
- configure the load-balancing algorithm.
- Afterwards, the different settings for EJB2 and EJB3 (specific deployment descriptor and/or annotation) are described.
-
-
-
- Overview
-
- EJB meta-data for clustering contains the following parameters:
-
-
-
-
-
- Parameter
-
- Description
-
-
-
- name
- specifies the cluster name associated with the EJB. This information is set for administration
- purpose. Default name is defaultCluster.
-
-
- pool
- describes the stubs pool configuration at the client side (one pool per EJB).
-
- max : maximum size of the pool. Default is infinite.
- max-waiters: maximum number of waiter threads. Default is infinite.
- timeout: maximum time that a thread should wait for a resource in the pool (in ms).
- Default is infinite.
-
-
-
-
- policy
- specifies the load-balancing algorithm policy (POJO) used for the EJB.
- Built-in policies are provided. The user can provide its own implementation.
-
-
- strategy
- specifies the load-balancing algorithm strategy (POJO) used for the EJB.
- Built-in strategies are provided. The user can provide its own implementation.
-
-
- properties
- Set of properties that may be passed to the policy and/or strategy.
- The parameter is optional and is reserved for an advanced use. The parameter is not used by the built-in policies
- and strategies and may be read by the user policies and/or strategies.
-
-
- replicated
- boolean indicating whether the ejb is replicated or not. Not applicable in farming.
-
-
-
-
-
-
-
-
-
- Built-in policies and strategies
-
- The following policies implementations are provided with JOnAS:
-
-
-
-
- Policy
-
- Description
-
-
-
- RoundRobin.class
- round-robin algorithm, all the node are served sequentially.
-
-
- Random.class
- random algorithm, a node is chosen randomly.
-
-
- FirstAvailable.class
- first-available algorithm, at first a server is selected randomly and then is bound.
-
-
- HASingleton.class
- HA-singleton algorithm, all the clients are bound to the same server.
-
-
-
-
-
-
-
- The policies can be pointed out with some strategies:
-
-
-
-
- Strategy
-
- Description
-
- Applicable to policy
-
-
-
-
- NoStrategy.class
- no strategy, set by default.
- All
-
-
- LocalPreference.class
- local preference, if present, a collocated server is selected.
- RoundRobin, Random, FirstAvailable
-
-
- LoadFactorWeight.class
- add a weighted load factor to the policy, for example for specifying the weighted round-robin algorithm.
- RoundRobin
-
-
- LoadFactorSort.class
- add a sorted load factor to the policy, for example for specifying the sorted round-robin algorithm.
- RoundRobin
-
-
-
-
-
-
-
- User policies and strategies
-
- CMI permits to provide its own policy and strategy. The POJO must implement CMI interfaces and
- the classes must be deployed across the cluster.
-
- User policy implementation
-
- The policy must implement the org.ow2.cmi.lb.policy.IPolicy interface:
-
-package org.ow2.cmi.lb.policy;
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-
-import org.ow2.cmi.lb.LoadBalanceable;
-import org.ow2.cmi.lb.NoLoadBalanceableException;
-import org.ow2.cmi.lb.decision.DecisionManager;
-import org.ow2.cmi.lb.strategy.IStrategy;
-
-/**
-* Interface of the policies for load-balancing.
-* @param <T> The type of object that was load-balanced
-* @author The new CMI team
-*/
-public interface IPolicy<T extends LoadBalanceable> {
-
- /**
- * Chooses a load-balanceable among the list of load-balanceables.
- * @param loadBalanceables a list of load-balanceables
- * @throws NoLoadBalanceableException if no server is available
- * @return the chosen load-balanceable
- */
- T choose(Collection<T> loadBalanceables) throws NoLoadBalanceableException;
-
- /**
- * Return a strategy to modify the behavior of this policy.
- * @return a strategy to modify the behavior of this policy
- */
- IStrategy<T> getStrategy();
-
- /**
- * Sets a strategy to modify the behavior of this policy.
- * @param strategy a strategy of load-balancing
- */
- void setStrategy(IStrategy<T> strategy);
-
- /********************** Begin of callback definitions **********************/
-
- /**
- * Returns a decision when an exception is thrown during an access to a registry
- * for a given load-balanceable.
- * @param loadBalanceable the load-balanceable that have caused the exception
- * @param thr the exception that is thrown
- * @return the decision when an exception is thrown during an access to a registry
- * for a given load-balanceable
- */
- DecisionManager<Void> onLookupException(T loadBalanceable, Throwable thr);
-
- /**
- * Returns a decision when an exception is thrown during an invocation for a given
- * load-balanceable.
- * @param method the method that was invoked
- * @param parameters the parameters of the method
- * @param loadBalanceable the load-balanceable that have caused the exception
- * @param thr the exception that is thrown
- * @return the decision when an exception is thrown during an invocation for a given
- * load-balanceable
- */
- DecisionManager<Void> onInvokeException(Method method, Object[] parameters, T loadBalanceable, Throwable thr);
-
- /**
- * Return a decision when a server is chosen and its delegate retrieved.
- * @param <ReturnType> the type of delegate
- * @param method the method that was invoked
- * @param parameters the parameters of the method
- * @param chosenValue the delegate of chosen server
- * @return the decision when the server is chosen and its delegate retrieved
- */
- <ReturnType> DecisionManager<ReturnType> onChoose(Method method, Object[] parameters, ReturnType chosenValue);
-
- /**
- * Returns a decision when the invocation of a remote method ends.
- * @param <ReturnType> the type of the returned value
- * @param method the method that was invoked
- * @param parameters the parameters of the method
- * @param loadBalanceable the load-balanceable used for the invocation
- * @param retVal the returned value
- * @return the decision when the invocation of a remote method ends
- */
- <ReturnType> DecisionManager<ReturnType> onReturn(Method method, Object[] parameters, T loadBalanceable, ReturnType retVal);
-
-}
-
-
-
- CMI provides the org.ow2.cmi.lb.policy.AbstractPolicy abstract class for simplifying
- the policies implementation. The user class can extend it and provides, at least, an implementation of the choose
- method. Example for the round-robin implementation:
-
- Round-robin policy in CMI
-
-
-package org.ow2.cmi.lb.policy;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Random;
-
-import net.jcip.annotations.ThreadSafe;
-
-import org.ow2.cmi.lb.LoadBalanceable;
-import org.ow2.cmi.lb.NoLoadBalanceableException;
-import org.ow2.cmi.lb.strategy.IStrategy;
-import org.ow2.cmi.lb.strategy.NoStrategy;
-import org.ow2.util.log.Log;
-import org.ow2.util.log.LogFactory;
-/**
- * The default load-balancing policy (Round Robin) that always chooses the next available load-balanceable.
- * @param <T> The type of objects that are load-balanced
- * @author The new CMI team
- */
-@ThreadSafe
-public final class RoundRobin<T extends LoadBalanceable> extends AbstractPolicy<T> {
-
- /**
- * Logger.
- */
- private static final Log LOGGER = LogFactory.getLog(RoundRobin.class);
-
- /**
- * Initial value of the pointer.
- */
- private static final int INITIAL_VALUE = -1;
-
- /**
- * The pointer to store the last ref.
- */
- private int pointer;
-
- /**
- * Random numbers.
- */
- private final Random rand = new Random();
-
- /**
- * Build the Round Robin policy.
- * Give to the pointer an initial value.
- */
- public RoundRobin() {
- pointer = INITIAL_VALUE;
- }
-
- /**
- * Chooses the next load-balanceable among the list of load-balanceables.
- * @param loadBalanceables the list of load-balanceables
- * @throws NoLoadBalanceableException if no server available
- * @return the chosen load-balanceable
- */
- @Override
- public synchronized T choose(final Collection<T> loadBalanceables) throws NoLoadBalanceableException{
-
- if (loadBalanceables == null || loadBalanceables.isEmpty()) {
- LOGGER.error("The given list is null or empty: " + loadBalanceables);
- throw new NoLoadBalanceableException("The given list is null or empty: " + loadBalanceables);
- }
- List<T> cmiRefsWithStrategy;
-
- IStrategy<T> strategy = getStrategy();
-
- if(strategy != null) {
- cmiRefsWithStrategy = strategy.choose(loadBalanceables);
- // If no server corresponds at this strategy, we don't use it
- if(cmiRefsWithStrategy.isEmpty()) {
- cmiRefsWithStrategy = new ArrayList<T>(loadBalanceables);
- }
- } else {
- cmiRefsWithStrategy = new ArrayList<T>(loadBalanceables);
- }
-
- int size = cmiRefsWithStrategy.size();
- if(pointer == INITIAL_VALUE){
- // The initial pointer depends on the strategy
- if(strategy != null && !(strategy instanceof NoStrategy)) {
- // Use the first element chosen by the strategy
- pointer = 0;
- } else {
- // No strategy, choose randomly the first element
- pointer = rand.nextInt(size);
- }
- } else {
- // Perhaps some servers are disappeared, in this case the pointer can out of bounds
- if(pointer >= size) {
- pointer = INITIAL_VALUE;
- }
- // Choose the next target
- pointer = (pointer + 1) % size;
- }
- return cmiRefsWithStrategy.get(pointer);
- }
-
- @Override
- public String toString() {
- return "RoundRobin[pointer: "
- + pointer + " - strategy: " + getStrategy() + "]";
- }
-
-}
-
-
-
- User strategy implementation
-
- The policy must implement the org.ow2.cmi.lb.strategy.IStrategy interface:
-
-package org.ow2.cmi.lb.strategy;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.ow2.cmi.lb.LoadBalanceable;
-
-/**
- * Interface of the load-balancing strategies.
- * A strategy allows to modify a list of load-balanceables before applying a policy to elect only one load-balanceable.
- * @param <T> The type of object that was load-balanced
- * @author The new CMI team
- */
-public interface IStrategy<T extends LoadBalanceable> {
-
- /**
- * Returns a new list of load-balanceables by modifying the given list.
- * @param loadBalanceables a list of load-balanceables
- * @return a new list of load-balanceables by modifying the given list
- */
- List<T> choose(Collection<T> loadBalanceables);
-
-}
-
-
- Local preference strategy in CMI
- Example for the local preference implementation:
-
-
-package org.ow2.cmi.lb.strategy;
-
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import net.jcip.annotations.Immutable;
-
-import org.ow2.cmi.controller.client.ClientClusterViewManager;
-import org.ow2.cmi.controller.common.ClusterViewManager;
-import org.ow2.cmi.controller.server.ServerClusterViewManager;
-import org.ow2.cmi.lb.LoadBalanceable;
-import org.ow2.cmi.reference.ServerRef;
-import org.ow2.util.log.Log;
-import org.ow2.util.log.LogFactory;
-
-/**
- * Defines a strategy that enable the local preference.
- * @param <T> The type of objects that are load-balanced
- * @author The new CMI team
- */
-@Immutable
-public final class LocalPreference<T extends LoadBalanceable> implements IStrategy<T> {
-
- /**
- * Logger.
- */
- private static final Log LOGGER = LogFactory.getLog(LocalPreference.class);
-
- /**
- * The manager of the cluster view.
- */
- private final ClusterViewManager clusterViewManager;
-
- /**
- * Constructs a strategy for load-factor.
- * @param clusterViewManager the manager of the cluster view
- */
- public LocalPreference(final ClusterViewManager clusterViewManager) {
- this.clusterViewManager = clusterViewManager;
- }
-
- /**
- * Returns a list of CMIReference that references the local servers.
- * @param cmiRefs a list of CMIReference
- * @return a list of CMIReference that references the local servers
- */
- public List<T> choose(final Collection<T> cmiRefs) {
-
- List<T> localServers = new ArrayList<T>();
-
- for(T cmiRef : cmiRefs) {
-
- // Gets the reference of server that have deployed the object
- ServerRef serverRef = cmiRef.getServerRef();
-
- // Gets its address
- InetAddress inetAddress = serverRef.getInetAddress();
-
- try {
- // Checks if the addresses match
- if(isLocal(inetAddress)) {
- // Local address: adds reference in the first position
- localServers.add(cmiRef);
- }
- } catch (SocketException e) {
- LOGGER.error("Cannot know if is local or not", e);
- throw new RuntimeException("Cannot know if is local or not", e);
- }
- }
- return localServers;
- }
-
- /**
- * Tests if an address is local.
- * @param inetAddress an address
- * @return true if the given address is local
- * @throws SocketException if an I/O error occurs
- */
- private boolean isLocal(final InetAddress inetAddress) throws SocketException {
-
- if(clusterViewManager instanceof ClientClusterViewManager) {
- if(NetworkInterface.getByInetAddress(inetAddress)!=null) {
- return true;
- }
- } else if(clusterViewManager instanceof ServerClusterViewManager) {
- if(inetAddress.equals(((ServerClusterViewManager) clusterViewManager).getInetAddress())) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public String toString() {
- return "LocalPreference";
- }
-
-}
-
-
-
-
- User policy and strategy deployment
-
- User policy and/or strategy must be deployed across all nodes of the cluster. For example, you can :
-
- package the POJO in a jar file and put it in the $JONAS_BASE/lib/ext directory
- on each cluster member.
-
- package the POJO in a jar file and put it in a repository and deploy it through
- a deployment plan.
-
-
-
-
-
-
- Setting for an EJB2 application
-
- Clustering meta-datas must be added in the deployment descriptor.
-
- The JOnAS's deployment descriptor of an EJB 2.1 (session stateless, session stateful or entity) may contain the cluster-config element
- with the following entries. Refer to for a precise information about the parameters.
-
-
-
-
- Element
- Description
-
-
-
- cluster-config/name
- cluster name
-
-
- cluster-config/pool
- pool configuration with the following sub-elements
-
- max-size
- max-waiters
- timeout
-
-
-
-
- cluster-config/policy
- load-balancing policy
-
-
- cluster-config/strategy
- load-balancing strategy
-
-
- cluster-config/properties
- parameters for a customized user load-balancing algorithm.
- Example:
-
-
-
-<cluster-config>
-...
- <properties>
- <simple-property name="prop1" value="val1" />
- <simple-property name="prop2" value="38" />
- <array-property name="prop3">
- <value>true</value>
- </array-property>
- <array-property name="prop4">
- <value>java.util.LinkedList</value>
- <value>java.util.ArrayList</value>
- </array-property>
- <array-property name="prop5">
- <value>http://carol.ow2.org</value>
- </array-property>
- </properties>
-</cluster-config>
-
-
-
-
-
-
-
-
-
- Example:
-
- EJB2.1 deployment descriptor for clustering
-
-<jonas-ejb-jar xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.objectweb.org/jonas/ns/jonas-ejb-jar_5_1.xsd">
-
- <jonas-session>
- <ejb-name>MyEjb1SLR</ejb-name>
- <jndi-name>MyEjb1Home</jndi-name>
- <min-pool-size>3</min-pool-size>
- <cluster-config>
- <name>jonas-cluster</name>
- <policy>org.ow2.cmi.lb.policy.RoundRobin</policy>
- <strategy>org.ow2.cmi.lb.strategy.LocalPreference</strategy>
- <pool>
- <max-size>10</max-size>
- <max-waiters>15</max-waiters>
- <timeout>2000</timeout>
- </pool>
- </cluster-config>
- </jonas-session>
-</jonas-ejb-jar>
-
-
-
-
- Setting for an EJB3 application
-
- Clustering meta-datas can be added either through Java annotations or in the specific deployment descriptor.
-
- Java annotations
-
- CMI provides the following annotations (Refer to the section for more information).
-
-
-
-
-
- Annotation
- Description
-
-
-
- @Cluster
- Set the cluster name and the pool stubs configuration.
- Example:
-
-@Cluster(name="test_cluster", pool=@Pool(max=2))
-
-
-
-
- @Policy
- Set the load-balancing algorithm policy.
- Example:
-
-@Policy(RoundRobin.class)
-
-
-
-
- @Strategy
- Set the load-balancing algorithm strategy.
- Example:
-
-@Strategy(LocalPreference.class)
-
-
-
-
- @Properties
- Set properties for user policies and/or strategies.
- Example:
-
-@Properties(
- simpleProperties={
- @SimpleProperty(
- name="prop1",
- value="val1"),
- @SimpleProperty(
- name="prop2",
- value="38")},
- arrayProperties={
- @ArrayProperty(
- name="prop3"
- values="true"),
- @ArrayProperty(
- name="prop4",
- values={"java.util.LinkedList",
- "java.util.ArrayList"}),
- @ArrayProperty(
- name="prop5",
- values={"http://www.ow2.org"})})
-
-
-
-
-
-
-
-
-
- The example below illustrates the use of the annotations for configuring a cluster named test_cluster.
- The round-robin algorithm is set by default.
- The complete code can be downloaded from the EasyBeans project
-
- EJB3 SSB with clustering annotations
-
-
-package org.ow2.easybeans.examples.cluster;
-
-import javax.ejb.Remote;
-import javax.ejb.Stateless;
-
-import org.ow2.cmi.annotation.Cluster;
-import org.ow2.cmi.annotation.Policy;
-import org.ow2.cmi.lb.policy.RoundRobin;
-import org.ow2.easybeans.api.bean.EasyBeansBean;
-
-@Stateless
-@Remote(ClusterRemote.class)
-@Cluster(name="test_cluster")
-@Policy(RoundRobin.class)
-public class ClusterBeanAN implements ClusterRemote {
-
- private String ezbServerDescription = null;
-
- public String getEZBServerDescription(final String msg) {
-
- if(this.ezbServerDescription == null) {
- this.ezbServerDescription =
- ((EasyBeansBean) this).getEasyBeansFactory().getContainer().getConfiguration().getEZBServer().getDescription();
- }
- System.out.println(msg);
- return this.ezbServerDescription + "\n";
- }
-}
-
-
-
-
- Specific Deployment descriptor
- The default clustering configuration can be overridden by a specific deployment descriptor.
- The file is named easybeans.xml and may contain the cluster:cluster element
- with the following entries. Refer to for a precise information about the parameters.
-
-
-
-
- Element
- Description
-
-
-
- cluster:cluster/name
- cluster name
-
-
- cluster:cluster/pool
- pool configuration with the following sub-elements
-
- max-size
- max-waiters
- timeout
-
-
-
-
- cluster:cluster/policy
- load-balancing policy
-
-
- cluster:cluster/strategy
- load-balancing strategy
-
-
- cluster:cluster/properties
- parameters for a customized user load-balancing algorithm
- Example:
-
-
-<cluster:cluster>
-...
- <properties>
- <simple-property name="prop1" value="val1" />
- <simple-property name="prop2" value="38" />
- <array-property name="prop3">
- <value>true</value>
- </array-property>
- <array-property name="prop4">
- <value>java.util.LinkedList</value>
- <value>java.util.ArrayList</value>
- </array-property>
- <array-property name="prop5">
- <value>http://carol.ow2.org</value>
- </array-property>
- </properties>
-</cluster:cluster>
-
-
-
-
-
-
-
-
- Example:
-
- EJB3 deployment descriptor for clustering
-
-<easybeans xmlns="http://org.ow2.easybeans.deployment.ejb"
- xmlns:cluster="http://org.ow2.cmi.info.mapping">
- <ejb>
- <session>
-
- <ejb-name>clusterXMLBean</ejb-name>
- <cluster:cluster name="easybeans-cmi">
- <cluster:policy>org.ow2.cmi.lb.policy.FirstAvailable</cluster:policy>
- <cluster:strategy>org.ow2.cmi.lb.strategy.LocalPreference</cluster:strategy>
- <pool>
- <max-size>10</max-size>
- <max-waiters>15</max-waiters>
- <timeout>2000</timeout>
- </pool>
- </cluster:cluster>
- </session>
- </ejb>
-</easybeans>
-
-
-
-
-
-
-
-
-
-
- At the client side
-
- EJB clustering can be transparent for the client so that a client which is connected
- to a standalone server can be switched to a clustering mode without any configuration changes.
-
-
- However either for disabling CMI and for ensuring the JNDI availability, a CMI configuration
- can be required.
-
- Configuration file location
- Depending on the type of the client, the configuration is retrieved from:
-
-
-
-
- Type of client
- Location of the configuration file
-
-
-
- Java client
- Pointed by the cmi.conf.url java property.
- Example:
-
-java -jar myclient.jar -cp<...> -Dcmi.conf.url=/tmp/cmi-config.xml
-
-
-
-
-
- JOnAS client (jclient)
- Pointed by the cmi.conf.url java property.
-
-
- Web tier client
- In $JONAS_BASE/conf/cmi-config.xml file.
-
-
-
-
-
-
-
- Disabling CMI
- If the server side is configured with CMI, by default, the CMI client will
- switch to the cluster mode and will perform a load-balancing. For administration
- purpose or application requirements as well, one may want to
- enforce the client not to use the clustering mode. There are two different settings
- for doing that:
-
-
-
-
-
- Setting
- Description and example
-
-
-
- Java property
- The cmi.disabled java property must be set to true.
-
-jclient -jar myclient.jar -Dcmi.disabled=true
-
-
-
-
-
- CMI configuration file
- The client part of the configuration file must contain the noCmi attribute set to true.
-
-<cmi xmlns="http://org.ow2.cmi.controller.common"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <client noCmi="true" />
-</cmi>
-
-
-
-
-
-
-
-
-
- Cluster view manager fail-over
- CAROL is a the JOnAS's protocol abstract layer
- and the carol.properties indicates the default protocol and the registry URL.
- The client retrieves the cluster view from the server side. By default it gets in
- touch with the server identified by the CAROL configuration.
- For ensuring high availability of the service, a list of cluster view manager URLs can be provided to the client
- through the CMI configuration file. Refer to for a precise information
- about the setting.
-
- Example:
-
-
- CMI configuration at the client side
-
-<cmi xmlns="http://org.ow2.cmi.controller.common"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
- <client noCmi="false">
- <jndi>
- <protocol name="jrmp">
- <providerUrls>
- <providerUrl>rmi://localhost:1099</providerUrl>
- <providerUrl>rmi://localhost:2001</providerUrl>
- </providerUrls>
- </protocol>
- </jndi>
- </client>
-</cmi>
-
-
- A first available policy with local preference is applied for selecting a provider URL.
- If the primary gets unavailable, a secondary is selected randomly at fail-over.
-
-
- In the case of a web tier which acts as a CMI client (CMI service with client mode), a list of provider URLs must be
- specified in the $JONAS_BASE/conf/cmi-config.xml file.
-
-
-
-
- Summary
- CMI configuration for a 2-tiers architecture (server mode)
-
-
-
-
-
-
- Use case : fits with the most use and is the default configuration. A CMI view manager is started in each node.
-
- CMI configuration for a 2-tiers architecture (client mode)
-
-
-
-
-
-
- Use case : when a local view manager is not acceptable regarding the resources consumptions or the network configuration.
-
- CMI configuration for java client
-
-
-
-
-
-
- Use case : fat EJB client.
-
-
-
-
-
- Configuring an EJB distribution
-
- The setting of an EJB distribution is achieved by
-
- configuring the CMI service
- configuring the registry distribution
-
-
-
- The EJB application doesn't need to be modified.
-
-
-
- Configuring an EJB cluster
- At the server side
-
- Configuring JOnAS for EJB Replication
-
-
- The High Availability (HA) service is required in JOnAS in order to replicate SFSBs. The HA service must be included in the list of available services in JOnAS.
- This is done in the jonas.properties file located in $JONAS_BASE/conf.
-
-
-...
-jonas.services registry,jmx,jtm,db,dbm,security,wm,wc,resource,cmi,ha,ejb2,ejb3,ws,web,ear,depmonitor
-...
-
- The HA service must also be configured in the jonas.properties file:
-
-
-
-
-
- The HA service uses JGroups as a group communication layer (GCL). JGroups behavior is specified by means of a stack of properties configured through
- an XML file (See JGroups documentation for more information: http://www.jgroups.org).
- The default configuration of the HA service uses the $JONAS_BASE/conf/jgroups-ha.xml file and the jonas-rep group name.
- The HA service can be told to use a particular stack configuration or a particular group name by modifying the following parameters:
-
-
-...
-jonas.service.ha.jgroups.conf jgroups-ha.xml
-jonas.service.ha.jgroups.groupname jonas-rep
-...
-
-
- Transaction Table Configuration
-
-
- The horizontal replication algorithm uses a database table to keep track of current running transactions.
- This table is accessed from the new elected node during fail-over to detect whether or not the current
- transaction has committed at the former local node, ensuring
- exactly-once
- semantics. The table contains only one column: the transaction identifier (txid).
-
-
- In JOnAS 4.8 this table must be created manually with the following SQL command:
-
-
-create TABLE ha_transactions (txid varchar(60));
-
- This table should be located preferably in the database used by the replicated application, but it is not mandatory. If the table is not created in the database used by the replicated application, it is necessary to configure a new datasource for the database that contains this transaction table. This datasource must be configured to use the
- serializable
- transaction isolation level.
-
-
- The database that holds the transaction table is accessed by the replication service with the JNDI name configured in jonas.properties.
-
-
-...
-jonas.service.ha.datasource tx_table_ds
-...
-
- Configuring Garbage Collection
-
- Due to the fact that the replication algorithm stores information associated with clients' transactions and that the server is not notified when a client dies, the HA service might have been storing unnecessary replication information over time. In order to automatically clean this unnecessary replication information, the HA service includes a garbage collection mechanism. It is possible to configure the number of seconds the system waits to execute this mechanism by changing the following property in the jonas.properties file:
-
-...
-jonas.service.ha.timeout 600
-...
-
- Configuring an EJB2 application for Replication
-
- jonas-ejb-jar.xml
-
-
- In order to configure an application for replication, the <cluster-replicated/> element must be added
- to the bean definition of every bean requiring high availability in the jonas-ejb-jar.xml deployment descriptor file.
- This element can have two possible values: true or false (default value).
- In addition, if the programmer wants to change the behavior of the CMI proxy (e.g., the server selection policy),
- it is possible to specify different policy implementations by means of <cluster-config/> elements.
-
-
- The following is an example description for a replicated SFSB in jonas-ejb-jar.xml file:
-
-
- EJB2.1 deployment descriptor for session replication
-
-...
-<jonas-session>
- <ejb-name>DummySFSB</ejb-name>
- <jndi-name>DummySFSB</jndi-name>
- ...
- <cluster-replicated>true</cluster-replicated>
- <cluster-config>
- <name>jonas-cluster</name>
- <policy>org.ow2.cmi.lb.policy.RoundRobin</policy>
- <strategy>org.ow2.cmi.lb.strategy.LocalPreference</strategy>
- <pool>
- <max-size>10</max-size>
- <max-waiters>15</max-waiters>
- <timeout>2000</timeout>
- </pool>
- </cluster-config>
- <is-modified-method-name>true</is-modified-method-name>
-
- </jonas-session>
-...
-
-
- The <cluster-replicated/> element can also be set in the SSB or EB for
-
-
- enabling the transaction checking mechanism ensuring the exactly-once semantic at fail-over
-
-
- supporting the EB references replication
-
-
-
-
- Note: When set in the SSB, the mechanism inhibits the load-balancing at the remote interface.
- After the home create() method call, all the requests are sent to the same instance.
-
-
- Entity Beans lock policy
-
-
- The lock policy for the Entity Beans in a replicated application must be configured as
- database
- in the jonas-ejb-jar.xml deployment descriptor file.
-
-
- The following is an example description for a replicated EB, i.e. an entity that is accessed from a replicated SFSB, in the jonas-ejb-jar.xml:
-
-
-...
-<jonas-entity>
- <ejb-name>MyEntitySLR</ejb-name>
- <jndi-name>MyEntityHome</jndi-name>
- <cluster-replicated>true</cluster-replicated>
- <shared>true</shared>
- <jdbc-mapping>
- <jndi-name>example_ds</jndi-name>
- </jdbc-mapping>
- <lock-policy>database</lock-policy>
-</jonas-entity>
-...
-
- Datasource used by the application
-
-
- The datasources used by replicated applications must be configured to use the
- serializable
- transaction isolation level.
-
-
- The following is an example for a datasource configuration file for the Postgres DBMS:
-
-
-...
-datasource.name example_ds
-datasource.url jdbc:postgresql://xxx.xxx.xxx.xxx:xxxx/database
-datasource.classname org.postgresql.Driver
-datasource.username jonas
-datasource.password
-datasource.mapper rdb.postgres
-datasource.isolationlevel serializable
-...
-
- Finally, when compiling the application that includes the replicated beans, the CMI protocol must be specified in order to generate the classes that include the replication logic.
-
-
-
-
-
- At the client side
- As for the farming, the cluster mode can be transparent for the client configuration apart for
- the expected high availability of the CMI internals service. In particular the CMI cluster view
- manager client part must be configure with a list of provider urls in order to be able to take-over
- when a server node failure occurs.
- Refer to for a precise information about the setting.
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/jms.xml b/jonas_doc/core/src/docbook/doc-en/clustering/configuration/jms.xml
deleted file mode 100644
index 6c25aa222d8f0facfdc19e03e245f511fd3231fa..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/jms.xml
+++ /dev/null
@@ -1,1256 +0,0 @@
-
-
-
- JMS cluster with JORAM
-
- Introduction
-
- Generalities about Clustering JMS
-
-
- The JMS API provides a separate domain for each messaging approach, point-to-point or publish/subscribe.
- The point-to-point domain is built around the concept of queues, senders and receivers.
- The publish/subscribe domain is built around the concept of topic, publisher and subscriber.
- Additionally it provides a unified domain with common interfaces that enable the use of queue and topic.
- This domain defines the concept of producers and consumers.
- The classic sample provided with JOnAS ($JONAS_ROOT/examples/javaee5-earsample) uses a very simple configuration (centralized)
- made of one server hosting a queue and/or a topic.
- The server is administratively configured for accepting connection requests from the anonymous user.
-
-
- JMS clustering aims to offer a solution for both the scalability and the high availability for the JMS accesses.
- This chapter gives an overview of the JORAM capabilities for clustering a JMS application in
- the context.
- The load-balancing and fail-over mechanisms are described and a user guide describing how to build such a configuration is provided.
- Further information is available in the JORAM documentation
-
- here
-
- .
-
-
- Objectives
-
-
- The following information will be presented:
-
-
-
- first, section presents the example that will be used in this section about JMS cluster.
-
-
- then, details load balancing throw cluster topic and cluster queue.
- The distributed capabilities of JORAM will be detailed as well.
-
-
- describes how to configure the JORAM HA enabling to ensure the high availability of the JORAM server.
-
-
- introduces how to build an MDB clustering architecture
- with both JOnAS and JORAM.
-
-
-
-
-
- Example
-
-
- The documentation provides an example of JMS cluster with 2 members and a MDB application.
-
-
- Getting started
-
- Install and configure two JOnAS instances (see
-
- here
-
- ). The newjc tool may be used for generating the initial configuration of the JMS cluster.
- The tool may be run with the default inputs except for the architecture (bothWebEjb) and number of nodes (2).
- Refer to for further information about the newjc tool.
-
-
- MDB application
-
-
- The MDB application is based on an example from the EasyBeans project. You can download the full source code of the application in the
-
- EasyBeans
-
- project under the example/messagedrivenbean directory.
- A user guide for compiling the example is given
-
- here
-
-
-
-
- By default, The messagedrivenbean is bound to a JMS Queue and later in the documentation we
- will see how to change it for using a Topic instead. The implementation is :
-
-package org.ow2.easybeans.examples.messagedrivenbean;
-
-import javax.ejb.ActivationConfigProperty;
-import javax.ejb.MessageDriven;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.TextMessage;
-
-@MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "SampleQueue"),
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
- }
-)
-public class MessageDrivenBean implements MessageListener {
-
- public void onMessage(final Message message) {
- String txt = "Receiving a message named '" + message + "'.";
- if (message instanceof TextMessage) {
- try {
- txt += " with the content '" + ((TextMessage) message).getText();
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- System.out.println(txt);
- }
-
-}
-
-
-
- Client application for a Queue destination
-
- Here the client application is extracted from the EasyBeans project as well.
- The client code sends a few messages towards the JMS object. The code is:
-
-package org.ow2.easybeans.examples.messagedrivenbean;
-
-import java.util.Hashtable;
-
-import javax.jms.Queue;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSender;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-public final class ClientMessageDriven {
-
- private static final String QUEUE_CONNECTION_FACTORY = "JQCF";
- private static final String SAMPLE_QUEUE = "SampleQueue";
- private static final int NUMBER_MESSAGES = 5;
- private static final String
- DEFAULT_INITIAL_CONTEXT_FACTORY = "org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory";
-
- private ClientMessageDriven() {
-
- }
-
- public static void main(final String[] args) throws Exception {
-
- Context initialContext = getInitialContext();
-
- QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) initialContext
- .lookup(QUEUE_CONNECTION_FACTORY);
-
- // Lookup the Queue through its JNDI name
- Queue queue = (Queue) initialContext.lookup(SAMPLE_QUEUE);
-
- // Create connection
- QueueConnection queueConnection = queueConnectionFactory.createQueueConnection();
-
- // Create session
- QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
-
- // Create sender
- QueueSender queueSender = queueSession.createSender(queue);
-
- // Send messages
- TextMessage message = null;
- for (int i = 0; i < NUMBER_MESSAGES; i++) {
- message = queueSession.createTextMessage();
- String text = "Message_" + i;
- message.setText(text);
- queueSender.send(message);
- System.out.println("Message [" + message.getJMSMessageID() + ", text:" + text + "] sent");
-
- }
-
- // Close JMS objects
- queueSender.close();
- queueSession.close();
- queueConnection.close();
-
- }
-
- private static Context getInitialContext() throws NamingException {
-
- Hashtable<String, Object> env = new Hashtable<String, Object>();
- env.put(Context.INITIAL_CONTEXT_FACTORY, DEFAULT_INITIAL_CONTEXT_FACTORY);
- return new InitialContext(env);
- }
-}
-
-
-
- Client application for a topic destination
-
- In this case, the client application must be adapted for publishing a message to a topic. Only the touched lines are shown:
-
-...
-import javax.jms.Topic;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.TopicPublisher;
-import javax.jms.TopicSession;
-
-...
- private static final String TOPIC_CONNECTION_FACTORY = "JTCF";
- private static final String SAMPLE_TOPIC = "sampleTopic";
-...
-
- // Get factory
- TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) initialContext
- .lookup(TOPIC_CONNECTION_FACTORY);
-
- // Lookup the Topic through its JNDI name
- Topic topic = (Topic) initialContext.lookup(SAMPLE_TOPIC);
-
- // Create connection
- TopicConnection topicConnection = topicConnectionFactory.createTopicConnection();
-
- // Create session
- TopicSession topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
-
- // Create publisher
- TopicPublisher topicPublisher = topicSession.createPublisher(topic);
-
- // Send messages
- TextMessage message = null;
- for (int i = 0; i < NUMBER_MESSAGES; i++) {
- message = topicSession.createTextMessage();
- String text = "Message_" + i;
- message.setText(text);
- topicPublisher.publish(message);
- System.out.println("Message [" + message.getJMSMessageID() + ", text:" + text + "] sent");
-
- }
-
- // Close JMS objects
- topicPublisher.close();
- topicSession.close();
- topicConnection.close();
-
- }
-...
-
-
-
- Run the sample
-
-
-
-
- For deploying the application, you can put the mdb.jar archive in the $JONAS_BASE/deploy directory.
-
-
- And then you can run the client with the jclient command and you get the following output:
-
-jclient ./clients/client-mdb.jar
-ClientContainer.info : Starting client...
-Message [ID:0.0.1026c4m0, text:Message_0] sent
-Message [ID:0.0.1026c4m1, text:Message_1] sent
-Message [ID:0.0.1026c4m2, text:Message_2] sent
-Message [ID:0.0.1026c4m3, text:Message_3] sent
-Message [ID:0.0.1026c4m4, text:Message_4] sent
-
-
-
- At the server side, you get the following messages:
-
-Receiving a message named '(org.objectweb.joram.client.jms.TextMessage@812517,JMSMessageID=ID:0.0.1026c4m1,
- JMSDestination=queue#0.0.1038,JMSCorrelationID=null,JMSDeliveryMode=2,JMSExpiration=0,JMSPriority=4,
- JMSRedelivered=false,JMSReplyTo=null,JMSTimestamp=1222962742969,JMSType=null)'. with the content 'Message_1
-Receiving a message named '(org.objectweb.joram.client.jms.TextMessage@f42d53,JMSMessageID=ID:0.0.1026c4m3,
- JMSDestination=queue#0.0.1038,JMSCorrelationID=null,JMSDeliveryMode=2,JMSExpiration=0,JMSPriority=4,
- JMSRedelivered=false,JMSReplyTo=null,JMSTimestamp=1222962742978,JMSType=null)'. with the content 'Message_3
-Receiving a message named '(org.objectweb.joram.client.jms.TextMessage@cbb612,JMSMessageID=ID:0.0.1026c4m2,
- JMSDestination=queue#0.0.1038,JMSCorrelationID=null,JMSDeliveryMode=2,JMSExpiration=0,JMSPriority=4,
- JMSRedelivered=false,JMSReplyTo=null,JMSTimestamp=1222962742977,JMSType=null)'. with the content 'Message_2
-Receiving a message named '(org.objectweb.joram.client.jms.TextMessage@1e7f21,JMSMessageID=ID:0.0.1026c4m0,
- JMSDestination=queue#0.0.1038,JMSCorrelationID=null,JMSDeliveryMode=2,JMSExpiration=0,JMSPriority=4,
- JMSRedelivered=false,JMSReplyTo=null,JMSTimestamp=1222962742965,JMSType=null)'. with the content 'Message_0
-Receiving a message named '(org.objectweb.joram.client.jms.TextMessage@2c79a5,JMSMessageID=ID:0.0.1026c4m4,
- JMSDestination=queue#0.0.1038,JMSCorrelationID=null,JMSDeliveryMode=2,JMSExpiration=0,JMSPriority=4,
- JMSRedelivered=false,JMSReplyTo=null,JMSTimestamp=1222962742979,JMSType=null)'. with the content 'Message_4
-
-
-
-
-
- When using jclient container, the client will connect to the server which is pointed by $JONAS_BASE/conf/carol.properties. You can specify another
- one with the -carolFile option.
-
-
-jclient ./clients/client-mdb.jar -carolFile ./carol.properties
-
-
-
- Load balancing
-
- JORAM distributed configuration
-
-
- Two instances of JOnAS are configured ("J1" and "J2"). Each JOnAS instance has a dedicated collocated JORAM server:
- server "S1" for JOnAS "J1", "S2" for "J2". These two servers are aware of each other.
-
-
- Set a JORAM distributed configuration:
-
-
-
- Go to $JONAS_BASE/conf and edit the a3servers.xml file (same for the 2 instances).
- 2 instances are defined in the same domain network. The persistent mode is enabled through the Transaction
- property in the a3servers.xml file and through the PersistentPlatform configuration property
- in the JORAM RA.
-
- JORAM distributed configuration
-
-
-
-<?xml version="1.0"?>
-<config
- <domain name="D1"/>
- <property name="Transaction" value="fr.dyade.aaa.util.NTransaction"/>
- <server id="1" name="S1" hostname="localhost">
- <network domain="D1" port="16301"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager"
- args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
- args="16010"/>
- </server>
- <server id="2" name="S2" hostname="localhost">
- <network domain="D1" port="16302"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager"
- args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
- args="16020"/>
- </server>
-</config>
-
-
-
-
- For each instance, edit the ra.xml embedded in the joram_for_jonas_ra.rar (by using unjar command manually or with the jonasAdmin's RA editor) and check the following element according to the a3servers.xml content
-
-
- server id (1 or 2)
-
-
- <config-property>
- <config-property-name>ServerId</config-property-name>
- <config-property-type>java.lang.Short</config-property-type>
- <config-property-value>1</config-property-value>
- </config-property>
-
-
-
- server name (S1 or S2)
-
-
- <config-property>
- <config-property-name>ServerName</config-property-name>
- <config-property-type>java.lang.String</config-property-type>
- <config-property-value>s1</config-property-value>
- </config-property>
-
-
-
- hostname
-
-
- <config-property>
- <config-property-name>HostName</config-property-name>
- <config-property-type>java.lang.String</config-property-type>
- <config-property-value>localhost</config-property-value>
- </config-property>
-
-
-
- network port (16010 or 16020)
-
-
- <config-property>
- <config-property-name>ServerPort</config-property-name>
- <config-property-type>java.lang.Integer</config-property-type>
- <config-property-value>16010</config-property-value>
- </config-property>
-
-
-
- persistent mode
-
-
- <config-property>
- <config-property-name>PersistentPlatform</config-property-name>
- <config-property-type>java.lang.Boolean</config-property-type>
- <config-property-value>true</config-property-value>
- </config-property>
-
-
-
-
-
- For each instance, edit the joramAdmin.xml, update the connection factories definition, the user definition according to the local JORAM server configuration
-
-
- server id (1 or 2)
-
-
- <User name="anonymous"
- password="anonymous"
- serverId="1"/>
-
-
-
- server port number (16010 or 16020)
-
-
- <ConnectionFactory className="org.objectweb.joram.client.jms.tcp.TcpConnectionFactory">
- <tcp host="localhost"
- port="16010"/>
- <jndi name="JCF"/>
- </ConnectionFactory>
-
- <ConnectionFactory className="org.objectweb.joram.client.jms.tcp.QueueTcpConnectionFactory">
- <tcp host="localhost"
- port="16010"/>
- <jndi name="JQCF"/>
- </ConnectionFactory>
-
- <ConnectionFactory className="org.objectweb.joram.client.jms.tcp.TopicTcpConnectionFactory">
- <tcp host="localhost"
- port="16010"/>
- <jndi name="JTCF"/>
- </ConnectionFactory>
-
-
-
-
-
-
- See
-
- here
-
- for more information about a JORAM distributed configuration.
-
-
- Clustered Topic
-
-
- A non hierarchical topic might be distributed among many servers.
- Such a topic, to be considered as a single logical topic, is made of topic representatives, one per server.
- Such an architecture allows a publisher to publish messages on a representative of the topic.
- In the example, the publisher works with the representative on server 1.
- If a subscriber subscribed to any other representative (on server 2 in the example), it will get the messages produced by the publisher.
-
-
- Load balancing of topics is very useful because it allows distributed topic subscriptions across the cluster.
-
-
-
-
-
-
-
-
-
-
-
- The following scenario and general settings are proposed:
-
-
-
- The cluster topic is composed of two elements : mdbTopic1 defined hosted by JORAM server S1 and mdbTopic2 hosted by JORAM server S2.
-
-
- The jndi name 'mdbTopic' is set for the local representative, ie mdbTopic1 for S1 et mdbTopic2 for S2.
-
-
- At the server side, a MDB is listening the local representative 'mdbTopic'.
-
-
- A client connects to the J1 or J2 server and sends 10 messages to the topic 'mdbTopic'.
-
-
- Each message is received twice, one per cluster element.
-
-
-
-
-
-
-
-
-
-
-
- Topic cluster definition in joramAdmin.xml
-
-
- The cluster definition with the topics must be added in $JONAS_BASE/conf/joramAdmin.xml file. The connection factories and the anonymous user must be defined with the local server id and the local server port number according to the a3servers.xml content. Here only the cluster related elements are shown:
-
-
-
- For the server id 1 :
-
- Cluster topic with JORAM
-
-
- <Topic name="mdbTopic1" serverId="1">
- <freeReader/>
- <freeWriter/>
- <jndi name="mdbTopic"/>
- </Topic>
-
- <Topic name="mdbTopic2" serverId="2">
- <freeReader/>
- <freeWriter/>
- <jndi name="mdbTopic2"/>
- </Topic>
-
- <ClusterTopic>
- <ClusterElement name="mdbTopic1" location="s1"/>
- <ClusterElement name="mdbTopic2" location="s2"/>
- <jndi name="clusterMdbTopic"/>
- </ClusterTopic>
-
-
-
- For the server id 2 :
-
-
- <Topic name="mdbTopic1" serverId="1">
- <freeReader/>
- <freeWriter/>
- <jndi name="mdbTopic1"/>
- </Topic>
-
- <Topic name="mdbTopic2" serverId="2">
- <freeReader/>
- <freeWriter/>
- <jndi name="mdbTopic"/>
- </Topic>
-
- <ClusterTopic>
- <ClusterElement name="mdbTopic1" location="s1"/>
- <ClusterElement name="mdbTopic2" location="s2"/>
- <jndi name="clusterMdbTopic"/>
- </ClusterTopic>
-
-
-
-
-
- The mdbTopic jndi name is bound in the local JOnAS registry with the local cluster element,
- i.e. mdbTopic1 for server id 1 and mdbTopic2 for server id 2.
-
-
-
-
- The joramAdmin.xml file has to be loaded when all cluster members are started since some remote cluster elements are defined.
- An alternative consists in splitting the configuration into two different files joramAdmin-local.xml and joramAdmin-cluster.xml,
- the first one containing only the local elements and the second one, both local and remote elements.
- At the JOnAS starting, a script could copy the right file to joramAdmin.xml according to the others members presence (joramAdmin-local.xml
- if it's the first member which starts and joramAdmin-cluster.xml if all the cluster members are started).
-
-
-
-
-
- Changes in the example
- The @MessageDriven annotation is updated in the source code for binding the MDB with the clustered topic. That could be done
- through the optional deployment descriptor as well.
-
-
-@MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName ="destination", propertyValue ="mdbTopic"),
- @ActivationConfigProperty(propertyName ="destinationType", propertyValue ="javax.jms.Topic")
- }
-)
-
- The client code for sending a message to a Topic is used and the topic name is set to:
-
-
- private static final String SAMPLE_TOPIC = "mdbTopic";
-
-
-
- Run the sample
-
-
- Deploy the MDB application in each JOnAS instance and run the sample.
- The messages do appear on the two different JOnAS servers consoles that shows the messages broadcasting between the topic elements.
-
-
-
-
- Load-balancing for Queue
-
-
- Globally, the load balancing in the context of queues may be meaningless in comparison of load balancing topic. It would be a bit like load balancing a stateful session bean instance (which just requires failover). But the JORAM distributed architecture enables :
-
-
-
- equilibrating the load of the queue access between several JORAM server nodes, it's a queue load-balancing at the server side.
-
-
- load-balancing the load at the client side.
-
-
-
- First scenario for Queue : distribution of the load at the server side
-
-
- Here is a diagram of what is going to happen for the Queue and the message:
-
-
-
-
-
-
-
-
-
-
- A load balancing message queue may be needed for a high rate of messages. A clustered queue is a cluster of queues exchanging messages depending on their load. The example has a cluster of two queues. A heavy producer accesses its local queue and sends messages. It quickly becomes loaded and decides to forward messages to the other queue of its cluster which is not under heavy load.
-
-
- For this case some parameters must be set:
-
-
-
- period: period (in ms) of activation of the load factor evaluation routine for a queue
-
-
- producThreshold: number of messages above which a queue is considered loaded, a load factor evaluation launched, messages forwarded to other queues of the cluster
-
-
- consumThreshold: number of pending "receive" requests above which a queue will request messages from the other queues of the cluster
-
-
- autoEvalThreshold: set to "true" for requesting an automatic revaluation of the queues' thresholds values according to their activity
-
-
- waitAfterClusterReq: time (in ms) during which a queue that requested something from the cluster is not authorized to do it again
-
-
-
- For further information, see the JORAM documentation
-
- here
-
- .
-
-
- The scenario for Queue is similar to the topic one. A client sent messages to a queue in S1. MDB gets messages from each local cluster queue representative. After having sent a burst of messages to the server S1, the load distribution should occur and message should be moved to S2.
-
-
- The Queue definition in $JONAS_BASE/conf/joramAdmin.xml file is as following :
-
-
-
- For server 1
-
-
- Cluster queue with JORAM
-
-
-
-<Queue name="mdbQueue1"
- serverId="1"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <property name="period" value="10000"/>
- <property name="producThreshold" value="50"/>
- <property name="consumThreshold" value="2"/>
- <property name="autoEvalThreshold" value="false"/>
- <property name="waitAfterClusterReq" value="1000"/>
- <jndi name="mdbQueue"/>
-</Queue>
-
-<Queue name="mdbQueue2"
- serverId="2"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <property name="period" value="10000"/>
- <property name="producThreshold" value="50"/>
- <property name="consumThreshold" value="2"/>
- <property name="autoEvalThreshold" value="false"/>
- <property name="waitAfterClusterReq" value="1000"/>
- <jndi name="mdbQueue2"/>
-</Queue>
-
-<ClusterQueue>
- <ClusterElement name="mdbQueue1" location="s1"/>
- <ClusterElement name="mdbQueue2" location="s2"/>
- <jndi name="mdbQueueCluster"/>
-</ClusterQueue>
-
-
-
- For server 2
-
-
-
-<Queue name="mdbQueue1"
- serverId="1"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <property name="period" value="10000"/>
- <property name="producThreshold" value="50"/>
- <property name="consumThreshold" value="2"/>
- <property name="autoEvalThreshold" value="false"/>
- <property name="waitAfterClusterReq" value="1000"/>
- <jndi name="mdbQueue1"/>
-</Queue>
-
-<Queue name="mdbQueue2"
- serverId="2"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <property name="period" value="10000"/>
- <property name="producThreshold" value="50"/>
- <property name="consumThreshold" value="2"/>
- <property name="autoEvalThreshold" value="false"/>
- <property name="waitAfterClusterReq" value="1000"/>
- <jndi name="mdbQueue"/>
-</Queue>
-
-<ClusterQueue>
- <ClusterElement name="mdbQueue1" location="s1"/>
- <ClusterElement name="mdbQueue2" location="s2"/>
- <jndi name="mdbQueueCluster"/>
-</ClusterQueue>
-
-
-
-
- The joramAdmin.xml file has to be loaded when all cluster members are started since some remote
- cluster elements are defined. An alternative consists in splitting the configuration into two different files joramAdmin-local.xml
- and joramAdmin-cluster.xml, the first one containing only the local elements and the second one,
- both local and remote elements. At the JOnAS starting, a script could copy the right file
- to joramAdmin.xml according to the others members presence (joramAdmin-local.xml if it's the first member
- which starts and joramAdmin-cluster.xml if all the cluster members are started).
-
-
-
-
- Changes in the example
- The @MessageDriven annotation is set with the mdbQueue queue. That could be done
- through the optional deployment descriptor as well.
-
-
-@MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName ="destination", propertyValue ="mdbQueue"),
- @ActivationConfigProperty(propertyName ="destinationType", propertyValue ="javax.jms.Queue")
- }
-)
-
- The client code for the Queue is used and the queue name is set to:
-
-
- private static final String SAMPLE_Queue = "mdbQueue";
-
- The loop number can be increased in order to generate some pending messages in the first server:
-
-
- private static final int NUMBER_MESSAGES = 1000;
-
-
- Run the sample
-
- Deploy the MDB application in each JOnAS instance and run the sample.
- The messages do appear on the two different JOnAS servers consoles that shows the load-balacing at the server side.
-
-
-
- Second scenario for Queue : load-balancing at the client side
-
- Principle
-
-
- The load-balancing is done at the client side. A server is selected randomly among the cluster members at the first message sending or through the 'location' java property. And then, for a given client, all the messages are sent to the same server unless the java property resetting.
-
-
-
-
-
-
-
-
-
-
-
- For setting the load-balancing at the client side, the client application must use a clustered connection factory that embeds the network connection parameters of the cluster members. This factory must be registered in the JORAM's distributed JNDI for ensuring that the client gets an up to date object. The main parameters are given below :
-
-
- Setting of the JORAM's distributed jndi
-
-
- At first, the a3servers.xml file must enhanced with the JORAM's jndi service as following :
-
-
-
-<?xml version="1.0"?>
-<config>
- <domain name="D1"/>
- <property name="Transaction" value="fr.dyade.aaa.util.NTransaction"/>
- <server id="1" name="s1" hostname="localhost">
- <property name="location" value="s1" />
- <network domain="D1" port="16301"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager"
- args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
- args="16010"/>
- <service class="fr.dyade.aaa.jndi2.distributed.DistributedJndiServer"
- args="16401 1 2"/>
- </server>
-
- <server id="2" name="s2" hostname="localhost">
- <property name="location" value="s2" />
- <network domain="D1" port="16302"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager"
- args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
- args="16020"/>
- <service class="fr.dyade.aaa.jndi2.distributed.DistributedJndiServer"
- args="16402 2 1"/>
- </server>
-
-</config>
-
-
- The location property is set for binding the MDB to the local queue instance.
-
-
- Only the JMS objects must be registered in the JORAM's jndi. The standard routing mechanism is used through a jndi.properties file put in each $JONAS_BASE/conf directory :
-
-
-
- port number (16401 or 16402)
-
-
-
- java.naming.factory.url.pkgs org.objectweb.jonas.naming:fr.dyade.aaa.jndi2
- scn.naming.factory.host localhost
- scn.naming.factory.port 16402
-
-
-
- The port number must be adapted according to the local server configuration (16401 for S1 and 16402 for S2). The 'scn' prefix is defined for identifying the objects to bind or to lookup in this registry.
-
-
- Setting of the clustered connection factories
-
-
- The clustered connection factories are defined in the $JONAS_BASE/conf/joramAdmin.xml file as following :
-
-
-
-<ConnectionFactory name="JQCF1" className="org.objectweb.joram.client.jms.tcp.QueueTcpConnectionFactory">
- <tcp host="localhost"
- port="16010"/>
- <jndi name="scn:comp/JQCF1"/>
-</ConnectionFactory>
-<ConnectionFactory name="JQCF2" className="org.objectweb.joram.client.jms.tcp.QueueTcpConnectionFactory">
- <tcp host="localhost"
- port="16020"/>
- <jndi name="scn:comp/JQCF2"/>
-</ConnectionFactory>
-<ClusterCF>
- <ClusterElement name="JQCF1" location="s1"/>
- <ClusterElement name="JQCF2" location="s2"/>
- <jndi name="scn:comp/clusterJQCF"/>
-</ClusterCF>
-
-
- The 'scn:comp/' prefix in the jndi name indicates that the object must be bound in the JORAM's jndi.
-
-
- Cluster queue definition
-
-
- The cluster queue is defined in the $JONAS_BASE/conf/joramAdmin.xml file :
-
-
-
-<Queue name="mdbQueue1" serverId="1"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <jndi name="scn:comp/mdbQueue1"/>
-</Queue>
-
-<Queue name="mdbQueue2" serverId="2"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <jndi name="scn:comp/mdbQueue2"/>
-</Queue>
-
-<ClusterQueue>
- <ClusterElement name="mdbQueue1" location="s1"/>
- <ClusterElement name="mdbQueue2" location="s2"/>
- <jndi name="scn:comp/mdbQueue"/>
-</ClusterQueue>
-
-
- The cluster queue definition is symetric across the cluster members.
- The well known jndi name is set on the cluster object (and not in the local representative as for the topic cluster).
-
-
- The joramAdmin.xml file has to be loaded when all cluster members
- are started since some remote cluster elements are defined.
- An alternative consists in splitting the configuration into two different files
- joramAdmin-local.xml and joramAdmin-cluster.xml, the first one containing only the local elements and the
- second one, both local and remote elements. At the JOnAS starting, a script could copy the right file
- to joramAdmin.xml according to the others members presence (joramAdmin-local.xml if it's the first member
- which starts and joramAdmin-cluster.xml if all the cluster members are started).
-
-
-
- Changes in the example
-
-
- The message driven bean must be configured with the queue registered in the JORAM jndi ('scn:/comp' selector).
- The @MessageDriven annotation is set with the scn:/comp/mdbQueue queue.
- That could be done through the optional deployment descriptor as well.
-
-
-@MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName ="destination", propertyValue ="scn:comp/mdbQueue"),
- @ActivationConfigProperty(propertyName ="destinationType", propertyValue ="javax.jms.Queue")
- }
-)
-
-
-
- The client must lookup the clustered objects in the JORAM's jndi by using the 'scn:/comp' selector.
- The client code for sending a message to a client is changed as following:
-
-
-
-private static final String QUEUE_CONNECTION_FACTORY = "scn:comp/clusterJQCF";
-private static final String SAMPLE_QUEUE = "scn:comp/mdbQueue";
-
-
-
- The connection creation, session creation and producer are created like this:
-
-
-
- Queue queue = (Queue) initialContext.lookup(SAMPLE_QUEUE);
- Connection connection = ConnectionFactory.createConnection();
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageProducer messageProducer = session.createProducer(queue);
-
-
- A server is chosen at the first message sending.
- A switch may be forced through the resetting of the 'location' java property. Below a new server election is requested for each odd iteration.
-
-
- for (int i = 0; i < NUMBER_MESSAGES; i++) {
- message = session.createTextMessage();
- String text = "Message_" + i;
- message.setText(text);
- messageProducer.send(message);
- System.out.println("Message [" + message.getJMSMessageID() + ", text:" + text + "] sent");
- System.out.println("location=" + System.getProperty("location"));
- if (i%2 == 0) {
- System.setProperty("location", "");
- }
- }
- messageProducer.close();
- session.close();
- connection.close();
-
-
-
- Run the sample
-
-
- Deploy the MDB application in each JOnAS instance and run the sample.
- The messages do appear on the two different JOnAS servers consoles that shows the messages load-balancing between the cluster elements.
-
-
-
-
-
- JORAM HA and JOnAS
-
- Generality
-
-
-
-
-
-
-
-
-
-
-
- In JORAM terminology, an HA server is actually a group of servers, one of which is the master server that coordinates the other slave servers. An external server that communicates with the HA server is actually connected to the master server.
-
-
- Each replicated JORAM server (element of the JORAM HA cluster, master or slave) executes the same code as a standard server except for the communication with the clients.
-
-
- In the example, the collocated clients use a client module (MDB). If the server replica is the master, then the connection is active enabling the client to use the HA JORAM server. If the replica is a slave, then the connection opening is blocked until the replica becomes the master.
-
-
- Configuration
-
-
- Several files must be changed to create a JORAM HA configuration:
-
- a3servers.xml
-
-
- A clustered server is defined by the element "cluster". A cluster owns an identifier and a name defined by the attributes "id" and "name"
- (exactly like a standard server). Two properties must be defined:
-
-
-
- "Engine" must be set to "fr.dyade.aaa.agent.HAEngine" which is the class name of the engine that provides high availability.
-
-
- "nbClusterExpected" defines the number of replicas that must be connected to the group communication channel used before this replica starts.
- By default it is set to 2. If there are more than two clusters, this specification must be inserted in the configuration file.
- If there are two clusters, this specification is not required.
-
-
-
- In the case of one server and one replica, the value must be set to 1.
-
-
-
-<?xml version="1.0"?/>
-<config>
- <domain name="D1"/>
-
- <property name="Transaction" value="fr.dyade.aaa.util.NullTransaction"/>
-
- <cluster id="1" name="s1">
-
- <property name="Engine" value="fr.dyade.aaa.agent.HAEngine" />
- <property name="nbClusterExpected" value="1" />
-
-
- For each replica, an element "server" must be added. The attribute "id" defines the identifier of the replica inside the cluster.
- The attribute "hostname" gives the address of the host where the replica is running.
- The network is used by the replica to communicate with external agent servers, i.e., servers located outside of the cluster and not replicas.
-
-
- This is the entire configuration for the a3servers.xml file of the first JOnAS instance:
-
-
-
-<?xml version="1.0"?>
-<config<
- <domain name="D1"/>
-
- <property name="Transaction" value="fr.dyade.aaa.util.NullTransaction"/>
-
- <cluster id="1" name="s1">
-
- <property name="Engine" value="fr.dyade.aaa.agent.HAEngine" />
- <property name="nbClusterExpected" value="1" />
-
- <server id="1" hostname="localhost">
- <network domain="D1" port="16301"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager" args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService" args="16010"/>
- <service class="org.objectweb.joram.client.jms.ha.local.HALocalConnection"/>
- </server>
-
- <server id="2" hostname="localhost">
- <network domain="D1" port="16302"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager" args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService" args="16020"/>
- <service class="org.objectweb.joram.client.jms.ha.local.HALocalConnection"/>
- </server>
-
- </cluster>
-
-</config>
-
-
- The cluster id = 1 and the name S1. It is exactly the same file for the second instance of JOnAS.
-
-
- joramAdmin.xml
-
-
- Here is the joramAdmin.xml file configuration:
-
-
-
-<?xml version="1.0"?>
-
-<JoramAdmin>
-
-<AdminModule>
- <collocatedConnect name="root" password="root"/>
-</AdminModule>
-
-<ConnectionFactory className="org.objectweb.joram.client.jms.ha.tcp.HATcpConnectionFactory">
- <hatcp url="hajoram://localhost:16010,localhost:16020"
- reliableClass="org.objectweb.joram.client.jms.tcp.ReliableTcpClient"/>
- <jndi name="JCF"/>
-</ConnectionFactory>
-
-<ConnectionFactory className="org.objectweb.joram.client.jms.ha.tcp.QueueHATcpConnectionFactory">
- <hatcp url="hajoram://localhost:16010,localhost:16020"
- reliableClass="org.objectweb.joram.client.jms.tcp.ReliableTcpClient"/>
- <jndi name="JQCF"/>
-</ConnectionFactory>
-
-<ConnectionFactory className="org.objectweb.joram.client.jms.ha.tcp.TopicHATcpConnectionFactory">
- <hatcp url="hajoram://localhost:16010,localhost:16020"
- reliableClass="org.objectweb.joram.client.jms.tcp.ReliableTcpClient"/>
- <jndi name="JTCF"/>
-</ConnectionFactory>
-
-
- Each connection factory has its own specification. One is in case of the Queue, one for Topic, and one for no define arguments.
- Each time the hatcp url must be entered, the url of the two instances. In the example, it is localhost:16010 and localhost:16020.
- It allows the client to change the instance when the first one is dead.
-
-
- After this definition the user, the queue and topic can be created.
-
-
- ra and jonas-ra.xml files in joram_for_jonas_ra.rar
-
-
- First, in order to recognize the cluster, a new parameter must be declared in these files.
-
-
-
- <config-property>
- <config-property-name>ClusterId</config-property-name>
- <config-property-type>java.lang.Short</config-property-type>
- <config-property-value>1</config-property-value>
- </config-property>
-
-
- Here the name is not really appropriate but in order to keep some coherence this name was used. In fact it represents a replica so it would have been better to call it replicaId.
-
-
- Consequently, for the first JOnAS instance, copy the code just above. For the second instance, change the value to 2 (in order to signify this is another replica).
-
-
-
- Run
-
-
- Deploy the MDB application in each JOnAS instance and start them.
-
-
- One of the two JOnAS bases (the one which is the slowest) will be in a waiting state when reading the joramAdmin.xml
-
-
-
-JoramAdapter.start : - Collocated JORAM server has successfully started.
-JoramAdapter.start : - Reading the provided admin file: joramAdmin.xml
-
-
- whereas the other one is launched successfully.
-
-
- Then launch the client:
-
-
- Messages are sent on the JOnAS instance which was launched before.
- Launch it again and kill the current JOnAS. The second JOnAS will automatically wake up and take care of the other messages.
-
-
-
- MDB Clustering
-
- Generality
-
-
- This is a proposal for building an MDB clustering based application.
-
-
- The HA mechanism can be mixed with the load balancing policy based on clustered destinations. The load is balanced between several HA servers. Each element of a clustered destination is deployed on a separate HA server.
-
-
-
-
-
-
-
-
-
-
- Configuration
-
-
- Not available yet.
-
-
-
- Illustration
-
-
- The configuration may now be tested, as follows:
-
-
- First make JOnAS_A1 crash and verify that messages are spread between JOnAS_B1 and JOnAS_B2.
-
-
- Then make JOnAS_B2 crash and verify that messages are spread between JOnAS_A1 and JOnAS_A2.
-
-
- Finally make JOnAS_A1 and JOnAS_B2 crash and verify that messages are spread between JOnAS_A2 and JOnAS_B1.
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/web.xml b/jonas_doc/core/src/docbook/doc-en/clustering/configuration/web.xml
deleted file mode 100644
index ebf7c357eeb874e39eb64f879ea21505e406a8dc..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/web.xml
+++ /dev/null
@@ -1,353 +0,0 @@
-
-
-
- WEB clustering with Apache/Tomcat
-
-
-
-
- Configuring a WEB farm with mod_jk
-
-
-
-
- mod_jk configuration
-
-
-
- As with other Apache modules, mod_jk should be first
- installed on the modules directory of the Apache Web
- Server and the
- httpd.conf
- file has to be updated. Moreover, mod_jk requires
- workers.properties
- file that describes the host(s) and port(s) used by the
- workers.
-
-
-
-
- workers.properties file
-
-
-
- Here we provide an example of
- workers.properties
- file to connect the Apache frontal with two
- workers. The file defines a
- load-balancing
- worker named
- myloadbalancer
- , and the two
- balanced
- workers,
- worker1
- and
- worker2
- . Each cluster member will be configured to play the
- role of one of the balanced workers. Additionally, a
- status worker jkstatus is defined for controlling
- and monitoring the load-balancing.
-
-
- Configuring mod_jk workers
-
-#-----------------------
-# List the workers name
-#-----------------------
-worker.list=myloadbalancer,jkstatus
-
-#-----------------------
-# worker1
-#-----------------------
-worker.worker1.port=9010
-worker.worker1.host=localhost
-worker.worker1.type=ajp13 # Load balance factor
-worker.worker1.lbfactor=1 # Define preferred failover node for worker1
-#worker.worker1.redirect=worker2 # Disable worker1 for all requests except failover
-#worker.worker1.disabled=True
-#-----------------------
-# worker2
-#-----------------------
-worker.worker2.port=9011
-worker.worker2.host=localhost
-worker.worker2.type=ajp13 # Load balance factor
-worker.worker2.lbfactor=1 # Define preferred failover node for worker2
-#worker.worker2.redirect=worker2 # Disable worker2 for all requests except failover
-#worker.worker2.disabled=True
-#-----------------------
-# Load Balancer worker
-#-----------------------
-worker.myloadbalancer.type=lb
-worker.myloadbalancer.balance_workers=worker1,worker2
-worker.myloadbalancer.sticky_session=false
-#-----------------------
-# jkstatus worker
-#-----------------------
-worker.jkstatus.type=status
-
-
-
-
- For a complete documentation about
- workers.properties
- see the Apache Tomcat Connector
-
- guide
-
- .
-
-
-
-
-
- Apache configuration
-
-
-
- The Apache configuration must be enhanced for loading the mod_jk plugin with its setting. The following lines
- have to be added to the httpd.conf file directly or included from another file:
-
-
- Configuring mod_jk mount points
-
-# Load mod_jk module
-# Update this path to match your modules location
-LoadModule jk_module modules/mod_jk.so
-# Location of the workers.properties file
-# Update this path to match your conf directory location JkWorkersFile
-# (put workers.properties next to httpd.conf)
-/etc/httpd/conf/workers.properties
-# Location of the log file JkLogFile /var/log/mod_jk.log
-# Log level : debug, info, error or emerg
-JkLogLevel info
-# Select the timestamp log format
-JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
-# Shared Memory Filename ( Only for Unix platform ) required by loadbalancer
-JkShmFile /var/log/jk.shm
-# Assign specific URL to the workers
-JkMount /sampleCluster2 myloadbalancer
-JkMount /sampleCluster2/* myloadbalancer
-JkMount /sampleCluster3 myloadbalancer
-JkMount /sampleCluster3/* myloadbalancer
-# A mount point to the status worker
-JkMount /jkmanager jkstatus
-JkMount /jkmanager/* jkstatus
-
-# Copy mount points into all virtual hosts
-JkMountCopy All
-
-# Enable the Jk manager access only from localhost
-<Location /jkmanager/>
- JkMount jkstatus
- Order deny,allow
- Deny from all
- Allow from 127.0.0.1
-</Location>
-
-
-
-
- The location of the workers.properties file has to be adapted to your environment.
- The JkMount directives specify the routes that are managed by mod_jk. The examples of
- context urls pattern have to be replaced with your application ones.
-
- For a complete documentation see Apache
-
- HowTo
-
- .
-
-
-
-
-
-
- Cluster members configuration
-
-
-
- Each cluster member needs an AJP/1.3 connector listening on the
- port defined in the workers.properties file. Moreover,
- the worker name (here in the example, worker1/worker2) must be used as
- value for the Engine's
- jvmRoute
- attribute.
-
-
-
- Here is a chunk of tomcat6-server.xml configurations file for
- the member worker1:
-
-
-
- Configuring an AJP connector in Tomcat
-
-<Server>
- <!-- Define the Tomcat Stand-Alone Service -->
- <Service name="Tomcat-JOnAS">
- <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 9000 -->
- <Connector port="9000" protocol="HTTP/1.1" connectionTimeout="20000"
- redirectPort="9043" />
- <!-- AJP 1.3 Connector on port 9010 for worker.worker1.port in workers.properties file -->
- <Connector port="9010" redirectPort="9043" protocol="AJP/1.3"/>
-
- <!-- An Engine represents the entry point You should set jvmRoute to support load-balancing via AJP ie : -->
- <Engine name="jonas" defaultHost="localhost" jvmRoute="worker1">
- </Engine>
- </Service>
-<Server>
-
-
-
-
-
-
-
-
- Configuring a WEB farm with mod_proxy_balancer
-
-
-
-
- mod_proxy_balancer configuration
-
-
-
-
- mod_proxy-balancer is available in Apache 2.2 and later.
-
-
- See the Apache documentation
-
- here
- .
-
-
-
-
-
-
- Cluster members configuration
-
-
-
- Contrary to mod_jk, mod_proxy_balancer supports HTTP and AJP protocols. Thus the cluster member can
- specify either an AJP/1.3 connector or a HTTP connector. In both case, the connector port number must be the same than the port number
- defined in the Apache's configuration file.
- Moreover, the BalancerMember route parameter must be used as value for the Engine's
- jvmRoute
- attribute.
-
-
-
-
-
-
-
- Configuring a WEB cluster
-
-
- The load-balancing is configured as a WEB farm, see and .
-
-
-
- TomcatCluster configuration
-
-
-
- Additionally to HTTP requests load balancing provided by
- mod_jk, transparent failover for Web applications can
- be reached by using HTTP session replication provided by
- the Tomcat clustering solution.
-
-
-
- Web cluster
- members are JOnAS instances having the web container
- service activated, using the Tomcat implementation, and having a
- specific configuration which allows them to be members
- of a Tomcat cluster.
-
-
-
- The concerned configuration file is the
- tomcat6-server.xml
- file. Every member of the cluster must have a Cluster
- element defined in the default virtual host definition.
- The cluster name is defined by the clusterName
- attribute, which should be the same for all the cluster
- members. Another common element for the cluster members
- is the Membership definition.
-
-
-
- The example below defines a configuration of the Cluster element for an all-to-all session replication with the DeltaManager.
- This works great for small cluster. For larger cluster, BackupManager enables to replicate the session data to one backup node,
- and only to nodes that have the application deployed. See the
- documentation
- for more informations.
-
-
-
- Configuring the HTTP session replication in Tomcat
-
- <!-- Define a Cluster element -->
- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
- channelSendOptions="8" clustername="mycluster" >
- <Manager className="org.apache.catalina.ha.session.DeltaManager"
- expireSessionsOnShutdown="false"
- notifyListenersOnReplication="true"/>
- <Channel className="org.apache.catalina.tribes.group.GroupChannel">
- <Membership className="org.apache.catalina.tribes.membership.McastService"
- address="228.0.0.4"
- port="45564"
- frequency="500"
- dropTime="3000"/>
- <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
- address="auto"
- port="4000"
- autoBind="100"
- selectorTimeout="5000"
- maxThreads="6"/>
- <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
- <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
- </Sender>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
- </Channel>
- <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
- filter=""/>
- <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
- <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
- <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- </Cluster>
-
-
-
-
-
-
- the
- clusterName
- attribute is mandatory for administration purpose (and not set by default
- in
- tomcat6-server.xml
- file).
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster2.xml b/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster2.xml
deleted file mode 100644
index 384e343a1cec4fed0440ae8adc5a1a49c1cdf401..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster2.xml
+++ /dev/null
@@ -1,192 +0,0 @@
-
-
-
- sampleCluster2
-
-
- This example is delivered with JOnAS in the
- JONAS_ROOT/examples/cluster-j2ee14 directory.
-
-
-
- Description
-
-
- The sampleCluster2 application aims to demonstrate the JOnAS's
- clustering features in a pedagogical way for
- J2EE1.4.
-
- These features are:
-
-
-
- Load balancing at Apache level using mod_jk
-
-
-
- Failover at the web level (HTTP session replication using tomcat).
-
-
-
- Load balancing at EJB level using CMI
-
-
-
- Failover at EJB level (Stateful EJB replication)
-
-
-
- The application is composed of the following EJB 2.1
- components:
-
-
-
- 1 SLSB (MyEjb1)
-
-
-
- 2 SFSB (MyStateful and MyStatefulInner)
-
-
-
- 1 EB
-
-
-
-
-
-
-
-
-
-
-
-
- Structure
-
-
-
-
- ./bin-client: scripts to launch clients,
-
-
-
- ./example-config: configuration example,
-
-
-
- ./etc: configuration file,
-
-
-
- ./src: source code.
-
-
-
- ./output : generated ear, jar, war files.
-
-
-
-
-
-
- Configuring the cluster
-
-
- First of all, configure the cluster using the
- newjc command. Please, refer to the newjc documentation
- and do not forget to install and configure apache2 as it's described in
- the Cluster Configuration Guide.
-
-
-
-
- Compiling
-
-
- To build the application, launch ant tool from
- JONAS_ROOT/examples/cluster-j2ee14 directory where
- (the build.xml file is located).
-
-
-
- ant enableLbMode ear for the load-balancing
- mode, or
-
-
-
- ant enableHaMode ear earHA for the
- hight-avability mode.
-
-
-
-
- By default, the SLSB calls are not integrated in the horizontal
- algorithm. This default mode enables the load-balancing at the remote
- interface. When the SLSB are marked as replicated in the
- jonas-ejb-jar.xml (cluster-replicated element), the
- load-balancing is disabled, all the methods calls are sent to the same
- node but a tx exact-one is ensured. For switching from one mode to
- another, use the target enableHaMode and
- enableLbMode.
-
-
-
-
-
- Running
-
-
-
-
- Launching the cluster
-
-
- To start and halt the cluster, use the jcl4sc
- (jcl4sc.bat) command generated by
- newjc in the root of the bases.
-
- jcl4sc -c start allows to start the cluster,
- included the cluster daemon, the db node, the master node and the jbx
- nodes.
-
- jcl4sc halt allows to halt the cluster.
-
- You may type jcl4sc -help to get the usage of
- the command.
-
-
-
-
- Deploying
-
-
- The sampleCluster2 application is automatically deployed on the
- cluster if you have previously build it, before using the
- jcl4sc command.
-
-
-
-
- Using
-
-
- The application is available at
- http://<hostname>:<apache-port>/sampleCluster2.
-
-
- Example: http://localhost:80/sampleCluster2
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster3.xml b/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster3.xml
deleted file mode 100644
index e4d1b147359a24fbc982661bc042c397bf96901f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster3.xml
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
-
- sampleCluster3
-
-
- This example is delivered with JOnAS in the
- JONAS_ROOT/examples/cluster-javaee5 directory.
-
-
-
- Description
-
-
- The sampleCluster3 application aims to demonstrate the JOnAS's
- clustering features in a pedagogical way for Java EE
- 5.
-
- These features are:
-
-
-
- Load balancing at Apache level using mod_jk
-
-
-
- Failover at the web level (HTTP session replication using tomcat).
-
-
-
- Load balancing at EJB level using CMI
-
-
-
- Failover at EJB level (Stateful EJB replication)
-
-
-
- The application is composed of the following EJB3 components:
-
-
-
- 1 SLSB (MyStateless)
-
-
-
- 2 SFSB (MyStateful and MyStatefulInner)
-
-
-
- 1 EB (Node)
-
-
-
-
-
-
-
-
-
-
-
-
- Structure
-
-
-
-
- ./bin-client: scripts to launch clients,
-
-
-
- ./etc: configuration file,
-
-
-
- ./example-config: configuration example,
-
-
-
- ./src: source code,
-
-
-
- ./output: generated files.
-
-
-
-
-
- Configuring the cluster
-
- First of all, configure the cluster using the
- newjc command. Please, refer to the newjc documentation
- and do not forget to install and configure apache2 as it's described in
- the Cluster Configuration Guide.
-
-
-
-
- Compiling
-
-
- To build the application, launch ant tool from
- $JONAS_ROOT/examples/cluster-javaee5 root directory
- where (the build.xml file is located).
-
-
-
- ant ear. The application file
- sampleCluster3.ear is generated in
- ./output/apps folder.
-
-
-
-
-
-
- Running
-
-
-
-
- Launching the cluster
-
-
- To start and halt the cluster, use the jcl4sc
- (jcl4sc.bat) command generated by
- newjc in the root of the JOnAS bases.
-
- jcl4sc -c start allows to start the cluster,
- included the cluster daemon, the db node, the master node and the jbx
- nodes.
-
- jcl4sc halt allows to halt the cluster.
-
- You may type jcl4sc -help to get the usage of
- the command.
-
-
-
-
- Deploying
-
-
- The sampleCluster3 application is automatically deployed on the
- cluster if you have previously build it, before using the
- jcl4sc command.
-
-
-
-
- Using
-
-
- The application is available at
- http://<hostname>:<apache-port>/sampleCluster3.
-
-
- Example: http://localhost:80/sampleCluster3
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/faq/faq.xml b/jonas_doc/core/src/docbook/doc-en/clustering/faq/faq.xml
deleted file mode 100644
index 83bd84ec47e10839cf391efe8d2d91b4e1dd1ac8..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/faq/faq.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-
-
-
- FAQ
-
-
-
-
- EJB clustering related questions
-
-
-
-
- Does CMIv2 work with JOnAS 4 ?
-
-
- No, CMIv2 relies on Carol V3.x and is not compliant with JOnAS 4.
- By the way CMIv2 requires JDK5 and higher.
-
-
-
-
- Does EJB clustering with CMI require a change in the client
- application ?
-
-
- No, new CMI (v2) is completely transparent for the client and
- doesn't require a pre-compilation step which is different from CMI v1 in
- JOnAS 4.
-
-
-
-
- Does EJB clustering with CMI require a change in the server
- application ?
-
-
- EJB application doesn't require any change provided that the
- application design is clustering safe. Typically static field must not
- be used. If no clustering annotation are set into the POJO, the specific
- deployment descriptor can be added for describing the load-balancing
- logic.
-
-
-
-
-
- JGroups related questions
-
-
-
-
- About the network interface
-
-
- To select the right network interface, set your IP with the
- attribute bind_addr of the element UDP into the JGroups configuration
- files:
-
-
-<config>
- <UDP bind_addr="192.168.0.1"
- ...
- />
-...
-</config>
-
-
-
-
-
-
- About JGroups 2.2.9.x & IPv6
-
-
- JGroups 2.2 doesn't support IPv6. It must be disabled in the JVM
- by setting the java.net.preferIPv4Stack to
- true. JGroups 2.2 is used both in the
- cmi and discovery services in JOnAS 4.
- JOnAS 5 embeds JGroups 2.6 that supports quite well IPv6.
-
- In JOnAS 4, when IPv6 is not disabled, the following exceptions
- may appear:
-...
-TP.down : failed sending message with java.io.IOException: Invalid argument
-...
-org.jgroups.ChannelException: failed to start protocol stack
-
-
- Parameter setting example with linux/unix system:
-
-
-export JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
-
-
-
-
-
- About JGroups 2.2.9.x & JDK6
-
-
- JGroups 2.2 doesn't support JDK6. The problem is due to the JDK
- and is documented by Sun
- here. JGroups is used both in the cmi, ha and
- discovery services in JOnAS 4.
-
- In a configuration JOnAS 4/JDK6, the following exceptions may
- appear:
-...
-org.jgroups.ChannelException: failed loading class
-...
-
-
- The workaround consists in setting the
- sun.lang.ClassLoader.allowArraySyntax jvm property to
- true. Example of such setting in a linux
- system:
-
-
-export JAVA_OPTS="$JAVA_OPTS -Dsun.lang.ClassLoader.allowArraySyntax=true"
-
-
-
-
-
-
- Management related questions
-
-
-
-
- Does JOnAS provide a way to start remotely an instance.
-
-
- Yes, JOnAS provides a cluster daemon which acts as a JOnAS
- instances bootstrap. The cluster daemon exposes a JMX remote interface
- enabling the remote control.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/cluster.xml b/jonas_doc/core/src/docbook/doc-en/clustering/management/cluster.xml
deleted file mode 100644
index 15a44ee1ba65d4f1d1c88db49d14335d04550da8..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/management/cluster.xml
+++ /dev/null
@@ -1,275 +0,0 @@
-
-
-
- Cluster member management
-
-
-
-
- What is a cluster
-
-
- A cluster is a group of JOnAS instances. The servers within a
- cluster are called cluster members. A server may be a member of several
- clusters in the domain.
-
- A cluster is an administration target in the domain: from the common
- administration point of view, the administrator may monitor the cluster
- or apply to it management operations like deploy or undeploy of applications.
-
-
-
-
- Cluster types
-
-
- There are two main cluster categories:
-
-
-
- Clusters containing instances that are grouped together only to
- facilitate management tasks.
-
-
-
- Clusters containing instances that are grouped together to achieve
- objectives like scalability, high availability or failover.
-
-
-
- The clusters in the first category, called ,
- are created by the domain administrator based on his/her particular needs. The
- grouping of servers (the cluster creation) can be done even though the
- servers are running.
-
- In the second case, the servers which compose a cluster must have a
- particular configuration that allows them to achieve the expected
- objectives. Once servers are started, the administration framework is able to
- automatically detect that they are cluster members, based on configuration
- criteria. Several cluster types are supported by the JOnAS administration
- framework. They correspond to the different roles a cluster can
- play:
-
-
-
- - allow HTTP request load balancing
- and failover based on the mod_jk Apache connector.
-
-
-
- - allow high availability at
- web level based on the Tomcat 5.5 session replication solution. Tomcat 6 will
- be supported soon.
-
-
-
- - enable JNDI clustering and
- allows load balancing at EJB level, based on the CMI protocol
-
-
-
- - allow transaction aware failover
- at EJB level and stateful session bean replication.
-
-
-
- - allow JMS destinations
- scalability based on the JORAM distributed solution.
-
-
-
- - allow JMS destinations high availability
- based on JORAM HA.
-
-
-
-
-
-
- Logical clusters configuration
-
-
- An administrator can create a cluster if he/she needs to group some
- servers into a single administration target. There is no predefined
- criteria to explicitly group servers for administration purpose.
-
- Cluster names and topology can be defined in a static way, using the
- domain configuration file domain.xml. Here is an
- example allowing to create a cluster named mycluster in
- sampleDomain domain, in which servers
- node1 and node2 are grouped together
- for administration purpose.
-
- <domain xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.objectweb.org/jonas/ns/jonas-domain_4_9.xsd">
-<name>sampleDomain</name>
-<description>A domain example</description>
- <cluster>
- <name>mycluster</name>
- <description>A cluster example</description>
- <server>
- <name>node1</name>
- <location>
- <url>service:jmx:rmi://myhost/jndi/jrmp://myhost:2002/jrmpconnector_node1</url>
- </location>
- </server>
- <server>
- <name>node2</name>
- <location>
- <url>service:jmx:rmi://myhost/jndi/jrmp://myhost:2003/jrmpconnector_node2</url>
- </location>
- </server>
- <cluster>
-<domain>
-
- Clusters can also be created dynamically via the
- JonasAdmin management console application running on the master.
-
-
-
-
-
- JkCluster configuration
-
-
- The configuration of is described in the clustering
- configuration chapter.
- This section explains how to make such a cluster manageable from a domain master node.
-
-
-
- To allow cluster member discovery and dynamic cluster creation,
- the workers.properties file required by mod_jk
- should be copied to the master's JONAS_BASE/conf directory.
-
- At start-up, the master reads the
- workers.properties file content. For each balanced
- worker it checks if there is a running server in the domain having the
- appropriate configuration allowing the server to play that worker
- role.
-
- Suppose that the master detects a server in the domain
- corresponding to worker1. Then, it constructs a named
- loadbalancer. This name is given by the load
- balancer worker's name. At this time, the cluster is composed of one
- member named worker1. The member name is given by the
- balanced worker's name.
-
- After a while, a new JOnAS server is started in the domain having
- the configuration corresponding to the worker2. The
- master detects the new member named worker2 and updates the cluster's
- member list.
-
- Here is the loadbalancer with
- workers started, as it appears in the jonasAdmin console of the master:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- TomcatCluster configuration
-
-
- The configuration of is described in the clustering
- configuration chapter.
-
-
-
- the clusterName attribute is mandatory (and
- not set by default in tomcat6-server.xml file). It must be unique
- in the domain and is used for identifying the cluster.
-
-
- For example, lets consider the two JOnAS servers which play the role of
- worker1 and worker2 in the
- myloadbalancer. Suppose
- that these servers, named node1 and
- node2 are configured as members of the
- myTomcatCluster. The
- master detects automatically the Tomcat cluster membership and creates a
- named
- myTomcatCluster. It adds node1 and
- node2 to the cluster's member list.
-
- Here is myTomcatCluster cluster with node1 and node2 members
- running, as it appears in the console
-
-
-
-
-
-
-
-
-
-
-
-
-
- CmiCluster configuration
-
-
- The configuration of is described in the clustering
- configuration chapter.
-
-
- The CMI cluster is automatically detected from the master node (CMI MBeans discovery). As a result,
- the following information is provided:
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/clusterd.xml b/jonas_doc/core/src/docbook/doc-en/clustering/management/clusterd.xml
deleted file mode 100644
index 0aa5f6d412a14c9092619276cc8e3785c44e8eb2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/management/clusterd.xml
+++ /dev/null
@@ -1,545 +0,0 @@
-
-Cluster Daemon
-
- Introduction
-
-
- The goal of the cluster daemon is to enable the remote control of the JOnAS clustered instances through a JMX interface.
-
-
- In a cluster configuration, the cluster daemon is the bootstrap of the JOnAS instances.
-
-
- There is at least one cluster daemon instance per machine.
-
-
-
-
-
-
-
-
-
-
- Configuration
-
-
- In the same manner as a classic JOnAS instance, the cluster daemon reads its configuration in a directory pointed to by a JONAS_BASE variable (or JONAS_ROOT if JONAS_BASE is not set). All the default JONAS_BASE subdirectories and files are not required; the mandatory ones are:
-
-
-
-
-
-
- element
-
-
- description
-
-
-
-
-
-
- $JONAS_BASE/conf
-
-
- Configuration directory
-
-
-
-
- $JONAS_BASE/logs
-
-
- Log directory
-
-
-
-
- $JONAS_BASE/conf/carol.properties
-
-
- Carol configuration file describing the protocol and its parameters (used for the JMX interface)
-
-
-
-
- $JONAS_BASE/conf/trace.properties
-
-
- Trace/Error log configuration file
-
-
-
-
- $JONAS_BASE/conf/jonas.properties
-
-
- This file must be present for enabling the cluster daemon starting but its content is not read, the file can be empty
-
-
-
-
- $JONAS_BASE/conf/clusterd.xml
-
-
- Cluster daemon configuration file, lists the local JOnAS instances and describes their environment (see below)
-
-
-
-
-
-
- clusterd.xml
-
-
- The JOnAS instances controlled by a cluster daemon are configured in the
-
- clusterd.xml
-
- file.
-
-
-<?xml version="1.0"?>
-<cluster-daemon xmlns="http://www.ow2.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.ow2.org/jonas/ns/jonas-clusterd_4_8.xsd">
-
- <name>cd1</name>
- <domain-name>domainSample</domain-name>
- <jonas-interaction-mode>loosely-coupled</jonas-interaction-mode>
-
- <server>
- <name>node1</name>
- <description>Web instance</description>
- <java-home>/usr/java/jdk-ia32/sun/j2sdk1.4.2_10</java-home>
- <jonas-root>/home/pelletib/pkg/jonas_root_sb48</jonas-root>
- <jonas-base>/home/pelletib/tmp/newjc48/jb1</jonas-base>
- <xprm></xprm>
- <auto-boot>false</auto-boot>
- <jonas-cmd></jonas-cmd>
- </server>
-
-...
-
-</cluster-daemon>
-
-
-
-
-
-
-
- Element
-
-
- Description
-
-
-
-
-
-
- name
-
-
- Cluster daemon instance name. Used for building the connector url.
-
-
-
-
- domain-name
-
-
- Domain name to use for launching the JOnAS instance when it is not specified in the start command
-
-
-
-
- jonas-interaction-mode
-
-
- Starting mode of the JOnAS instances:
-
- loosely-coupled
-
- corresponds to background and
-
- tighly-coupled
-
- corresponds to foreground. Typically, when launching in tighly coupled mode a cluster daemon stopping will cause the stopping
- of the managed JOnAS instance.
-
-
-
-
- server/name
-
-
- Name of the JOnAS instance
-
-
-
-
- server/description
-
-
- Description of the JOnAS instance
-
-
-
-
- server/java-home
-
-
- JDK home directory to be used for launching the JOnAS instance
-
-
-
-
- server/jonas-root
-
-
- JOnAS binaries directory to be used for launching the JOnAS instance
-
-
-
-
- server/jonas-base
-
-
- JOnAS configuration directory to use for launching the JOnAS instance
-
-
-
-
- server/xprms
-
-
- JVM parameters to set when launching the JOnAS instance
-
-
-
-
- server/auto-boot
-
-
- If true, start the JOnAS instance when launching the cluster daemon
-
-
-
-
- server/jonas-cmd
-
-
- Optional parameter. If set, specifies the script to use for starting/stopping the JOnAS instance.
- This user script can set the required environment and perform some pre or post processing. By default, the
- jonas
- command is used.
-
-
-
-
-
-
- domain.xml
-
-
- The cluster daemons must be specified and associated to the JOnAS instances in the
-
- domain.xml
-
- file for permitting the remote control of the cluster.
-
-
-
-...
-<cluster-daemon>
- <name>cd1</name>
- <description>cluster daemon 1</description>
- <location>
- <url>service:jmx:rmi://host/jndi/rmi://host:port/jrmpconnector_cd</url>
- </location>
-</cluster-daemon>
-...
-<server>
- <name>node1</name>
- <cluster-daemon>cd1</cluster-daemon>
- ...
-</server>
-...
-
-
- The JMX remote url of the cluster daemon respects the following syntax:
-
-
- service:jmx:rmi://
-
-host
-
-/jndi/rmi://
-
-host
-
-:
-
-port
-
-/
-
-protocol
-
-connector_
-
-name
-
- with the following meanings:
-
-
-
-
- host
-
-
- ip alias or ip address of the machine that hosts the cluster daemon (by default localhost, can be overridden through the carol.properties file)
-
-
-
-
- port
-
-
- tcp listen port of the registry embedded in the cluster daemon (by default 1806, can be overridden through the carol.properties file)
-
-
-
-
- protocol
-
-
- protocol used for accessing the JMX interface (by default irmi, can be overridden through the carol.properties file)
-
-
-
-
- name
-
-
- cluster daemon instance name (defined in the clusterd.xml file)
-
-
-
-
- Running the Cluster Daemon
-
-
- The cluster daemon is started using the command
-
- jclusterd
-
- . The possible options are:
-
-
-
-
-
-
- option
-
-
- description
-
-
-
-
-
-
- start
-
-
- Start the cluster daemon.
-
-
-
-
- stop
-
-
- Stop the cluster daemon.
-
-
-
-
- -DdomainName
-
-
- Domain name to be used for starting the JOnAS instance. This value is used when it is defined both here and in the clusterd.xml file.
-
-
-
-
- -carolFile <my-carol.properties>
-
-
- Path to the carol.properties file to be used. If not specified, the file is loaded from $JONAS_BASE/conf. If the file is not found, the default values (localhost, 1806, irmi) are used.
-
-
-
-
- -confFile <my-clusterd.xml>
-
-
- Path to the clusterd.xml file to load. If not specified, the file is loaded from $JONAS_BASE/conf.
-
-
-
-
-
-
- JMX Interface
-
-
- The cluster daemon provides a JMX interface that enables control of the JOnAS instances. The following operations are available:
-
-
-
-
-
-
- Operation
-
-
- Description
-
-
-
-
-
-
- String getServersList()
-
-
- Return the list of JOnAS instances
-
-
-
-
- int pingJOnAS(String name)
-
-
- Ping a JOnAS instance identified by its name
-
-
-
-
- void startJOnAS(String name, String domainName, String prm)
-
-
- Start a JOnAS instance identified by its name. The parameter
-
- domainName
-
- (optional) provides the capability to specify the domain name. The parameter
-
- prm
-
- (optional) provides the capability to set some JVM parameters.
-
-
-
-
- String startAllJOnAS(String domainName, String prm)
-
-
- Start all the JOnAS instances known in the cluster daemon configuration. The parameter
-
- domainName
-
- (optional) provides the capability to specify the domain name. The parameter
-
- prm
-
- (optional) provides the capability to set some JVM parameters.
-
-
-
-
- void stopJOnAS(String name)
-
-
- Stop a JOnAS instance identified by its name
-
-
-
-
- String stopAllJOnAS()
-
-
- Stop all the JOnAS instances known in the cluster daemon configuration
-
-
-
-
- String getJavaHome4Server(String name)
-
-
- Get the JAVA_HOME defined for a JOnAS server
-
-
-
-
- String getJonasRoot4Server(String name)
-
-
- Get the JONAS_ROOT defined for a JOnAS server
-
-
-
-
- String getJonasBase4Server(String name)
-
-
- Get the JONAS_BASE defined for a JOnAS server
-
-
-
-
- void reloadConfiguration()
-
-
- Reload the configuration file of the cluster daemon
-
-
-
-
- void addServer(String name, String description, String javaHome, String jonasRoot, String jonasBase)
-
-
- Add a definition of a JOnAS instance to the cluster daemon configuration. The change is saved in the configuration file.
-
-
-
-
- void removeServer(String name)
-
-
- Remove a definition of a JOnAS instance in the cluster daemon configuration. The change is saved in the configuration file.
-
-
-
-
- void modifyServer(String name, String description, String javaHome, String jonasRoot, String jonasBase)
-
-
- Modify the definition of a JOnAS instance in the cluster daemon configuration. The change is saved in the configuration file.
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/cmi.xml b/jonas_doc/core/src/docbook/doc-en/clustering/management/cmi.xml
deleted file mode 100644
index 4ea16e047aa2595503387085f71848a4213b4d11..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/management/cmi.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
-
- CMI service management
-
- Introduction
-
- CMI relies on JMX for its management. It provides a set of MBeans for retrieving
- management informations and performing some operations such as modifying the load-balancing logic.
-
- All the CMI management is done at the server side and changes are propagated to the clients in a
- transparent way for the operator.
-
- The CMI parameters are dynamic, the changes are taken into account in a near real-time (at the next
- refresh configuration period).
-
- jonasAdmin console
-
- jonasAdmin provides a CMI management page which is accessible from any member in the CMI cluster by clicking
- on the server node in the navigation tree and by selecting the CMI tab.
-
-
-
-
-
-
-
-
- The page contains the following elements:
-
-
-
- Global/Refresh time: specifies the client configuration refresh time period. When a policy changes or a parameter such as
- the load factor, the parameter indicates the maximum propagation delay to the client side.
-
-
-
-
- Servers for each protocol: lists the servers in the cluster and the enabled protocols. More detailed information is
- delivered on the links.
-
-
-
-
- Providers/Blacklist: disables smoothly a server in the cluster, i.e. new connections are refused
- whereas existing one are still served.
-
-
-
-
- Clusters: lists the different cluster names. 'System' is a reserved cluster name gathering internal objects and is
- reserver for maintenance or advanced uses.
-
-
-
-
- When selecting a cluster name in the bottom list, a new tab shows the clustered EJBs associated with this logical name:
-
-
-
-
-
-
-
-
- And then you can access to an object information page by clicking on a clustered EJB in the list:
-
-
-
-
-
-
-
-
- The page contains the following elements:
-
-
-
- Global/Name: JNDI name of the clustered object.
-
-
-
-
- Global/Cluster name: Cluster name associated with the clustered object.
-
-
-
-
- Global/Interface: Interface class name of the clustered object.
-
-
-
-
- Deployed server: List of servers where the clustered object is deployed.
-
-
-
-
- Load-balancing infos: Policy and strategy of the clustered object.
-
-
-
-
- Pool infos: Parameters of the stub pool associated with the clustered object.
-
-
-
-
-
- Dynamic update of the load-balancing parameters
-
- Policy and strategy
-
- Policies and strategies can be updated dynamically from jonasAdmin console.
-
- From the clustered object information page, you can select another policy :
-
-
-
-
-
-
-
-
- or strategy :
-
-
-
-
-
-
-
-
- Refer to the section for more information.
-
-
-
- Load-factor
-
- Load-factor can be updated dynamically by clicking on a server in the CMI tab page :
-
-
-
-
-
-
-
-
- The server information page contains a load-factor which can be modified dynamically:
-
-
-
-
-
-
-
-
-
-
-
- MBeans
-
- CMI provides a MBean for management whose name is:
- <domain name>:type=cmi,name=CMIServer,J2EEServer=<JOnaS instance name>
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/domain.xml b/jonas_doc/core/src/docbook/doc-en/clustering/management/domain.xml
deleted file mode 100644
index 2b79b7531f57d0b70812ae182edb319a2f32d1f8..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/management/domain.xml
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
- domain configuration
- What is a domain
-
-
- A domain represents an administration perimeter which is under the
- control of an administration authority. It provides at least one common
- administration point for the elements in the domain.
-
- A JOnAS domain may contain:
-
-
-
- JOnAS instances or servers
-
-
-
- groups of instances called clusters
-
-
-
- cluster daemons, elements used for the remote control of
- instances and clusters
-
-
-
- A common administration point is represented by a JOnAS instance
- having a particular configuration and playing the role of master. A master has the knowledge of the domain
- topology and allows executing administration operations on the rest of the
- servers and on the clusters. It also allows the monitoring of the domain
- elements.
-
- The administered elements are identified by their names, that have
- to be unique within the domain, and the domain name.
-
- Naming policy
-
-
- Names can be defined in a static way, through the
- domain.xml configuration file, or dynamically, by
- starting new elements in the domain. For example, when starting a JOnAS
- instance, the administrator can specify the server
- name using the -n option and the domain
- name by setting the domain.name environment
- property. The uniqueness of the starting server's name is enforced by
- the discovery service.
-
-
-
- What is a domain configuration
-
-
- A domain configuration consists in the domain topology - the
- description of the elements composing the domain (servers, clusters, cluster daemons), and the state of the
- elements in the domain, as viewed from the common administration
- point.
-
- The domain configuration dynamically evolves by starting or stopping
- servers and by creating or removing clusters in the domain.
-
-
- How to configure a domain
-
-
- Choose the domain name and configure the master
-
-
- The first step is to choose a name for the domain and to choose a server to represent the
- common administration point. This server must be configured as a master by setting to true the
- jonas.master property. Also, to allow dynamic domain management, add the discovery
- service in the JOnAS services list (jonas.services
- property) in jonas.properties file.
-
- The domain name is not a configuration property for the master
- (neither for any server in the domain), but it has to be specified when
- starting the master.
-
- Before starting the master, the administrator can define the
- domain's initial topology by editing the domain.xml configuration file.
-
-
- Define the domain initial topology
-
-
- This step is optional. It consists in defining the domain elements
- using the domain.xml configuration file located in
- the master's configuration directory. If the administrator has no specific
- configuration needs, it should at least check the name element,
- and set its value to the chosen name. That file
- can also be used to define a default user name and password (that may be encoded) to use when
- connecting to servers and cluster daemons. Moreover, the administrator
- can choose to remove the domain.xml file.
-
- The elements that can be defined in domain.xml are:
-
-
-
- server elements: allow to define a server in the domain, or a
- server in a cluster. A server has a name, a description, a location
- and optionally a user name and password as well as an associated
- cluster daemon. The location can be represented by a list of JMX
- remote connector server URLs.
-
-
-
- cluster elements: allows to group servers in a logical
- cluster.
-
-
-
- cluster daemon elements: allows to define a cluster daemon in
- the domain. A cluster daemon element has a name, a description, a
- location and optionally a user name and password. The location can be
- represented by a list of JMX remote connector server URLs.
-
-
-
- domain.xml
-
-
-<?xml version="1.0" encoding="UTF-8"?>
-<domain xmlns="http://www.objectweb.org/jonas/ns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.objectweb.org/jonas/ns http://www.objectweb.org/jonas/ns/jonas-domain_4_9.xsd">
- <name>sampleCluster2Domain</name>
- <description>A domain for sampleCluster2 servers management</description>
-
- <cluster-daemon>
- <name>cd</name>
- <description></description>
- <location>
- <url>service:jmx:rmi://localhost/jndi/rmi://localhost:1806/jrmpconnector_cd</url>
- </location>
- </cluster-daemon>
- <cluster>
- <name>mycluster</name>
- <description>A cluster for sampleCluster2</description>
- <server>
- <name>node1</name>
- <location>
- <url>service:jmx:rmi://localhost/jndi/rmi://localhost:2002/jrmpconnector_node1</url>
- </location>
- <cluster-daemon>cd</cluster-daemon>
- </server>
- <server>
- <name>node2</name>
- <location>
- <url>service:jmx:rmi://localhost/jndi/rmi://localhost:2022/jrmpconnector_node2</url>
- </location>
- <cluster-daemon>cd</cluster-daemon>
- </server>
- <server>
- <name>node3</name>
- <location>
- <url>service:jmx:rmi://localhost/jndi/rmi://localhost:2032/jrmpconnector_node3</url>
- </location>
- <cluster-daemon>cd</cluster-daemon>
- </server>
- <server>
- <name>node4</name>
- <location>
- <url>service:jmx:rmi://localhost/jndi/rmi://localhost:2043/jrmpconnector_node4</url>
- </location>
- <cluster-daemon>cd</cluster-daemon>
- </server>
- </cluster>
-
-</domain>
-
-
-
-
- Domain configuration at master start-up
-
-
- Start the master in the domain:
-
- jonas start -n masterName -Ddomain.name=domainName
-
- Note that the domain name is specified by setting a
- domain.name environment property.
-
- Once started, the administrator can manage and monitor the
- following elements in the domain through JonasAdmin, or another JMX
- based administration application (such as jconsole), running on the master:
-
-
-
- servers declared in the domain.xml file.
-
-
-
- other servers already started in the domain having the
- discovery service enabled.
-
-
-
- clusters declared in the domain.xml file.
-
-
-
- clusters detected by the administration framework
-
-
-
- cluster daemons declared in the domain.xml file.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/ha.xml b/jonas_doc/core/src/docbook/doc-en/clustering/management/ha.xml
deleted file mode 100644
index 29d290d4279f9a7bb5c2e5ace9ec64305cd7281d..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/management/ha.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
- HA service management
-
- The JOnAS administration console offers to access
- several items of information about the HA service's replication algorithm and allows the configuring of several parameters related
- to its behavior.
- The related information and parameters include:
-
-
- The name of the service.
-
-
- The binded name for the MBean. The name can be changed.
-
-
- The number of replicated messages sent by the algorithm to the cluster's replicas.
-
-
- The average size of the replicated messages sent.
-
-
- The total size of the replicated messages sent.
-
-
- The current JGroups configuration file name used.
-
-
- The current timeout established to clean memory information related
- to SFSBs required by the algorithm. When this timeout expires, the information is garbage-collected.
- This avoids increasing the memory used by the algorithm. The administrator can set a different timeout if required.
-
-
- The datasource name required by the algorithm to keep track of current running transactions (See Transaction Table Configuration section above).
- The default datasource is set through the "jonas.service.ha.datasource" parameter in the "jonas.properties" configuration file, but the administrator can configure different datasources and can set here, the name of the one that will be used by the algorithm, once JOnAS has started.
-
- It is recommended not to change the Datasource once the HA service is running.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/principles/clustering.xml b/jonas_doc/core/src/docbook/doc-en/clustering/principles/clustering.xml
deleted file mode 100644
index 7f3e6bfc4ee91085c61a90406cdd987adbb8c6a8..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/principles/clustering.xml
+++ /dev/null
@@ -1,516 +0,0 @@
-
-
-
- Load-balancing and high availability
-
-
-
-
- Farming for scalability
-
-
- The scalability of a system lies in its capacity to evolve in power by adding or removing software and
- hardware elements without impact on its architecture.
-
- The scalability aims at adjusting the system bandwidth to fit with the performance needs of the service.
- It is achieved by replicating the resources within a farm according to the input requests load.
-
-
-
-
-
- Farming for availability
-
-
- Farming provides a first level of availability: when a resource failure occurs, the request will be
- submitted again (fail-over mechanism) and will be routed towards another resource. In this case, the failure is not transparent to
- the user whose request is processed by the failed resource. But the service is not interrupted as
- the user can restart its operation. For the users whose requests are processed by other resources within the farm,
- the failure will be transparent and the only impact will be the response time due to load distributing
- among a smaller number of resources.
-
-
-
-
-
- Clustering for high availability
-
-
- The high availability of a system lies in its capacity to serve requests under heavy load and despite
- any component failure.
-
- A highly available architecture contains some replicated elements. The number of replicas determines
- the number of simultaneous failures the system is able to tolerate without interruption of service. According
- to the fail over implementation, the service may be damaged during a short period. This service malfunction
- may impact users at different levels.
-
- Replication mechanisms contribute to the continuity of service and enable to mask the resources failures to the users
- (or at least to minimize their visibility). Such mechanisms do impact the system sizing as they consume more resources
- or for a same sizing do impact the global performance.
-
-
-
-
-
- HTTP/WEB farm
-
-
-
-
- Rationale
-
-
-
- Ensuring the scalability of a web application
- Improving the availability of a web application (without session replication)
-
-
- HTTP farming consists in distributing the processing load across N JOnAS instances.
- The same application is deployed all over the cluster and a request may be processed by any instance.
-
-
-
-
- Principle
-
- A load-balancer is setup in front of the JOnAS instances. The intermediate device
- handles the site url in order to mask the JOnAS instances multiplicity to the users. The load-balancer
- supports the HTTP session affinity in order to route a client towards the server hosting its session.
-
- A load-balancer may be a software or a hardware device or a mix of two. The application server instances
- may be collocated on a same machine or may be distributed across several machines.
-
- The intermediate device may be duplicated for avoiding a SPOF.
-
- Hereinafter the figure illustrates a HTTP farm composed of a L4 switch, 2 Apache servers and N JOnAS instances.
-
-
-
-
-
-
-
-
- The Apache server is configured with the mod_jk plugin for ensuring the load-balancing between the JOnAS instances
- and the session affinity through the AJP protocol. Furthermore mod_jk supports the failover when a server crashes. The Apache server may be
- used for caching the static pages, performing compression or encryption and, thus, can reduce the application servers
- load.
-
-
- From Apache 2.2, mod_proxy_balancer is alternative to the mod_jk plugin. It supports AJP protocol but also HTTP and FTP.
-
-
- The number of JOnAS instances must be determined according to the expected performance.
- The Apache server being a SPOF, it should be duplicated and a network device distributes the load at the TCP level
- between them. Of course the network device should be replicated as well (primary/backup mode).
-
-
-
-
-
- Use case
-
- HTTP farming is very common and widespread. It fits well with the more frequent requirements in terms
- of scalability and availability. Furthermore, this architecture pattern can be used for implementing a
- cluster of web service providing that the web service is standard and is stateless.
-
- When the application server tier gets a bottleneck, this architecture enables to improve the performance
- by adding some JOnAS instances.
-
- The application server may be unstable, in particular under heavy load. This architecture enables to
- improve the availability by reducing the impact of failures. However the failures are not transparent
- to the users who are connected to the in-fault server since they lose theirs sessions. To be note that
- after a crash, the load is distributed between the survivors servers what may impact the performance.
-
-
-
-
-
-
-
- HTTP/WEB cluster
-
-
-
-
- Rationale
-
-
- HTTP clustering is used when service continuity of web application is expected and when failures must be
- transparent for the users. It consists in replicating the HTTP sessions on P JOnAS instances
- among N.
-
-
-
-
- Principle
-
- The session context is replicated across a replication domain. Domain members are met through a multicast based protocol.
- The session replication takes place through point to point protocol (TCP based) and the replication mode can be synchronous
- (the user response is sent after the replication) or asynchronous (the user response is immediate and the replication is delayed).
-
- Hereinafter the figure illustrates cluster with 4 JOnAS instances behind an Apache server. Requests are load-balanced across the 4
- instances . The jk connector handles the session affinity and ensures that all the requests related to one session are routed towards the same
- instance. 2 replication domain are defined and each session is replicated on 2 JOnAS instances hosting by 2 different nodes for ensuring
- not to lose a session when a crash node occurs.
-
-
-
-
-
-
-
-
- The Apache server can be duplicated for avoiding a SPOF.
-
-
- Such a configuration lies both in the Apache/jk elements (related to the load-balancing) and in the JOnAS instances (related to
- the session replication).
-
- At the jk level, a load-balancer worker is defined with 4 AJP workers. Session affinity is set and two domains are configured.
- At the JOnAS level, the tomcat6-server.xml file defines an AJP connector, a jvmRoute attribute set to a hosting domain and
- a cluster element for the replication. To be noted that the web application meta-data must be defined as distributable through the distributable
- element.
-
-
-
- From Apache 2.2, mod_proxy_balancer is alternative to the mod_jk plugin. It supports AJP protocol but also HTTP and FTP.
-
-
-
-
-
- Use case
-
- HTTP clustering must be used only when the HTTP session loss is not acceptable. A server failure is visible only for the connected users who have an on-going request processed by the failed instance.
- The fault will be transient, the request will be sent towards another server which hosts a backup of the session.
-
- The HTTP session replication impacts the performance and causes an overhead on the system resources consumption (memory. network, cpu). Moreover, the replication
- in a synchronous mode induces an extra latency.
-
- For reducing the performance impact, it is recommended to use a dedicated network interface for the HTTP session replication (separated from the AJP requests) and to limitate
- the replication across 2 JOnAS instances (replication domain).
-
-
-
-
-
-
- EJB farm
-
-
-
-
- Rationale
-
-
- EJB farming aims at providing:
-
-
- scalability of the EJB tier
- availability of the EJB tier (without session replication)
-
-
- EJB2 and EJB3 farming are supported by JOnAS.
-
- The EJB tier duplication is not visible for the client.
-
-
-
-
- Principle
-
- EJB farming relies on the CMI component which enables clustering on top of different RMI protocols such as
- jrmp, iiop or irmi.
-
- When a client program intends to access an EJB, it invokes a JNDI registry lookup for getting an EJB home or EJB remote proxy.
- In an EJB farm, the CMI registry is replicated in order to provide a cluster view to the client. The cluster view represents a
- a list of JOnAS nodes hosting the EJB with additional clustering meta-datas. The replication and the
- group membership rely on the JGroups's group communication protocol. The cluster view is updated dynamically
- through a control channel and a dedicated control thread in the client JVM. The CMI client proxy ensures the load-balancing and the
- fail-over of the EJB invocations.
-
- In the clustering meta-datas, the cluster logic defines both the load-balancing and fail-over algorithms.
- The cluster logic can be customized. A set of default policies
- are provided with CMI: round-robin, first available, random, etc... For each one, a strategy can be added, for example,
- local preference (for dealing with the collocated mode)
- or weighted round-robin (for adding a weighting).
-
- Hereinafter the figure illustrates a EJB farm in a 2 tier architecture with both web client and java client.
-
-
-
-
-
-
-
-
- The Apache server is configured with the mod_jk plugin for ensuring the load-balancing between the JOnAS instances
- and the session affinity. Two JOnAS instances (1-2) host the presentation layer and are configured with a servlet
- container. Two JOnAS instances (3-4) host the business layer and are configured with an ejb container. The CMI registry
- is replicated across the cluster members in order to share informations about EJBs deployment and topology. Both servlet
- and java clients do access to EJB and do benefit from load-balancing and availability. In the case of a SFSB (stateful session bean),
- the EJB is created only in one instance and the state is lost if the JOnAS instance crashes, state replication is addressed in
- .
-
-
- The JOnAS instances number must be determined according to the expected performance.
-
-
-
-
-
- Use case
-
-
- This architecture pattern is used either when the ejb tier is separated from the web tier and/or when ejb client are fat java programs.
-
-
-
-
-
- EJB distribution
-
-
- Rationale
-
- EJB distribution aims at deploy a JavaEE application which is distributed on many JOnAS instances.
-
-
-
-
- Principle
-
-
- EJB distribution also relies on the CMI component.
-
- Without CMI, EJB needs to be modified to allow invocations on the remote EJBs, for example by setting the Context.PROVIDER_URL
- of the remote registries or by using the specific features of the IIOP protocol. With CMI, EJB can continue to access to the remote EJBs
- as if they were locally deployed.
-
-
-
-
-
- Use case
-
-
-
- This architecture pattern is used on the EJB tier.
-
-
-
-
-
-
-
- EJB cluster
-
-
-
-
- Rationale
-
-
- EJB clustering is used when service continuity of ejb application is required and when any failure must be
- transparent for the users. It relies on the stateful EJB replication and manages the transaction in order to:
-
-
- ensure that the replicated system do have a similar behavior of the not replicated one,
- in case the client doesn't abort, the transaction is executed exactly once, and no more than once otherwise.
-
-
-
-
-
- Principle
-
- The EJB replication relies on
-
- a mechanism for replicating the state of the EJBs and the business methods invocation return values. This mechanism
- is provided by the HA service and different implementations do exist (JGroups) or are under development (Terracotta, Pair replication);
-
- a mechanism for marking the transaction in a persistent database. The information is used at the fail-over time to determine
- whether the transaction was aborted and whether the request must be replayed.
- a smart proxy in charge of redirecting the client calls towards another replica when a failure occurs.
-
-
- An EJB is replicated only if it is specified as replicated in the component meta-datas (annotation and/or deployment descriptor).
-
- A stateful ejb is created on a JOnAS instance selected according to a load-balancing algorithm (default is round-robin). After the creation
- all the business methods invocations are routed to this JOnAS instance unless a failure occurs.
-
- Hereinafter the figure illustrates a EJB cluster.
-
-
-
-
-
-
-
-
- Each JOnAS instance of the EJB tier is configured with the HA service in charge of the session replication. CMI client API supports
- fail-over for both EJB2 and EJB3.
-
-
-
-
- Use case
-
- This architecture pattern is recommended when the application contains some stateful EJB and doesn't tolerate
- any session loss and any interruption of service. However the user must be aware that this kind of setting does impact
- highly the performance as the session is replicated between the JOnAS server at each method call.
-
-
-
-
-
-
-
- JMS farm
-
-
-
-
- Rationale
-
-
-
- JMS Farming aims at:
-
-
- ensuring the scalability of asynchonous applications,
- improving the availability of asynchonous applications.
-
-
- JMS farming consists in distributing the messages load across N JOnAS instances.
- The same application is deployed all over the cluster and a message may be processed by any instances.
-
-
-
-
- Principle
-
- JMS farming relies on the distribution capabilities of the JORAM product. Load-balancing can take place both
- at the server side or at the client side. When a server crashes, pending messages are lost unless a specific mechanism
- is set up at the disk level (such mechanisms are addressed in ).
-
- At the server side, messages can be redirected towards other JOnAS instances when the load reaches a threshold.
-
- Hereinafter the figure illustrates a JMS farming with a distribution control at the server side.
-
-
-
-
-
-
-
-
- At the client side, messages can be distributed across a set of JOnAS instances according to a load-balancing algorithm (default is random).
-
-
- Hereinafter the figure illustrates a JMS farming with a distribution control at the client side.
-
-
-
-
-
-
-
-
-
-
-
- Use case
-
- JMS farming fits well with the need of scalability and availability of the EDA (Event Driven Architecture) applications. When
- the application provides a JMS based asynchronous interface, the JORAM's clustering capabilities do enable to equilibrate the load
- either from the client side or from the server side. JMS farming is recommended when the message loss is acceptable and constitutes
- a good compromise in terms of performance and flexibility.
-
-
-
-
-
-
- JMS cluster
-
-
-
-
- Rationale
-
-
- JMS cluster is used when the messages loss is not acceptable and when the interruption of service is not permitted.
-
-
-
-
- Principle
-
- Two solutions are available for ensuring the messaging high availability with JOnAS:
-
-
- through the persistent mode of JORAM combined with some cluster features at the operating system level (NFS, HA/CMP product, Veritas product, ...).
- The HA OS must provide a HA network address (virtual ip address) which can be reallocated dynamically when a node failure occurs. JMS objects, topics
- and queues, must be stored on a shared disk space (external disk array or shared disk space as NFS). JORAM supports 2 storage types : file and database.
- When a JOnAS instance fails, the on-going messages are retrieved by a backup instance in the persistent storage, the virtual IP address
- is bound to the backup node and the messages are processed.
-
-
-
-
-
-
-
-
-
- through JORAM HA concept delivered with the JORAM project. The mechanism relies on a Master/Slaves approach. At one point, only the master instance
- is active and all the JMS requests are replicated towards the slaves instances. The JMS replication is synchronous and implemented with JGroups.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Use case
-
- This architecture pattern is recommended when the application doesn't tolerate any message loss and any interruption of service.
- Two mechanisms are available: the first one relies on operating system HA features and the JORAM's persistent mode whereas the second one
- relies on the native JORAM capabilities and a replication of the JMS requests.
- In case of the underlying OS provides HA features, the first solution is simpler in term of configuration and provides better performance.
- Otherwise JORAM HA solution can be considered and the user must pay attention to the performance impact.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/principles/management.xml b/jonas_doc/core/src/docbook/doc-en/clustering/principles/management.xml
deleted file mode 100644
index c61ba1672cda16e46ef4943ecd5c15c611b5faa2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/principles/management.xml
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
-
- Management
-
-
-
-
- Domain management
-
-
- Each JOnAS instance can be managed through a local jonasAdmin console. The domain management
- enables to manage a set of JOnAS instances from a centralized jonasAdmin console.
-
- A domain is a set of JOnAS instances that are running under the same management authority. The instances within
- a domain can be standalone, distributed or gathered in a cluster as well. The instances are managed from an unique console
- deployed in a dedicated JOnAS instance named master, configured with the domain management enabled.
-
- Domain management is composed of the following features:
-
- discovery service for detecting automatically the instances and the clusters.
- JOnAS instance and cluster monitoring for maintaining a JOnAS instance state view and a cluster view as well as
- for tracking some indicators.
- JOnAS instance control for remote starting or remote stopping of the JOnAS instances.
- domain-wide deployment for deploying Java EE modules across a set of JOnAS instances or clusters.
- instance configuration for setting or retrieving a configuration attribute from a JOnAS instance as available through
- a local jonasAdmin console.
-
- Several interfaces are provided:
-
- console with the centralized jonasAdmin console.
- command with the jonas admin command which has been extended to deal with domain.
- JMX through some domain management MBeans.
-
-
- The domain management is optional. When enabled, JOnAS instance within a domain must have an uniq name instance.
-
-
-
-
-
- Domain management architecture
-
-
- The domain management relies on:
-
- MBeans objects deployed in each JOnAS instance and accessible through the JMX remote interface.
- One or several management JOnAS instances masters hosting the domain management features.
- Optionaly some cluster daemons enabling to control remotely the JOnAS instances.
-
-
-
-
-
-
-
-
-
-
- Master instance
-
-
- A dedicated JOnAS is assigned with the master role which enables the domain management feature. The jonasAdmin console is deployed
- in this instance and is no more necessary in the others ones.
-
- The domain management functions are exposed through a set of MBeans that are used by the jonasAdmin console.
-
- The master instance interacts with the managed JOnAS instances and the cluster daemons through JMX. The master node periodically polls
- the managed instances for providing states and statistics.
-
- Several master instances can be defined for high availability, only one must be enabled at one point.
-
-
-
-
-
- Cluster daemon
-
-
- The cluster daemon is in charge of controlling the JOnAS instances (start/stop) that are collocated on the same machine. It is an optional component
- in the domain management infrastructure and can be added on an existing configuration.
-
- It is accessible through a JMX Remote interface and provides the start/stop operations. By default, it relies on the native JOnAS command for
- driving the JOnAS instances. The user may put its own commands for setting a particular environment before starting/stopping a JOnAS node.
-
-
-
-
-
- Managed instance
-
-
- The managed JOnAS instances must respect some conventions for domain management:
-
-
- the managed instance must be aware of the domain.
- the managed instance must have an unique name in the domain.
-
-
- Both domain name and instance name are specified in the starting command:
- jonas start -n instance_name -Ddomain.name=domain_name.
-
-
-
-
-
- Discovery service
-
-
- The discovery service aims at detecting when a new JOnAS instance appears or when a JOnAS instance leaves the domain. It enables
- the master instance to retrieve the managed instances without any prior informations about them.
-
- Two implementations of the discovery service are available (the choice is done by configuration):
-
- a IP multicast based implementation.
- a JGroups based implementation. The group communication protocol stack can be configured on top of UDP
- or TCP.
-
- The first one relies on IP multicast whereas the second one uses point to point communication.
- If the managed instances cannot be discovered automatically due to the network configuration or the administration policies, the domain
- topology can be described statically in the domain.xml file.
-
-
-
-
-
- Administration interfaces
-
-
- JOnAS provides different administration interfaces:
-
- a graphical console with jonasAdmin console that can be centralized if deployed in the master instance.
- a jonas admin command has been extended for supporting the domain management feature (remote control, cluster-wide
- deployment and so on.
- a JMX interface through the JOnAS MBeans.
- a EJB interface through the mejb.
- a Web Service interface through the mejb.
-
-
-
-
-
-
-
-
-
- Cluster management
-
-
- For the management point of view, a cluster is a group of JOnAS instances. The JOnAS instances within a
- cluster are called cluster members. A JOnAS instance may be a member of several clusters in the domain.
-
- A cluster is an administration target in the domain: from the common
- administration point of view, the administrator may monitor the cluster or apply to it management operations like
- deploy or undeploy of applications.
-
- There are two main cluster categories:
-
-
-
- Clusters containing instances that are grouped together only to
- facilitate management tasks.
-
-
-
- Clusters containing instances that are grouped together to achieve
- objectives like scalability, high availability or failover.
-
-
-
- The clusters in the first category, called ,
- are created by the domain administrator based on his/her particular needs. The
- grouping of servers (the cluster creation) can be done even though the
- servers are running.
-
- In the second case, the servers which compose a cluster must have a
- particular configuration that allows them to achieve the expected
- objectives. Once servers are started, the management domain feature is able to
- automatically detect that they are cluster instances, based on configuration
- criteria and MBeans discovery. Several cluster types are supported by the domain
- management function. They correspond to the different roles a cluster can
- play:
-
-
-
- - allow HTTP request load balancing
- and failover based on the mod_jk Apache connector.
-
-
-
- - allow high availability at
- web level based on the Tomcat HTTP session replication solution.
-
-
-
- - enable JNDI clustering and
- allows load balancing at EJB level, based on the CMI protocol
-
-
-
- - allow stateful session bean high availability.
-
-
-
- - allow JMS destinations
- scalability based on the JORAM distributed solution.
-
-
-
- - allow JMS destinations high
- availability based on JORAM HA.
-
-
-
-
-
-
- JASMINe project
-
-
- Advanced administration features are provided through the JASMINe project:
-
- JASMINe Design for building a cluster configuration through a graphical interface.
- JASMINe Deploy both for deploying the middleware and the applications across a distributed infrastructure.
- JASMINe Monitoring for helping the operator to detect errors and for tracking the performance.
- JASMINe SelfManagement for improving the system reliability and performance automatically.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/principles/terminology.xml b/jonas_doc/core/src/docbook/doc-en/clustering/principles/terminology.xml
deleted file mode 100644
index 4e0ce9ae98c7f3b9e41a602fa0e086b5fa1dabdd..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/principles/terminology.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
- Terminology
-
-
-
-
- Farm
-
-
- A farm is a set of similar JOnAS nodes gathered for ensuring scalability and a first level of availability.
-
-
-
-
-
- Cluster
-
-
- A cluster is a set of similar JOnAS nodes gathered for ensuring high availablity.
-
- note: the cluster term can be used in a more general sense which covers both the scalability
- and high availability aspects
-
-
-
-
-
-
- Replication domain
-
-
- A replication domain is a subset of a JOnAS cluster which determines the replication boundaries.
- The concept ensures the scalability of the replication when dealing with a large number of nodes.
-
-
-
-
-
- JOnAS node
-
-
- A JOnAS node or JOnAS instance is an autonomous server with its
- own configuration and running in a dedicated JVM. Several JOnAS nodes may lie in the same
- virtual or real system.
-
-
-
-
-
- JOnAS domain
-
-
- A JOnAS domain gathers a set of JOnAS nodes under the same administration authority.
- A domain is defined by a name and the JOnAS nodes belonging to a domain must have an unique name within this domain.
-
-
-
-
-
- Master node
-
-
- A master node is a JOnAS node of a domain dedicated to the administration. It enables to
- manage the JOnAS instances of a domain from a centralized point. Several master nodes can be defined within a domain.
-
-
-
-
-
- SPOF
-
-
- SPOF stands for Single Point Of Failure.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jasmine.xml b/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jasmine.xml
deleted file mode 100644
index 4a9a03e34a9661035838d4975e2334e7a9a8c4fd..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jasmine.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
-
- JASMINe
-
-
-
-
- Introduction
-
-
- JASMINe is an OW2 project (http://jasmine.ow2.org) aiming at
- developing an advanced administration tool for SOA platform and Java EE
- cluster. JASMINe supports both JOnAS 4 and JOnAS 5. JASMINe provides the
- following features :
-
- JASMINe Design: a GUI tool for building a
- distributed configuration such as JOnAS cluster and storing it into
- an EMF format.
-
-
-
- JASMINe Deploy: framework for ensuring
-
-
- the middleware deployment from a model built with
- JASMINe Design. The solution relies on Jade for the push mode.
- Jade is an open source framework for building autonomic system
- and provides a deploy functionality. Push mode means that the
- middleware is deployed from a centralized point (jade boot)
- towards a distributed infrastructure (set of jade nodes). In
- the push mode, the deployment is triggered by the centralized
- point whereas the deployment is controlled from the
- distributed infrastructure in the pull mode. Pull mode is
- supported through a script getting the configuration
- description through an URL.
-
-
-
- the client migration between either different
- application versions hosted within a same JOnAS instance or
- different middleware instances distributed against different
- machines (virtual or not).
-
-
-
-
-
- JASMINe Monitoring: set of tools for
-
-
- monitoring the performance. A event processing
- infrastructure is provided for collecting and storing
- monitoring datas and for visualizing some indicators into a
- Web 2.0 console.
-
-
-
- detecting errors. A rules engine is connected to the
- event infrastructure and enables to implement some error
- detections rules which may generates some alerts for notifying
- the operator when a fault is encountered.
-
-
-
-
-
- JASMINe Self-Management: some autonomic
- managers which implement some self-healing and self-optimization
- operations. Examples of such rules are load-balancer optimizer
- according to the current node load or the memory leak recovery by a
- JVM reboot.
-
-
-
-
-
-
- JASMINe Design
-
-
- JASMINe Design enables to describe a distributed middleware
- configuration through a Eclipse EMF/GMF graphical interface. Typically you
- may define your JOnAS cluster configuration with an Apache frontal, some
- web level instances, some ejb level instances and a database. The tools
- provides some wizards for managing some resources such as the port
- numbers, the instance names and so on.
-
-
-
-
-
-
-
- Once the configuration is built, JASMINe deploy is used for
- deploying it against a physical or virtual infrastructure.
-
- See the JASMINe project
- web site for more detailed information and for getting the
- tool.
-
-
-
-
- JASMINe Monitoring
-
-
- JASMINe Monitoring provides an infrastructure for supervizing a
- JOnAS distributed configuration with:
-
- A JMX probe, named MBeanCmd, for
- collecting monitoring data through a JMX interface. Some built-in
- options are provided for getting some well-known application server
- indicators such as the transaction throughput or the current HTTP
- session number.
-
-
-
- A events mediation infrastructure enabling to gather,
- aggregate, filter and store the monitoring events.
-
-
-
- A Web 2.0 console (Eos console) enabling to track the
- performance into graphics.
-
-
-
- A rules engine providing to the user the capacity to implement
- its own policy administration rules for detecting errors.
-
-
-
-
-
-
-
-
-
- See the JASMINe project
- web site for more detailed information and for getting the
- tool.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jkmanager.xml b/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jkmanager.xml
deleted file mode 100644
index 552c2219945ddb65aabd5609a206181108798410..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jkmanager.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
- Jk Manager
-
-
-
-
- Introduction
-
-
- Jk Manager is an administration tool (graphical interface and API)
- for the Apache mod_jk plugin providing :
-
- some monitoring informations such as statistics and status
- about the workers.
-
-
-
- some operations such as the smooth worker disabling.
-
-
-
-
-
-
- Download and configuration
-
-
- See the
- Apache Tomcat Connector web site for getting and installing
- mod_jk.
-
- Refer to for information about the
- configuration.
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/clustering_guide.xml b/jonas_doc/core/src/docbook/doc-en/clustering_guide.xml
deleted file mode 100644
index a602abbcceab9fc3a18cb8d9bc0cb73d49f95138..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/clustering_guide.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-
-
-
- JOnAS Clustering guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- March 2009
-
-
-
- Preface
- At first, this guide gives an overview of the Java EE clustering
- principles. Afterwards it describes how to set up clustering in the JOnAS
- application server and how to manage it. Finally some tools and examples
- are presented.
-
-
-
-
- Introduction
-
-
- JOnAS provides an end to end solution for clustering that ensures
- transparent distribution, high availability and scalability of Java EE applications.
-
-
- At the web level through
-
- Apache/mod_jk or Apache/mod_proxy_balancer for
- load-balancing the HTTP flow between multiple JOnAS/Tomcat
- instances.
-
- Tomcat for providing a TCP-based solution of HTTP session
- replication, ensuring their high availability
-
-
- At the JNDI level through CMI and its replicated
- registry
-
- At the EJB level (EJB2 and EJB3 support) through CMI and its
- cluster proxy
-
- At the JMS level through JORAM server and JORAM HA
-
- At the management level through the domain management feature
- and the JASMINe
- project.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Principles
-
-
-
-
-
-
-
-
-
-
-
- Cluster configuration
-
-
-
-
-
-
-
-
-
-
-
- Cluster and domain management
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tooling
-
-
-
-
-
-
-
-
-
-
-
- Examples
-
-
-
-
-
-
-
-
-
- Troubleshootings
-
-
-
-
-
-
-
- Appendix
-
-
-
-
- CMI project documentation
-
-
- This section describes the CMI use in a standalone mode (outside
- the application server).
-
-
-
- CMI configuration
-
-
-
-
-
-
-
- CMI use
-
-
-
-
-
-
-
- CMI administration
-
-
-
-
-
-
-
-
-
-
- References
-
-
-
-
- Tomcat
- Connectors howto
-
-
-
- Tomcat
- workers Howto
-
-
-
- Apache
- JServ Protocol version 1.3 (ajp13)
-
-
-
- Apache
- - Tomcat HOWTO
-
-
-
- Apache
- + Tomcat + Load Balancing
-
-
-
- Tomcat
- 6.0 Clustering
-
-
-
- Apache
- 2.2/mod_proxy_balancer
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF b/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF
deleted file mode 100644
index 8636f14630ad7d571d0d7b916363518361165638..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,6 +0,0 @@
-Manifest-Version: 1.0
-Archiver-Version: Plexus Archiver
-Created-By: Apache Maven
-Built-By: benoitf
-Build-Jdk: 1.5.0_15
-
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties b/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties
deleted file mode 100644
index 939961c0049b43aa3d3dbf0be66d55e48021445c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Generated by Maven
-#Mon Feb 09 16:36:26 CET 2009
-version=2.1.2
-groupId=org.ow2.cmi.doc
-artifactId=cmi-doc
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml b/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml
deleted file mode 100644
index 4e3a80256193fa2c94befa8c61c4eb3f087dbf6f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
- cmi
- org.ow2.cmi
- 2.1.2
-
- 4.0.0
- org.ow2.cmi.doc
- cmi-doc
- jar
- CMI Documentation
- 2.1.2
-
-
- scm:svn:svn://svn.forge.objectweb.org/svnroot/cmi/tags/CMI_DOC_2_1_2
- scm:svn:svn+ssh://benoitf@svn.forge.objectweb.org/svnroot/cmi/tags/CMI_DOC_2_1_2
- scm:svn:svn+ssh://benoitf@svn.forge.objectweb.org/svnroot/cmi/tags/CMI_DOC_2_1_2
-
-
-
-
- doc-en
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/developerguide.xml b/jonas_doc/core/src/docbook/doc-en/cmi/developerguide.xml
deleted file mode 100644
index 9cef1e276b2f16e624db9338125c5363dbf24aca..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/cmi/developerguide.xml
+++ /dev/null
@@ -1,375 +0,0 @@
-
-
-
-
- CMI Developer Guide
-
-
-
- Bouzonnet
-
- Loris
-
-
- JOnAS Team
-
-
-
- 2007
-
- OW2 Consortium
-
-
-
- The CMI developer guide is intended for developers wanting to work
- with the source distribution of CMI. People wanted to contribute to CMI
- should read this documentation.
-
-
- August 2007
-
- CMI
-
- 2.0.0
-
-
-
-
-
-
-
- $Id: developerguide.xml 1254 2007-08-31 18:43:02Z loris
- $
-
-
-
- Design
-
- This section describes the design of CMI..
-
-
- The interceptions in CMI
-
- Interceptions allow to modify transparently an action performed by
- an user. In CMI, she occurs at two moments:
-
-
-
- Reading/writing into a registry ;
-
- The JNDI context defined by the class
- org.ow2.carol.cmi.jndi.context.CMIContext
- intercepts the accesses to the registries.
-
- An instance of
- org.ow2.carol.cmi.jndi.context.CMIContext is
- for a given protocol (e.g. jrmp,
- iiop or irmi).
-
- Instances of
- org.ow2.carol.cmi.jndi.context.CMIContext can
- wrap an object having as interface
- javax.naming.Context when writings
- (on a local registry) are needed.
-
-
-
- Invocation of methods on a clustered object.
-
- The proxy defined by the interface
- org.ow2.carol.cmi.rpc.CMIProxy
- intercepts the invocations of methods on a clustered object.
-
-
-
- Each interceptor references the single instance of manager that
- belongs to the JVM.
-
-
-
- The managers of the cluster view
-
- They implement the interface
- org.ow2.carol.cmi.controller.common.ClusterViewManager.
- An object implementing this interface must be a singleton. So several
- contexts, in one or several threads, share the same manager, and avoids
- network traffic.
-
- The following schema displays this:
-
-
-
-
-
-
-
- Content of one JVM
-
-
-
While a manager of the cluster view is a singleton,
- several instances of CMIContext can be instanced in a same
- JVM.
-
- If a context is for a given protocol, the managers (located on
- the server-side) handle equally all protocols.
- It exits two kinds of manager:
-
-
-
- Client-side manager (that implements
- org.ow2.carol.cmi.controller.client.ClientClusterViewManager)
- ;
-
- They are specific at a protocol, and pull periodically the
- cluster view from a manager located on the server-side. They cannot
- modify the cluster view.
-
-
-
- Server-side manager (that implements
- org.ow2.carol.cmi.controller.server.ServerClusterViewManager).
-
- They are not specific for a protocol, and can either pull or
- push the cluster view from an another manager located on the
- server-side. They can modify the cluster view. The default
- implementation uses JGroups but a SPI allows to modify it (see the last chapter).
-
-
-
-
- Load-balancing
-
- Unlike the previous version of CMI, the choice of a server is
- done among a list of references, and no more a list of stubs. The next
- section describes the introduced types of reference.
-
-
- Modeling of the objects eligible at load-balancing
-
- The interface
- org.ow2.carol.cmi.lb.LoadBalanceable
- is the common interface for references. There are two kinds of
- reference:
-
-
-
- The class
- org.ow2.carol.cmi.reference.ServerRef
- models a reference on a server or a regstry ;
-
-
-
- The class
- org.ow2.carol.cmi.reference.CMIReference
- models a reference on an instance (in the cluster) of a
- clustered object.
-
- An instance of this class is the aggregation of a name of
- object with an instance of the class
- org.ow2.carol.cmi.reference.ServerRef.
-
-
-
- The following schema shows the mentioned dependencies:
-
-
-
-
-
-
-
The interface
- org.ow2.carol.cmi.lb.LoadBalanceable
- and its implementations
-
-
-
-
- The policies
-
- Policies provide a method to choose one reference among a
- list. They also provide methods to ensure failover when the chosen
- reference is not valid.
-
-
-
- The strategies
-
- Strategies are a common property of all policies, so as any
- properties, they are optional. Because strategies are applied before
- policies, they allow to modify policies. Strategies provide a method
- to choose a list of references among an other list of
- references.
-
-
-
- The properties
-
- Unlike strategies that are a common property, each policy can
- have specific properties.
-
-
-
- Setting and updating these data
-
- These data are set initially at the deployment of a clustered
- object. Next thy can be updated dynamically by using the MBean
- having as interface
- org.ow2.carol.cmi.admin.CMIAdminMBean.
-
-
-
-
- Reading a registry
-
- When the operation lookup(Name) is
- performed, the interceptor-context checks if the given name
- corresponds to a clustered object.
-
-
-
- If it does, an other interceptor (that implements the
- interface
- org.ow2.carol.cmi.rpc.CMIProxy) is
- returned to the client.
-
- At this time, no access to the remote registry is
- done.
-
-
-
- If it doesn't, the interceptor-context selects, either a
- remote registry for a client, or the local registry for a server,
- and throws the call.
-
-
-
- When the operations list(Name) and
- listBindings(Name) are performed, the
- interceptor-context selects, either a remote registry for a client, or
- the local registry for a server, and throws the call.
-
-
- A context is also a clustered object (only for clients) in
- order to provide a load-balancing of the readings into the
- registry.
-
- This feature is not available on a server, because the
- objects that are not clustered are always accessed from the local
- registry.
-
-
-
-
- Adding a clustered object
-
- When the operations bind(Name,
- Object)or rebind(Name, Object)
- are performed, the interceptor-context checks if the given object
- corresponds to a clustered object. Three cases are possibles:
-
-
-
- The object implements the interface
- org.ow2.carol.cmi.jndi.ClusteredObject
- ;
-
-
-
- The object doesn't implement the interface
- org.ow2.carol.cmi.jndi.ClusteredObject
- but is registered in the repository defined by the class
- org.ow2.carol.cmi.info.CMIInfoRepository
- ;
-
-
-
- None of these two cases.
-
-
-
- In the two first cases, the object is clustered, but in the last
- it is not.
-
-
-
- Invoking a method on a clustered object
-
- An instance of
- org.ow2.carol.cmi.rpc.CMIProxy intercepts
- invocations of method on a clustered object. The handler for these
- invocations is defined by the class
- org.ow2.carol.cmi.rpc.CMIInvocationHandler. In
- a first time, a server is chosen thanks to the policy and strategy of
- load-balancing that were defined by the administrator. We see the
- chapter 3 how to define these. Once the server is chosen, a surrogate
- (a stub or a proxy) is needed to allow the invocation. Each manager of
- the cluster view maintains a pool of such surrogates.
-
- The following figure illustrates the step of an invocation, when
- the surrogate is missing from the pool:
-
-
-
-
-
-
-
- Lazy-lookup
-
-
-
Firstly, the proxy tries to get the surrogate for a
- given clustered object and a given server.Next,
- because the pool doesn't contain the surrogate, it downloads this
- by performing a lookup onto a registry.Finally, he
- surrogate is kept in the pool and the proxy can invoke the method
- of the clustered object.
-
-
-
-
- About Carol
-
- Carol provides a full support of multiprotocols, while CMI uses
- one protocol by JVM. Carol has also a service provider interface to
- define interceptors with jrmp. These are some good
- reasons to uses CMI embedded in Carol.
-
-
- It is possible to force CMI to use many protocols in a same
- JVM. The following example shows the manner:
-
-
- Forcing CMI to use many protocols in a same JVM
-
- JNDIConfig.setProtocol("jrmp");
-MyPRO myPROjrmp = new MyPRO();
-JNDIConfig.setProtocol("iiop");
-MyPRO myPROiiop = new MyPRO();
-
- MyPRO extends the class
- javax.rmi.PortableRemoteObject. The
- call at the method
- setProtocol(String) changes the
- protocol to uses when exporting an instance of
- MyPRO.
-
-
-
-
-
-
-
- Providing an other implementation of the
- managers
-
- CMI provides a service provider interface to allow the use of an
- other implementation of the managers of the cluster view. At this time,
- only the implementation of the interface
- org.ow2.carol.cmi.controller.server.ServerClusterViewManager
- can be changed by specifying a new name of class for the property
- cmi.server.impl.class.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/algoexample.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/algoexample.png
deleted file mode 100644
index 27d2c127cf47bd0508e4de4ec67ec397f8c26139..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/algoexample.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/algomodel.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/algomodel.png
deleted file mode 100644
index 33ec5af042232ac8163e4956e2ca4347f8e0fa0a..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/algomodel.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/contents_of_jvm.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/contents_of_jvm.png
deleted file mode 100644
index 93417d21a5714776e5279a928e8817dd5fb9bdb2..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/contents_of_jvm.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/interfaces.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/interfaces.png
deleted file mode 100644
index 0c0f92055acb62320dca6e9682a2757cd04b2da8..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/interfaces.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/lazy_lookup.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/lazy_lookup.png
deleted file mode 100644
index 15020e602222000457422d94e8c2065ac5f7fcdb..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/lazy_lookup.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/load_balanceables.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/load_balanceables.png
deleted file mode 100644
index b53df71205ba4e6e04546692eeb0ea405e2c16f0..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/load_balanceables.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/logo-cmi.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/logo-cmi.png
deleted file mode 100644
index be21e96921eeded166a04b4ebd3ae21fbf97f313..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/logo-cmi.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/managers.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/managers.png
deleted file mode 100644
index f281f1d0dcb2331040205b3a08840aca90381d37..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/managers.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/sep_control_service.png b/jonas_doc/core/src/docbook/doc-en/cmi/images/sep_control_service.png
deleted file mode 100644
index 962a6110699f27ec2333531d07d1818bd4178a45..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/cmi/images/sep_control_service.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/integratorguide.xml b/jonas_doc/core/src/docbook/doc-en/cmi/integratorguide.xml
deleted file mode 100644
index 46f7516038c4b629162450cbbc55c1c083e674b7..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/cmi/integratorguide.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
- CMI Integrator Guide
-
-
-
- Bouzonnet
-
- Loris
-
-
- JOnAS Team
-
-
-
- 2007
-
- OW2 Consortium
-
-
-
- The CMI integration guide is intended for developers wanting to
- integrate CMI into their product.
-
-
- August 2007
-
- CMI
-
- 2.0.0
-
-
-
-
-
-
-
- $Id: integratorguide.xml 1254 2007-08-31 18:43:02Z loris
- $
-
-
-
- Targeted people
-
- This guide describes the manner of integrating CMI in an other
- product. So the targeted people are the developers of this product.
-
- In a first time, the API for them will be introduced and next, some
- examples of real integration will be given.
-
-
-
- The API for integrators
-
- The API can be divided in two independent parts:
-
-
-
- an API to aggregate the CMI metadata of a clustered
- object;
-
-
-
- an API to add data for replication between server-side
- managers.
-
-
-
-
- CMI metadata are added for replication while a bind to the
- context (by interception), so the second API is not in purpose of
- this.
-
-
-
- API to aggregate the CMI metadata
-
- The context provided by CMI is independent of the manner of
- declaring this informations. So, we need to convert the informations
- contained in annotations (or in a single descriptor of deployment) to
- the internal format, before performing a bind in the context.
-
- The class org.ow2.carol.cmi.info.CMIInfoExtractor provides
- convenient methods to extract these informations and encapsulate them
- into an instance of the class
- org.ow2.carol.cmi.info.ClusteredObjectInfo. The
- method extractClusteringInfoFromAnnotatedPOJO(String,
- Class<?>) is intended for annotations, and the method
- extractClusteringInfoFromDD(String, URL) is
- intended for descriptors of deployment.
-
- Before binding, the information needs to be associated with the
- object. There are two ways:
-
-
-
- By adding the interface
- org.ow2.carol.cmi.jndi.ClusteredObject
- at the bound object;
-
- This provides the method
- getClusteredObjectInfo() to retrieve the
- informations.
-
-
-
- By registering the instance of
- org.ow2.carol.cmi.info.ClusteredObjectInfo
- into the repository defined by the class
- org.ow2.carol.cmi.info.CMIInfoRepository.
-
-
-
-
-
- API to add data for replication on server-side
-
- TODO: Adding session for load-balancing of sfsb.
-
-
-
-
- Examples of integration
-
- This chapter describes two concrete uses of these API.
-
-
- EasyBeans
-
-
-
-
-
- JOnAS
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/userguide.xml b/jonas_doc/core/src/docbook/doc-en/cmi/userguide.xml
deleted file mode 100644
index 4a8bb2a7be398177b8d6ba1bf6cfec922527218c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/cmi/userguide.xml
+++ /dev/null
@@ -1,1115 +0,0 @@
-
-
-
-
- CMI User Guide
-
-
-
- Bouzonnet
-
- Loris
-
-
- JOnAS Team
-
-
-
- 2007,2008
-
- OW2 Consortium
-
-
-
- The CMI user guide is intended for developers wanting to develop
- clustered applications.
-
-
- March 2008
-
- CMI
-
- 2.0.0
-
-
-
-
-
-
-
- $Id: userguide.xml 2131 2008-10-06 14:35:30Z pelletib $
-
-
-
-
- Vocabulary
-
- This glossary defines the vocabulary used by this user guide. A
- definition of common terms can be found on the glossary provided by
- Sun.
-
-
- Clustered object
-
-
- Remote object that has clustering informations.
-
-
-
-
- Remote object (or RMI
- object)
-
-
- Object having methods that can be invoked remotely with a RMI
- connection.
-
-
-
-
- Clustering
- information
-
-
- Information that allows to perform invocations on an object
- while keeping a distributed load. The policy and the strategy are
- some clustering informations. Clustering informations are a part of
- the cluster view.
-
-
-
-
- Manager of the cluster view
-
-
- A manager handles replicated data to model the cluster view.
- There are two kinds of manager: one for clients and one for servers.
- The one for clients can only read the cluster view, while the one
- for servers can modify it. The cluster view manager is a singleton
- in a JVM.
-
-
-
-
- Replicated data
-
-
- Raw data copied on each JVM belonging to the cluster.
-
-
-
-
- JVM
-
-
- An instance of the Java Virtual Machine that contains one and
- only one manager of the cluster view.
-
-
-
-
- Cluster view
-
-
- View on a cluster state shared by the managers. Two kinds of
- view exist: client view and server view.
-
-
-
-
- Policy of load-balancing
-
-
- Algorithm for choosing one server among a list. Policy and
- strategy form the algorithm of load-balancing.
-
-
-
-
- Strategy of load-balancing
-
-
- Algorithm for choosing a list of server among an other one. A
- strategy is applied before a policy in order to modify its
- behaviour.
-
-
-
-
- Service flow
-
-
- It corresponds to the requests initiated by the clients (e.g.
- accesses to registry, EJB requests).
-
-
-
-
- Control flow
-
-
- It corresponds to the cluster logic requests (e.g. update
- servers list, get servers load,...).
-
-
-
-
-
-
- Introduction
-
- This chapter gives the rationale of CMI and provides a few
- information about its internals.
-
-
- Motivations for clustering objects
-
- When too many clients perform method invocations on a single
- remote object, we can expect a fall of quality of service. In addition,
- if this object is no more accessible, none of the clients will be
- satisfied.
-
- So clustering objects can contribute to obtain two good
- properties:
-
-
-
- scalability, i.e. increase the
- application capacity in terms of number of clients and response
- time.
-
- Load-balancing is a mechanism avoiding overload of
- server.
-
-
-
-
- fault tolerance and continuity of
- service, i.e. provide high-availability of
- service.
-
- Failover is a mechanism avoiding interruption of
- service.
-
-
-
- No specification (no standard) describes how to get them: it is
- the purpose of CMI.
-
-
-
- Provided solution
-
- CMI is a framework that provides a generic system to define and
- configure clusters of RMI objects. CMI allows to dissociate objects from
- registries and servers by defining global registries and clusters of
- objects. By this way, it can ensure a scalability and high-availability
- of accesses to clustered (or not, see
- below) objects.
-
- Its main features are:
-
-
-
- Support of all types of remote objects
-
- CMI doesn't expect any specific types of object, but because
- it uses JNDI to access them, the type is fixed by the application on
- the server-side that binds objects into the registry.
-
-
-
- Definition of load-balancing algorithms with POJOs
-
- The load-balancing algorithm is split in two distinct parts to
- achieve reusability: policies and strategies.
-
-
-
- Dynamic policies and strategies of load-balancing
-
- The load-balancing algorithm is defined before the deployment
- and can evolve afterwards. New definitions of policies and
- strategies are downloaded by clients. More, it is possible to add
- properties to a policy in order to enhance still the
- dynamicity.
-
-
-
- Capability to customize dynamically the algorithm of
- load-balancing for the JNDI accesses
-
- Non clustered objects can be also referenced by the global
- registries to enjoy the smooth shutdown.
-
-
-
- Smooth shutdown
-
- Allow to disable creation of new connections on a server
- waiting for shutdown.
-
-
-
- Support of the load factor of servers in the algorithm of
- load-balancing
-
- Clients have up-to-date load factors.
-
-
-
- Smart management of surrogates (stub or proxy)
-
- To optimize the traffic network, surrogates are downloaded
- lazily by clients and kept in a pool.
-
-
-
- Separation of the service flow and the control flow
-
- In each JVM, a single dedicated thread is in charge of the
- control flow.
-
-
-
- Multi-protocols support
-
- CMI is fully independent of the communication protocol.
-
-
-
- CMI is transparent for clients
-
- CMI doesn't compel them to have many dependencies, by using
- the smart factory.
-
-
-
-
-
- Load-balancing algorithm
-
-
- An example of execution
-
- The following figure shows how to define a weighted round-robin
- in term of policy and strategy.
-
-
-
-
-
-
-
An use of the weighted round-robin
-
-
-
-
- General case
-
-
-
-
-
-
-
The chain strategy -> policy
-
-
-
-
-
- Architecture
-
- This section is dedicated to make easier the use of CMI, by
- providing informations on its conception. In a first time we will
- distinguishes the interfaces of CMI, next we will give an overview of
- the internal mechanisms of CMI.
-
-
- Interfaces
-
- CMI exposes three interfaces:
-
-
-
- the API for users
-
- It describes how to create and use clustered objects.
-
-
-
- the API for integrators
-
- It describes how to use CMI in an other project.
-
-
-
- the SPI
-
- It describes how to define its own implementations for
- CMI.
-
-
-
-
-
-
-
-
-
-
The three interfaces exposed by
- CMI
-
-
- This document will only focus on the API for users.
-
- This is composed of the following elements:
-
-
-
- An implementation of context to intercept accesses to the
- registries;
-
-
-
- Annotations to define clustered objects;
-
-
-
- Interfaces and utilities to define policies and
- strategies;
-
-
-
- A set of standard policies and strategies;
-
-
-
- A MBean;
-
-
-
- A smart-factory.
-
-
-
-
-
- Internal mechanisms
-
- Before describing the API for users in detail, this section
- draws an overview of the internal mechanisms of CMI.
-
- Its core can be divided in two parts:
-
-
-
- A set of managers sharing the cluster view (no more one
- manager by JVM);
-
-
-
- A context and proxy intercepting calls on the wrapped
- context and stub. They are associated with the manager of their
- JVM.
-
-
-
-
- Separation of the control and service flows
-
- The interceptors separate the control and service flows, while
- the managers handle the control flow.
-
-
-
-
-
-
-
Separation of the control and service flows at
- lookup, bind and invoke times
-
-
-
- If the server application looks up (or invokes a method
- of) a clustered object, it acts exactly as a client.
-
-
-
-
- The interceptions
-
- CMI provides interceptions of the calls performed by users.
- They can occur at two moments:
-
-
-
- Reading/writing into a registry with a context;
-
- The context checks if the concerned object is clustered.
- If it is, here is how the context proceeds:
-
-
-
- At a lookup:
-
- Instead downloading a surrogate from the registry, the
- context notifies its manager, generates a new proxy and
- returns it.
-
-
-
- At a bind (only for a server):
-
- After binding the object in its local registry, the
- context notifies its manager.
-
-
-
-
-
- Invocation of methods on a clustered object with a proxy
- returned by the context.
-
-
-
- This proxy chooses a server using the policy and strategy of
- the clustered object. For the chosen server, the proxy needs to get
- the associated surrogate in order to perform the invocation. The
- manager handles a pool of surrogates for each clustered
- object.
-
- The following figure illustrates the steps of an invocation,
- when the surrogate is missing from the pool:
-
-
-
-
-
-
-
Firstly, the proxy tries to get the surrogate for
- a given clustered object and a given server.Next,
- because the pool doesn't contain the surrogate, it downloads
- this by performing a lookup onto a
- registry.Finally, the surrogate is kept in the pool
- and the proxy can invoke the method of the clustered
- object.
- The lookup is performed just before the invocation
- by the pool: this is a kind of lazy lookup.
-
-
-
- The managers of the cluster view
-
- The managers of the cluster view handle the control
- flow.
-
- There are two kinds of manager:
-
-
-
- Server-side manager;
-
- They share the whole cluster view and can modify
- it.
-
-
-
- Client-side manager;
-
- They know only a part of the cluster view and cannot
- modify it.
-
-
-
- The following figures illustrates the communication between
- the managers:
-
-
-
-
-
-
-
Communication between the
- managers
-
-
-
-
-
-
-
- Configuring CMI
-
- The configuration occurs at two independent levels in CMI:
-
-
-
- The configuration of the manager of the cluster view, needed
- only for servers ;
-
-
-
- The configuration of the context, mandatory for all.
-
-
-
-
- Configuring the manager of the cluster view
-
- The manager of the cluster view can only be configured on the
- server-side. The properties will be read from the file
- cmi.properties when Carol is not used (see the
- section dedicated to Carol for informations about it). The manager on
- the client-side downloads dynamically its configuration. As a result,
- all the managers on the client-side use the same configuration.
-
-
- Common configuration of servers
-
- Here is the configuration relative at a server, common at all
- implementations:
-
- # Class name of the implementation of the ServerClusterViewManager
-cmi.server.impl.class=org.ow2.cmi.controller.server.impl.jgroups.JGroupsClusterViewManager
-
-# Domain name for the CMI MBean
-cmi.server.admin.domain=CMI
-
-# Attribute name for the CMI MBean
-cmi.server.admin.mbean=CMIAdmin
-
-# Enumeration of supported connector protocols
-cmi.server.admin.connector.protocol=jrmp
-
-# Enable or disable bind of a provider
-cmi.server.provider.bind=true
-
-# Enable or disable bind of a registry
-cmi.server.registry.bind=true
-
-# Load factor xml:id="cmi.ug.conf"
-cmi.server.load=100
-
-
-
- Indicate a name for a concrete implementation of the
- interface
- org.ow2.cmi.controller.server.ServerClusterViewManager.
-
-
-
- Indicate a name of domain to register MBeans when CMI is
- in stand-alone. When CMI is used with Carol, the name of domain
- is provided by the latter.
-
-
-
- Indicate a name to register the MBean
- org.ow2.cmi.admin.CMIAdminMBean.
-
-
-
- Indicate for each protocol in the list, which JMX
- connectors will be bound into the registries.
-
-
-
- True indicates that a provider of the cluster view (for
- clients) will be bound for each protocol into the
- registries.
-
-
-
- True indicates that clients could use the registries of
- this server (for each protocol) to lookup objects that are not
- clustered.
-
-
-
- Indicate the load-factor of the associated server.
-
-
-
-
-
- Configuration of servers using the implementation with
- JGroups
-
- Here is the configuration relative at a server, specific at the
- implementation with JGroups:
-
- # Filename of the jgroups conf file
-cmi.server.impl.jgroups.conf=jgroups-cmi.xml
-
-# Groupname for JGroups
-cmi.server.impl.jgroups.groupname=G1
-
-# Timeout to wait a reconnection
-cmi.server.impl.jgroups.reconnection.timeout=5000
-
-
-
- Indicate a filename that contains a stack to define a
- channel.
-
-
-
- Indicate a name of group to define a channel.
-
-
-
- Timeout to wait a reconnection.
-
-
-
- xml:id="cmi.ug.conf"
-
- Configuration of clients
-
- Here is the configuration relative at a client:
-
- # Time to refresh the client view
-cmi.client.refresh.time=50000
-
-
-
- Indicate a delay between each update of the cluster view
- by clients.
-
-
-
-
- This property must be set on the server-side, and the value
- will be downloaded by clients.
-
- xml:id="cmi.ug.conf"
-
-
-
- Configuring the context
-
- Configuring the context needs only several additional properties
- (in comparison with the settings required to create a new instance of
- javax.naming.InitialContext).
-
-
- In stand-alone
-
- Here is the properties needed to generate the
- environment:
-
- # Indicate a list of provider URLs
-cmi.context.provider.urls=rmi://129.183.101.165:1092,localhost:1099
-
-# Indicate a class to use to create a context
-cmi.context.wrapped.factory=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# Indicate a protocol associated with the context
-cmi.context.wrapped.protocol=jrmp
-
-# Indicate if the application is a server, default=false
-cmi.mode.server=true
-
-# Server only: Enable or disable replication, default=true
-cmi.server.start.replication=true
-
-
-
- Either a list of provider URLs (on servers) for a client
- (i.e. the property
- cmi.server.mode=false), or only one
- provider URL (on a local registry) for a server
- (i.e. the property
- cmi.server.mode=true).
-
-
-
- The class must implement the interface
- javax.naming.spi.InitialContextFactory
- to construct new contexts to read (only) the registries.
-
-
-
- Only one name of protocol is expected (while several can
- be set with Carol).
-
-
-
- If this property is set at true, a local registry to
- perform writes (bindings for example) is expected. If this
- property is set at false, a call at a writing operation will
- throw an exception of type
- org.ow2.cmi.jndi.context.CMINamingException.
-
-
-
- True indicates that no instance of type
- org.ow2.cmi.controller.server.ServerClusterViewManager
- will be created.
-
-
-
-
-
- With Carol
-
- With its version 2.0.0, CMI is no more treated as a protocol.
- The result is that its configuration in Carol has changed.
-
- Here is the properties relative to CMI, found in the file
- carol.properties:
-
- # jonas rmi activation (iiop, irmi, jrmp)
-carol.protocols=jrmp
-
-# Global property for enabling the use of cmi in carol
-carol.start.cmi=true
-
-# RMI IRMI URL
-carol.irmi.url=rmi://localhost:1098
-# For each protocol, set if CMI is enabled (only for server)
-carol.irmi.cmi=false
-
-# RMI JRMP URL
-carol.jrmp.url=rmi://129.183.101.165:1092,129.183.101.165:1099
-carol.jrmp.cmi=true
-
-# RMI IIOP URL
-carol.iiop.url=iiop://localhost:2001
-carol.iiop.cmi=false
-
-# Server only: Enable or disable replication, default=true
-cmi.server.start.replication=true
-
-
-
- Indicate a list of protocols to use.
-
-
-
- True indicates that CMI can be used (if enabled individually
- for each protocol).
-
-
-
- As in stand-alone mode, either a list of provider URLs (on
- servers) for a client, or only one provider URL (on a local
- registry) for a server.
-
-
-
- True indicates that CMI will be used for this protocol. If
- the property carol.start.cmi is set with the
- value false, this property is ignored.
-
-
-
-
-
-
-
- Using CMI
-
- This chapter describes the use of CMI by users and
- administrators.
-
-
- Creating a context
-
- The first step in the use of CMI is the creation of the context.
- During this step the manager of the cluster view will be also
- constructed (if it doesn't already exist).
-
-
- In stand-alone
-
- When CMI is used in stand-alone, the methods
- getCMIEnv(),
- getCMIEnv(URL) or
- getCMIEnv(Properties) of the class
- org.ow2.cmi.config.JNDIConfig must be used to
- construct the environment that will be specified at the constructor
- InitialContext(Hashtable<?, ?>) of
- class javax.naming.InitialContext.
-
- Here is an example of a construction of an instance of
- org.ow2.cmi.jndi.context.CMIContext in
- stand-alone:
-
-
- Initializing the environment (from the file
- cmi.properties) to construct a new
- org.ow2.cmi.jndi.context.CMIContext
-
- Hashtable<String, ?> cmiEnv = JNDIConfig.getCMIEnv();
-InitialContext ic = new InitialContext(cmiEnv);
-
-
-
-
- By delegating it to Carol
-
- When CMI is associated with Carol, the configuration of the
- context is delegated to Carol, so no additional instruction is needed.
- The configuration of Carol will be explained in a next chapter.
-
- Here is an example of a construction of an instance of
- org.ow2.cmi.jndi.context.CMIContext with
- Carol:
-
-
- Initializing Carol with the file
- carol.properties
-
- ConfigurationRepository.init();
-InitialContext ic = new InitialContext();
-
-
-
-
- By delegating it to the smart factory
-
- Likewise, the creation of an instance of
- org.ow2.cmi.jndi.context.CMIContext can be
- delegated to the smart factory.
-
- The smart factory downloads transparently the missing classes
- and properties to use CMI. So, a client that uses it, doesn't need to
- have in its classpath the full library of CMI. Also, because
- properties (as the list of provider URLs) are downloaded before the
- creation of context, they are up-to-date.
-
- The smart factory is enabled by an other implementation of the
- interface
- javax.naming.spi.InitialContextFactory.
- So to use the smart factory, clients must specify the class
- org.ow2.cmi.smart.spi.SmartContextFactory as
- factory.
-
- Here is an example of a construction of an instance of
- org.ow2.cmi.jndi.context.CMIContext with the
- smart factory:
-
-
- Initializing the smart factory
-
- Hashtable<String, Object> env = new Hashtable<String, Object>();
-env.put(Context.INITIAL_CONTEXT_FACTORY, "org.ow2.cmi.smart.spi.SmartContextFactory");
-env.put(Context.PROVIDER_URL, "smart://localhost:2505");
-InitialContext ic = new InitialContext(env);
-
-
-
-
-
- Defining clustered objects
-
- This section describes the steps in order to define new clustered
- objects.
-
-
- The concepts
-
- A clustered object is characterized by its informations about
- clustering. They are of two kinds:
-
-
-
- Declaration of a clustered object and its initial
- configuration;
-
- The name of cluster containing this object is a part of the
- declaration.
-
- The minimal and maximal sizes of the pool are a part of its
- initial configuration.
-
-
-
- Description of the manner to access to it (the
- algorithm).
-
- The policy and strategy of load-balancing are a part of the
- algorithm. While policy is mandatory to define the algorithm,
- strategy is optional.
-
-
-
-
-
- Choosing an algorithm of load-balancing
-
- CMI provides some standard policies and strategies. When an
- object is declared belonging to a cluster, the algorithm to access to
- it must be provided.
-
-
- Using an existing algorithm
-
- Standard policies:
-
-
-
- Round robin
-
-
-
- First available
-
-
-
- Random
-
-
-
- HA Singleton
-
-
-
- Standard strategies:
-
-
-
- Local preference
-
-
-
- Load factor sort
-
-
-
- Load factor weight
-
-
-
-
-
- Designing a new algorithm
-
- Designing a new algorithm consists in implementing
- interfaces.
-
-
- Writing a policy
-
- To define its own policy, the following interface must be
- implemented:
-
-
-
- Writing a strategy
-
- To define its own strategy, the following interface must be
- implemented:
-
-
-
-
-
- Configuring the algorithm
-
- Adding properties to a policy allows to add dynamicity at an
- algorithm, because properties are also downloaded by clients. The
- following section will describe how to declare these
- properties.
-
-
-
- Adding the informations for clustered object
-
- It exists two ways to add the informations about
- clustering:
-
-
-
- Java annotations;
-
- Annotations simplify the use of CMI by avoiding adding a new
- XML file. For the moment, only the class must be annotated and not
- its interface.
-
-
- A JDK 1.5 or higher is required to use
- annotations.
-
-
-
-
- Deployment descriptors.
-
- The source code is not modified, but a XML file is
- required.
-
-
-
-
- With annotations
-
- Firstly the class of the clustered objects must be annotated
- with @Cluster.
-
- Here is the definition of this annotation:
-
- Next, adding the annotation
- @Policy permits to declare the way to
- access to the instances of this class.
-
- Here is the definition of this annotation:
-
- Next, a strategy can be eventually used by annotating the
- class with @Strategy.
-
- Here is the definition of this annotation:
-
- Finally, properties can be initialized by annotating the class
- with @Properties.
-
- Here is the definition of this annotation:
-
-
-
- With a descriptor of deployment
-
- Here is the schema to define a descriptor of
- deployment:
-
-
-
-
- Binding
-
- When the object is bound, the context detects that it must be
- clustered. So their informations are given to the manager of the
- cluster view, and this last replicates them.
-
-
-
-
-
- Administrating CMI
-
- The registered MBean allows to monitor and administrate the cluster
- by delegating its tasks to the manager of its JVM.
-
- To connect it, the service URL is:service:jmx:<protocol>:///jndi/<providerURL>/server
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/command_guide.xml b/jonas_doc/core/src/docbook/doc-en/command_guide.xml
deleted file mode 100644
index eec81b6730aaf7d1287e0c09a9eab08c1e2856ad..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/command_guide.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
- JOnAS 5 Commands Reference Guide
-
-
-
- JOnAS Team
-
-
-
- FORNACIARIFrançois
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
-
- This document describes all the commands that can be used with
-
-
-
- March 2009
-
-
-
-
-
-
-
-
-
-
-
-
- Configuration commands
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjb.xml b/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjb.xml
deleted file mode 100644
index 4ae7a0373a28330e08477ace78a3840db52cb372..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjb.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
- newjb command
-
- Build a new JONAS_BASE directory.
-
-
- Synopsis
-
-
- newjb
-
-
-
-
- Description
-
- The newjb utility builds a new JONAS_BASE directory
- that allows the conformance tests to be launched. At the start, the user
- must choose:
-
-
-
- the protocol among jrmp, iiop, irmi
-
-
-
- the database
-
-
-
- the web container among tomcat, jetty
-
-
-
- The tool generates the configuration automatically.
-
- The $JONAS_BASE variable must be set before launching
- the tool; it specifies the path to the new directory that will be
- built.
-
- The $HOME/jb.config/lib directory must be
- created before launching the tool. It can contain some specific user
- configuration (see below).
-
- The tool relies on 's ant tasks
- ($JONAS_ROOT/templates/newjb/build-jb.xml) and thus builds a
- configuration compatible with the version. First, a JONAS_BASE with
- default values is built, and then the configuration files are modified
- with the values defined in the centralized configuration file of newjb
- (see below).
-
- A default configuration file is provided in
- $JONAS_ROOT/templates/newjb/build-jb.properties. It contains the
- variable parameters used by the tool, such as port number and database
- properties.
-
- A user configuration can be set in the
- $HOME/jb.config/conf/jonas-newjb.properties file. If
- this file is present, the parameters it contains will override the default
- parameters.
-
- By default, only the HSQL database can be configured with this tool.
- For other databases, the specific drivers must be stored in the
- $HOME/jb.config/lib directory before the run and the
- properties must be set in the
- $HOME/jb.config/conf/jonas-newjb.properties
- file.
-
- The default script ($JONAS_ROOT/build-jb.xml)
- and its configuration
- ($JONAS_ROOT/templates/newjb/build-jb.properties) can be used as an
- example for creating a configuration tool corresponding to user's specific
- requirements.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjc.xml b/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjc.xml
deleted file mode 100644
index d7bee2f716c79c5e874914d522c03625f5886666..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjc.xml
+++ /dev/null
@@ -1,257 +0,0 @@
-
-
- newjc command
-
- Command that builds all the configurations (ie JONAS_BASE) of the
- instances for
- the cluster (including also a master to manage the domain, a DB with an embedded HSQLDB
- server, and a cluster daemon). It also creates the configuration files
- needed for mod_jk.
-
-
- Options
-
-
- newjc
-
- -auto
-
-
-
-
- -auto
-
-
- Use the default configuration (silent mode)
-
-
-
-
-
-
- Description
-
- The newjc utility builds all the configurations (ie JONAS_BASE) of
- the instances
- for the cluster (including also a master to manage the domain, a db with an embedded HSQLDB
- server, and a cluster daemon). It also creates the configuration files
- needed for mod_jk.
-
- At command start, the user must choose:
-
-
-
- the cluster directory where the configuration
- directories (ie JONAS_BASE) will be created,
-
-
-
- the prefix for the new configuration directories
- (ex: prefix jb generates jb1, jb2, ...),
-
-
-
- the protocol among jrmp, iiop, irmi,
-
-
-
- the database to configure for the db node,
-
-
-
- the cluster architecture among bothWebEjb, diffWebEjb. The first
- means that all the nodes are configured with both web and ejb services
- whereas the second one will separate the two tiers,
-
-
-
- the number of web instances,
-
-
-
- the number of ejb instances.
-
-
-
- The tool generates the configuration automatically but you can
- customize some of the characteristics of the cluster by modifying the
- following files, in JONAS_ROOT/conf/newjc, before
- executing the command:
-
-
-
- build-jc.properties: global configuration
- for the cluster,
-
-
-
- build-master.properties: specific
- configuration for the master node,
-
-
-
- build-db.properties: specific
- configuration for the db node.
-
-
-
- If the -auto option is used, the
- $JONAS_BASE variable must be set before launching the tool;
- it specifies the prefix of the paths to the new directories that will be
- built and that will contain the JONAS_BASE of the cluster members.
-
- You can add some specific user configuration in the
- $HOME/jc.config/lib. If the directory doesn't exits,
- it will be created during the execution of the command.
-
- A user configuration can be set in the
- $HOME/jc.config/conf/jonas-newjc.properties file. If
- this file is present, the parameters it contains will override the default
- parameters defined in
- JONAS_ROOT/conf/newjc/build-jc.properties.
-
-
-
- Review newjc output
-
- newjc creates
- tomcat_jk.conf and
- workers.properties files under
- <cluster-directory>/conf/jk. The #Web section
- of build-jc.properties defines configuration
- parameters set by newjc in these files. The file
- tomcat_jk.conf contains apache directives supported
- in httpd.conf or apache2.conf.
- They are isolated in a separate file for modularity, then they must be
- included manually in httpd.conf or
- apache2.conf. Refer to workers HowTo
- documentation on the Tomcat site.
-
- newjc generates by default four instances (four
- bases) in
- directories jb1, jb2, jb3 and jb4 under the cluster directory. Each
- instance has
- its own configuration files into the conf directory
- (as any other
- base). It also generates configurations for cluster daemon
- (cd directory), for master node
- (master directory), and for db node
- (db directory).
-
- By default, jb1 and jb2 are web container instances and jb3 and jb4 are
- EJB container
- instances.
-
- newjc generates a script called jcl4sc (jcl4sc.bat) for controlling the cluster examples
- provided with JOnAS named, sampleCluster2 and sampleCluster3. The command
- takes in argument the parameter status, start, stop, halt or kill.
-
- The pertinent files for the configuration of the cluster are
- described below:
-
-
-
- carol.properties - jgroups-cmi.xml
-
-
- The #Carol section of build-jc.properties
- defines configuration parameters set by newjc
- in the carol.properties and
- jgroups-cmi.xml files . This allows JNDI
- replication to support load balancing at the EJB level using the CMI
- protocol.
-
-
- The multicast address and port must be identically
- configured for all / Tomcat instances.
-
-
-
-
-
- jonas.properties
-
-
- The #Services section of
- build-jc.properties defines configuration
- parameters set by newjc in the
- jonas.properties file.
-
-
-
-
- tomcat6-server.xml
-
-
- The #Web section of build-jc.properties
- defines some configuration parameters set by
- newjc in the tomcat6-server.xml
- file . In particular, a connector XML element for AJP1.3 protocol is
- defined, as well as a jvmRoute to support load balancing at the web
- level, via this connector.
-
- A Cluster XML element was also added. It defines parameters
- for achieving Session replication at the web level with .
-
- Refer to the AJP
- Connector and the Engine
- Container documentation.
-
-
- The jvmRoute name generated by newjc is the same as the name
- of the associated worker defined in worker.properties. This will
- ensure the Session affinity.
-
-
-
-
-
-
-
- Tell Apache about mod_jk
-
- To make apache aware of this new file, edit
- <prefix>/conf/httpd.conf.
-
- Copy and paste the following line after the Dynamic Shared Object
- (DSO) Support section.
-
- Include conf/jk/tomcat_jk.conf
-
- Move the jk directory created by newjc under the APACHE
- structure:
-
- bash> mv <cluster-directory>/conf/jk $APACHE_HOME/conf
-
- Restart apache so that apache can load the jk_module:
-
- bash> apachectl stop && apachectl start
-
-
- Some UNIX distributions may locate the module in the folder
- libexec instead of the folder modules.
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/commands/configuration_raconfig.xml b/jonas_doc/core/src/docbook/doc-en/commands/configuration_raconfig.xml
deleted file mode 100644
index a16a8ed2ca36a245b57ae5b5b0702c36c1cb3053..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/commands/configuration_raconfig.xml
+++ /dev/null
@@ -1,240 +0,0 @@
-
-
- RAConfig command
-
- Generate a specific resource adapter configuration file or a
- resource adapter file
-
-
- Synopsis
-
-
- RAConfig
-
- options
-
- InputFileName
-
- OutputFileName
-
-
-
-
- Description
-
- The RAConfig utility provides the capability to
- create a specific resource adapter configuration file (jonas-ra.xml)
- from a ra.xml file, or update a resource adapter file.
-
- With this command it is possible to :
-
-
-
- extract a specific resource adapter configuration file
- (jonas-ra.xml) from an ra.xml
- file (see option -path)
-
-
-
- create a new specific resource adapter configuration file
- (jonas-ra.xml) from an ra.xml
- file (see option -new)
-
-
-
- create a resource adapater file (.rar file)
- from a dataSource.properties file (see option -p)
-
-
-
- update a resource adapter file with a jonas-ra.xml
- (see option -u)
-
-
-
- The InputFileName is the file name of a the
- resource adapter.
-
- The OutputFileName is the file name of an
- output resource adapter. This parameter is used with the -p (required) or -u
- (optional) options.
-
-
-
- Options
-
-
-
- -? or -help
-
-
- Give a summary of the options.
-
-
-
-
- -p or -property database_properties_file_name
-
-
- Specifie the name of the <database>.properties file to
- process. The result of this processing will be a jonas-ra.xml file
- that will update the /META-INF/jonas-ra.xml file in the output
- rar.
-
-
-
-
- -dm, -ds, -cp, -xa
-
-
- These options are related to the option -p above.
-
- They specify the rarlink value to configure respectively
- DriverManager, DataSource, ConnectionPoolDataSource and
- XAConnection. If -dm is used, then
- the conversion will be a direct reflection of the values specified
- in the -p
- <database>.properties file. If any of the other
- values are specified, then the jonas-ra.xml created will reflect
- options from the -p
- <database>.properties file and the user must edit
- the file based on information from the database provider for the
- specified type of datasource. Each database provider may have
- different config properties that need to be set and will be included
- in the database provider's documentation.
-
-
-
-
- -path output_directory
-
-
- Specify the directory name to place the extracted jonas-ra.xml
- file.
-
-
-
-
- -new
-
-
- Don't extract jonas-ra.xml but create a new one. The default
- value is the system property for
- java.io.tmpdir.
-
-
-
-
- -update or -u inputname
-
-
- Specify the name of the XML file to process. This file will
- update the /META-INF/jonas-ra.xml file in the
- rar. If this argument is used, it is the only argument
- executed.
-
-
-
-
- -rarlink rarlink
-
-
- Specify the jndi name of an rar file with which to link. This
- option can be used when this rar file will inherit all attributes
- associated with the specified jndi name. If this option is specified
- in the jonas-ra.xml file, it is the only file needed in the rar, and
- the ra.xml file will be processed from the rarlink file.
-
-
-
-
- -securityfile security_file_to_process
-
-
- Specify the security property file to process and add security
- information to jonas-ra.xml. This will map the specified principal
- name to the user on the EIS system. The specified file must be in
- the following form: principal = user::password
- . When used in conjunction with the -encrypt option, then the resulting
- information will be encrypted in jonas-ra.xml.
-
-
-
-
- -encrypt
-
-
- Used with -securityfile to
- encrypt the specified passwords.
-
-
-
-
- -jndiname jndiname
-
-
- This option is deprecated with 1.5 Resource Adapter.
-
- For 1.0 Resource Adapter, this specifies the JNDI name of the
- connection factory. This name corresponds to the name of the
- <jndi-name> element of the <jonas-resource> element in
- the specific deployment descriptor. This name is used by the
- resource service for registering in JNDI the connection factory
- corresponding to this resource adapter.
-
-
-
-
- -novalidation
-
-
- Turn off the xml dtd/schema validation.
-
-
-
-
-
-
- Examples
-
-
-
- RAConfig -dm -p MySQL1 $JONAS_ROOT/repositories/maven2-internal/org/ow2/jonas/jonas-jca-jdbc-dm/<jonas-version>/jonas-jca-jdbc-dm-<jonas-version>
- MySQL_dm
-
-
- Generate a MySQL_dm.rar file linked to jonas-jca-jdbc-dm-<jonas-version>.rar.
- The jonas-ra.xml file inserted is created with values coming from the
- ra.xml file of the jonas-jca-jdbc-dm-<jonas-version>.rar
- and values from the MySQL1.properties file
- This rar file can then be deployed and will replace the
- configured MySQL1 datasource.
-
-
-
-
- RAConfig -path . XX.rar
-
-
- Extract the jonas-ra.xml of XX.rar in the working
- directory
-
-
-
-
- RAConfig -u jonas-ra.xml MyRA.rar
-
-
- Update/insert the jonas-ra.xml file into the MyRA.rar
- file
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/commands/genic.xml b/jonas_doc/core/src/docbook/doc-en/commands/genic.xml
deleted file mode 100644
index 9897c105164b6289e4666c6f7b365f2688dd1ce5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/commands/genic.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-
-
- GenIC command
-
- Generates the container classes for EJBs.
-
-
- Options
-
-
- GenIC
-
- options
-
- <InputFileName>
-
-
-
-
- -d directory
-
-
- Specifies the root directory of the class hierarchy.
-
- This option can be used to specify a destination directory for
- the generated files.
-
- If the -d option is not used,
- the package hierarchy of the target class is ignored and the
- generated files are placed in the current directory.
-
- If the InputFile is an ejb-jar file, the
- generated classes are added to the ejb-jar file, unless the
- -noaddinjar option is set.
-
-
-
-
- -invokecmd
-
-
- Invokes directly the java class corresponding to the java
- compiler.
-
- This is useful on Windows in the event of a
- CreateProcess Exception (this occurs when the
- command line is too long).
-
- In this case tools.jar must be visible in the CLASSPATH
-
-
-
-
- -javac options
-
-
- Specifies the java compiler name to use (javac by
- default).
-
-
-
-
- -javacopts options
-
-
- Specifies the options to pass to the java compiler.
-
-
-
-
- -keepgenerated
-
-
- Do not immediately delete generated files.
-
-
-
-
- -noaddinjar
-
-
- If the InputFile is an ejb-jar file, do
- not add the generated classes to the ejb-jar file.
-
-
-
-
- -nocompil
-
-
- Do not compile the generated source files via the java and rmi
- compilers.
-
-
-
-
- -novalidation
-
-
- Remove xml validation during parsing.
-
-
-
-
- -protocols
-
-
- Comma-separated list of protocols (jrmp, iiop, irmi) for which
- stubs should be generated. Default is jrmp
-
-
-
-
- -rmiopts options
-
-
- Specifies the options to pass to the rmi compiler.
-
-
-
-
- -verbose
-
-
- Displays additional information about command
- execution.
-
-
-
-
- -nofastrmic
-
-
- Disable the use of fastrmic for stubs/ties generation.
-
-
-
-
-
-
- Example
-
-
-
- GenIC -d ../../classes sb.xml
-
-
- Generates container classes of all the Enterprise JavaBeans
- defined in the sb.xml file. Classes are generated in the
- ../../classes directory adhering to the classes hierarchy.
-
-
-
-
-
-
- GenIC sb.jar
-
-
- Generates container classes for all the Enterprise JavaBeans
- defined in the sb.jar file and adds the generated classes to this
- ejb-jar file.
-
-
-
-
-
-
- Description
-
- The GenIC utility generates the container classes for from the
- given Enterprise Java Beans.
-
- The InputFileName is either the file name of an
- ejb-jar file or the file name of an XML deployment descriptor of
- beans.
-
- The GenIC utility does the following :
-
-
-
- generates the sources of the container classes for all the beans
- defined in the deployment descriptor,
-
-
-
- compiles these classes via the java compiler,
-
-
-
- generates stubs and skeletons for those remote objects via the
- rmi compiler, and
-
-
-
- if the InputFile is an ejb-jar file, adds the generated classes
- in this ejb-jar file.
-
-
-
-
-
- Environment
-
- If InputFile is an XML deployment descriptor,
- the classpath must include the paths of the directories in which the
- Enterprise Bean's classes can be found, as well as the path of the
- directory specified by the -d option.
-
- If InputFile is an ejb-jar file, the classpath
- must include the path of the directory specified by the -d option.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/commands/jclient.xml b/jonas_doc/core/src/docbook/doc-en/commands/jclient.xml
deleted file mode 100644
index e47f73ff0c2e5d0e474a9f72215c712f37898e46..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/commands/jclient.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
- jclient command
-
- Start a client container.
-
-
- Options
-
-
- jclient
-
- -cp classpath
-
- -security
-
- -jarClient
-
- -traceFile
-
- -carolFile
-
- -tmpDir
-
- -nowsgen
-
- java-class
-
- args
-
-
-
-
- -jarClient
-
-
- Specify the client jar to use of the ear if many.
-
-
-
-
- -traceFile
-
-
- Specify the configuration file to use for the traces of this
- client instead of the default file
-
-
-
-
- -carolFile
-
-
- Specify the carol.properties file to use instead of the
- default carol.properties file of the client.jar
-
-
-
-
- -tmpDir
-
-
- Specify the temp directory where unpack the ear.
-
-
-
-
- -cp classpath
-
-
- Add an additional classpath before running the java
- program.
-
-
-
-
- -nowsgen
-
-
- Specify if the Container shouldn't use Automated WsGen.
-
-
-
-
- -security
-
-
- Set a security manager using the policy file in
- $JONAS_BASE/conf/java.policy. (Used for
- automatic stubs downloading)
-
-
-
-
-
-
- Description
-
- The jclient command allows the user to easily start a "heavy" java
- client that will be able to reach beans in remote servers and start
- distributed transactions.
-
- It is not the J2EE compliant way to run a java client which is to
- package the java client into a J2EE container client (refer to Client
- Packaging).
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/commands/jms.xml b/jonas_doc/core/src/docbook/doc-en/commands/jms.xml
deleted file mode 100644
index 9a976b59837b0dc5d012ae5e7f4ea3f63a5d2f2c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/commands/jms.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
- JMS commands
-
-
- JmsServer
-
- Launch the JORAM server with the existent configuration.
-
-
- Synopsis
-
-
- JmsServer
-
-
-
-
- Description
-
- Launch the JORAM server with the existent configuration.
-
- The JORAM server configuration files are listed below:
-
-
-
- $JONAS_BASE/conf/a3servers.xml
-
-
-
- $JONAS_BASE/conf/joramAdmin.xml
-
-
-
- META-INF/ra.xml in the
- joram_ra_for_jonas.rar archive (may be in the
- internal repositories or in the deploy/ directory).
-
-
-
-
-
- Example
-
- The JmsServer command is typically run in the
- background:
-
-
-
- JmsServer &
-
-
- on Unix
-
-
-
-
-
-
- start JmsServer
-
-
- on Windows
-
-
-
-
-
-
-
- joram_raconfig
-
- Change the host and port parameters of a given JORAM server in the
- configuration files.
-
-
- Options
-
-
- joram_raconfig
-
- -p port
-
- -h host
-
- -s serverId
-
-
-
-
- -p port
-
-
- Set the listening port of the JORAM server (defaults to
- 16010).
-
-
-
-
- -h host
-
-
- Set the IP address of the JORAM server (defaults to
- localhost).
-
-
-
-
- -s serverId
-
-
- Set the server id of the JORAM server (defaults to
- 0).
-
-
-
-
-
-
- Description
-
- The joram_raconfig tool aims to facilitate consistent updates
- (accross multiple files) for the host and port parameters of a given
- JORAM server ID.
-
- JORAM relies on several configuration files:
- a3servers.xml,joramAdmin.xml
- and ra.xml. With joram_raconfig, these
- configuration files are updated all together and thus the consistency is
- ensured.
-
- Modified files:
-
-
-
- $JONAS_BASE/conf/a3servers.xml
-
-
-
- $JONAS_BASE/conf/joramAdmin.xml
-
-
-
- META-INF/ra.xml (in the JORAM resource
- adapter) is updated.
-
-
-
- Resource adapters files are looked up in the following
- places:
-
-
-
- $JONAS_BASE/repositories/maven2-internal/org/objectweb/joram/joram_ra_for_jonas/{joram.version}/joram_ra_for_jonas-{joram.version}.rar
-
-
-
- $JONAS_BASE/deploy/joram_ra_for_jonas.rar
-
-
-
-
-
- Example
-
- >$ joram_raconfig -h localhost -p 16012 -s 0
-Target JORAM Resource Adapter: /home/ ... /joram/joram_ra_for_jonas/5.2.1a/joram_ra_for_jonas-5.2.1a.rar
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/commands/jonas.xml b/jonas_doc/core/src/docbook/doc-en/commands/jonas.xml
deleted file mode 100644
index ea7e89cb52d5323021a3d3e2812f315a7ba7b115..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/commands/jonas.xml
+++ /dev/null
@@ -1,776 +0,0 @@
-
-
- jonas command
-
- This command provides the capability to start, stop, or administrate
- servers.
-
- The following two scripts can be reviewed and possibly modified for
- assistance with problems or for obtaining additional information:
-
-
-
- jonas for UNIX systems
-
-
-
- jonas.bat for WINDOWS
- systems
-
-
-
- There are five different sub-commands, that depend on the first
- mandatory argument: start, stop, admin, version, check
-
-
- jonas start
-
- Command allowing to start a server.
-
-
- Options
-
-
- jonas start
-
- -standby
-
- -failStartOnError
-
- -fg
-
- -bg
-
- -win
-
- -tui
-
- -gui
-
- -dev
-
- -clean
-
- -n name
-
- -target server
-
- -Ddomain.name=domain
-
-
-
-
- -standby
-
-
- Start a minimal server with only mandatory services :
- registry, jmx. If the
- discovery service is configured in the JOnAS
- service list, it will bo started too.
-
- When the server startup is done, should be in the
- STANDBY state. In this state, the server can either be stopped
- (see jonas stop command) or be fully started
- by executing the jonas start command to reach
- the RUNNING state.
-
-
-
-
- -failStartOnError
-
-
- Start the server in safe startup mode. If at least one deployable has a failed deployment, the server
- will shutdown.
-
-
-
-
- -bg
-
-
- Start the server in background mode
-
-
-
-
- -win
-
-
- Start the server in a new window
-
-
-
-
- -tui
-
-
- Start the Apache Felix TUI (force foreground mode)
-
-
-
-
- -gui
-
-
- Start the Apache Felix GUI
-
-
-
-
- -dev
-
-
- This option allows to start a server by using
- bundles present in the default maven repository instead of bundles
- under $JONAS_ROOT/lib/bundles. A specific
- maven repository location can be given by setting the
- m2.repository property
-
-
-
-
- -clean
-
-
- Clean the Apache Felix cache before starting a server
-
-
-
-
- -n name
-
-
- Set the server name. It must be unique in the domain. By
- default, the server name is jonas
-
-
-
-
- -target server
-
-
- This option allows to start another server or cluster (group
- of servers) in the domain.
-
- This action is to be executed in the environment of a
- running master server who's name is given by the -n option. In
- order to start a target server or cluster, the following
- conditions have to be met:
-
-
-
- the target must belong to the domain (has to be defined
- in the domain's map)
-
-
-
- a cluster daemon has to be running on the target's host
- and it has to be aware of the target (see cluster daemon
- configuration)
-
-
-
-
-
-
- -Ddomain.name=domain
-
-
- Set the name of the management domain to which the server
- belongs
-
-
-
-
-
-
- Description
-
- Start a server.
-
- The process can be run in the foreground, in the background, or in
- a new window. If the background option is chosen (default option),
- control is given back to the caller only when the server is
- ready.
-
- The gui and tui options allow to interact with the OSGi
- framework.
-
- The name of the management domain to which the server belongs is
- given by the domain.name propery, or by the server
- name if this property is not defined.
-
-
-
-
- jonas stop
-
- Command allowing to stop a server.
-
-
- Options
-
-
- jonas stop
-
- -standby
-
- -n name
-
- -target server
-
- -Ddomain.name=domain
-
-
-
-
- -standby
-
-
- Allows to stop all services except the mandatory ones
- (registry and jmx). When
- the server stop is done, should be in the STANDBY state and the JVM
- is still running. In this state, the server can either be started
- (see jonas start command) or be fully stopped
- by executing the jonas stop command to stop
- all services and the JVM.
-
-
-
-
- -n name
-
-
- Set the name of the server to stop. By default, the server
- name is jonas
-
-
-
-
- -target server
-
-
- This option allows to stop another server or cluster (group
- of servers) in the domain.
-
- This action is to be executed in the environment of a
- running master server who's name is given by the -n option. In
- order to start a target server or cluster, the following
- conditions have to be met:
-
-
-
- the target must belong to the domain (has to be defined
- in the domain's map)
-
-
-
- a cluster daemon has to be running on the target's host
- and it has to be aware of the target (see cluster daemon
- configuration)
-
-
-
-
-
-
- -Ddomain.name=domain
-
-
- Set the name of the management domain to which the server
- belongs
-
-
-
-
-
-
- Description
-
- Stop a running or a standby server by stopping in a first time all services
- and then the JVM.
-
- The name of the management domain to which the server belongs is
- given by the domain.name propery, or by the server
- name if this property is not defined.
-
-
-
-
- jonas admin
-
- Command allowing to administer a server.
-
-
- Synopsis
-
-
- jonas admin
-
- -win
-
- -n name
-
- -registry
-
- -protocol
-
- -username
-
- -password
-
- admin options
-
-
-
-
- Description
-
- Administer a server.
-
- The connection to the server is established through JMX. The
- default JMX service URL is build from the information contained in the
- local $JONAS_BASE/conf/carol.properties file. You
- can customize the JMX service URL by specifying the server name, the
- registry URL and the protocol name.
-
- Set the username and the password if the connection to the remote
- server
- requires an authentication.
-
- Used without any administration option, this command will prompt
- the user for an administration command (interactive mode). Each
- administration command exists in a non-interactive mode, to be used in
- shell or bat scripts for example.
-
-
-
- Options
-
- Options can be divided in two categories, the connection options
- and the administration options.
-
-
- Connection options
-
-
-
- -win
-
-
- Administer the server in a new window
-
-
-
-
- -n name
-
-
- Set the name of the server to administer. By default, the
- server name is jonas
-
-
-
-
- -username
-
-
- Set the username when authentication is required
-
-
-
-
- -password
-
-
- Set the password when authentication is required
-
-
-
-
- -registry
-
-
- Set the registry URL
-
-
-
-
- -protocol
-
-
- Set the protocol name (jrmp, iiop or irmi)
-
-
-
-
-
-
- Administration options
-
-
-
- -?
-
-
- Prints the help message
-
-
-
-
- -a filepath
-
-
- Deploy an application from a given filepath on the current
- server, or on another target in the domain if the current server
- is a master. Note that the filepath must be an absolute
- path
-
- The application can be one of the following :
-
-
-
- a standard .jar
- file. This will lead to the creation of a new EJB
- container.
-
-
-
- a standard .war
- file containing a WEB module.
-
-
-
- a standard .ear
- file containing a complete J2EE application.
-
-
-
- a standard .rar
- file containing a RAR module.
-
-
-
-
-
-
- -r filepath
-
-
- Undeploy a previously deployed application from the
- current server or from the specified target if the current
- server is a master
-
-
-
-
- -gc
-
-
- Run the garbage collector on the current server
-
-
-
-
- -passivate
-
-
- Passivate all entity bean instances. This affects only
- instances outside transaction
-
-
-
-
- -e
-
-
- List the properties of the current server
-
-
-
-
- -j
-
-
- List the registered JNDI names, as seen by the current
-
- server
-
-
-
-
- -l
-
-
- List the beans currently loaded by the current server
-
-
-
-
- -synch
-
-
- Synchronize the entity bean instances on the current
-
- server. Note that this affects only the instances that are not
- involved in a transaction
-
-
-
-
- -debug topic
-
-
- Set the logging level for the given topic to DEBUG
-
-
-
-
- -tt timeout
-
-
- Change the default timeout for transactions. Timeout is in
- seconds
-
-
-
-
- -ping [-timeout seconds]
-
-
- Wait until the server is available
-
-
-
-
- Each jonas admin option has its equivalent in the interactive
- mode. To enter interactive mode and access the following list of
- subcommands, type jonas admin with only connection options (without
- administration options). To exit from interactive mode, use the exit
- command.
-
-
-
-
-
- interactive command
-
- options
-
-
-
-
-
- addbeans
-
- -a filepath
-
-
-
- env
-
- -e
-
-
-
- gc
-
- -gc
-
-
-
- help
-
- -?
-
-
-
- jndinames
-
- -j
-
-
-
- listbeans
-
- -l
-
-
-
- removebeans
-
- -r filepath
-
-
-
- sync
-
- -sync
-
-
-
- trace
-
- -debug topic
-
-
-
- ttimeout
-
- -tt timeout
-
-
-
- quit
-
- exit interactive mode
-
-
-
-
-
-
-
-
-
- jonas version
-
- Command allowing to know the version of the server.
-
-
- Synopsis
-
-
- jonas version
-
-
-
-
- Description
-
- Print the current version of the server.
-
-
-
-
- jonas check
-
- Command allowing to check that the environment is correctly
- set .
-
-
- Synopsis
-
-
- jonas check
-
- -help
-
-
-
-
- Description
-
- Check that the server is well installed. Below the result of
- the jonas check command :
-
- Checking jonas.properties file...
-- jonas.services : registry,jmx,jtm,db,security,resource,ejb2,ejb3,jaxws,web,ear,depmonitor
-
-Checking JORAM configuration...
-
-Checking port availability...
-
-The JOnAS environment seems correct.
-
-
-
-
-
- jcl
-
- Command allowing to start or stop a cluster of instances on the local machine.
-
-
- Synopsis
-
-
- jcl
-
- status|start|stop|kill
-
-
-
-
-
- Description
-
- The command is a wrapper of the jonas command enabling to control a local cluster previously
- built with the newjc command.
-
- The names and paths of the cluster instances are built from a set of variables (JCL_NUMBER_OF_NODES, JCL_BASE_PREFIX, JCL_NODE_NAME_PREFIX, ...).
- The list of variable in an example is given below.
-
- JCL_NUMBER_OF_NODES=2
-
-JCL_CLUSTER_DAEMON_DIR=/home/jonas/njc51/cd
-JCL_BASE_PREFIX=/home/jonas/njc51/jb
-
-JCL_NODE_NAME_PREFIX=node
-JCL_DOMAIN_NAME=sampleCluster2Domain
-
-JCL_DB_DIR=/home/jonas/njc51/db
-JCL_DB_NAME=db
-
-JCL_MASTER_DIR=/home/jonas/njc51/master
-JCL_MASTER_NAME=master
-
-export JCL_MASTER_NAME JCL_MASTER_DIR JCL_DB_NAME JCL_DB_DIR JCL_DOMAIN_NAME JCL_NODE_NAME_PREFIX
-export JCL_NUMBER_OF_NODES JCL_CLUSTER_DAEMON_DIR JCL_BASE_PREFIX
-
-
-
- The control commands (status/start/stop/...) are applied for all the instances by default. A particular instance or a subset of instances
- can be specified with the -n argument.
-
- Example for starting node1 and node2:
-
- $JONAS_ROOT/bin/jcl.sh -n 1,2 start
-
- Example for getting the status for node1, node2, node3 and node4:
-
- $JONAS_ROOT/bin/jcl.sh -n 1-4 status
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonas_properties.xml b/jonas_doc/core/src/docbook/doc-en/config/jonas_properties.xml
deleted file mode 100644
index 9039944e725eb213995a93e082676d0b51d0f8ba..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/config/jonas_properties.xml
+++ /dev/null
@@ -1,559 +0,0 @@
-
-
-
- Server and services configuration
-
-
- $JONAS_BASE/conf/jonas.properties is the key file
- for configuring .
-
- This file is used for:
-
-
-
- setting some global properties for the instance
-
-
-
- choosing the list of services to be launched at startup
-
-
-
- customizing each services
-
-
-
-
-
- Global properties
-
-
- # Name of the JOnAS server
-# default value is "jonas"
-jonas.name jonas
-
-# Name of the JOnAS domain
-# default value is "jonas"
-domain.name jonas
-
-# Enable the Security context propagation (for jrmp)
-jonas.security.propagation true
-
-# Enable the Security manager
-# default value is true (if not set)
-# Setting this to false implies a collocated registry and setting in carol.properties:
-# carol.jvm.rmi.local.registry=true
-jonas.security.manager false
-
-# Enable csiv2
-jonas.csiv2.propagation true
-
-# Enable the Transaction context propagation
-jonas.transaction.propagation true
-
-# Set the name of log configuration file
-jonas.log.configfile trace
-
-# Set the work directory used by JOnAS (relative or absolute)
-# A relative directory name will be prefixed by JONAS_BASE/
-# An absolute path will be used directly
-jonas.workdirectory work
-
-# Set to true if the server is a master
-jonas.master false
-
-# Set to true in order to execute the JOnAS Server in development mode.
-#
-# WAR archive deployment case in development mode (for single or EAR packaged WARs):
-# Each modified WAR archive will be unpacked in the working directory of the JOnAS Server
-# in a different folder to avoid file locks. This is especially useful in a Windows environment.
-jonas.development true
-
-
- setting jonas.security.manager to
- false implies a colocated registry and implies to set
- in carol.properties:
-
- carol.jvm.rmi.local.registry=true
-
-
-
-
-
- Admin Client properties
-
-
- #
-###################### JOnAS Admin Client configuration
-#
-# If JMX security is enabled, the JOnAS Admin Client requires its parameters
-# To be passed using -username and -password arguments. These two parameters
-# pass these arguments to the JOnAS Admin Client internally.
-jonas.adminClient.username jonas
-jonas.adminClient.password jonas
-
-
-
-
-
- List of services
-
-
- Here is the list of default services activated at starting
- time:
-
- jonas.services jtm, db, security, resource, ejb3, jaxws, web, ear, depmonitor
-
- The possible services are:
-
- registry, jmx, security, jtm, db, mail, wc, dbm, wm, resource, cmi, ha, versioning, ejb2, ejb3, jaxrpc, jaxws, web, ear, depmonitor, discovery, resourcemonitor, smartclient, wsdl-publisher
-
-
-
- cmi
-
-
- this service provides support for the clustering of RMI
- objects.
-
-
-
-
- db
-
-
- this service is used for launching a Java database
- implementation. By default, HSQLDB java database is used.
-
-
-
-
- dbm
-
-
- this service is needed by application components that require
- access to one or several relational databases. It may be an
- alternative to the usage of a JDBC resource
- adapter via the resource service.
-
-
-
-
- depmonitor
-
-
- this service is used to control the application's deployment
- process in JOnAS.
-
-
-
-
- discovery
-
-
- this service allows dynamic administration of management
- domains.
-
-
-
-
- ear
-
-
- this service provides support for applications (.ear files).
-
-
-
-
- ejb2
-
-
- this service provides support for EJB 2.x components
- (EjbJars).
-
-
-
-
- ejb3
-
-
- this service provides supports for EJB 3.0 components
- (EjbJars).
-
-
-
-
- ha
-
-
- this service provides high-availability replication mechanims
- for stateful session beans (EJB 2.x only).
-
-
-
-
- jaxrpc
-
-
- this service provides support for JAX-RPC 1.1 webservices
- (J2EE 1.4 style, based on webservices.xml
- deployment descriptors).
-
-
-
-
- jaxws
-
-
- this service provides support for JAX-WS 2.0 webservices (Java
- EE 5.0 style based on JWS annotations).
-
-
-
-
- jmx
-
-
- this service is needed in order to administrate the JOnAS
- servers and the JOnAS services via a JMX-based administration
- console. It is automatically launched before all the other services
- when starting .
-
-
-
-
- jtm
-
-
- this service provides support of distributed transactions
- management.
-
-
-
-
- mail
-
-
- this service is required by applications that need to send
- e-mail messages.
-
-
-
-
- registry
-
-
- this service is used for binding remote objects and resources
- that will later be accessed via JNDI. It is automatically launched
- before all the other services when starting .
-
-
-
-
- resource
-
-
- this service provides support for resource adapters conformant
- to the
- Connector Architecture Specification.
-
-
-
-
- resourcemonitor
-
-
- this service is related to the deployment plans. It allows to
- reload resources deployed through deployment plans by checking
- periodically repositories where are located original
- resources.
-
-
-
-
- smartclient
-
-
- this service lets remote clients download classes and other
- resources necessary for connecting to JOnAS services (JNDI context
- factories, EJB3 interceptors, ...) directly from the JOnAS server
- they're dealing with.
-
-
-
-
- security
-
-
- this service is needed for enforcing security at
- runtime.
-
-
-
-
- versioning
-
-
- this service has been designed for dynamic redeployment of
- applications,without any application downtime and without users'
- sessions being lost.
-
-
-
-
- wc
-
-
- this service cleans up periodically the work directory of the
- JOnAS server.
-
-
-
-
- web
-
-
- this service provides support for web components (as Servlets
- and JSP). JOnAS provides two implementations of this service, one
- based on Tomcat and another on Jetty.
-
-
-
-
- wm
-
-
- this service provides a JCA WorkManager implementation
- (offering a manageable Thread Pool for resource adapters
- components).
-
-
-
-
- wsdl-publisher
-
-
- this service provides an alternate WSDL publishing mechanism
- (compared to the usual URL based publishing).
-
-
-
-
-
-
-
- Service startup policies
-
-
- will try
- to start declared services in the order in which they appear in the list
- except for the depmonitor service which is always
- started at the end. If some services require other ones (even non declared
- in the list), service requirements will be started first.
-
- To simplify the declaration of services and to ensure that all service
- requirements are fulfilled, some services declare explicitly their
- dependencies in order to start them automatically.
-
- The picture below describes mandatory dependencies beetwen
- services. A
- link between two services means that a service requires another one. Note
- on the right side services without dependency links.
-
-
-
-
- Optional service dependencies are not described in this picture.
- They have to be declared in the list of JOnAS services when
- required.
-
-
-
-
- registry and jmx services can be omitted from the list because
- they are automatically launched.
-
-
-
- As an example, starting the web service
- involves the startup of the security service.
- Declaring the web service in the list of
- services
- without declaring the security service may be a
- solution.
-
-
-
- As an example, starting the resource
- service involves the startup of the wm and the
- jtm services. Declaring the
- resource service in the list of services without
- declaring the wm and the jtm
- service may be a solution.
-
-
-
-
-
-
- Customizing services
-
-
- Configuration parameters for services follow a strict naming
- convention: a service XX will be
- configured via a set of properties:
-
-
- jonas.service.XX.foo something
-
- jonas.service.XX.bar else
-
- each service XX must contain the
- property jonas.service.XX.class indicating the name
- of the java class that implements the service:
-
- jonas.service.XX.class aa.bb.XXImpl
-
- This allow experimented user to replace built-in service by an
- alternative implementation.
-
-
-
- For example here is the part of
- jonas.properties file related to the customization
- of the jtm service:
-
-
-###################### JOnAS JTM Transaction service configuration
-# Set the name of the implementation class of the jtm service
-jonas.service.jtm.class org.ow2.jonas.tm.jotm.JOTMTransactionService
-
-# Set the Transaction Manager launching mode.
-# If set to 'true', TM is remote: TM must be already launched in an other JVM.
-# If set to 'false', TM is local: TM is going to run into the same JVM
-# than the jonas Server.
-jonas.service.jtm.remote false
-
-# Set the default transaction timeout, in seconds.
-jonas.service.jtm.timeout 60
-
-
-
- see for a complete description of
- the services configuration.
-
-
-
-
- Development vs Production mode
-
-
- may be
- configured to be in development mode and in production mode. This can be
- defined by setting the jonas.development
- global property. Activating one of this mode changes some server
- behaviours as described in the following section.
-
-
-
- Development mode
-
-
- This is the default mode.
-
- Starts automatically the workcleaner
- (wc) service.
-
-
-
- Allows to start automatically services which are required to
- initiate the deployment of the Java EE archives. Ex: deploying the
- sample.war will trigger the startup of the
- web service.
-
- List of services that may be started dynamically depending
- on the deployed Java EE archives:
-
- web (WARs), ejb2 (EJB2s), ejb3 (EJB3s), resource (RARs), ear (EARs)
-
-
- Known limitations: if an application needs some additional
- services to work like for example Web Services support
- (jarxrpc or jaxws
- services), the administrator have to add those kind of services
- manually in the static description of services.
-
-
-
-
- In case of the development property of the
- depmonitor service is set to inherit, the
- period scan of directories managed by the
- depmonitor (by default the deploy/
- directory) service will be enabled.
-
-
-
- WAR archive deployment case (for single or EAR packaged
- WARs). Each WAR archive is unpacked in the working directory of
- the
- server in a different folder to avoid file locks. This is
- especially useful in a Windows environment.
-
-
-
- Necessary to enable the onDemand feature of the
- web service.
-
-
-
-
-
-
- Production mode
-
-
- This mode is recommended in industrial production context.
-
-
-
- In case of the development property of the depmonitor
- service is set to inherit, the period scan of directories managed
- by the depmonitor (by default the deploy/
- directory) service will be disabled.
-
-
-
- WAR archive deployment case (for single or EAR packaged
- WARs). Each WAR archive is unpacked in the working directory of
- the
- server in the same folder.
-
-
-
- Force the disabling of the onDemand feature of the
- web service.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_conf.xml b/jonas_doc/core/src/docbook/doc-en/config/jonasbase_conf.xml
deleted file mode 100644
index 113f174193e2f31e8df1066cbbd9c229540b1323..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_conf.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
- JONAS_BASE/conf description
-
-
- This directory contains configuration files in various format
- (properties files, xml files).
-
- The main configuration file is jonas.properties
- but there are also:
-
-
-
- Templates for configuring access to databases for the
- dbm service, (Oracle, PostgreSQL, Sybase, DB2,
- MySQL, HSQLDB, InterBase, FirebirdSQL, Mckoi SQL, InstantDB )
- respectively in Oracle1.properties,
- PostgreSQL1.properties,etc... All these databases
- have been tested with .
-
-
-
- Mail resources templates :
- MailMimePartDS1.properties,
- MailSession1.properties
-
-
-
- JORAM configuration files : a3debug.cfg,
- a3servers.xml,
- joramAdmin.xml
-
-
-
- EasyBeans ejb3 container configuration file is named
- easybeans-jonas.xml.
-
-
-
- carol.properties,
- jacorb.properties for configuring the RMI
- implementation used through CAROL.
-
-
-
- Configuration files for clustering : cmi-config.xml,
- clusterd.xml,
- domain.xml,jgroups-discovery.xml,
- jgroups-ha.xml,
- jgroups-cmi.xml.
-
-
-
- Configuration files related to security:
- jaas.config, java.policy,
- jonas-realm.xml
-
-
-
- Web container configuration files:
-
-
-
- tomcat6-server.xml,
- tomcat6-context.xml, tomcat6-web.xml
- for Tomcat,
-
-
-
- jetty6.xml jetty6-web.xml
- for Jetty.
-
-
-
-
-
- Web services configuration
- files:uddi.properties,
- file1.properties.
-
-
-
- Client container configuration file:
- jonas-client.properties
-
-
-
- JOnAS traces configurations files:
- trace.properties,
- traceclient.properties
-
-
-
- Transaction recovery configuration file :
- jotm.properties
-
-
-
- P6Spy options file: spy.properties
-
-
-
- Java Service Wrapper configuration file:
- wrapper.conf
-
-
-
- Deployment plan initial repositories are stored in
- initial-repositories.xml file.
-
-
-
- jmx.access,
- jmx.passwords and
- jmx.rolbased.access are configuration files used to
- secure the JMX connector access.
-
-
-
- jndi-interceptors.xml is used by the JNDI
- Interceptors allowing for example to automatically close the JDBC
- connections if they're not closed by the application.
-
-
-
- classloader-default-filtering.xml allows to
- hide to applications some classes exported by the Application
- Server.
-
-
-
- banner.txt allows to change the banner of the
- JOnAS scripts.
-
-
-
- Most of these files are described in following sections.
-
diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_creation.xml b/jonas_doc/core/src/docbook/doc-en/config/jonasbase_creation.xml
deleted file mode 100644
index 09c84770938eae7d93fab0f2899b7335fd06c397..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_creation.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
- JONAS_BASE creation
-
-
-
-
- To create a JONAS_BASE template from scratch :
-
- Unix
-
- export JONAS_BASE=~/my_jonas_base
-cd $JONAS_ROOT/templates/newjb
-ant -f build-jb.xml create_jonas_base
-
- Windowsset JONAS_BASE=my_jonas_base
-cd %JONAS_ROOT%/templates/newjb
-ant -f build-jb.xml create_jonas_baseThis will copy all the required
- files and create all the needed directories.
-
-
-
-
-
- Another way to create a JONAS_BASE template from scratch :
-
- $JONAS_ROOT/bin must be set in the system
- path:
-
- Unixexport JONAS_BASE=~/my_jonas_base
-newjb
-
- Windowsset JONAS_BASE=my_jonas_base
-newjbThe JONAS_BASE content created with the newjb
- command is well suited to run the JEE conformance test suite and the
- example applications without any additional configuration.
-
- In order to customize a JONAS_BASE with specific property values
- (port numbers, services, protocols etc...), you must edit the
- $JONAS_ROOT/templates/newjb/build-jb.properties
- file or $HOME/jb.config/conf/jonas-newjb.properties
- file before running newjb.
-
- For further customization that cannot be performed by
- newjb you should modify the generated files in
- $JONAS_BASE/conf. For more information see the
- description of the newjb command in Commands Reference
- Guide.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_structure.xml b/jonas_doc/core/src/docbook/doc-en/config/jonasbase_structure.xml
deleted file mode 100644
index e333ead1eae1ead18976693aa1627a0f48ee1fb6..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_structure.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
- JONAS_BASE structure
-
-
- JONAS_BASE has the following structure:
-
-
-
- the conf/
- directory
-
- contains configuration files.
-
-
-
- the deploy/
- directory
-
- is the main location used for deployment.
-
- At JOnAS startup time all the deployment plans, archives and OSGi bundles
- are deployed in the following order:
-
-
-
- Deployment plan repositories
-
-
-
- OSGi bundles
-
-
-
- RAR archives
-
-
-
- Deployment plan resources
-
-
-
- EJB archives
-
-
-
- WAR archives
-
-
-
- EAR archives
-
-
- For each category, file names are chosen in
- alphabetical order
-
-
- Then this directory is periodically polled in order to
- deploy new archives. For more information have a look at the depmonitor
- service configuration
-
-
-
- the lib/ directory
-
- see Understanding
- class loader hierarchy for a complete description of the
- classloader mechanism.
-
-
- Used for extending class loaders. It contains one sub
- directory:
-
-
-
-
-
- directory
-
- description
-
-
-
-
-
- ext
-
- For non-bundle extensions
-
-
-
-
-
-
-
- the logs/
- directory
-
- where the log files are created at run-time
-
-
-
- the work/
- directory
-
- a working directory for
-
-
- This is the default name for the working directory. The
- working directory can be configured by editing the
- JONAS_BASE/conf/jonas.properties and by
- modifying the jonas.workdirectory
- property.
-
-
-
-
- the repositories/
- directory
-
- this sub tree contains the following repositories used to store
- OSGi bundles and applications. Archives located in these
- repositories are priority in case they are also located in
- JONAS_ROOT/repositories
-
-
-
- maven2-internal/ this
- directory is created during the building process of a JONAS_BASE
- environment. It may contain the JORAM resource adapter for JOnAS.
- It is used for internal purpose and should not be modified. This
- directory is structured as a Maven2 repository.
-
-
-
- <repository-id>/ contains
- archives downloaded through deployment plans from this
- repository.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasroot_structure.xml b/jonas_doc/core/src/docbook/doc-en/config/jonasroot_structure.xml
deleted file mode 100644
index 9b3c5deef7c1759fbeb231a5a59bd6db2c98f2df..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/config/jonasroot_structure.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-
-
-
- JONAS_ROOT structure
-
-
- The installation directory (JONAS_ROOT) has the following
- structure:
-
-
-
- the deploy/
- directory
-
- The main location used for deployment.
-
- At JOnAS startup, all deployment plans, archives and OSGi bundles
- are deployed in the following order:
-
-
-
- Deployment plan repositories
-
-
-
- OSGi bundles
-
-
-
- RAR archives
-
-
-
- Deployment plan resources
-
-
-
- EJB archives
-
-
-
- WAR archives
-
-
-
- EAR archives
-
-
- For each category, file names are chosen in
- alphabetical order
-
-
- This directory is periodically polled in order to
- deploy new archives. For more information have a look at the depmonitor
- service configuration
-
-
-
- the bin/ directory
-
- contains the scripts used to launch JOnAS (Unix and Windows
- scripts).
-
-
-
- the conf/
- directory
-
- contains the configuration files.
-
-
-
- the examples/
- directory
-
- this sub tree containing all the JOnAS examples that are
- described in
-
-
-
- the lib/ directory
-
- see Understanding
- class loader hierarchy for a complete description of the
- classloader mechanism.
-
-
- Used for extending class loaders. It contains five sub
- directories:
-
-
-
-
-
- Directory
-
- Description
-
-
-
-
-
- bootstrap/
-
- Jars loaded by the JOnAS
- bootstrap
-
-
-
- common/
-
- Legacy directory where Ant tasks are
- stored
-
-
-
- endorsed/
-
- Jars overridding JVM libraries
-
-
-
- ext/
-
- For non-bundle extensions
-
-
-
- internal-ee-tld/
-
- Internal use only !
-
-
-
-
-
-
-
- the logs/
- directory
-
- where the log files are created at run-time (when the JONAS_ROOT
- is used as a JONAS_BASE)
-
-
-
- the templates/
- directory
-
- this sub tree contains the following subdirectories used by
- during the
- generation process (eg, JONAS_BASE generation).
-
-
-
- conf/ is an empty
- template of the JONAS_BASE structure used by tools able to create
- a JONAS_BASE environment.
-
-
-
- newjb/ contains the
- configuration files for creating a JONAS_BASE environment.
-
-
-
- newjc/ contains the
- configuration files for creating a cluster environment.
-
-
-
-
-
- the repositories/
- directory
-
- this sub tree contains the following repositories used to store
- OSGi bundles,
- applications and deployment plans.
-
-
-
- maven2-internal/
- contains both OSGi bundles and applications (jonasAdmin,
- documentation, ...) for JOnAS. It is used for internal purpose and
- should not be modified. This directory is structured as a Maven2
- repository.
-
-
-
- url-internal/
- contains the deployment plans of each JOnAS services. It is used
- for internal purpose and should not be modified.
-
-
-
- <repository-id>/ contains
- archives downloaded through deployment plans from this
- repository.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/configuration_guide.xml b/jonas_doc/core/src/docbook/doc-en/configuration_guide.xml
deleted file mode 100644
index 9d454cac75c6f635ebead05cfd3969813b043cff..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/configuration_guide.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-
- JOnAS 5 Configuration guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2007-2011
-
- OW2 Consortium
-
-
- April 2011
-
-
-
-
- Introduction
-
-
-
-
- Configuring JOnAS
-
-
- Configuration is a task that may be more or less complex.
- Configuring a unique instance is obviously easier than configuring a
- cluster of servers.
-
- Configuration task consists mainly in customizing a set of
- configuration
- files that compose the environment see .
-
- First of all, some terms used is this document must be
- defined:
-
-
-
-
-
-
-
- Configuring a JOnAS instance
-
-
- is
- pre-configured and ready to be used directly. The Getting Started
- book has shown that a very sample example may be run after JOnAS
- installation without any configuration task. But as soon as your
- application needs to use resources specific to the execution environment,
- configuration is mandatory.
-
- In this chapter we will see in a first part where are the
- configuration files and then what that can be configured
-
-
-
- Configuring JOnAS Environment
-
-
- JOnAS distribution contains a number of configuration files in
- $JONAS_ROOT/conf directory. These
- files can be edited to change the default configuration. However, it is
- recommended that the configuration files needed by a specific
- application running on be placed in a separate location. This is done
- by using an additional environment variable called JONAS_BASE.
-
- JOnAS configuration files are read from the $JONAS_BASE/conf
- directory. If JONAS_BASE is not defined, it is automatically initialized
- to $JONAS_ROOT.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Configuring JOnAS Services
-
-
- Here is the list of possible services
-
- registry,jmx,security,jtm,db,mail,wc,dbm,wm,resource,cmi,ha,versioning,ejb2,ejb3,jaxrpc,jaxws,web,ear,depmonitor,discovery,resourcemonitor,smartclient,wsdl-publisher
-
- In this chapter we will describe how to configure each service in
- the jonas.properties file.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Glossary
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/connector_pg.xml b/jonas_doc/core/src/docbook/doc-en/connector_pg.xml
deleted file mode 100644
index 1c38b89219c83172d49d9e8f15411da3eac9f606..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/connector_pg.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
- J2EE Connector Programmer's Guide
-
-
-
- JOnAS Team
-
-
-
- HARDESTYEric
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- March 2009
-
-
-
- This guide is provided for advanced JOnAS users concerned with EAI
- (Enterprise Application Integration) and using the J2EE Connector
- Architecture principles (refer to for an introduction to the
- connectors). The target audience for this guide is the Resource Adapter
- deployer and programmer. It describes the JOnAS specific deployment file (
- jonas-ra.xml ) and the sample code to access deployed RARs.
-
-
-
-
- Using a J2EE Connector
-
-
-
-
- Principles
-
-
- Resource Adapters are packaged for deployment in a standard Java
- programming language Archive file called a rar file (Resource ARchive),
- which is described in the J2EE Connector Architecture
- specification.
-
- The standard method for creating the jonas-ra.xml file is to use
- the RAConfig command
-
-
-
-
-
-
-
-
-
-
-
- Exemples of Resource Adapters
-
-
-
-
-
-
-
-
-
- Appendix
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/continuous_integration_guide.xml b/jonas_doc/core/src/docbook/doc-en/continuous_integration_guide.xml
deleted file mode 100644
index 9cb43166f47224ada3acc23dc795f0ac85ebea3d..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/continuous_integration_guide.xml
+++ /dev/null
@@ -1,1196 +0,0 @@
-
-
-
- Guide to how to do the JOnAS Continuous Integration work
-
-
-
- CVICSE
-
-
-
- LiuZongFu
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2007-2009
-
- OW2 Consortium
-
-
- July 2007
-
-
-
-
- Preface
-
-
- Welcome to the new users of JOnAS 5.0! This guide is intended to
- introduce to do the JOnAS 5.0 Continuous Integration Using Bamboo.
-
- Chapter1, Introduction of how to do the JOnAS5 Integration work
- manually wants to help you know how to setup the JOnAS
- integration work environment and do the work manually.
-
- Chapter2, Using Bamboo to define the JOnAS
- integration work wants to help you to use bamboo to setup the
- integration environment and define JOnAS integration activities.
-
- Chapter3, Using Bamboo
- to manage the JOnAS integration work wants to help
- you to use bamboo to define JOnAS integration activities and setup the
- integration environment.
-
- Note that this guide want to stay simple and has not the ambition to
- resolve all the problems that can be encountered in the real
- life that can be really complex.
-
- For more experimented users that need to perform more complex tasks
- it is recommended to look the JOnAS 5 Configuration Guide and Bamboo
- documentation.
-
-
-
-
- Introduction of how to do the JOnAS5 Integration work
- manually
-
-
-
-
- How to build the JOnAS manually
-
-
- Checkout the JOnAS source code from the subversion repository to
- the directory <jonas_src>. To do so, simply configure the SVN
- repository URL (if you are using a GUI subversion client, configure it
- appropriatly):
-
- svn://svn.forge.objectweb.org/svnroot/jonas/jonas/trunk/jonas
-
-
- Before building JOnAS, you have to set up the environment
- variables including JONAS_ROOT, CATALINA_HOME. You will also have to
- update your PATH variable as well.
-
-
-
- Unix platforms
-
- Open a new terminal and proceed as follows:
-
- bash>export JONAS_ROOT=<jonas_install_dir>
-bash>export CATALINA_HOME=<tomcat_install_dir>
-bash>export PATH=${PATH}:${JONAS_ROOT}/bin/unix
-
- or
-
- tcsh>setenv JONAS_ROOT=<jonas_install_dir>
-tcsh>setenv TOMCAT_HOME=<tomcat_install_dir>
-tcsh>setenv PATH ${PATH}:${JONAS_ROOT}/bin/unix
-
-
-
-
-
- Windows platforms
-
- Open a new DOS window and proceed as follows:
-
- C:>set JONAS_ROOT=<jonas_install_dir>
-C:>set CATALINA_HOME=<tomcat_install_dir>
-C:>set PATH=%PATH%;%JONAS_ROOT%\bin\nt
-
-
-
- The prerequisite of building JOnAS are to use the JDK 1.5, Maven
- 2.0.6 and Ant 1.6.5. Please to assure that you've installed the JDK1.5,
- Maven 2.0.6 and Ant 1.6.5.
-
- To build the jonas,simply use the following commands:
-
- cd <jonas_src>
-mvn clean install
-ant clean install
-
-
-
-
- How to build and run the JOnAS testsuite manually
-
-
-
-
- To checkout the JOnAS Testsuite
-
-
- Checkout the JOnAS testsuite source code from the subversion
- repository to the directory <jonas_tests>.To do so, simply
- configure the SVN repository URL (if you are using a GUI subversion
- client, configure it appropriatly):
-
- svn://svn.forge.objectweb.org/svnroot/jonas/jonas/trunk/jonas_tests
-
- Before building JOnAS Testsuite, you have to set up the
- environment.
-
-
-
-
- How to setup the environment in the user's home
- directory
-
-
- Please check the user environment . Change the directory to the
- user's home directory, and check the jb.config directory and
- proxy.properties.
-
- The 'jb.config' will be used by newjb tool for creating a new
- JONAS_BASE environment.
-
- We need to provide a proxy properties file only when using the
- proxy to access the internet. So if you use a proxy, you need to
- define the properties of the proxy in the configuration file of
- 'proxy.properties' and then put it in the user's home directory. If
- your machine can access the internet directly, you don't need provide
- it .
-
-
- Please assure there is not a property file named
- 'proxy.properties' in the user's home directory when you don't need
- a proxy.
-
-
-
-
- Under the directory of '${user.home}/jb.config', there are two
- sub-directories: conf and lib.
-
- Screenshot
- 1.'the directory of
- ${user.home}/jb.config ':
- the directory of ${user.home}/jb.config
-
-
-
-
-
-
-
-
-
-
- Open the file
- '${user.home}/jb.config/conf/jonas-newjb.properties' please assure the
- configurations as blow:
-
- #Services
-jonas.services=registry,jmx,jtm,db,security,mail,wm,resource,ejb,ws,web,ear,discovery
-
-#Jms
-jms.port=16010
-jms.topics=sampleTopic,InvoiceTopic
-jms.queues=sampleQueue,OrderApprovalQueue,OrdersQueue,MailCompletedOrderQueue,SupPurchaseOrderQueue,MailOrderApprovalQueue,MailQueue
-
-#Carol
-carol.allport=1099
-carol.defaultprotocol=jrmp
-carol.jrmpopt=false
-
-#Web
-webcontainer.port=9000
-# Tomcat/Jetty
-webcontainer.service.defaultname=tomcat
-
-#Db
-db.port=9001
-
-#Discovery
-discovery.sourceport=9888
-discovery.greetingport=9899
-discovery.mcastaddr=224.224.224.224
-discovery.mcastport=9080
-
-#Database
-rajdbc.defaultname=hsql
-
-#DB connections
-rajdbc.hsql.user=jonas
-rajdbc.hsql.password=jonas
-rajdbc.hsql.url=jdbc:hsqldb:hsql://localhost:9001/db_jonas
-rajdbc.hsql.drivername=org.hsqldb.jdbcDriver
-rajdbc.hsql.jndiname=jdbc_1
-rajdbc.hsql.jdbcdriverjarfile=none
-rajdbc.hsql.mappername=rdb.hsql
-
-#Mail
-mail.session.name=mailSession_1
-mail.mimepartds.name=mailMimePartDS_1
-mail.to=jean.dupont@objectweb.org
-mail.subject=test mail
-
-
-
-
- Open the file '${user.home}/proxy.properties' please
- assure the configurations as blow: proxyHost=...
-proxyPort=...
-nonProxyHosts=.....
-proxySet=true
-
-
-
-
- How to setup the environment variable
-
-
- Before building and running JOnAS testsuite, you have to set up
- the environment variables including JONAS_ROOT,
- JONAS_BASE, CATALINA_HOME, XMLUNIT_HOME, HTTPUNIT_HOME,
- HTTP_PORT . You will also have to update your PATH variable
- as well.
-
-
-
- Open a new terminal and proceed as follows:
-
- bash>export JONAS_ROOT=<jonas_install_dir>
-bash>export JONAS_BASE=<jonasbase_dir>
-bash>export CATALINA_HOME=<tomcat_install_dir>
-bash>export XMLUNIT_HOME=<xmlunit_install_dir>
-bash>export HTTPUNIT_HOME=<httpunit_install_dir>
-bash>export HTTP_PORT=9000
-bash>export PATH=${PATH}:${JONAS_ROOT}/bin/unix
-
- or
-
- tcsh>setenv JONAS_ROOT=<jonas_install_dir>
-tcsh>setenv JONAS_BASE=<jonasbase_dir>
-tcsh>setenv CATALINA_HOME=<tomcat_install_dir>
-tcsh>setenv XMLUNIT_HOME=<xmlunit_install_dir>
-tcsh>setenv HTTPUNIT_HOME=<httpunit_install_dir>
-tcsh>setenv HTTP_PORT=9000
-tcsh>setenv PATH=${PATH}:${JONAS_ROOT}/bin/unix
-
-
-
-
-
- Windows platforms
-
- Open a new DOS window and proceed as follows:
-
- C:>set JONAS_ROOT=<jonas_install_dir>
-C:>set JJONAS_BASE=<jonasbase_dir>
-C:>set CATALINA_HOME=<tomcat_install_dir>
-C:>set XMLUNIT_HOME=<xmlunit_install_dir>
-C:>set HTTPUNIT_HOME=<httpunit_install_dir>
-C:>set PATH=%PATH%;%JONAS_ROOT%\bin\nt
-
-
-
-
-
-
- How to build and run the JOnAS Testsuite
-
-
-
-
- To build the JOnAS Testsuite only:
-
- cd <jonas_tests>
-ant install
-
-
-
-
-
-
- To build and run the JOnAS Testsuite:
-
- cd <jonas_tests>
-ant run_nightly
-
-
-
-
-
-
-
- Conclusion
-
-
- From the above as you know, the JOnAS integration work consists
- three main building activities :
-
- cd <jonas_src>; mvn clean install
-cd <jonas_src>; ant clean install
-cd <jonas_tests>; ant run_nightly
-
- In the next chapter , it will introduce how to use the Bamboo to
- define the JOnAS integration building work which consists of three main
- JOnAS integration activities.
-
- Using Bamboo, you can define the the Integration work and then run
- and monitor the activities.
-
- Bamboo also provide many kinds of reports for the results of
- integration activities.
-
-
-
-
-
- Using Bamboo to define the JOnAS integration work
-
-
- First , you need to login into the Bamboo system as
- administrator.
- please assure that the user home environment has been setup,
- refer to 'How to setup the environment in the user's home directory in
- the chapter1.
-
-
-
-
- Setup the Builds environment in Bamboo
-
-
- Using Bamboo to do the JOnAS integration work, you need to
- configure the JDK, builds(Maven, Ant) and environment variables.
-
- JDKs: J2SDK 1.5
-Builders: Maven 2.0.6, Ant 1.6.5
-Global variables: define the environment property to pass the environment variables values
- (JONAS_ROOT, JONAS_BASE, CATALINA_HOME, XMLUNIT_HOME, HTTPUNIT_HOME)
-
- Click the 'Administration' link in the top navigation bar, to
- enter into the administrator page:
- Builds overview
-
-
-
-
-
-
-
-
-
-
- How to configure the JDK
-
-
- Click the 'JDKs' link in left navigation column. This will
- display a list of Available JDKs. To configure a JDK in Bamboo is same
- with the Builders. Bamboo will automatically add the JDK which default
- JAVA_HOME entry points at. In the Label field, the name is that will
- appear in the 'Builder JDK' drop down list when a plan is
- configured.
-
-
- Builds- JDKs List
-
-
-
-
-
-
-
-
-
-
-
- How to configure the Builders
-
-
- Click the 'Builders' link in left navigation column. The
- Builders in Bamboo are the build tools , such as Ant, Maven, Make,
- etc. This will display a list of Available Builders that have been
- configured in Bamboo, with an empty field at the bottom of each column
- for adding a new Builder. In the Label field, type the name that will
- appear in the 'Builders' drop down list when a plan is
- configured.
- Builds- Builders List
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to configure the Global Variables
-
-
- Click the 'Global Variables' link in the left navigator column
- and this will display a list of variables that have been configured in
- Bamboo, with an empty field at the bottom of each column for adding a
- new variable. In the 'Key' field, type the key of the variable that
- you want to identify the variable. In the 'Value' field, type the
- value of the variable. Then click the 'Save' button.
-
-
- Builds-Global Variables List
-
-
-
-
-
-
-
-
-
-
-
-
- Create the plans in Bamboo for JOnAS Integration
- Activities
-
-
- Now you will define the build plan in Bamboo for every integration
- activities of the JOnAS.
-
-
-
-
-
- Build Plan in Bamboo
-
- Activity
-
-
-
- Maven Build
-
- cd <jonas_src>; mvn clean install
-
-
-
- Ant Build
-
- cd <jonas_src>; ant clean install
-
-
-
- Tests Build
-
- cd <jonas_tests>; ant run_nightly
-
-
-
-
-
-
-
-
-
- How to create a project and a 'Maven Build' plan
-
-
- To create a new plan for ' Maven
- Build':
-
-
-
- Click the 'Create Plan'link in the top
- navigation bar.
-
-
-
- Enter the required information in the 6 screens as described
- below.When you return to the Dashboard, your new plan (and new
- project, if applicable) will be displayed in the 'All Projects' list.
-
-
-
- Screenshot 1. 'Plan Details'
- :
-
-
-
-
-
- 1. 'Plan Details':
-
-
-
-
- Project — When you create a new plan, you can either add it
- to an existing project or create a new project. Either:
-
-
-
- Select the appropriate project from the drop-down
- list;
-
- or
-
-
-
-
-
- Select 'New Project' and complete the following two
- fields:
-
-
-
- Project Name— Type a descriptive name ('Maven Build') that will identify
- your project on the Dashboard and in reports.
-
-
-
- Project Key — Type a logical contraction of the
- Project Name ('J5'). The
- Project Key will be included in the plan's Build Results
- keys ('J5-MVN-XXX'), so
- you may want to make it no longer than 3 or 4 characters.
- The Project Key must be unique within your Bamboo system.
- The Build Results keys'suffix 'XXX' identifies the XXX
- test results.
-
-
-
-
-
-
-
-
-
- Build Plan Name — Type a name that will identify the plan
- within its project ('Maven
- Build'). Note that the Build Plan Name, which is
- displayed throughout Bamboo, is always accompanied by its Project
- Name.
-
-
-
-
-
- Build Plan Key — Type a logical contraction of the Build
- Plan Name. The Build Plan Key ('MVN') will be included in the plan's Build
- Results keys ('J5-MVN-XXX''), so
- you may want to make it no longer than 3 or 4 characters. Note
- that the Build Plan Key only has to be unique within the
- project.
-
-
-
-
-
- Screenshot
- 2. 'Source
- Repository':
-
-
-
-
-
-
-
-
-
- 2. 'Source Repository':
-
-
-
- 'Repository' — Select the type of repository from which
- Bamboo will check-out and build this plan's source-code. The
- following fields will vary depending on what type of repository
- you select:
-
-
-
- Subversion:
-
-
-
- 'Repository URL' — The location of subversion
- repository
- (svn://svn.forge.objectweb.org/svnroot/jonas/jonas/trunk/jonas).
-
-
-
-
-
- 'Username' — (Optional)
-
-
-
-
-
- 'Authentication Type' — Select 'Password'
-
-
-
-
-
- 'Password — (Optional) , use the anonymous name
- access
-
-
-
-
-
-
-
-
-
- 'Include/Exclude Files' — select 'None'
-
-
-
-
-
- 'Web Repository URL' — (Optional) The plan's repository web
- URL.
-
-
-
-
-
- 'Web Repository Module' — (Optional) The plan's repository
- name, if the above Web Repository URL points to multiple
- repositories.
-
-
-
-
-
- 'Build Strategy' —select 'Poll the repository for changes',
- is a convenient option that requires no additional configuration.
- A number of other options are available; for details, please see
- 03. Triggering a Build. You can change the Build Strategy over
- time as required. The rest of the fields on this tab will vary
- depending on which Build Strategy you select.
-
-
-
-
-
- 'Polling Frequency—'180', in seconds
-
-
-
- Screenshot 3. 'Builder Configuration'
- :
-
-
-
-
-
-
-
- 3. 'Builder Configuration':
-
-
- 'Builder' — Select 'Maven 2.0.6'. From the list of
- available Builders, select the one which Bamboo will use to
- build this plan.The following fields are maven builder:
-
-
-
- Maven:
-
-
-
- 'Goal' — 'clean install'. Specify the Maven goal
- you want Bamboo to execute each time the source code
- changes.
-
-
-
-
-
- 'Build JDK' —1.5.0_10.
-
-
-
-
-
- 'System Environment Variables' — (Optional)
-
-
-
-
-
- 'Working Sub Directory'— (Optional)
-
-
-
-
-
-
-
- 'Build JDK' —1.5.0_10.
-
-
-
- 'System Environment Variables' — (Optional)
-
-
-
- 'Web Repository Module' — (Optional) The plan's repository
- name, if the above Web Repository URL points to multiple
- repositories.
-
-
-
- 'Working Sub Directory'— (Optional)
-
-
-
- 'Where should Bamboo look for the test result files'—
- (Optional) .Select this check-box if you want Bamboo to gather
- test results data for each build result.
-
-
-
-
-
- 'Where should Bamboo look for the Clover code-coverage
- output'— (Optional) . Select this check-box if you are running
- Cenqua Clover and want to view its code-coverage data from within
- Bamboo.
-
-
-
- Screenshot 4. 'Build Artifacts'
- :
-
-
-
-
-
-
-
-
-
- 4. 'Build Artifacts':
-
-
-
- Here you can specify the plan's artifacts. These can be any
- reports, websites, or JAR files that were created by the build
- process. Build artifacts are copied to a subdirectory
- (/PROJECT_NAME/download_data) under your 'Projects Data' folder,
- which you specified when installing Bamboo.
-
-
-
-
-
- Screenshot 5. 'Build Notification'
- :
-
-
-
-
-
-
-
-
-
-
-
- 5. 'Build Notification':
-
-
- Here you can specify who will receive notifications and
- how there are sent (mail or instant messaging).
-
-
-
- Screenshot 6. 'Post Action'
- :
-
-
-
-
-
-
-
- 6. 'Post Action':
-
- 'Regex Pattern' — The regular expression for which to
- match the log files on. Labels will be applied to the build if
- the regular expression finds a match. You can leave this blank
- to label every build.
-
-
-
-
-
- 'Labels' — Type the labels (if any) which you want to
- automatically apply to the plan's build results.
-
-
-
-
-
- Click 'Save' button, Bamboo will begin to build according to
- 'Maven Build' plan:
-
-
-
-
-
-
-
-
-
-
-
-
- How to create a 'Ant Build' Plan
-
-
- To create a new plan for ' Ant Build'
- in a existing project 'JOnAS5'
-
-
-
- Click the 'Create Plan'
- link in the top navigation bar.
-
-
-
- On the 'Plan Details'
- screen, select the check-box 'Clone an
- existing build plan?'
-
-
-
- A list called 'Plan to
- clone' will be displayed. Select the 'JOnAS5-Maven Build' plan you wish to
- copy.
-
-
-
- Enter the required information in the 6 screens as described
- below. On screens 2-6, appropriate information will be copied from
- the plan you selected; but you will need to complete all fields on
- screen 1.
-
-
-
- Screenshot
- 1. 'Plan Details':
-
-
-
-
-
-
-
-
-
- Screenshot
- 2.'Source
- Repository': Refer to the screenshot of 'Maven Build'
- plan.
-
- Screenshot 3. 'Builder Configuration'
- :
-
-
-
-
-
-
-
-
- : The target of build should be 'clean install
- -Djonas.root=${bamboo.jonas.root.50}
- -Dcatalina.home=${bamboo.catalina.home}'.
-
-
-
-
- Screenshot 4. 'Build Artifacts' : Refer to the screenshot of
- 'Maven Build' plan.
-
- Screenshot 5. 'Build Notification': Refer to the screenshot of
- 'Maven Build' plan.
-
- Screenshot 6. 'Post Action' : Refer to the screenshot of 'Maven
- Build' plan.
-
-
-
-
- How to create a 'Tests Build' Plan
-
-
- To create a new plan for ' Tests
- Build':
-
-
-
- Click the 'Create Plan'link in the top
- navigation bar.
-
-
-
- Enter the required information in the 6 screens as described
- below. When you return to the Dashboad, your new plan (and new
- project, if applicable) will be displayed in the 'All Projects' list.
-
-
-
- Screenshot 1. 'Plan Details'
- :
-
-
-
-
-
-
-
-
-
-
-
- Screenshot
- 2.'Source
- Repository'
-
-
-
-
-
-
-
-
-
-
-
- Screenshot 3. 'Builder Configuration'
- :
-
-
-
-
-
-
-
- 3. 'Builder Configuration'
- :
-
- Builder' — Select 'Ant 1.6.5'. From the list of available
- Builders, select the one which Bamboo will use to build this plan.The
- following fields are ant builder:
-
-
-
- Ant:
-
-
-
- 'Build file' — 'build.xml'. Type the relevant
- filename.
-
-
-
-
-
- 'Build JDK' —'1.5.0_10.
-
-
-
-
-
- 'Target'—Specify the Ant target you want Bamboo to
- execute each time the source code change. For JOnAS, Type the
- target as below:
-
-
-
-
-
- run_nightly -Djonas.root=${bamboo.jonas.root.50} -Dhttpunit.home=${bamboo.http.unit} -Dhttp.port=9000 -Dxmlunit.home=${bamboo.xml.unit} -Dcatalina.home==${bamboo.catalina.home}
--Duser.home=<your_user_home>
-
-
-
- Screenshot 4. 'Build Artifacts'
- :
-
-
-
-
-
-
-
-
-
-
-
- Screenshot 5. 'Build Notification': Refer
- to the screenshot of 'Maven Build' plan.
-
- Screenshot 6. 'Post Action' : Refer to the
- screenshot of 'Maven Build' plan.
-
-
-
-
- How to define the relation of the three JOnAS Integration
- Activities
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Using Bamboo to manage the JOnAS integration work
-
-
-
-
- Overview of the directory of Bamboo
-
-
-
-
-
-
-
-
-
-
-
-
-
- Using the Dashboard
-
-
- The Dashboard contains three tabs:
-
-
-
- 'All Plans' — a list of build plans and each plan's latest
- build result.
-
-
-
-
-
- 'Current Activity' — Bamboo's build queues, showing which
- plans Bamboo is currently building and which plans are waiting to be
- built.
-
-
-
-
-
- 'My Bamboo' ¹ — a convenient summary of information that is
- relevant to you, It contains the information of your favorite
- build.
-
-
-
- Screenshot
- 1. 'All Plans':
-
-
-
-
-
-
-
-
-
- To view
- Bamboo's current activity,
-
-
-
- Click the 'Home' link in the top navigation bar. This will
- display the Dashboard.
-
-
-
- Click the 'Current Activity' tab. This will display Bamboo's
- Build Queues, as well as a list of RecentlyCompleted Builds.
-
-
-
- Screenshot2: Bamboo Dashboard-'Current
- Activity' tab:
-
-
-
-
-
-
-
-
-
-
-
-
- Viewing the Build result
-
-
- Click the 'Home' link in the top navigation bar. This will display
- the Dashboard.
-
- Click the 'Test Build' link in the 'All Plans' tab. This will
- display the 'Test Plan' page. Click the 'Activity' tab. This will
- display the activity of 'Tests Build'.
-
- Screenshot1: Build result-'Activity'
- tab:
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/ear.xml b/jonas_doc/core/src/docbook/doc-en/deploy/ear.xml
deleted file mode 100644
index e7f97923c30982b48bdee3c50d79c765b6483d14..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deploy/ear.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
- Deploying and installing a J2EE application
-
-
- Before deploying a J2EE application in the JOnAS application server,
- first package its components in an ear file as explained in the EAR
- packaging guide .
-
- Next, install the ear file into the $JONAS_BASE/deploy
- directory.
-
- Then, check the configuration : before running the application, check
- that the ejb2, ejb3 , web and ear services are present in the
- jonas.services property.
-
- Finally, run the application Server: jonas start
-
- The application components are deployed in EJB and web containers
- created during the startup.
-
- It is also possible to dynamically deploy the application components
- using the jonas admin command or JonasAdmin
- tool.
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/ejb2.xml b/jonas_doc/core/src/docbook/doc-en/deploy/ejb2.xml
deleted file mode 100644
index b259a362869129425dcf813893acf98a5506943f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deploy/ejb2.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
- Example of deploying and installing an EJB using an ejb-jar file
-
- For this example, it is assumed that a user wants to customize the deployment of the
- AccountImpl
- bean in the JOnAS example
-
- examples/src/eb
-
- by
- changing the name of the database table used for the persistence of the
- AccountImpl
- .
-
-
- The current directory is
-
- $JONAS_ROOT/examples/src/eb
-
- . The user will do the following:
-
-
-
- Edit
-
- jonas-ejb-jar.xml
-
- and modify the value of the
-
- <jdbc-table-name>
-
- element included in the
-
- <jdbc-mapping>
-
- element corresponding to
-
- AccountImpl
-
- entity.
-
-
- Compile
- all the
-
- .java
-
- files present in this directory:
- javac -d ../../classes Account.java AccountImplBean.java AccountExplBean.java AccountHome.java ClientAccount.java
-
-
- Perform deployment
-
-
- Build an ejbjar file named
-
- ejb-jar.jar
-
- with all the corresponding classes and the two deployment descriptors:
-
-
-mkdir -p ../../classes/META-INF
-cp ejb-jar.xml ../../classes/META-INF/ejb-jar.xml
-cp jonas-ejb-jar.xml ../../classes/META-INF/jonas-ejb-jar.xml
-cd ../../classes
-jar cvf eb/ejb-jar.jar META-INF/ejb-jar.xml META-INF/jonas-ejb-jar.xml
- eb/Account.class eb/AccountExplBean.class eb/AccountHome.class eb/AccountImplBean.class
-
-
-
- From the source directory, run the
- GenIC
- generation tool that will generate the final
-
- ejb-jar.jar
-
- file with the interposition classes:
-
-GenIC -d ../../classes ejb-jar.jar
-
-
-
-
- Install
- the ejb-jar in the
-
- $JONAS_ROOT/ejbjars
-
- directory:
-
-cp ../../classes/eb/ejb-jar.jar $JONAS_ROOT/ejbjars/ejb-jar.jar
-
-
-
- The JOnAS application Server can now be launched using the command:
-
- jonas start
-
- The steps just described for building the new
-
- ejb-jar.jar
-
- file explain the deployment process. It is generally implemented by an ANT build script.
-
-
- If
- Apache ANT
- is installed on your machine, type
- ant install
- in the
-
- $JONAS_ROOT/examples/src
-
- directory to build and install all
-
- ejb-jar.jar
-
- files for the examples.
- To write a
-
- build.xml
-
- file for ANT, use the
-
- ejbjar
-
- task, which is one of the optional
-
- EJB task
-
- s defined in ANT. The
-
- ejbjar
-
- task contains a nested element called
-
- jonas
-
- , which implements the deployment process described above (interposition classes generation and EJB-JAR file update).
- Generally, the latest version of the EJB task containing an updated implementation of the
-
- jonas
-
- nested element is provided with JOnAS, in
-
- $JONAS_ROOT/lib/common/ow_jonas_ant.jar
-
- . Click here for the
-
- documentation
-
- corresponding to this new version of the jonas nested element.
- As an example, this code snippet is taken from the
-
- $JONAS_ROOT/examples/src/alarm/build.xml
-
- :
-
-
- <!-- ejbjar task -->
- <taskdef name="ejbjar"
- classname="org.objectweb.jonas.ant.EjbJar"
- classpath="${jonas.root}/lib/common/ow_jonas_ant.jar" />
-
- <!-- Deploying ejbjars via ejbjar task -->
- <target name="jonasejbjar"
- description="Build and deploy the ejb-jar file"
- depends="compile" >
- <ejbjar basejarname="alarm"
- srcdir="${classes.dir}"
- descriptordir="${src.dir}/beans/org/objectweb/alarm/beans"
- dependency="full">
- <include name="**/alarm.xml"/>
- <support dir="${classes.dir}">
- <include name="**/ViewProxy.class"/>
- </support>
- <jonas destdir="${dist.ejbjars.dir}"
- jonasroot="${jonas.root}"
- protocols="${protocols.names}" />
- </ejbjar>
- </target>
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/principes.xml b/jonas_doc/core/src/docbook/doc-en/deploy/principes.xml
deleted file mode 100644
index bf273329a77739a35e15cf1118cfecec7de482ec..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deploy/principes.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
- The deployment and installation of Enterprise Beans
-
-
- This guide assumes that the Enterprise Bean provider followed the Enterprise Beans Programmer's Guide and packaged the beans's classes together with the deployment descriptors in a ejb-jar file. To deploy un-packed Enterprise Beans, refer to
-
- Configuring EJB Container service
-
- .
-
-
- To deploy the Enterprise Beans in JOnAS, the deployer must add the interposition classes interfacing the EJB components with the services provided by the JOnAS application server.
- The
-
- GenIC
-
- tool supplied in the JOnAS distribution provides the capability of generating interposition classes and updating the ejb-jar file.
- The application deployer may also need to customize the deployment descriptors in order to adapt it to a specific operational environment. This must be done before using GenIC.
-
-
- The deployer may choose to deploy the Enterprise Beans as stand-alone application components, in which case the ejb-jar must be installed in the
-
- $JONAS_ROOT/ejbjars
-
- directory. The deployer may also choose to include them in war or ear packaging, which is presented in the following sections.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/war.xml b/jonas_doc/core/src/docbook/doc-en/deploy/war.xml
deleted file mode 100644
index 6078a58f6f1ac32d1169814d8391301dbc69b20f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deploy/war.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
- Deploying and installing a Web application
-
-
- Before deploying a web application in the JOnAS application server, first
- package
- its components in a war file as explained in the
-
- WAR packaging guide
-
- .
- For
- Apache ANT
- , refer to the target
-
- war
-
- in the
-
- $JONAS_ROOT/examples/earsample/build.xml
-
- file.
-
-
- Next,
- install
- the war file into the
-
- $JONAS_ROOT/webapps
-
- directory.
- Note:
- Be aware that the war file must not be installed in the
-
- $CATALINA_HOME/webapps
-
- directory.
-
-
- Then, check the
- configuration
- : before running the web application; check that the
- web
- service is present in the
-
- jonas.services
-
- property. The
- ejb
- service may also be needed if the Web application uses enterprise beans.
- The name of the war file can be added in the
-
- jonas.service.web.descriptors
-
- section.
-
-
- Finally,
- run
- the application Server:
-
-
- jonas start
-
-
-
- The web components are deployed in a web container created during the startup. If the war file was not added in the
-
- jonas.service.web.descriptors
-
- list, the web components can be dynamically deployed using the
-
- jonas admin
-
- command or
-
- JonasAdmin
-
- tool.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/webapps.xml b/jonas_doc/core/src/docbook/doc-en/deploy/webapps.xml
deleted file mode 100644
index 08d640bdb04b1e51ec6df76504de408c84fecd84..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deploy/webapps.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
- The deployment and installation of Web and J2EE applications
-
- Once the packaging of the application components has been completed as described in the
-
- WAR Packaging
-
- or
-
- EAR Packaging
-
- guides, the obtained archive file must be installed in the:
-
-
-
- $JONAS_ROOT/webapps
-
- directory, for war files
-
-
-
- $JONAS_ROOT/apps
-
- directory, for ear files
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/deployer_guide.xml b/jonas_doc/core/src/docbook/doc-en/deployer_guide.xml
deleted file mode 100644
index 0b6789bb7902f73cbe4bbb5685ff947aac35eee9..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployer_guide.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
- Deployment and Installation Guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- Fev 2008
-
-
-
- The target audience for this guide is the application
- deployer.
-
-
-
-
- Installing JOnAS
-
-
-
-
-
-
-
-
-
-
-
- Deployment and installation of applications
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml
deleted file mode 100644
index 8a968d41184c62f86591efe846edb48fe00d7b66..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
- Deployment common parts
-
- The common part of the deployment syntax is described in the
- XML Schema Definition.
-
- Those are the information pieces that are common to all deployment
- types:
-
- id: this information is
- mandatory and gives a identifier to the deployment plan.
-
-
-
- repository-ref:
- this information is optional. The value is the id of a repository
- known by the server. When given, the server will only search the
- resource on this repository.
-
-
-
- reloadable: this
- information is a boolean (true or false), is optional and its default
- value is true. When set to true, after the resource is correctly
- deployed, the server will check the resource on the repository
- periodically. If the resources changes, the server will redeploy
- it.
-
-
-
- start: this information is a
- boolean (true or false), is optional and its default value is true.
- When set to true, if the resource to deploy is an OSGi bundle, the
- server will install and start the bundle on the framework. When set to
- false, the server will only install the bundle on the
- framework.
-
-
-
- reference: this information is a boolean
- (true or false), is optional and its default value is false. When set
- to true, if the resource to deploy is an OSGi bundle, the server will
- install the OSGi bundle as a referenced JAR file, i.e. the JAR of the
- bundle (and its embedded JARs) will not be copied in the cache of the
- OSGi framework. When set to false, the server will install the bundle
- on the framework in the standard way.
-
-
-
- startlevel: this information is a number
- greater than or equal to 1, is optional and its default value is 1.
- When set to true, if the resource to deploy is an OSGi bundle, the
- server will install the OSGi bundle with the given start level. When
- the OSGi framework is launched, the framework will enter start level
- one and all bundles which are assigned to start level one are started.
- The framework will continue to increase the start level, starting
- bundles at each start level, until the framework has reached a
- beginning start level.
-
-
-
- starttransient: this information is a boolean
- (true or false), is optional and its default value is true. When set
- to true, if the resource to deploy is an OSGi bundle, the bundle start
- operation is transient, which means that the persistent autostart
- setting of the bundle is not modified.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml
deleted file mode 100644
index 9697418fcdd04e3a7190a2214a126e13d474bd23..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- Information that can be provided as element or attribute
-
- Some information can be specified either as XML element or XML
- attribute. For example:
- id as attribute
-
- <deployment id="deployment-1">
- ...
- </deployment>
- is the same as
- id as element
-
- <deployment>
- <id>deployment-1</id>
- ...
- </deployment>
-
-
- It is the case for :
-
- id
-
-
-
- repository-ref
-
-
-
- reloadable
-
-
-
- start
-
-
-
- reference
-
-
-
- startlevel
-
-
-
- starttransient
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml
deleted file mode 100644
index a08b5360c49cc6c5f0e0f8f614aa6568f3d10da2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
- Mixing deployments types
-
- It is possible to use deployments of different types in the same
- deployment plan. To achieve that, one just has to declare all the required
- namespaces.
-
- The following example mixes URL and Maven2 deployments in the same
- deployment plan
-
-
- Deployment plan with different deployment types
-
- <?xml version="1.0" encoding="UTF-8"?>
- <deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:url="http://jonas.ow2.org/ns/deployment-plan/url/1.0"
- xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
-
- <deployment xsi:type="url:url-deploymentType" id="dep1">
- <url:resource>easybeans-example-statefulbean-1.0.1-SNAPSHOT.jar</url:resource>
- <repository-ref>home-repository</repository-ref>
- </deployment>
-
- <deployment xsi:type="m2:maven2-deploymentType" id="dep3">
- <m2:groupId>org.ow2.easybeans</m2:groupId>
- <m2:artifactId>example-server</m2:artifactId>
- <m2:version>1.1.0-SNAPSHOT</m2:version>
- <m2:type>ear</m2:type>
- <reloadable>true</reloadable>
- </deployment>
-
- </deployment-plan>
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml
deleted file mode 100644
index e48a2bf16bea7e3c9756d53138b250f2c9d03e6f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
- Deployment plan sample example
-
- This example shows how to control the deployment of two archives which
- are located on the file system
-
- Myear1.ear and Myear2.ear are located in local directory /home/elsewhere.
-
-
-
- Add a new repository element in
- $JONAS_BASE/conf/initial-repositories.xml:
-
- <?xml version="1.0" encoding="UTF-8"?>
-
-<repositories
- xmlns="http://jonas.ow2.org/ns/deployment-plan/repositories/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="repositories-1.0.xsd">
-
- <!-- Add new repositories here -->
- <repository id="MyLocalRepository">
- <type>url</type>
- <url>file:/home/elsewhere</url>
- </repository>
- <!-- Default repositories -->
- <repository id="maven2-central">
- <type>maven2</type>
- <url>http://repo1.maven.org/maven2/</url>
- </repository>
- <repository id="maven2-ow2-release">
- <type>maven2</type>
- <url>http://maven.ow2.org/maven2/</url>
- </repository>
- <repository id="maven2-ow2-snapshot">
- <type>maven2</type>
- <url>http://maven.ow2.org/maven2-snapshot/</url>
- </repository>
-
-</repositories>
-
-
-
-
-
- create a new deployment plan
- $JONAS_BASE/deploy/MyDeploymentplan.xml
-
- <?xml version="1.0" encoding="UTF-8"?>
- <deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:url="http://jonas.ow2.org/ns/deployment-plan/url/1.0">
-
- <deployment id="foo1" xsi:type="url:url-deploymentType">
- <url:resource>Myear1.ear</url:resource>
- </deployment>
-
- <deployment id="foo2" xsi:type="url:url-deploymentType">
- <url:resource>Myear2.ear</url:resource>
- </deployment>
-
- </deployment-plan>
-
- As the deployment plan is under $JONAS_BASE/deploy/ it will be
- taken into account at server starting time.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml
deleted file mode 100644
index 66f07f2e3a3270aea04935ae1d4fb506ced967d5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
- Deployment type
-
- deployment is an abstract XML type, and concrete
- type must be declared. Concrete types are for example URL, Maven2 or
- OBR. Each deployment type is defined in its own XML Schema Description file
- (XSD file). In order to use one type, it is necessary to declare a namespace for it.
- Here is an example of namespace declaration :
-
-
- example: namespace declaration
-
- <deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
-
-
- This a deployment plan contains a namespace for the Maven2
- deployment type using the m2: prefix. We can then add a Maven2 deployment :
-
- example: Maven2 deployment type
-
- <deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
- <deployment xsi:type="m2:maven2-deploymentType ...
-
-
-
- The information provided in each deployment element is divided in two parts:
-
-
- data that is specific to a deployment type (URL, Maven2,
- OBR)
-
-
-
- data that can be used in any deployment.
-
- See the deployment type specific pages for the currently supported
- types : URL, Maven2 and OBR
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan.xml
deleted file mode 100644
index 5856080505df763721168c38f436e148ca1d6cea..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
- Deployment plans
-
- A deployment plan is a XML file where the children of the root node are
- deployment elements representing resources that will be deployed in the order in
- which they appear.
-
- The exact syntax of the deployment node in the
- deployment plan depends on the type of the resource
- (maven2, obr, url...), but there are some parts that are common to all the
- deployment elements.
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/introduction.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/introduction.xml
deleted file mode 100644
index 4f0b2d01a6956df77e26bdb8943f7d533df686a0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/introduction.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
- Deployment plans - Introduction
-
- A deployment plan is an XML file that describes a succession of resources to be deployed in the given order.
- The deployment plan only contains references to the deployable resources like for example, Java EE archives or an OSGi bundles.
- In order to deploy the resources on a server, the deployment plan has to be deployed on that server.
- The server will retrieve each resource from a repository before deploying it.
- The resources in a deployment plan may be stored in one or more repositories.
-
- To deploy a deployment plan, one has to set up the repositories on the target
- server. The deployment plans will then be able to refer to these
- repositories.
-
- The deployment plan functionnality supports currently three kinds of
- resources (both local or remote):
-
-
-
- URL resources which point to valid URL locations.
-
-
-
- Maven 2 resources which enable to deploy versioned
- resources.
-
-
-
- OBR (OSGi Bundles Repository) resources which allow to benefit of
- the OBR resolver to deploy a requested OSGi bundle and its
- dependencies.
-
-
- The OBR deployment feature is currently partially supported as
- it only deploys specified OSGi bundle resources without their
- dependencies. The complete feature implementation is on-going.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml
deleted file mode 100644
index ac2efd738d9398f2766a5d9bb3e192bb70e794ce..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
- Deployment plans in JOnAS 5
-
-
- Initial repositories
-
- The conf/initial-repositories.xml file allows
- to add repositories to the list of availaible repositories at server startup.
-
- This file follows the same syntax as the repository list XML
- files.
-
-
-
- The resourcemonitor service
-
- There is one service that is related to deployment plans in JOnAS 5.
-
-
- the resource monitoring service, named
- resourcemonitor in the
- conf/jonas.properties file.
-
-
-
- You can activate this service by adding it to the
- jonas.services list in
- conf/jonas.properties. For example:
-
- jonas.service with resourcemonitor service
- active
-
- jonas.services registry,jmx,jtm,db,security,wm,wc,resource,ejb2,ejb3,ws,web,ear,depmonitor,resourcemonitor
- will activate the resource monitoring service.
-
- This service is only useful if deployment plans with
- reloadable deployments are deployed.
-
- The conf/jonas.properties file permits to
- configure the following options:
-
- jonas.service.resourcemonitor.monitorInterval:
- the time in milliseconds between two resource checks. If the option
- is not provided, this has a default value of 30 000 (30
- seconds)
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/repositories.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/repositories.xml
deleted file mode 100644
index 946e94e9d0bf6745cebec3de02bc362bfd7c84dc..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/repositories.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
- Repositories
-
- The server maintains a list of repositories that can store the resources to be deployed using
- deployment plans.
-
-
- Creating the repository list
-
- The repositories list is an XML document with syntax described
- in
- the XML Schema Definition.
-
- An example of a repository list file can be seen here.
-
- The root node is repositories and must specify
- the following namespace:
- http://jonas.ow2.org/ns/deployment-plan/repositories/1.0.
-
-
- Each child of the repositories node is a
- repository node and describes one repository. The
- repository nodes have a mandatory id
- attribute that identifies globally (i.e. at the server level) the repository.
-
- The repository node then has two children nodes :
-
-
- type that specifies how the server can
- communicate with the repository (for example maven2, obr,
- url);
-
-
-
- url that gives the repository location.
-
-
-
-
- Example of a repository file with three repositories.
-
- <?xml version="1.0" encoding="UTF-8"?>
- <repositories
- xmlns="http://jonas.ow2.org/ns/deployment-plan/repositories/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="repositories-1.0.xsd">
-
- <repository id="maven-repository">
- <type>maven2</type>
- <url>http://repo1.maven.org/maven2/</url>
- </repository>
-
- <repository id="http-repo">
- <type>url</type>
- <url>http://localhost/</url>
- </repository>
-
- <repository id="obr-repo">
- <type>obr</type>
- <url>file:///C:/obr/</url>
- </repository>
-
- </repositories>
-
-
-
-
- Using the repository lists
-
- The repository lists can be deployed on a server in the same way as
- usual deployable resources (EAR, EJB-JAR, WAR...). This has to be done before deploying the deployment plan.
-
-
-
- In Easybeans, repositories lists can be deployed by copying the
- file into the easybeans-deploy directory like any other resource.
-
-
- In JOnAS, there are two ways to manage the repository lists.
-
-
- You can deploy a repository list like any other
- resource, either by copying it into the deploy directory
- (if the development mode is active), or using Admin tools
- (JonasAdmin web interface or jonas admin -a
- filename command).
-
-
-
- You can use it as a configuration file, named
- conf/initial-repositories.xml.
-
-
-
-
-
- Accessing repositories through a proxy
-
- Proxy can be specified by setting the Java properties http.proxyHost and http.proxyPort.
- These properties are described in the Java SE documentation.
-
- These properties have to be set even if only some Maven repositories are used: the global Maven configuration is ignored.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml
deleted file mode 100644
index 7069d224f09104aaa393ddbf71e031928b26dba3..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- Deployment type specific documentation
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml
deleted file mode 100644
index a1ee5d246adbf9b0085283dda568151279470f01..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
- Maven 2 deployments
-
-
- Maven2 specific data
-
- The Maven 2 deployments specific data can only be specified as
- XML elements. Here are those elements :
-
-
- m2:groupId (required) : the maven group
- id of the artifact.
-
-
-
- m2:artifactId (required) : the maven
- artifact id of the artifact.
-
-
-
- m2:version (required) : the version of
- the artifact.
-
-
-
- m2:type (optional with default value:
- jar) : the maven type of the artifact (jar, war, ear, ...).
-
-
-
- m2:classifier (optional with empty
- default value) : the maven classifier.
-
-
-
-
-
- Full Maven2 deployment plan example
-
- The following deployment plan contains two Maven2 deployments. The
- first one doesn't specify the resource type, so it is assumed to be
- jar. The second one has a ear
- type.
-
-
- Deployment plan with Maven2 deployments
-
- <?xml version="1.0" encoding="UTF-8"?>
- <deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
-
- <deployment xsi:type="m2:maven2-deploymentType" id="dep2">
- <m2:groupId>org.ow2.easybeans</m2:groupId>
- <m2:artifactId>easybeans-example-statefulbean</m2:artifactId>
- <m2:version>1.1.0-SNAPSHOT</m2:version>
- </deployment>
-
- <deployment xsi:type="m2:maven2-deploymentType" id="dep3">
- <m2:groupId>org.ow2.easybeans</m2:groupId>
- <m2:artifactId>example-server</m2:artifactId>
- <m2:version>1.1.0-SNAPSHOT</m2:version>
- <m2:type>ear</m2:type>
- </deployment>
-
- </deployment-plan>
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml
deleted file mode 100644
index 62e193a2390baf93f6f6f53935e6833c6a6fc8e7..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
- OBR deployments
-
-
- OBR specific data
-
- Many notions used here are defined or described in the
- OSGi RFC 112 Bundle Repository . The OBR deployment gives many ways
- to define a resource. You can use as many descriptions as you want, only
- one search will be issued, built as the conjunction of these descriptions.
- The result will be considered valid only if there is one and
- only one matching resource. The OBR specific data can only be
- specified as XML elements.
-
- Here are the possible descriptions:
-
- obr:bundle-symbolic-name (optional) : the
- OBR symbolic name of the resource.
-
-
-
- obr:bundle-version (optional) : the OBR
- version of the resource.
-
-
-
- obr:filter (optional) : a OSGi/LDAP
- filter (see the RFC) that describes the resource.
-
-
-
- obr:require-service (optional) : the
- resource must provide the required service.
-
-
-
-
-
- Full OBR deployment example
-
- The following deployment plan contains two OBR deployments. Both
- require a resource by symbolic-name +
- version, but the first uses the dedicated XML elements
- while the second uses a filter.
-
-
- Deployment plan with OBR deployments
-
- <?xml version="1.0" encoding="UTF-8"?>
- <deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:obr="http://jonas.ow2.org/ns/deployment-plan/obr/1.0">
- <deployment xsi:type="obr:obr-deploymentType" id="dep-obr-1">
- <obr:bundle-symbolic-name>org.ow2.easybeans.examples.entitybean</obr:bundle-symbolic-name>
- <obr:bundle-version>=1.1.0-SNAPSHOT<obr:bundle-version>
- </deployment>
-
- <deployment xsi:type="obr:obr-deploymentType" id="dep-obr-2">
- <obr:filter>(&(symbolicname=org.ow2.easybeans.examples.statefullbean)(version=1.1.0-SNAPSHOT))</obr:filter>
- </deployment>
- </deployment-plan>
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml
deleted file mode 100644
index d4764366db12667dcefec270f4dfaa68aafc4fc5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
- URL deployments
-
-
- Specific data
-
- The only URL deployment specific data is the
- resource that can only be specified as a XML
- element.
-
- url:resource (required) : the file name
- of the resource.
-
-
-
-
-
- Full URL deployment plan
-
- There are few possible variations in the URL deployment. Here is a complete
- deployment plan with a URL deployment.
-
-
- Deployment plan with URL deployments
-
- <?xml version="1.0" encoding="UTF-8"?>
- <deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:url="http://jonas.ow2.org/ns/deployment-plan/url/1.0">
-
- <deployment xsi:type="url:url-deploymentType" id="dep1" reloadable="true">
- <url:resource>easybeans-example-statelessbean-1.0.1-SNAPSHOT.jar</url:resource>
- </deployment>
-
- </deployment-plan>
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans_guide.xml b/jonas_doc/core/src/docbook/doc-en/deployment-plans_guide.xml
deleted file mode 100644
index 889ce937dc6b49dd2133136841f22cc456fe07b7..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/deployment-plans_guide.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
- Deployment plans
-
-
-
-
- JOnAS Team
-
-
-
-
- Mickaël
-
- Leduque
-
-
-
-
- SERLI SAS
-
-
-
-
-
-
- François
-
- Fornaciari
-
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- October 2008
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide.xml b/jonas_doc/core/src/docbook/doc-en/developerguide.xml
deleted file mode 100644
index 3fd7433237341f709f300911d9565ecede3e471c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/developerguide.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
- JOnAS 5 Developer guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
- March 2009
-
-
-
- This guide explains how to modify the JONAS source code in order
- to contribute to the jonas development or to modify some modules.
-
-
-
-
-
- Developing JOnAS
-
-
-
-
-
-
-
-
-
- Testing JOnAS
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/building.xml b/jonas_doc/core/src/docbook/doc-en/developerguide/building.xml
deleted file mode 100644
index 6aae1358613a77e11d04047fc9196837eb8faab7..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/developerguide/building.xml
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
-
- Building JOnAS From Source.
-
-
-
-
- Requirements
-
-
-
-
- JDK
-
-
- A Java SE
- 5 is required to build JOnAS. Make sure that the JDK used to
- build JOnAS is compliant with the new Java 5 features.
-
-
-
-
- Maven
-
-
- The maven tool is used with pom.xml files to
- build JOnAS. This tool is available at http://maven.apache.org. The
- 2.0.7 or later version is recommanded
-
-
-
-
-
- Optional Requirements
-
-
-
-
- Eclipse
-
-
- The JOnAS project provides .project and .classpath for Eclipse 3.1
- or greater. A project is ready to use once the source has been imported
- using the Eclipse tool. Eclipse tool is available at http://www.eclipse.org.
-
-
-
-
- Eclipse Plugins
-
-
-
-
- Checkstyle Plugin
-
-
- The eclipse-checkstyle plugin is used to check the javadoc of
- JOnAS project. A warning will print if the JOnAS coding convention is
- not used. This plugin is available at http://eclipse-cs.sourceforge.net.
-
-
-
-
- AnyEdit Plugin
-
-
- As part of the JOnAS coding convention, the use of tabulation
- characters is disallowed. Files should contain only spaces. The
- AnyEdit plugin allows tabs to be converted to spaces when saving the
- file. Also, trailing spaces can be removed automatically.
-
- This plugin is available at http://andrei.gmxhome.de/anyedit/.
-
-
-
-
- Maven 2 plugin
-
-
- To compile JOnAS under eclipse, use m2eclipse plugin available
- at http://m2eclipse.codehaus.org/.
-
-
-
-
- Subversion plugin
-
-
- JOnAS uses subversion as revision control system. The use of
- stable version of Subversive is advised. This plugin is available at
- http://www.polarion.org/index.php?page=overview&project=subversive.
-
-
-
-
-
-
- Compiling JOnAS
-
-
- To compile JOnAS, launch the command mvn in the
- root directory of the project (named JOnAS by default) being
- launched.
- The default maven goal is install if not specified.
-
-
- Once the command has been run successfully, the maven artifacts
- generated by maven are available in the maven local repository. The
- target directories contain the
- generated jars or assemblies.
- Bundles that are used in jonas command, must
- be updated manually from local repository to $JONAS_ROOT/lib
- directory if they have been modified. Please refer to
- $JONAS_ROOT/bin for available commands.
-
-
- mvn clean install is used to clean and regenerate
- classes.
-
-
-
-
- Maven assembly
-
-
- JOnAS build generates several assemblies. Assemblies are located in
- the assemblies folder.
-
-
-
- End-User assembly
-
-
- The assembly contains examples and is available with the zip or
- tgz format in the assemblies/jonas-osgi/target folder. The
- unzipped assembly folder should directly be used as
- $JONAS_ROOT.Moreover, the
- /lib directory of this $JONAS_ROOT
- contains all the bundles of the assembly.
-
-
- Lauchning JOnAS in developper mode (see ) will set the use of bundles
- stored in maven local repository.
-
-
- A common way to set JONAS_ROOT is to make a symbolic link (linux
- only) on the directory :
- ln -s
- .../assemblies/jonas-osgi/target/jonas-osgi-...-bin.dir/jonas-osgi-...
- your_jonas_root_path
-
-
- You can alternatively copy all this tree under your target
- JONAS_ROOT directory.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/code_convention.xml b/jonas_doc/core/src/docbook/doc-en/developerguide/code_convention.xml
deleted file mode 100644
index 1682a409ec86b92485a3a5b0204adc1cf9fd89cf..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/developerguide/code_convention.xml
+++ /dev/null
@@ -1,343 +0,0 @@
-
-
-
- Code Conventions in JOnAS
-
-
- Contributions should follow the JOnAS code convention. A good document
- to begin with is
- Java
- code convention. Other conventions are also listed in this
- document.
-
- In addition, JOnAS uses tools to check the compliance: the
- checkstyle plugin and
- the eclipse checkstyle
- plugin. The configuration settings are available on
- JOnAS
- SVN.
-
-
-
- File Organization
-
-
-
-
- Header
-
-
- All files should have a header that contains the LGPL and the
- date.
-
- If a file is modified, the modification year should be appended to
- the existing year, which is the year it was initially created. For
- example, if the create date is '1999' or '2004' it should be edited to
- '1999-2006' or '2004-2006', respectively.
-
- Also, the tag $Id: code_convention.xml 314 2006-04-04 09:39:43Z
- pinheirg $ should be added. The following is a header example:
-
-
-/**
- * JOnAS: Java(TM) Open Application Server
- * Copyright (C) 1999-2009 Bull S.A.S.
- * Contact: jonas-team@ow2.org
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- *
- * Initial developer(s):
- * --------------------------------------------------------------------------
- * $Id:code_convention.xml 13113 2008-03-11 10:58:50Z eyindanga $
- * --------------------------------------------------------------------------
- */
-
-
-
-
-
- Imports
-
-
- Imports should reference a valid class name, instead of using
- wildcard imports. Wildcard imports are not authorized.
-
- For example, if the interface and class List and ArrayList are
- used, the imports should not be as follows:
-
-
-import java.util.*;
-
-
- The imports should have each class as follow:
-
-
-import java.util.List;
-import java.util.ArrayList;
-
-
- The classes should not have an unused import.
-
-
- The Eclipse IDE provides facilities to do this job. There is the
- option Organize Imports (Shift+Ctrl+O) in the menu
- Source that correctly inserts the imports and removes the unused
- imports. However, this option does not work well with 'import
- static'.
-
-
-
-
-
- Class and Interface Declarations
-
-
- The class and interface names should begin with an uppercase
- letter. Also, each class and interface has an @author tag in the
- comment. For example:
-
-
-/**
- * This is an example that shows a class/interface declaration.
- * @author Loris Bouzonnet
- * @author Stephane Zeng
- */
-public class ClassExample implements InterfaceExample {
-}
-
-
-
-
-
-
- Indentation / whitespace
-
-
-
-
- Indentation
-
-
- The space character is used instead of the tab character. The
- number of spaces for an indent is 4 spaces.
-
- Wrapping a single source line into multiple lines should follow
- the Java
- code convention.
-
-
-
-
- whitespace
-
-
- Any trailing spaces should be removed. Eclipse provides a plugin
- that removes the trailing spaces and converts the tab into spaces. The
- plugin is AnyEdit.
-
- Use whitespaces in for() loop, while(), when concatenating
- strings. One space should be added before the operator and another after
- the operator. For example, the correct syntax is:
-
-
-for (int i = 0; i < arTest.length; i++) {
- String strResult = "The element " + i + " has the value " + arTest[i];
-}
-
-
- The following code does not adhere to the convention:
-
-
-for (int i = 0; i< arTest.length; i++) {
- String strResult = "The element "+ i+" has the value "+arTest[i];
-}
-
-
-
-
-
-
- JavaDoc Comments
-
-
- All methods and attributes (including protected and private) must
- have a comment. The parameters, the exceptions thrown, and the method
- return should have a comment in the method comment. For example:
-
-
-/**
- * This is an example that is used in the JOnAS Code Convention.
- */
-private int intValue;
-
-/**
- * This is an example method to show a class comment.
- * @param a an example of parameter.
- * @param b other example of parameter.
- * @return the method result.
- * @throws Exception the exception thrown by the method.
- */
-public int add(final int a, final int b) throws Exception {
- return a + b;
-}
-
-
-
-
-
- Statements
-
-
-
-
- If/else
-
-
- Braces must be used in the if/else blocks, even if there is a
- single statement. To illustrate:
-
-
-if (true) {
- doThis();
-}
-
-
- The following is not allowed:
-
-
-if (true)
- doThis();
-
-
- The position of the braces should be the same as in the first
- example. The following format is incorrect:
-
-
-if (true)
-{
- test1();
- test2();
-}
-
-
-
-
-
- Try/catch
-
-
- All exceptions require a statement; no silent catching is allowed.
- For example:
-
-
-try {
- doThis();
-} catch (Exception e) {
- // should not occur
-}
-
-
- A logger can be used:
-
-
-try {
- doThis();
-} catch (Exception e) {
- logger.logDebug("Exception while doing .....", e);
-}
-
-
-
-
-
- Naming Conventions
-
-
-
-
- Static Final Attributes
-
-
- Declarations are static final, not final static. This is a JLS
- recommendation.
-
-
-
-
- Constants
-
-
- Constants should be static and final, and should adhere to the
- following:
-
-
-'^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'
-
-
-
-
-
- No Magic Numbers, Use Constants
-
-
- Constants must be used in the code and magic number must be
- avoided. For example, the following is not allowed:
-
-
-private int myAttribute = 5;
-
-
- The correct format is:
-/**
- * Default value
- */
-private static final int DEFAULT_VALUE = 5;
-
-/**
- * This attribute is initialized with the default value
- */
-private int myAttribute = DEFAULT_VALUE;
-
-
-
-
-
- Attribute Name
-
-
- The attribute name should not have an underscore ( _ ). The _ is
- valid for constants that are in uppercase.
-
- Use pValue and mValue instead of p_Value and m_Value.
-
- The pattern for attribute name is:
-
-
-'^[a-z][a-zA-Z0-9]*$'
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/contributing.xml b/jonas_doc/core/src/docbook/doc-en/developerguide/contributing.xml
deleted file mode 100644
index fa8eb15f5c37fd8a5791c2397ca96bf8ab78f350..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/developerguide/contributing.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
- Contributing to JOnAS
-
-
-
-
- Mailing Lists
-
-
- Developers wanting to contribute information about JOnAS can share
- their thoughts via the JOnAS mailing list.
-
- The steps necessary for subscribing to the list are described at
- the following url :
- http://jonas.objectweb.org/wws/info/jonas
-
- Mailing lists for JOnAS are available at :
-
-
- http://forge.objectweb.org/mail/?group_id=5
-
-
-
-
-
- Ideas for Contributing
-
-
- There are many ways to contribute to JOnAS. New ideas are also
- welcome.
-
- The following is a list of some of the ways to make
- contributions:
-
-
-
- Documentation: Improve or add to the existing documentation,
- create new chapters, translate, etc.
-
-
-
- Code: Some glue could be added so that JOnAS could be
- integrated in other servers.
-
-
-
- Tests: Add new tests to the current test suite.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/getting_from_svn.xml b/jonas_doc/core/src/docbook/doc-en/developerguide/getting_from_svn.xml
deleted file mode 100644
index a002ad6cf2ce089fc890e02520e43929768295e0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/developerguide/getting_from_svn.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
- Getting JOnAS From the SVN Repository
-
-
- Anyone can check out source code from the SVN server using the
- following command (for GUI SVN client use, configuration values are the
- same as for command line use):
-
-
-svn checkout svn://svn.forge.objectweb.org/svnroot/jonas/jonas/trunk/
-
-
- It is also possible to retrieve a particular branch or a particular tag.
- For example:
-
-svn checkout svn://svn.forge.objectweb.org/svnroot/jonas/jonas/branches/jonas_4_10
-
-
-svn checkout svn://svn.forge.objectweb.org/svnroot/jonas/jonas/tag/JONAS_5_1_0_M3
-
-
- This will get the 3 modules :
-
-
- jonas
- source of JOnAS server
-
-
- jonas_doc
- documentation of JOnAS (in docbook format)
-
-
- jonas_tests
- Miscelaneous JOnAS tests
-
-
-
-
-
- Access for developpers is available using :
-
-
-
-svn checkout svn+ssh://developername@svn.forge.objectweb.org/svnroot/jonas/jonas/trunk/
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/running.xml b/jonas_doc/core/src/docbook/doc-en/developerguide/running.xml
deleted file mode 100644
index 6e1cba1f01e0b374e5097b1ee7c16fe303cd1026..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/developerguide/running.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
- Running the JOnAS server.
-
-
-
-
- Requirements
-
-
- Review the requirements discussed in
-
-
-
-
-
- Running
-
-
-
-
- Exporting environment variables
-
-
- Environment variables to export are,
- $JAVA_HOME,
- $JONAS_ROOT, $JONAS_BASE. If
- $JONAS_BASE is not set, then it will point to
- $JONAS_ROOT.
-
-
-
- Please ensure that $JONAS_ROOT\bin is
- added to the system PATH.
-
-
-
-
-
-
- Start/Stop JOnAS
-
-
- For more information see
- jonas command
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/usingexamples.xml b/jonas_doc/core/src/docbook/doc-en/developerguide/usingexamples.xml
deleted file mode 100644
index b66012a0f6ec1ab1f4a1895627ae3d32e366ca11..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/developerguide/usingexamples.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
- Using JOnAS Examples.
-
-
-
-
-
- Getting from SVN
-
-
- The examples are available in jonas_tests module of
- jonas trunk. Please Refer to the section
- .
-
-
-
-
- Compiling the Examples
-
-
-
-
- Requirements
-
-
- Before running the examples, be sure to follow the requirements
- for compiling and running these JOnAS examples.
-
-
-
-
- Compile
-
-
- The ant tool is used to build the
- examples. Each example is associated a
- build.xmlfor individual compilation. All the
- examples can be compiled by launching the ant task
- in jonas_tests root folder.
-
- After having compiled an example, putting the generated
- archive(war, ear) in the $JONAS_ROOT/deploy folder will
- allow JOnAS to deploy it. If JOnAS is running the archive will be
- deployed automatically, if not, it will be deployed on startup.
-
- Here is an example of log messages for a deployment on
- startup.
-
-
-2008-03-11 10:14:41,734 : DeployableMonitorService.doStart : Use the deploy directories '[]', development mode is 'true'
-2008-03-11 10:14:41,796 : DeployableMonitor.detectNewArchives : Deployables to deploy at startup: [[c:\cluster\JONAS5-OSGI-BIS\deploy\jonas-ctxroot.war, c:\cluster\JONAS5-OSGI-BIS\deploy\jonasAdmin.war]]
-
- An example of log messages for hot deployment(when JOnAS is
- already running)
-
-
-
-2008-03-11 10:14:41,812 : J2EEServer.info : JOnAS server 'jonas' RUNNING
-2008-03-11 10:20:54,437 : Rar.processRar : Starting deployment of /c:/cluster/JONAS5-OSGI-BIS/work/apps/jonas/earsample_2008.03.11-10.20.52.ear/ra-sample.rar
-2008-03-11 10:20:54,687 : Rar.processRar : /c:/cluster/JONAS5-OSGI-BIS/work/apps/jonas/earsample_2008.03.11-10.20.52.ear/ra-sample.rar available
-2008-03-11 10:20:54,734 : JOnASEJBService.checkGenIC : JOnAS version was not found in the '/c:/cluster/JONAS5-OSGI-BIS/work/apps/jonas/earsample_2008.03.11-10.20.52.ear/secusb.jar' manifest file. Auto-generating container cla
-sses...
-2008-03-11 10:20:56,750 : GenIC.<init> : GenIC for JOnAS 5.0.2-SNAPSHOT: 'EarOp' generation ...
-2008-03-11 10:20:56,921 : GenIC.<init> : Sources classes successfully generated for 'EarOp'
-2008-03-11 10:20:56,937 : GenIC.compilClasses : Compiling Interposition classes ...
-2008-03-11 10:20:59,734 : GenIC.compilClasses : Sources classes successfully compiled with Eclipse compiler.
-2008-03-11 10:20:59,765 : GenIC.compilClasses : Running fastrmic
-2008-03-11 10:21:00,109 : GenIC.compilClasses : Stubs and Skels successfully generated with fastrmic for rmi/jrmp
-2008-03-11 10:21:00,343 : GenIC.clean : Deleting [D:\DOCUME~1\zengeyls\LOCALS~1\Temp\genic20567.tmp\org\ow2\jonas_gen\org\objectweb\earsample\beans\secusb\JOnASEarOp_1317676915Home.java, D:\DOCUME~1\zengeyls\LOCALS~1\Temp\gen
-ic20567.tmp\org\ow2\jonas_gen\org\objectweb\earsample\beans\secusb\JOnASEarOp_1317676915Remote.java, D:\DOCUME~1\zengeyls\LOCALS~1\Temp\genic20567.tmp\org\ow2\jonas_gen\org\objectweb\earsample\beans\secusb\JOnASEarOp_13176769
-15LocalHome.java, D:\DOCUME~1\zengeyls\LOCALS~1\Temp\genic20567.tmp\org\ow2\jonas_gen\org\objectweb\earsample\beans\secusb\JOnASEarOp_1317676915Local.java, D:\DOCUME~1\zengeyls\LOCALS~1\Temp\genic20567.tmp]
-2008-03-11 10:21:01,359 : JContainer.addBean : EarOp available
-2008-03-11 10:21:01,390 : EarDeployer.deployWARs : There are WAR files in the EAR 'EARDeployableImpl[archive=c:\cluster\JONAS5-OSGI-BIS\work\apps\jonas\earsample_2008.03.11-10.20.52.ear]' but the web service is not available
-2008-03-11 10:21:01,421 : EarDeployer.deployEAR : 'EARDeployableImpl[archive=c:\cluster\JONAS5-OSGI-BIS\deploy\earsample.ear]' EAR Deployable is now deployed
-
-
-
-
-
-
- Running Examples
-
-
- For running an example, please refer to the README file in root
- folder of each example.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/eardeploy.xml b/jonas_doc/core/src/docbook/doc-en/eardeploy.xml
deleted file mode 100644
index 03c0ecd237ad0ae61725f0cee4f7087725135cdf..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/eardeploy.xml
+++ /dev/null
@@ -1,386 +0,0 @@
-
-
-
- Java EE Application Assembler's Guide
-
-
-
- JOnAS Team
-
-
-
- SAUTHIERGuillaume
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- Fev 2008
-
-
-
- The target audience for this guide is the Application Provider and
- Assembler, i.e. the person in charge of combining one or more components
- (ejb-jars and/or wars) to create a Java EE application. It describes how
- the Java EE components should be packaged to create a Java EE
- application.
-
-
-
-
- Defining the Ear Deployment Descriptor
-
-
-
-
- Principles
-
-
- The application programmer is responsible for providing the
- deployment descriptor associated with the developed application
- (Enterprise ARchive). The Application Assembler's responsibilities is to
- provide a XML deployment descriptor that conforms to the deployment
- descriptor's XML schema as defined in the Java EE specification version
- 5. (Refer to http://java.sun.com/xml/ns/javaee/application_5.xsd
- ).
-
- To deploy Java EE applications on the application server, all
- information is contained in one XML deployment descriptor. The file name
- for the application XML deployment descriptor is
- application.xml and it must be located in the top level
- META-INF directory.
-
- Some Java EE application examples are provided in the JOnAS
- distribution:
-
-
-
- $JONAS_ROOT/examples/cluster-javaee5 for the Java EE 5 cluster demo
-
-
-
- $JONAS_ROOT/examples/javaee5-earsample for the Java EE 5 library example
-
-
-
- The standard deployment descriptor should contain structural
- information that includes the following:
-
-
-
- EJB components,
-
-
-
- Web components,
-
-
-
- Client components,
-
-
-
- Alternate Deployment Descriptor for theses components,
-
-
-
- Security role.
-
-
-
- There is no JOnAS-specific deployment descriptor for the
- Enterprise ARchive.
-
-
-
-
- Sample Application Deployment Descriptor
-
-
- <?xml version="1.0" encoding="UTF-8"?>
-
-<application
- 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/application_5.xsd"
- version="5">
-
-
- <description>Java EE 5.0 EAR Sample</description>
- <display-name>Java EE 5.0 EAR Sample</display-name>
-
- <!-- EJB Modules -->
- <module>
- <ejb>ejb3.jar</ejb>
- </module>
-
- <!-- Web Modules -->
- <module>
- <web>
- <web-uri>javaee5-earsample.war</web-uri>
- <context-root>javaee5-earsample</context-root>
- </web>
- </module>
-
- <!-- Application Client Modules -->
- <module>
- <!-- Application Client using JMS to interact with the application -->
- <java>jms-application-client.jar</java>
- </module>
- <module>
- <!-- Not secured Application Client (only access read-only beans) -->
- <java>not-secured-application-client.jar</java>
- </module>
- <module>
- <!-- Secured Application Client (can access all bean under a SecurityContext) -->
- <java>jaas-secured-application-client.jar</java>
- </module>
-
-</application>
-
-
-
-
-
- EAR Packaging
-
-
-
-
- Ear Components
-
-
- Java EE applications are packaged for deployment in a standard
- Java programming language Archive file called an ear file (Enterprise
- ARchive). This file can contain the following:
-
-
-
- The web components (war)
-
-
- One or more wars which contain the web components of the Java EE application. Due to the class loader hierarchy, when the wars are packaged in a Java EE application, it is not necessary to package classes of EJBs accessed by the web components in the WEB-INF/lib directory. Details about this class loader hierarchy are described in
-
- JOnAS
- class loader hierarchy
-
- .
-
-
-
-
- The EJB components (ejb-jar)
-
-
- One or more ejb-jars, which contain the beans of the Java EE application.
-
-
-
-
- The RAR components (resource adapters)
-
-
- One or more rars, which contain the resource adapters of the Java EE application.
-
-
-
-
- The libraries (jar)
-
-
- One or more jars which contain the libraries (tag libraries and any utility libraries) used for the Java EE application.
-
-
-
-
- The Java EE deployment descriptor
-
-
- The standard xml deployment descriptor in the format defined in the Java EE 5 specification:
-
- http://java.sun.com/xml/ns/javaee/application_5.xsd
-
- . This deployment descriptor must be stored with the name
-
- META-INF/application.xml
-
- in the ear file.
-
-
-
-
-
-
-
- Ear MANIFEST.MF
-
-
- An EAR being a standard Java archive, it also has a MANIFEST
- file.
-
- An interesting attribute to add to this file is the EAR's
- implementation version: indeed, if this information is present and the
- versioning
- service is active, you can do smooth application version
- migration:
-
-
- Manifest-Version: 1.0
- Implementation-Version: 2.1.0
-
-
-
-
-
- Example
-
-
- Before building an ear file for a Java EE application, the
- ejb-jars and the wars that will be packaged in the Java EE application
- must be built and the XML deployment descriptor (application.xml) must
- be written.
-
- Then, the ear file (<java-ee-application>.ear)
- can be built using the jar command:
-
-
- cd <java-ee_application_directory>
- jar cvfm <java-ee-application>.ear META-INF/MANIFEST.MF *
-
-
- Note that in order to include your custom MANIFEST file, you need
- to specify its path to the jar command:
-
-
- cd <java-ee_application_directory>
- jar cvfm <java-ee-application>.ear META-INF/MANIFEST.MF *
-
-
-
-
-
-
- EAR Packaging using Maven
-
-
- If the Java EE application's components are available as Apache Maven dependencies,
- you can also use the maven-ear-plugin
- for the EAR generation. In this case, the generation and inclusion of all
- files is done automatically by Maven.
-
- Here's an example pom.xml file generating a EAR with the
- Implementation 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/maven-v4_0_0.xsd">
-
- <parent>
- <groupId>org.ow2.jonas.samples</groupId>
- <artifactId>ear-sample</artifactId>
- <version>1.0.0</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <artifactId>${parent.artifactId}-ear</artifactId>
- <packaging>ear</packaging>
- <name>JOnAS Java EE 5 sample</name>
- <description>This is a sample Java EE 5 application.</description>
-
- <dependencies>
- <!-- WARs and EJB-JARs -->
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>${parent.artifactId}-ejb</artifactId>
- <version>${project.version}</version>
- <type>ejb</type>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>${parent.artifactId}-war</artifactId>
- <version>${project.version}</version>
- <type>war</type>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-ear-plugin</artifactId>
- <configuration>
- <!-- Make sure it is a Java EE 5 EAR -->
- <version>5</version>
-
- <!-- Here, we can rename the included files' names -->
- <modules>
- <webModule>
- <groupId>${project.groupId}</groupId>
- <artifactId>
- ${parent.artifactId}-war
- </artifactId>
- <contextRoot>
- /${parent.artifactId}
- </contextRoot>
- <bundleFileName>
- ${parent.artifactId}.war
- </bundleFileName>
- </webModule>
- <ejbModule>
- <groupId>${project.groupId}</groupId>
- <artifactId>
- ${parent.artifactId}-ejb
- </artifactId>
- <bundleFileName>
- ${parent.artifactId}.jar
- </bundleFileName>
- </ejbModule>
- </modules>
-
- <archive>
- <!-- Don't forget the Implementation Version -->
- <manifestEntries>
- <Implementation-Version>${project.version}</Implementation-Version>
- </manifestEntries>
- </archive>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
-
-
-
-
- Appendix
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF b/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF
deleted file mode 100644
index 2ae2c2e359892a47649d4ca871029f7aa1a837cd..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Archiver-Version: Plexus Archiver
-Created-By: Apache Maven
-Built-By: benoitf
-Build-Jdk: 1.5.0_15
-Specification-Title: EasyBeans Documentation
-Specification-Version: 1.2.0-M1
-Specification-Vendor: OW2 Consortium
-Implementation-Title: EasyBeans Documentation
-Implementation-Vendor-Id: org.ow2.easybeans.doc
-Implementation-Vendor: OW2 Consortium
-Implementation-Version: 1.2.0-M1.5458
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties b/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties
deleted file mode 100644
index 28ac90df1bf3512c25272574bc62fa4f038cd99e..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Generated by Maven
-#Thu Mar 25 17:22:26 GMT+01:00 2010
-version=1.2.0-M1
-groupId=org.ow2.easybeans.doc
-artifactId=easybeans-doc
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml
deleted file mode 100644
index c555be4ff72b5cc3020a8859a207733f4568b78c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
- easybeans
- org.ow2.easybeans
- 1.2.0-M1
-
- 4.0.0
- org.ow2.easybeans.doc
- easybeans-doc
- jar
- EasyBeans Documentation
- 1.2.0-M1
-
-
-
- scm:svn:svn:://svn.forge.objectweb.org/svnroot/easybeans/tags/EASYBEANS_DOC_1_2_0_M1
- scm:svn:svn+ssh://benoitf@svn.forge.objectweb.org/svnroot/easybeans/tags/EASYBEANS_DOC_1_2_0_M1
- http://fisheye.easybeans.org/browse/EasyBeans/tags/EASYBEANS_DOC_1_2_0_M1
-
-
-
-
- doc-en
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/advanced_topics.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/advanced_topics.xml
deleted file mode 100644
index 71df449a2849e9d61ec3640d0373169fdb8df205..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/advanced_topics.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
- Advanced topics
-
-
- Helping debug of enhanced classes
-
- EasyBeans is modifying/enhancing EJB classes at runtime. For
- debugging purpose, EasyBeans can dump the modified class in order to
- check/debug generated bytecode by using some decompilers.
-
- In order to enable the dump of the class, the logger
- org.ow2.easybeans.loader needs to be set at DEBUG/FINEST
- level. The classes will be dumped in the Java System java.io.tmpdir directory.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/building.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/building.xml
deleted file mode 100644
index 9963e5e6fb63473e0ae8acee2f0315d61c3468d5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/building.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
- Building EasyBeans From Source.
-
-
- Requirements
-
-
- JDK
-
- A Java SE
- 5 is required to build EasyBeans. Make sure that the JDK used to
- build EasyBeans is compliant with the new Java 5 features.
-
-
-
- Maven
-
- The maven tool is used with pom.xml files to
- build EasyBeans. This tool is available at http://maven.apache.org. The 2.0.7
- or later version is recommanded
-
-
-
- Ant
-
- Some tests are not yet available as maven tests, then the ant tool
- is needed to run the tests. The ant tool is available at http://ant.apache.org
-
-
-
- TestNG
-
- The test suite of EasyBeans uses the TestNG tool. This tool is
- available at http://www.testng.org.
-
-
-
- Clover
-
- The test suite of EasyBeans uses Clover, which is a code-coverage,
- analysis tool. Atlassian has granted licenses to open source projects.
- Refer to http://www.atlassian.com/software/clover/
- for more about Clover.
-
-
-
-
- Optional Requirements
-
-
- Eclipse
-
- The EasyBeans project provides .project and .classpath for Eclipse
- 3.1 or greater. A project is ready to use once the source has been
- imported using the Eclipse tool. Eclipse tool is available at http://www.eclipse.org.
-
-
-
- Eclipse Plugins
-
-
- Maven Plugin
-
- EasyBeans code is using maven tool. In order to download Maven2
- dependencies in Eclipse, the M2 Eclipse plugin can be used. This
- plugin is available at http://m2eclipse.sonatype.org/
-
-
-
- Checkstyle Plugin
-
- The eclipse-checkstyle plugin is used to check the javadoc of
- Easybeans project. A warning will print if the EasyBeans coding
- convention is not used. This plugin is available at http://eclipse-cs.sourceforge.net.
-
-
-
- AnyEdit Plugin
-
- As part of the EasyBeans coding convention, the use of
- tabulation characters is disallowed. Files should contain only spaces.
- The AnyEdit plugin allows tabs to be converted to spaces when saving
- the file. Also, trailing spaces can be removed automatically.
-
- This plugin is available at http://andrei.gmxhome.de/anyedit/.
-
-
-
- Asm Plugin
-
- EasyBeans uses bytecode enhancement. This is done using the
- OW2 ASM project. ASM
- provides a plugin that allows the ASM code of a given class to be
- obtained. The plugin is available at http://asm.objectweb.org/eclipse/index.html.
-
-
-
- TestNG Plugin
-
- The EasyBeans test suite uses TestNG. A plugin is available for
- Eclipse: http://testng.org/doc/eclipse.html.
-
-
-
-
-
- Compiling EasyBeans
-
- To compile EasyBeans, launch the command mvn in
- the root directory of the project (named easybeans by default) being
- launched.
- The default maven goal is install if not specified.
-
-
- Once the command has been run successfully, the maven artifacts
- generated by maven are available in the maven local repository. The
- target directories contain the
- generated jars or assemblies.
-
- mvn clean is used to clean the generated
- classes.
-
-
-
- Maven assemblies
-
- EasyBeans build generates several assemblies. Assemblies are located
- in the assemblies folder.
-
-
- End-User assemblies
-
- The packages are available with Apache OpenJPA or Hibernate Entity Manager as
- persistence provider. Packages contain examples and are available with
- the zip or tgz format.
-
-
- Jetty
-
- EasyBeans can be launched within Jetty web container. The
- assemblies for Jetty are available in the assemblies/distrib/jetty/target
- folder.
-
-
-
- JOnAS
-
- EasyBeans can be launched within JOnAS 4 J2EE application
- server. The assemblies for JOnAS are available in the assemblies/distrib/jonas/target
- folder.
- EasyBeans is already included by default in JOnAS 5.0
-
-
-
-
- Tomcat
-
- EasyBeans can be launched within Apache Tomcat web container.
- The assemblies for Jetty are available in the assemblies/distrib/tomcat/target
- folder.
-
-
-
- UberJar
-
- EasyBeans can be launched without any container. This is done by
- using the uberjar file. EasyBeans is launched by using java
- -jar easybeans-uberjar-xxx.jar command.
-
-
-
-
- Java EE modules assemblies
-
- These assemblies are simple Java EE modules, without example or
- documentation. These assemblies are then packaged into End-User
- assemblies.
-
-
- War module
-
- The war module is then used for Apache Tomcat or Jetty web
- container.
-
-
-
- Rar module
-
- This module is used for JOnAS 4 J2EE Application server.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/code_convention.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/code_convention.xml
deleted file mode 100644
index a74187dffa69abb38be6370d1d5b9c933b6a9250..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/code_convention.xml
+++ /dev/null
@@ -1,294 +0,0 @@
-
-
- EasyBeans Code Convention
-
- Contributions should follow the EasyBeans code convention. A good
- document to begin with is Java code
- convention. Other conventions are also listed in this
- document.
-
- In addition, EasyBeans uses tools to check the compliance: the checkstyle plugin and the
- eclipse checkstyle
- plugin. The configuration settings are available in the Eclipse settings of the project.
-
-
- File Organization
-
-
- Header
-
- All files should have a header that contains the LGPL and the
- date.
-
- If a file is modified, the modification year should be appended to
- the existing year, which is the year it was initially created. For
- example, if the create date is '1999' or '2004' it should be edited to
- '1999-2006' or '2004-2006', respectively.
-
- Also, the tag $Id: code_convention.xml 314 2006-04-04 09:39:43Z
- pinheirg $ should be added. The following is a header example:
-
- /**
- * EasyBeans
- * Copyright (C) 2008 Bull S.A.S.
- * Contact: easybeans@ow2.org
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- * USA
- *
- * --------------------------------------------------------------------------
- * $Id: code_convention.xml 3272 2008-05-21 09:53:35Z benoitf $
- * --------------------------------------------------------------------------
- */
-
-
-
-
- Imports
-
- Imports should reference a valid class name, instead of using
- wildcard imports. Wildcard imports are not authorized.
-
- For example, if the interface and class List and ArrayList are
- used, the imports should not be as follows:
-
- import java.util.*;
-
- The imports should have each class as follow:
-
-
- import java.util.List;
- import java.util.ArrayList;
-
- The classes should not have an unused import.
-
-
- The Eclipse IDE provides facilities to do this job. There is the
- option Organize Imports (Shift+Ctrl+O) in the menu
- Source that correctly inserts the imports and removes the unused
- imports. However, this option does not work well with 'import
- static'.
-
-
-
-
- Class and Interface Declarations
-
- The class and interface names should begin with an uppercase
- letter. Also, each class and interface has an @author tag in the
- comment. For example:
-
- /**
- * This is an example that shows a class/interface declaration.
- * @author Gisele Pinheiro Souza
- * @author Eduardo Studzinski Estima de Castro
- */
- public class ClassExample implements InterfaceExample{
- }
-
-
-
-
- Indentation / WhiteSpace
-
-
- Indentation
-
- The space character is used instead of the tab character. The
- number of spaces for an indent is 4 spaces.
-
- Wrapping a single source line into multiple lines should follow
- the Java
- code convention.
-
-
-
- WhiteSpace
-
- Any trailing spaces should be removed. Eclipse provides a plugin
- that removes the trailing spaces and converts the tab into spaces. The
- plugin is AnyEdit.
-
- Use whitespaces in for() loop, while(), when concatenating
- strings. One space should be added before the operator and another after
- the operator. For example, the correct syntax is:
-
- for (int i = 0; i < arTest.length; i++) {
- String strResult = "The element " + i + " has the value " + arTest[i];
- }
-
- The following code does not adhere to the convention:
-
- for (int i = 0; i< arTest.length; i++) {
- String strResult = "The element "+ i+" has the value "+arTest[i];
- }
-
-
-
-
- JavaDoc Comments
-
- All methods and attributes (including protected and private) must
- have a comment. The parameters, the exceptions thrown, and the method
- return should have a comment in the method comment. For example:
-
- /**
- * This is an example that is used in the EasyBeans Code Convention.
- */
-private int intValue;
-
-/**
- * This is an example method to show a class comment.
- * @param a an example of parameter.
- * @param b other example of parameter.
- * @return the method result.
- * @throws Exception the exception thrown by the method.
- */
-public int add(final int a, final int b) throws Exception {
- return a + b;
-}
-
-
-
- Statements
-
-
- If/else
-
- Braces must be used in the if/else blocks, even if there is a
- single statement. To illustrate:
-
- if (true) {
- doThis();
-}
-
- The following is not allowed:
-
- if (true)
- doThis();
-
- The position of the braces should be the same as in the first
- example. The following format is incorrect:
-
- if (true)
-{
- test1();
- test2();
-}
-
-
-
- Try/catch
-
- All exceptions require a statement; no silent catching is allowed.
- For example:
-
- try {
- doThis();
-} catch (Exception e) {
- // should not occur
-}
-
- A logger can be used:
-
- try {
- doThis();
-} catch (Exception e) {
- logger.logDebug("Exception while doing .....", e);
-}
-
-
-
- Inline Conditionals
-
- Inline conditionals are not allowed. The following code is
- incorrect:
-
- b = isOk() ? true : false;
-
- The correct way to write this is as follows:
-
- if (isOk()) {
- b = true;
-} else {
- b = false;
-}
-
-
-
- Naming Conventions
-
-
- Static Final Attributes
-
- Declarations are static final, not final static. This is a JLS
- recommendation.
-
-
-
- Constants
-
- Constants should be static and final, and should adhere to the
- following:
-
- '^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'
-
-
-
- No Magic Numbers, Use Constants
-
- Constants must be used in the code and magic number must be
- avoided. For example, the following is not allowed:
-
- private int myAttribute = 5;
-
- The correct format is:/**
- * Default value
- */
-private static final int DEFAULT_VALUE = 5;
-
-/**
- * This attribute is initialized with the default value
- */
-private int myAttribute = DEFAULT_VALUE;
-
-
-
- Attribute Name
-
- The attribute name should not have an underscore ( _ ). The _ is
- valid for constants that are in uppercase.
-
- Use pValue and mValue instead of p_Value and m_Value.
-
- The pattern for attribute name is:
-
- '^[a-z][a-zA-Z0-9]*$'
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/configuration_file.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/configuration_file.xml
deleted file mode 100644
index c24052bc27357fcc6de5dba9288ab1cfc5066900..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/configuration_file.xml
+++ /dev/null
@@ -1,391 +0,0 @@
-
-
- EasyBeans Server Configuration File
-
-
- Introduction
-
- EasyBeans is configured with the help of an easy-to-understand XML
- configuration file.
-
- The following is an example of an EasyBeans XML configuration
- file:
-
- <?xml version="1.0" encoding="UTF-8"?>
-<easybeans xmlns="http://org.ow2.easybeans.server">
-
- <!-- No infinite loop (daemon managed by WebContainer): wait="false"
- Enable MBeans: mbeans="true"
- No EasyBeans naming, use WebContainer naming: naming="false"
- Use EasyBeans JACC provider: jacc="true"
- Use EasyBeans file monitoring to detect archives: scanning="true"
- Use EasyBeans JMX Connector: connector="true"
- Enable Deployer and J2EEServer MBeans: deployer="true" & j2eeserver="true"
- -->
- <config
- wait="false"
- mbeans="true"
- naming="false"
- jacc="true"
- scanning="true"
- connector="true"
- deployer="true"
- j2eeserver="true" />
-
- <!-- Define components that will be started at runtime -->
- <components>
- <!-- RMI/JRMP will be used as protocol layer -->
- <rmi>
- <protocol name="jrmp" port="1099" hostname="localhost" />
- </rmi>
-
- <!-- Start a transaction service -->
- <tm />
-
- <!-- Start a JMS provider -->
- <jms port="16030" hostname="localhost" />
-
- <!-- Creates an embedded HSQLDB database -->
- <hsqldb port="9001" dbName="jdbc_1">
- <user name="easybeans" password="easybeans" />
- </hsqldb>
-
- <!-- Add mail factories -->
- <mail>
- <!-- Authentication ?
- <auth name="test" password="test" />
- -->
- <session name="javax.mail.Session factory example" jndiName="mailSession_1">
- <!-- Example of properties -->
- <property name="mail.debug" value="false" />
- </session>
-
- <mimepart name="javax.mail.internet.MimePartDataSource factory example" jndiName="mailMimePartDS_1">
- <subject>How are you ?</subject>
- <email type="to">john.doe@example.org</email>
- <email type="cc">jane.doe@example.org</email>
- <!-- Example of properties -->
- <property name="mail.debug" value="false" />
- </mimepart>
-
- </mail>
-
- <!-- Creates a JDBC pool with jdbc_1 JNDI name -->
- <jdbcpool jndiName="jdbc_1" username="easybeans"
- password="easybeans" url="jdbc:hsqldb:hsql://localhost:9001/jdbc_1"
- driver="org.hsqldb.jdbcDriver" />
-
- <!-- Start smartclient server with a link to the rmi component-->
- <smart-server port="2503" rmi="#rmi" />
-
-
- <!-- JNDI Resolver -->
- <jndi-resolver />
-
- <!-- JMX component -->
- <jmx />
-
- <!-- Statistic component -->
- <statistic event="#event" jmx="#jmx" />
- </components>
-</easybeans>
-
- By default, an easybeans-default.xml file is
- used. To change the default configuration, the user must provide a file
- named easybeans.xml, which is located at
- classloader/CLASSPATH.
-
-
- The namespace used is http://org.ow2.easybeans.server.
-
-
-
-
- Configuration
-
- Each element defined inside the
- <components> element is a component.
-
- Note that some elements are required only for the standalone mode.
- JMS, RMI, HSQL, and JDBC pools are configured through JOnAS server when
- EasyBeans runs inside JOnAS.
-
-
- RMI Component
-
- The RMI configuration is done using the
- <rmi> element.
-
- To run EasyBeans with multiple protocols, the
- <protocol> element can be added more than
- once.
-
- The hostname and port attributes are configurable.
-
- Protocols could be "jrmp, jeremie, iiop, cmi". The default is
- jrmp.
-
-
- Some protocols may require libraries that are not packaged by
- default in EasyBeans.
-
-
-
-
- Transaction Component
-
- The Transaction Component is defined by the
- <tm> element.
-
- A timeout attribute, which is the transaction
- timeout (in seconds), can be defined on this element. The default is 60
- seconds.
-
- The implementation provided by the JOTM objectweb project is
- the default implementation.
-
-
-
- JMS Component
-
- The JMS component is used for JMS Message Driven Beans. Attributes
- are the port number and the hostname.
-
- Also, the workmanager settings can be defined: minThreads,
- maxThreads and threadTimeout. The values are printed at the EasyBeans
- startup.
-
- The default implementation is the implementation provided by the
- JORAM objectweb
- project.
-
-
-
- HSQL Database
-
- EasyBeans can run an embedded database. Available attributes are
- the port number and the database name. The
- <hsqldb> may be duplicated in order to run
- several HSQLDB instances.
-
- Users are defined through the <user>
- element.
-
-
-
- JDBC Pool
-
- This component allows the JDBC datasource to be bound into JNDI.
- The jndi name used is provided by the jndiName
- attribute.
-
- Required attributes are username,
- password, url and
- driver.
-
- Optional attributes are poolMin,
- poolMax and pstmtMax. This
- component provides the option to set the minimum size of the pool, the
- maximum size, and the size of the prepared statement cache.
-
-
-
- Mail component
-
- Mails can be sent by using the mail component that provides either
- Session or MimePartDataSource factories.
-
-
-
- SmartServer Component
-
- This component is used by the Smart JNDI factory on the client
- side. This allows the client to download missing classes. The client can
- be run without a big jar file that provides all the classes. Classes are
- loaded on demand.
-
-
- Refer to the Chapter titled, Smart JNDI Factory, for more
- information about this feature.
-
-
-
-
-
- Advanced Configuration
-
- This configuration file can be extended to create and set properties
- on other classes.
-
-
- Mapping File
-
- A mapping file named easybeans-mapping.xml
- provides the information that rmi is the CarolComponent, tm is the JOTM
- component, and jms is the Joram component. This file is located in the
- org.objectweb.easybeans.server package.
-
- The following is an extract of the
- easybeans-mapping.xml file.
-
-
- The mapping file is using a schema available at http://easybeans.ow2.org/xml/ns/xmlconfig/xmlconfig-mapping_10.xsd
-
-
- <?xml version="1.0" encoding="UTF-8"?>
- <xmlconfig-mapping xmlns="http://easybeans.ow2.org/xml/ns/xmlconfig"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://easybeans.ow2.org/xml/ns/xmlconfig
- http://easybeans.ow2.org/xml/ns/xmlconfig/xmlconfig-mapping_1_0.xsd">
-
- <class name="org.ow2.easybeans.server.ServerConfig" alias="config">
- <attribute name="shouldWait" alias="wait" />
- <attribute name="useMBeans" alias="mbeans" />
- <attribute name="useNaming" alias="naming" />
- <attribute name="initJACC" alias="jacc" />
- <attribute name="directoryScanningEnabled" alias="scanning" />
- <attribute name="startJMXConnector" alias="connector" />
- <attribute name="registerDeployerMBean" alias="deployer" />
- <attribute name="registerJ2EEServerMBean" alias="j2eeserver" />
- <attribute name="description" />
- </class>
-
- <class name="org.ow2.easybeans.component.Components"
- alias="components" />
-
- <class name="org.ow2.easybeans.component.util.Property"
- alias="property" />
-
- <package name="org.ow2.easybeans.component.carol">
- <class name="CarolComponent" alias="rmi" />
- <class name="Protocol" alias="protocol">
- <attribute name="portNumber" alias="port" />
- </class>
- </package>
-
- <class name="org.ow2.easybeans.component.cmi.CmiComponent" alias="cmi">
- <attribute name="serverConfig" alias="config" />
- <attribute name="eventComponent" alias="event" />
- </class>
-
- <class
- name="org.ow2.easybeans.component.smartclient.server.SmartClientEndPointComponent"
- alias="smart-server">
- <attribute name="portNumber" alias="port" />
- <attribute name="registryComponent" alias="rmi" />
- </class>
-
- <class name="org.ow2.easybeans.component.jotm.JOTMComponent"
- alias="tm" />
-
- <class name="org.ow2.easybeans.component.joram.JoramComponent" alias="jms">
- <attribute name="topic" isList="true" getter="getTopics" setter="setTopics" element="true"/>
- </class>
-
- <class
- name="org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent"
- alias="jdbcpool" />
-
- <class
- name="org.ow2.easybeans.component.remotejndiresolver.RemoteJNDIResolverComponent"
- alias="jndi-resolver">
- </class>
-
- <package name="org.ow2.easybeans.component.hsqldb">
- <class name="HSQLDBComponent" alias="hsqldb">
- <attribute name="databaseName" alias="dbName" />
- <attribute name="portNumber" alias="port" />
- </class>
- <class name="User" alias="user">
- <attribute name="userName" alias="name" />
- </class>
- </package>
-
- <package name="org.ow2.easybeans.component.quartz">
- <class name="QuartzComponent" alias="timer" />
- </package>
-
- <package name="org.ow2.easybeans.component.mail">
- <class name="MailComponent" alias="mail" />
- <class name="Session" alias="session">
- <attribute name="JNDIName" alias="jndiName" />
- </class>
- <class name="MimePart" alias="mimepart">
- <attribute name="subject" element="true" />
- <attribute name="JNDIName" alias="jndiName" />
- </class>
- <class name="MailAddress" alias="email" element-attribute="name" />
- <class name="Auth" alias="auth">
- <attribute name="username" alias="name" />
- </class>
- </package>
-
- <class name="org.ow2.easybeans.component.event.EventComponent" alias="event">
- <attribute name="eventService" alias="event-service" optional="true" />
- </class>
-
- <class name="org.ow2.easybeans.component.jmx.JmxComponent" alias="jmx">
- <attribute name="commonsModelerExtService" alias="modeler-service" optional="true" />
- </class>
-
- <class name="org.ow2.easybeans.component.statistic.StatisticComponent" alias="statistic">
- <attribute name="eventComponent" alias="event" />
- <attribute name="jmxComponent" alias="jmx" />
- </class>
-
- <package name="org.ow2.easybeans.component.depmonitor">
- <class name="DepMonitorComponent" alias="depmonitor">
- </class>
- <class name="ScanningMonitor" alias="scanning">
- <attribute name="waitTime" alias="period" />
- </class>
- <class name="LoadOnStartupMonitor" alias="loadOnStartup">
- </class>
- </package>
-
-
-</xmlconfig-mapping>
-
-
- This mapping file is referenced by the easybeans configuration
- file using the XML namespace :
- xmlns="http://org.ow2.easybeans.server".
-
- Each element configured within this namespace will use the
- mapping done in the org.ow2.easybeans.server
- package.
-
-
- Users can define their own mapping by providing a file in a
- package. The name of the the file must be
- easybeans-mapping.xml or
- element-mapping.xml.
-
- Example: For the element <easybeans
- xmlns="http://org.ow2.easybeans.server">, the resource
- searched in the classloader is
- org/ow2/easybeans/server/easybeans-mapping.xml. And
- for an element <pool:max>2</pool:max> with
- xmlns:pool="http://org.ow2.util.pool.impl", the resource searched will
- be org/ow2/util/pool/impl/easybeans-mapping.xml or
- org/ow2/util/pool/impl/pool-mapping.xml.
-
-
-
- Other Configuration Files
-
- EasyBeans can be configured through other configuration files as
- it uses a POJO configuration. If done this way, it can be configured
- using the Spring Framework component or other frameworks/tools.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/contributing.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/contributing.xml
deleted file mode 100644
index babffe24a31ae2f0f52581cd44e365a5215f4ac9..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/contributing.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
- Contributing to EasyBeans
-
-
- Mailing Lists
-
- Developers wanting to contribute information about EasyBeans can
- share their thoughts via the easybeans mailing list.
-
- The steps necessary for subscribing to the list are described at the
- following url :http://www.objectweb.org/wws/info/easybeans
-
-
-
- Ideas for Contributing
-
- There are many ways to contribute to easybeans. New ideas are also
- welcome.
-
- The following is a list of some of the ways to make
- contributions:
-
-
-
- Documentation: Improve or add to the existing documentation,
- create new chapters, translate, etc.
-
-
-
- Code: Some glue could be added so that EasyBeans could be
- integrated in other servers.
-
-
-
- Tests: Add new tests to the current test suite.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/creating_ejbs.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/creating_ejbs.xml
deleted file mode 100644
index e22e949d0186eeb08fe41e822a52225fa81c4c9c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/creating_ejbs.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
- Creating EJBs
-
-
- Requirements
-
- Before trying to build a bean, developers should look at the
- existing examples.
-
-
- Creating a First Bean
-
- Scripts for building examples are available in the folder of each
- example. These can be duplicated to use as a base for starting the first
- bean. Additionally, if the bean will use entities, the entity bean
- example should be used as a template.
-
-
-
- Writing Code for the Bean
-
- The business code should be written first. Then annotations can be
- added to declare the bean as stateless, stateful or message-driven
- beans. The client should be written last.
-
-
-
- Compiling and Running the Bean
-
- Two tasks are involved in using the example templates:
-
-
-
- ant install is used to build and copy the
- bean to a deployable state.
-
-
-
- ant run.client is used to start a client
- running in another JVM.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/developerguide.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/developerguide.xml
deleted file mode 100644
index 94a4d727ba5da6e9598715a5be2f1eeedda51dc0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/developerguide.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- EasyBeans Developer's guide
-
-
-
-
-
-
-
-
-
- FlorentBENOIT
-
-
- EasyBeans
-
- OW2 consortium
-
-
-
-
- $Id: developerguide.xml 216 2006-03-16 19:01:07Z benoitf
- $
-
-
- 2006-2008
-
- OW2 Consortium
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- The EasyBeans developer guide is intended for developers wanting
- to work with the source distribution of EasyBeans. People wanted to
- contribute to EasyBeans should read this documentation.
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/ejb3_introduction.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/ejb3_introduction.xml
deleted file mode 100644
index 3caab7b97d6d081da7465ae28089e1a3b9033fbd..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/ejb3_introduction.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
- Introduction to EJB3
-
-
- Overview
-
- EJB3 is included in the next J2EE specification, JAVA EE 5. (
- http://java.sun.com/javaee/5/ )
-
- The EJB3 specification is defined in JSR 220, which can be found at
- the following location: http://www.jcp.org/en/jsr/detail?id=220
-
- The publication is published as three separate files:
-
- The core
-
-
-
- The persistence provider
-
-
-
- The simplified specification, which contains new
- features
-
- The EJB3 persistence provider is plugged into the EJB3
- container. Available persistence providers are: Hibernate EntityManager,
- Apache OpenJPA, TopLink
- Essentials, and Eclipse Link
- etc.
-
-
-
- The Advantage of EJB3
-
- EJB 2.x was too complex. Developers were using additional tools to
- make it easier.
-
-
-
- XDoclet (Attribute oriented programming): http://xdoclet.sourceforge.net
-
-
-
- Hibernate for persistence: http://www.hibernate.org
-
- The main focus for this specification is on Ease Of
- Development (EoD). One major way this has been simplified is by using
- metadata attribute annotations suppported by JDK 5.0.
-
- Simplifying EJB development should produce a wider range of Java EE
- developers.
-
-
-
- EJB2 vs EJB3: EoD
-
- The deployment descriptors are no longer required; everything can be
- accomplished using metadata annotations.
-
- The CMP (Container Managed Persistence) has been simplified; it is
- now more like Hibernate or JDO.
-
- Programmatic defaults have been incorporated. For example, the
- transaction model is set to REQUIRED by default. The value needs to be set
- only if a specific value other than the default value is desired.
-
- The use of checked exceptions is reduced; the RemoteException is no
- longer mandatory on each remote business method.
-
- Inheritance is now allowed; therefore, beans can extend some of the
- base code.
-
- The native SQL queries are supported as an EJB-QL (Query Language)
- enhancement.
-
-
-
- New Features
-
-
- Metadata Annotations
-
- Metadata annotations is new. For example, to define a stateless
- session bean, the @Stateless annotation is declared
- on the bean class.
-
-
-
- Business Interceptors
-
- The new business interceptors allow the developer to intercept
- each business method of the bean. The parameters and the returned values
- can be changed. For example, an interceptor can be used to determine the
- time that a method takes to execute.
-
-
-
- Lifecycle Interceptors
-
- In addition to business interceptors, the EJB2 callbacks ( such as
- the ejbActivate() method) are now defined using
- annotation. For the ejbActivate() method, this
- is done with the help of @PostActivate annotation.
- This annotation is set on a method that will be called by the
- container.
-
-
-
- Dependency Injection
-
- Dependency injection makes it possible to request that the
- container inject resources, instead of trying to get them. For example,
- with the EJB2 specification, in order to get an EJB, the following code
- was used:
-
- try {
- Object o = new InitialContext().lookup("java:comp/env/ejb/MyEJB");
- myBean = PortableRemoteObject.narrow(o, MyInterface.clas);
-} catch (NamingException e) {
- ....
-}
-
- With EJB3 this is done using only the following code:
-
- @EJB private MyInterface myBean;
-
- If the @EJB annotation is found in the class,
- the container will look up and inject an instance of the bean in the
- myBean variable.
-
-
-
- Persistence
-
- New features are linked to the persistence layer. For example,
- EJB3 entities are POJO (Plain Old Java Object). This means that they can
- be created by using the new() constructor:
- new MyEntity();
-
- Also entities are managed by an
- EntityManager: entitymanager.persist(entity);
-
- In addition, entities have callbacks available.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/getting_from_svn.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/getting_from_svn.xml
deleted file mode 100644
index 1c209bd3053b17faa13bfefb395175d8d3915c5a..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/getting_from_svn.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
- Getting EasyBeans From the SVN Repository
-
- Anyone can check out source code from the SVN server using the
- following command (for GUI SVN client use, configuration values are the same
- as for command line use):
-
- svn checkout
- svn://svn.forge.objectweb.org/svnroot/easybeans/trunk/easybeans
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/helloworldbean.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/helloworldbean.xml
deleted file mode 100644
index 3944e1d5053193f22964072ded2e0964bb63ef01..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/helloworldbean.xml
+++ /dev/null
@@ -1,250 +0,0 @@
-
-
- Writing a HelloWorld Bean
-
-
- Requirements
-
- This example illustrates the basics of an EJB3 application, showing
- all the steps used to build and run the EJB.
-
- The only addtional information required is to know how to run the
- server.
-
-
-
- Writing Code for the Bean
-
- The HelloWorld bean is divided into two parts: the business
- interface, and the class implementing this interface.
-
-
- Writing the Interface
-
- The interface declares only one method:
- helloWorld()
-
- package org.objectweb.easybeans.tutorial.helloworld;
-
-/**
- * Interface of the HelloWorld example.
- * @author Florent Benoit
- */
-public interface HelloWorldInterface {
-
- /**
- * Hello world.
- */
- void helloWorld();
-
-}
-
-
- Even if this interface is used as a remote interface, it does
- not need to extend java.rmi.Remote
- interface.
-
-
-
-
- Writing the Business Code
-
- The following code implements the existing interface:
-
- package org.objectweb.easybeans.tutorial.helloworld;
-
-/**
- * Business code for the HelloWorld interface.
- * @author Florent Benoit
- */
-public class HelloWorldBean implements HelloWorldInterface {
-
- /**
- * Hello world implementation.
- */
- public void helloWorld() {
- System.out.println("Hello world !");
- }
-
-}
-
-
- At this moment, the bean is not an EJB; this is only a class
- implementing an interface.
-
-
-
-
- Defining the EJB Code as a Stateless Session Bean
-
- Now that the EJB code has been written, it is time to define the
- EJB application.
-
- This bean will be a stateless session bean, thus the class will be
- annotated with @Stateless annotation.
-
- In addition, the interface must be a remote interface to be
- available for remote clients. This is done by using the
- @Remote annotation.
-
- package org.objectweb.easybeans.tutorial.helloworld;
-
-
-import javax.ejb.Remote;
-import javax.ejb.Stateless;
-
-/**
- * Business code for the HelloWorld interface.
- * @author Florent Benoit
- */
-@Stateless
-@Remote(HelloWorldInterface.class)
-public class HelloWorldBean implements HelloWorldInterface {
-
- /**
- * Hello world implementation.
- */
- public void helloWorld() {
- System.out.println("Hello world !");
- }
-
-}
-
-
- If a class implements a single interface, this interface is
- defined as a local interface by default.
-
-
-
-
- Packaging the Bean
-
- The two classes (
- HelloWorldInterface and
- HelloWorldBean) must be compiled.
-
- Then, a folder named ejb3s/helloworld.jar/ must be created and
- classes placed in this folder. They will be deployed and loaded
- automatically.
-
-
-
-
- Writing the Client Code
-
- The client can access the business interface directly and can call
- the methods of the bean directly.
-
- package org.objectweb.easybeans.tutorial.helloworld;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-
-/**
- * Client of the helloworld bean.
- * @author Florent Benoit
- */
-public final class Client {
-
- /**
- * JNDI name of the bean.
- */
- private static final String JNDI_NAME =
- "org.objectweb.easybeans.tutorial.helloworld.HelloWorldBean"
- + "_" + HelloWorldInterface.class.getName() + "@Remote"
-
- /**
- * Utility class. No public constructor
- */
- private Client() {
- }
-
- /**
- * Main method.
- * @param args the arguments (not required)
- * @throws Exception if exception is found.
- */
- public static void main(final String[] args) throws Exception {
- Context initialContext = new InitialContext();
-
- HelloWorldInterface businessItf =
- (HelloWorldInterface) initialContext.lookup(JNDI_NAME);
-
- System.out.println("Calling helloWorld method...");
- businessItf.helloWorld();
- }
-
-}
-
-
- The client does not call the PortableRemoteObject.narrow() method.
- Also, no create() method is required.
-
-
-
-
- Writing a First Business Method Interceptor
-
- An interceptor can be defined in the bean class or in another class.
- In this example, it will be defined in the bean's class. A business
- interceptor is defined by using the @AroundInvoke
- annotation.
-
- The following interceptor will print the name of the method that is
- invoked. Of course, this could be extended to perform more
- functions.
-
- /**
- * Dummy interceptor.
- * @param invocationContext contains attributes of invocation
- * @return method's invocation result
- * @throws Exception if invocation fails
- */
- @AroundInvoke
- public Object intercept(final InvocationContext invocationContext) throws Exception {
- System.out.println("Intercepting method '" + invocationContext.getMethod().getName()
- + "'.");
- try {
- return invocationContext.proceed();
- } finally {
- System.out.println("End of intercepting.");
- }
- }
-
-
- Be sure to call the proceed() method on
- the invocationContext object; otherwise, the invocation is
- broken.
-
-
-
-
- Writing a First Lifecycle Interceptor
-
- The bean can be notified of certain lifecycle events: for example,
- when a bean is created or destroyed.
-
- In the following example, a method of the bean will receive an event
- when an instance of the bean is built. This is done by using the
- @PostConstruct annotation.
-
- Llifecycle interceptors of a bean may be defined in another
- class.
-
- /**
- * Notified of postconstruct event.
- */
- @PostConstruct
- public void notified() {
- System.out.println("New instance of this bean");
- }
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png b/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png
deleted file mode 100644
index ae5e33e80fbeb998f9b2e9ad4013d05d246ddd18..0000000000000000000000000000000000000000
Binary files a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png and /dev/null differ
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml
deleted file mode 100644
index 81b5f61f9e040426d67495a86c4104fbf26badd5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml
+++ /dev/null
@@ -1,800 +0,0 @@
-
-
- GWT and EJB3 with EasyBeans
-
-
- The GWT (Google Web Toolkit)
- will be used as the framework for producing clients using the AJAX technique,
- while EJB3 will be on the server side providing some services (such as
- persistence).
-
- EJB3 can help developers with the persistence aspects (with the Java
- Persistence API) or with the business aspects.
-
- The source of an application, a Sudoku Game, that uses EasyBeans and
- GWT can be viewed on the Fisheye
- Sudoku EasyBeans site using a browser. This howto uses some of the
- code from this application.
-
- A tgz package is also provided on the
- EasyBeans forge.
-
-
-
-
-
- Requirements
-
-
- JDK
-
- A JDK 5.0 is required to use EasyBeans.
-
-
- GWT only supports JDK 1.4 functions. Therefore, classes that
- will be transformed by GWT into JavaScript should not use JDK 5
- features (such as annotations). Other classes can use the new features
- (like the EJB3).
-
-
-
-
- Eclipse
-
- GWT can be used without Eclipse. However, Eclipse is used in
- this HowTo.
-
-
-
- EasyBeans
-
- This HowTo uses the EasyBeans Tomcat package. Note that it also
- works with the JOnAS package or any other EasyBeans package.
-
- EasyBeans can be downloaded from the EasyBeans Web Site.
-
-
-
- Tomcat
-
- Tomcat 5.5.20 was used. It should work with other versions as
- well. Download this software from Tomcat
- site.
-
-
-
- Google Web Toolkit
-
- The Toolkit can be downloaded from the Google Web
- Toolkit download page. The version used in this HowTo is the 1.3
- RC1 version running on Linux. This is the first open source version of
- GWT released with an Apache 2.0 license.
-
-
-
-
- Starting with GWT
-
-
- Creating an Eclipse Project
-
- GWT comes with an eclipse project creator tool. The project will
- have the name Sudoku and will be created in the $HOME/workspace
- directory.
-
- $ cd gwt-linux-1.3.1/
-$ ./projectCreator -eclipse Sudoku -out $HOME/workspace/sudoku
-Created directory $HOME/workspace/sudoku/src
-Created file $HOME/workspace/sudoku/.project
-Created file $HOME/workspace/sudoku/.classpath
-
-
-
- Adding a GWT Application to the Eclipse Project
-
- A GWT application must be added to the eclipse project. The
- application creator tool is given the name of the class to
- generate.
-
- The following files will be generated:
-
- The Sudoku.gwt.xml file, which
- describes the module with entry point. Additionally, this file
- will be used to add the mapping for the remote service using
- EasyBeans.
-
-
-
- The Sudoku.html file, which is a
- skeleton page that calls the widget's examples.
-
-
-
- The Sudoku.java file, which is the
- class responsible to load widgets (which implements the
- EntryPoint interface).
-
-
-
- Additionally, there are three scripts that allow files to be
- launched or compiled. Note that the compile script will be
- replaced by an ant task in this HowTo.
-
-
-
- $ ./applicationCreator -out $HOME/workspace/sudoku -eclipse -out org.objectweb.easybeans.demo.sudoku.web.client.Sudoku
-Created directory $HOME/workspace/sudoku/src/org/objectweb/easybeans/demo/sudoku/web
-Created directory $HOME/workspace/sudoku/src/org/objectweb/easybeans/demo/sudoku/web/client
-Created directory $HOME/workspace/sudoku/src/org/objectweb/easybeans/demo/sudoku/web/public
-Created file $HOME/workspace/sudoku/src/org/objectweb/easybeans/demo/sudoku/web/Sudoku.gwt.xml
-Created file $HOME//workspace/sudoku/src/org/objectweb/easybeans/demo/sudoku/web/public/Sudoku.html
-Created file $HOME//workspace/sudoku/src/org/objectweb/easybeans/demo/sudoku/web/client/Sudoku.java
-Created file $HOME/workspace/sudoku/Sudoku.launch
-Created file $HOME/workspace/sudoku/Sudoku-shell
-Created file $HOME/workspace/sudoku/Sudoku-compile
-
-
-
-
- Calling EJB3 Beans with an RPC Service
-
-
- Defining the Interface of the Service
-
- The two interfaces of the service must be present in the client
- package. In this howto, the package name is
- org.objectweb.easybeans.demo.sudoku.web.client.service.
-
- The following two interfaces must be defined:
-
-
-
-
- The interface that will be implemented by the remote
- service
-
-
-
- The asynchronous interface, which is always a void method. A
- new parameter must be added on the method and the name of the
- interface must have a suffix of
- Async.
-
-
-
-
-
- Service Interface
-
- The following is an example of a service that takes an argument
- and returns an object (A solver).
-
- package org.objectweb.easybeans.demo.sudoku.web.client.service;
-
-import org.objectweb.easybeans.demo.sudoku.web.client.api.GridData;
-import org.objectweb.easybeans.demo.sudoku.web.client.api.ServiceException;
-
-
-import com.google.gwt.user.client.rpc.RemoteService;
-
-/**
- * Interface used to call the servlet facade and then EJB3.
- * @author Florent Benoit
- */
-public interface ServletFacadeService extends RemoteService {
-
- /**
- * Solve a sudoku grid and send in return the solved grid.
- * @param gridData the grid to solve
- * @return the solved grid.
- * @throws ServiceException if solving fails.
- */
- GridData solve(GridData gridData) throws ServiceException;
-
- /**
- * Checks if a sudoku grid is valid.
- * @param gridData the grid to check
- * @throws ServiceException if checking fails.
- */
- void check(GridData gridData) throws ServiceException;
-
-
- /**
- * Generate a sudoku grid and send it in return.
- * @return the generated grid.
- * @throws ServiceException if solving fails.
- */
- GridData generate() throws ServiceException;
-
-}
-
-
-
- GridData must be a serializable object. However, this
- serialization is not JDK serialization. This class must implement
- the
- com.google.gwt.user.client.rpc.IsSerializable
- interface.
-
- The Exception (ServiceException) also implements the
- IsSerializable interface.
-
-
-
-
- Asynchronous Interface
-
- The signature is almost the same, except for the
- following:
-
-
-
-
- The return type is void.
-
-
-
- An extra argument is added in the method signature: the
- AsyncCallback object.
-
-
-
- The name of the class ends with the
- Async keyword.
-
-
-
-
- package org.objectweb.easybeans.demo.sudoku.web.client.service;
-
-import org.objectweb.easybeans.demo.sudoku.web.client.api.GridData;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-/**
- * Asynchronous interface. Same parameters of interface but all methods have an AsyncCallback parameter and are void !.
- * @author Florent Benoit
- */
-public interface ServletFacadeServiceAsync {
-
- /**
- * Asynchronous call to the solve method.
- * @param gridData the grid to solve
- * @param callback the callback to use for this method
- */
- void solve(GridData gridData, AsyncCallback callback);
-
- /**
- * Checks if a sudoku grid is valid.
- * @param gridData the grid to check
- * @param callback the callback to use for this method
- */
- void check(GridData gridData, AsyncCallback callback);
-
-
- /**
- * Generates a sudoku grid and send it in return.
- * @param callback the callback to use for this method
- */
- void generate(AsyncCallback callback);
-}
-
-
-
- The ServiceException is not thrown by the solve() method of
- the Async interface. The exceptions will be reported in the
- onFailure(Throwable t) method of the
- callback.
-
-
-
-
-
- Classes Used by the Interfaces
-
-
- The GridData Class
-
- This class implements the
- IsSerializable interface.
-
- package org.objectweb.easybeans.demo.sudoku.web.client.api;
-
-import com.google.gwt.user.client.rpc.IsSerializable;
-
-/**
- * Represents the data of a sudoku grid.
- * It is a serializable object (gwt) used by remote service.
- * @author Florent Benoit
- */
-public class GridData implements IsSerializable {
- ...
-}
-
-
-
- The ServiceException Exception
-
- This class implements the
- IsSerializable interface and stores the
- message.
-
- Additionally, an empty constructor is required for the
- serialization.
-
- package org.objectweb.easybeans.demo.sudoku.web.client.api;
-
-import com.google.gwt.user.client.rpc.IsSerializable;
-
-/**
- * Exception thrown by the remote service. <br />
- * Exception needs to be serializable (gwt)
- * @author Florent Benoit
- */
-public class ServiceException extends Exception implements IsSerializable {
-
- /**
- * The message of the exception.
- */
- private String msg;
-
-
- /**
- * Empty message.
- */
- public ServiceException() {
- super();
- }
-
- /**
- * Builds an exception with a given message.
- * @param msg the message of the exception.
- */
- public ServiceException(final String msg) {
- super(msg);
- this.msg = msg;
- }
-
-
- /**
- * Gets the message of the exception.
- * @return the message of the exception.
- */
- public String getMessage() {
- return this.msg;
- }
-
-}
-
-
-
-
- Implementing the Service
-
-
- Implementation Service Class
-
- The implementation of the service will run on the server side.
- Therefore, it need not be present in the client package (no JavaScript
- transformation). The class will be in the server package.
-
- The service is provided as a servlet. Then, the class must
- extend the
- com.google.gwt.user.server.rpc.RemoteServiceServlet
- class.
-
- The Class will look like the following:
-
- package org.objectweb.easybeans.demo.sudoku.web.server.service;
-
-import org.objectweb.easybeans.demo.sudoku.web.client.api.GridData;
-import org.objectweb.easybeans.demo.sudoku.web.client.api.ServiceException;
-
-import com.google.gwt.user.server.rpc.RemoteServiceServlet;
-
-/**
- * Implementation of the service that runs on the server side. <br />
- * All is delegate to the EJB3 session facade.
- * @author Florent Benoit
- */
-public class ServletFacadeServiceImpl extends RemoteServiceServlet implements ServletFacadeService {
-
- /**
- * Checks if a sudoku grid is valid.
- * @param gridData the grid to check
- * @throws ServiceException if checking fails.
- */
- public void check(final GridData gridData) throws ServiceException {
- try {
- getFacade().check(gridData.getData());
- } catch (Exception e) {
- throw new ServiceException(e.getMessage());
- }
- }
-
- /**
- * Solve a sudoku grid and send in return the solved grid.
- * @param gridData the grid to solve
- * @return the solved grid.
- * @throws ServiceException if solving fails.
- */
- public GridData solve(final GridData gridData) throws ServiceException {
- int[][] solvedData = null;
- try {
- solvedData = getFacade().solve(gridData.getData());
- } catch (Exception e) {
- throw new ServiceException(e.getMessage());
- }
- GridData solvedGridData = new GridData();
- solvedGridData.setData(solvedData);
- return solvedGridData;
- }
-
-...
-
-}
-
-
-
- Accessing an EJB3 from this Remote Service
-
- A sessionBean facade will be used for delegating all the
- requests.
-
- The service will use a getFacade() method. InitialContext is
- built, then the facade is searched and the session bean is returned.
- The bean can be cached to avoid getting a new bean each time.
-
- The following is the code for this method:
-
- /**
- * Gets the session facade bean.
- * @return the session bean.
- * @throws Exception if facade is not retrieved
- */
- private SudokuFacade getFacade() throws Exception {
- SudokuFacade sudokuFacade = null;
-
- Context initialContext = null;
- Hashtable<String, String> env = new Hashtable<String, String>();
- // Use the smart factory
- env.put(Context.INITIAL_CONTEXT_FACTORY, SmartContextFactory.class.getName());
- // Use the default Provider URL port
- env.put(Context.PROVIDER_URL, "smart://localhost:2503");
- initialContext = new InitialContext(env);
- sudokuFacade = (SudokuFacade) initialContext.lookup("SudokuFacade");
- return sudokuFacade;
- }
-
-
- The JNDI name is very simple as the attribute mappedName was
- used on the @Stateless annotation of the EJB3. The InitialContext
- factory is the smart factory. This factory allow to download the
- classes when they are required. The PROVIDER_URL is the default URL
- of the Smart component.
-
-
-
-
- Calling the Facade Bean from the Remote Service
-
- When an operation must be performed on the facade session bean,
- it is done in the following way:
-
- try {
- ... = getFacade().methodName();
- } catch (Exception e) {
- throw new ServiceException(e.getMessage());
- }
-
-
- The exception thrown is wrapped in the ServiceException. Only
- the message is kept and thrown to the client. The error can be printed
- to the error log to have a full trace on the server side.
-
-
-
-
- Calling the Remote Service from the Client Side
-
-
- The gwt.xml File
-
- The service must be added to an xml file in order to declare it.
- In this howto, the file is named
- Sudoku.gwt.xml.
-
- The servet element is added to this file along with the class
- implementing the service and the endpoint of the service (/facade is
- the following example).
-
-
- <module>
- <!-- Inherit the core Web Toolkit stuff. -->
- <inherits name='com.google.gwt.user.User'/>
-
- <!-- Specify the app entry point class. -->
- <entry-point class='org.objectweb.easybeans.demo.sudoku.web.client.Sudoku'/>
-
- <servlet path='/facade' class='org.objectweb.easybeans.demo.sudoku.web.server.service.ServletFacadeServiceImpl'/>
-
-</module>
-
-
-
-
-
- Callingathe Service from the Client Side
-
-
- Getting the Service on the Client Side
-
- An endpoint must be created. The path of the endpoint will use
- the name of the module and then /facade (the same entry as in the
- gwt.xml file).
-
- The endpoint will be something similar to
- "http://localhost:8080/org.objectweb.easybeans.demo/facade".
-
- By using GWT.getModuleBaseURL(), the port and the host need
- not be known.
-
- ServletFacadeServiceAsync servletFacadeServiceAsync = (ServletFacadeServiceAsync) GWT
- .create(ServletFacadeService.class);
-ServiceDefTarget endpoint = (ServiceDefTarget) servletFacadeServiceAsync;
-endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "/facade");
-
-
-
- Creating the Callback
-
- Before invoking the service, a callback must be built. The
- asynchronous interface of the service is used. As this interface
- requires a callback, it must be constructed beforehand.
-
- A callback provides two methods:
-
-
-
-
- An onSuccess(final Object
- result) method if the call completes
- successfully.
-
-
-
- An onFailure(final Throwable
- caught) method if the call fails.
-
-
-
-
- For the onSuccess method, the result parameter can be cast to
- GridData, which is the return type of the original method's
- interface.
-
- final AsyncCallback solvedCallback = new AsyncCallback() {
- /**
- * Called when an asynchronous call completes successfully. It is
- * always safe to downcast the parameter (of type
- * <code>Object</code>) to the return type of the original method
- * for which this is a callback.
- */
- public void onSuccess(final Object result) {
- GridData solvedGridData = (GridData) result;
- ...
- }
-
- /**
- * Called when an asynchronous call fails to complete normally.
- * @param caught the failure.
- */
- public void onFailure(final Throwable caught) {
- ...
- }
-};
-
-
-
- Invoking the Service
-
- The service can be invoked by providing the arguments of the
- original method, one of which is the callback on the asynchronous
- interface.
-
- serviceAsycn.solve(gridData, solvedCallback);
-
-
-
-
-
-
- Packaging of the Application for Running on a Web Container
-
-
- Creating the web.xml File
-
- A web.xml file must be created to define a
- servlet for the remote service that was defined and the mapping must be
- done. The mapping must be the same as that used in the client when it
- was searching for the endpoint to use.
-
- The following is an example of the xml file:
-
- <?xml version="1.0" encoding="ISO-8859-1">
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
-
- <servlet>
- <servlet-name>ServletFacadeService</servlet-name>
- <servlet-class>org.objectweb.easybeans.demo.sudoku.web.server.service.ServletFacadeServiceImpl</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>ServletFacadeService</servlet-name>
- <url-pattern>/facade</url-pattern>
- </servlet-mapping>
-
-</web-app>
-
-
-
-
- Generating the AJAX Client that Will Be Embedded in the War
- File
-
- GWT provides some shell scripts to generate the client side.
- However, it is recommended that an ant task be used.
-
- First, define a classpath. This classpath should include GWT
- libraries and the path to the source code of the Entry point:
-
- <path id="gwt.classpath">
- <pathelement location="${project.dir}/src" />
- <pathelement location="${gwt.sdk.location}/gwt-user.jar" />
- <pathelement location="${gwt.sdk.location}/gwt-dev-windows.jar" />
- </path>
-
- Then, compile the code:
-
- <target name="compile" description="Compile demo" depends="init">
- <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on">
- <classpath refid="base.classpath" />
- </javac>
- </target>
-
- Finally, generate the GWT:
-
- <target name="generate-gwt" depends="compile">
- <java classname="com.google.gwt.dev.GWTCompiler" fork="true">
- <arg value="-out" />
- <arg value="${dist.www.dir}" />
- <arg value="org.objectweb.easybeans.demo.sudoku.web.Sudoku" />
- <classpath refid="base.classpath" />
- </java>
- </target>
-
-
-
- Packaging of the .war File
-
- The AJAX client will be bundled in a war file and will contain the
- GWT runtime library.
-
- The war task of ant can be used to create the package.
-
- The output generated by the GWT compiler is added at the root of
- the WAR file; the libraries go in the WEB-INF/lib folder, and all classes go in
- the WEB-INF/classes
- folder.
-
- <target name="build.war"
- description="Build war file"
- depends="compile, generate-gwt">
- <war jarfile="${dist.webapps.dir}/sudoku.war"
- webxml="${resources.dir}/web.xml">
- <fileset dir="${dist.www.dir}/org.objectweb.easybeans.demo.sudoku.web.Sudoku" />
- <lib dir="${lib.dir}">
- <include name="gwt-servlet.jar" />
- <include name="ow_easybeans_component_smartclient.jar" />
- </lib>
- <classes dir="${classes.dir}">
- <include name="**/**" />
- </classes>
- </war>
- </target>
-
-
- The gwt-servlet.jar is used and not the gwt-user.jar file. This
- is because gwt-user.jar provided by Google contains javax.servlet.*
- classes, and thus it cannot be deployed on a Tomcat container.
-
-
-
-
-
- Deploying Applications for GWT/EasyBeans
-
- The war file generated by Ant should be copied to the CATALINA_HOME/webapps folder, and the EJB3
- implementation should be copied to the CATALINA_HOME/ejb3s folder.
-
- Documentation about how to start Tomcat/EasyBeans is located in the
- documentation
- section of the EasyBeans web site.
-
-
-
- Launching the Google Web Toolkit Tools
-
- The GWT toolkit creates a .launch script that allows launching of an
- embedded browser and an embedded web container for debugging applications
- within Eclipse. This script must be modified for EasyBeans access.
-
- The following lines have been added:
-
- <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="SudokuWeb" path="1" type="4"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry internalArchive="/easybeans-sudoku/src/java" path="3" type="2"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry internalArchive="/easybeans-sudoku/output-eclipse" path="3" type="2"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry externalArchive="/easybeans-sudoku/lib/gwt-user.jar" path="3" type="2"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry externalArchive="/easybeans-sudoku/lib/gwt-dev-linux.jar" path="3" type="2"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry externalArchive="/easybeans-sudoku/lib/ow_ejb3_core_api.jar" path="3" type="2"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry externalArchive="/easybeans-sudoku/lib/ow_ejb3_persistence_api.jar" path="3" type="2"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry externalArchive="/easybeans-sudoku/lib/ow_easybeans_component_smartclient.jar" path="3" type="2"/> "/>
-</listAttribute>
-
- These libraries are used to access the EasyBeans services. It
- includes the gwt-user.jar, gwt-dev-linux.jar, EJB3 API
- (ow_ejb3_core_api.jar and ow_ejb3_persistence_api.jar) and the Smart
- factory ow_easybeans_component_smartclient.jar.
-
-
-
- Comments
-
- Although this guide may not answer all questions, it should still be
- possible to complete the HowTo. The intent of this HowTo is to illustrate
- how to call remote EJB3s running on EasyBeans using the Google Web
- Toolkit.
-
- The EasyBeans user
- guide provides help for developing EJB3 components.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/howtos.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/howto/howtos.xml
deleted file mode 100644
index 2400bb0f47a1035232a0b38189446d7ad3fbcce5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/howtos.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
- EasyBeans HowTo
-
-
-
-
-
-
-
-
- FlorentBENOIT
-
-
- EasyBeans
-
- OW2 consortium
-
-
-
-
- $Id: howtos.xml 3272 2008-05-21 09:53:35Z benoitf $
-
-
- 2006-2008
-
- OW2 Consortium
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- The HowTos provided in this guide allow the developer to discover
- and do some tasks with EasyBeans and some other components.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/running.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/running.xml
deleted file mode 100644
index bc722efd6edbc9d40a8c961dd39dc27285cf33c2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/running.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
- Running EasyBeans server.
-
-
- Requirements
-
- Review the requirements discussed in Chapter 1, "Building EasyBeans
- from Source."
-
-
-
- Running
-
- The build.xml file located in the project root
- will be used to launch the EasyBeans server. This file is contained in the
- source distribution.
-
- Use the following command: ant run.server
-
- The EasyBeans server will be launched and the following output will
- be printed:
-
- $ ant run.server
-Buildfile: build.xml
-
-init-maven-task:
-
-run.server:
- [java] 9/29/07 3:45:20 PM (I) PolicyProvider.init : Using EasyBeans policy provider 'org.ow2.easybeans.security.jacc.provider.JPolicy'.
- [java] 9/29/07 3:45:20 PM (I) PolicyProvider.init : Using EasyBeans PolicyConfigurationFactory provider and EasyBeans Policy provider
- [java] 9/29/07 3:45:20 PM (W) Embedded.configure : Directory /home/benoitf/workspace/easybeans/easybeans-deploy created.
- [java] 9/29/07 3:45:20 PM (I) Embedded.configure : Using directories '[easybeans-deploy]' as deploy directories
- [java] 9/29/07 3:45:20 PM (I) TraceCarol.infoCarol : Name service for jrmp is started on port 1099
- [java] 9/29/07 3:45:21 PM (I) Current.<init> : JOTM 2.0.10
- [java] 9/29/07 3:45:21 PM (I) JOTMComponent.start : Register javax.transaction.UserTransaction as transaction manager object
- [java] 9/29/07 3:45:21 PM (I) JoramComponent.start : Joram version '5.0.6' started on localhost:16030.
- [java] 9/29/07 3:45:21 PM (I) HSQLDBComponent.start : Starting 'HSQLDB server' '1.8.0' on port '9001'
- [java] 9/29/07 3:45:21 PM (I) HSQLDBComponent.start : HSQLDB server started with URL jdbc:hsqldb:hsql://localhost:9001/jdbc_1
- [java] 9/29/07 3:45:21 PM (I) HSQLDBComponent.start : Starting 'HSQLDB server' '1.8.0' on port '9002'
- [java] 9/29/07 3:45:22 PM (I) HSQLDBComponent.start : HSQLDB server started with URL jdbc:hsqldb:hsql://localhost:9002/jdbc_2
- [java] 9/29/07 3:45:22 PM (I) MailComponent.start : Binding javax.mail.Session Mail factory with JNDI name mailSession_1
- [java] 9/29/07 3:45:22 PM (I) MailComponent.start : Binding javax.mail.internet.MimePartDataSource Mail factory with JNDI name mailMimePartDS_1
- [java] 9/29/07 3:45:22 PM (I) JDBCPoolComponent.start : DS 'jdbc_1', URL 'jdbc:hsqldb:hsql://localhost:9001/jdbc_1', Driver = 'org.hsqldb.jdbcDriver'.
- [java] 9/29/07 3:45:22 PM (I) JDBCPoolComponent.start : DS 'jdbc_2', URL 'jdbc:hsqldb:hsql://localhost:9002/jdbc_2', Driver = 'org.hsqldb.jdbcDriver'.
- [java] 9/29/07 3:45:22 PM (I) SmartClientEndPointComponent.start : SmartClient Endpoint listening on port '2503'.
- [java] 9/29/07 3:45:22 PM (I) QuartzScheduler.<init> : Quartz Scheduler v.1.6.0 created.
- [java] 9/29/07 3:45:22 PM (I) RAMJobStore.initialize : RAMJobStore initialized.
- [java] 9/29/07 3:45:22 PM (I) StdSchedulerFactory.instantiate : Quartz scheduler 'EasyBeans' initialized from an externally provided properties instance.
- [java] 9/29/07 3:45:22 PM (I) StdSchedulerFactory.instantiate : Quartz scheduler version: 1.6.0
- [java] 9/29/07 3:45:22 PM (I) QuartzScheduler.start : Scheduler EasyBeans_$_NON_CLUSTERED started.
- [java] 9/29/07 3:45:22 PM (I) ComponentManager.startComponents : [ Component(s) started : Carol JOTM Joram HSQLDB HSQLDB Mail JDBCPool JDBCPool SmartClientEndPoint Quartz ]
- [java] 9/29/07 3:45:22 PM (I) JMXRemoteHelper.init : Creating JMXRemote connector with URL 'service:jmx:rmi:///jndi//EasyBeansConnector'
- [java] 9/29/07 3:45:22 PM (I) Embedded.start : Startup of EasyBeans '1.0.0-SNAPSHOT' was done in '1,954' ms.
- [java] 9/29/07 3:45:22 PM (I) Embedded.start : Waiting requests...
-
-
- EasyBeans is now launched and it is ready to handle EJBs.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/smart_factory.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/smart_factory.xml
deleted file mode 100644
index a7639ee76616fcb25eb1575929eafd26b379750f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/smart_factory.xml
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
- Smart JNDI Factory
-
-
- Introduction
-
- The smart factory provided by EasyBeans is a factory that allows
- downloading of some classes from the server.
-
- It is useful when developing heavy clients.
-
- In order to run the clients, the developer must provide all the
- classes used to compile the client code and include a small jar file (less
- than 50kB) to add to the CLASSPATH.
-
- Required libraries for running a client are:
-
-
-
- The client's code (used at compile time)
-
-
-
- The Interface of the Beans that are accessed (used at compile
- time)
-
-
-
- The Java EE API used by the client (used at compile time)
-
-
-
- The smart factory provided by the
- ow_easybeans_component_smartclient.jar jar
- file
-
-
-
-
-
- Running the Client
-
- The smart factory is configured through two properties.
-
-
- Initial Context Factory
-
- The first property is the InitialContextFactory name. The smart
- factory is named
- org.ow2.easybeans.component.smartclient.spi.SmartContextFactory.
-
- This property can be set as a System property in one of the
- following ways:
-
- by using
- -Djava.naming.factory.initial=org.ow2.easybeans.component.smartclient.spi.SmartContextFactory
-
-
-
- by using System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
- org.ow2.easybeans.component.smartclient.spi.SmartContextFactory)
-
-
-
- It can also be used as a parameter when creating an
- InitialContext:
-
- Hashtable<String, Object> env = new Hashtable<String, Object>();
- env.put(Context.INITIAL_CONTEXT_FACTORY, org.ow2.easybeans.component.smartclient.spi.SmartContextFactory);
- return new InitialContext(env);
-
-
-
- Provider URL
-
- This property is used to provide the remote address and the remote
- port.
-
- By default, this property is set (if not defined) to
- smart://localhost:2503
-
- The port number must match the port defined in the EasyBeans
- configuration file.
-
- This property can be set using:
-
- Hashtable<String, Object> env = new Hashtable<String, Object>();
- env.put(Context.INITIAL_CONTEXT_FACTORY, org.ow2.easybeans.component.smartclient.spi.SmartContextFactory);
- env.put(Context.PROVIDER_URL, "smart://localhost:2503");
- return new InitialContext(env);
-
-
-
-
- Example
-
- The following is the output on the client side when this factory is
- enabled:
-
- [java] Oct 17, 2006 5:38:13 PM org.ow2.easybeans.component.smartclient.spi.SmartContextFactory getInitialContext
- [java] INFO: Initializing Smart Factory with remote URL 'smart://localhost:2503'.
- [java] Oct 17, 2006 5:38:13 PM org.ow2.easybeans.component.smartclient.spi.SmartContextFactory getInitialContext
- [java] INFO: Got remote PROVIDER_URL 'rmi://localhost:1099'.
-
- ...
- [java] Downloaded 'xxx' classes, 'xxx' resources for a total of 'xxx' bytes and it took 'xxx' ms.
-
-
-
- The following is the output on the server side:
-
- [java] 10/17/06 5:38:13 PM (I) SmartClientEndPointComponent.handleReadProviderURLRequest : Provider URL asked by client : 'rmi://localhost:1099'.
-
-
-
-
- Smart Bootstrap
-
- Sometimes, it's easier to launch the client with a bootstrap class
- instead of setting a factory. Then, the smart component is providing also
- a bootstrap class.
-
-
- Smart Library
-
- The smart bootstrap jar library is provided in the releases of
- EasyBeans. It can also be downloaded from the maven repository: http://repo2.maven.org/maven2/org/ow2/easybeans/easybeans-component-smartclient/
-
- Select the version corresponding to the EasyBeans version.
-
-
-
- Smart Bootstrap class
-
- In order to launch the bootstrap, the
- ow_easybeans_component_smartclient.jar file needs to be
- present and then it is invoked by using:
-
- java -jar
- ow_easybeans_component_smartclient.jar
-
- Usage is printed when no parameteres are specified.
-
- The jars containing the client provided by the developer are given
- using the -cp flag
-
- java -jar
- ow_easybeans_component_smartclient.jar
- -cp myClient.jar:mylib.jar
-
- The name of the client's class is provided on this command
-
- java -jar
- ow_easybeans_component_smartclient.jar
- -cp myClient.jar:mylib.jar org.MyClient
-
- In order to download classes, the bootstrap is connecting to the
- EasyBeans server by using default port/hostname. To specify a different
- host or port number, the following arguments can be used:
-
- -port for the port number or -hostname for specifying the host
- name.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/building.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/building.xml
deleted file mode 100644
index 92a8cab3f900cf2c73244388bafa9e5c114832d8..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/building.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
- Building the suite from source
-
-
- Requirements
-
- First, all the requirements used in Developer's
- Guide building chapter need to be checked.
-
-
-
- Building the suite
-
- The build.xml file which is at the root of the
- tests folder will be used.
-
- In the tests folder of the project (named
- EasyBeans by default), the command ant install needs to
- be launched.
-
-
- The command ant -p could be used to list the
- targets that are available.
-
-
- Once the command has been run successfully,
- output and tests/output folders
- are created and each one contains a subfolder
- classes. The output/classes
- contains the EasyBeans Server classes and the
- tests/output/classes contains the classes used by the
- test suite. Furthermore, the binaries(.jar) used with EasyBeans Server are
- installed in the ejb3s folder.
-
- ant clean.classes is used to clean the generated
- classes.
-
-
-
- Test suite main ant targets
-
-
- JavaDoc
-
- Javadoc of Test Suite can be generated by using ant
- javadoc
-
- The resulting documentation will be available in the
- tests/output/javadoc folder.
-
-
-
- Compile
-
- In the tests folder of the project (named
- EasyBeans by default), the command ant compile needs
- to be launched.
-
- Once the command has been run successfully,
- output and tests/output
- folders are created and each one contains a subfolder
- classes. The output/classes
- contains the EasyBeans Server classes and the
- tests/output/classes contains the classes used by
- the test suite.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/contribute.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/contribute.xml
deleted file mode 100644
index 193f6a45eda7e7d0230ef92dcaeea4614a3549a6..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/contribute.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
- How to contribute?
-
- Anyone can contribute to the tests according with the follow
- guideline. Contributions are welcome.
-
-
- JavaDoc comment convention
-
- The test classes respect a comment convention that has some custom
- tags. The custom tags are:
-
-
-
- @reference - used in class comment. It is
- used to specify the document that the tests cover.
-
-
-
- @requirement - used in class comment. It is
- used to specify the classes and files needed to run the tests.
-
-
-
- @setup - used in class comment. It is used to
- specify the items that must be set up before the test
- execution.
-
-
-
- @input - used in method comment. It is used
- to specify the test inputs.
-
-
-
- @output - used in method comment. It is used
- to specify the test expected outputs.
-
-
-
-
-
- Code convention
-
- The Test Suite and the EasyBeans has the same code convention. You
- can see the convention details in EasyBeans
- code convention.
-
-
-
- Methodology for writing tests
-
-
-
- It is highly recommended the use of inheritance and generics
- types to avoid code duplication.
-
- The tests must be independents, so after a test execution
- everything must be clear. It makes possible to run the same test many
- times without problems.
-
-
-
- In the test methods, the try/catch is used
- only when the exception is expected.
-
-
-
-
-
- Adding a test suite
-
- The first thing needed is defining where the test classes should be
- in. After that, the TestNG XML file must be created to run the tests. Each
- package has a XML file to run all package tests. In addition, an entry for
- each test package is needed in the file
- src/main/java/testng_conformance.xml.
-
- In the tests/examples folder of the project
- (named EasyBeans by default), there is a TestNG XML file example called
- testng_xml:
-
- <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd">
-<suite name="Test Suite Example" verbose="1">
- <test name="Test Example">
- <packages>
- <package name="org.ow2.easybeans.tests.examples"/>
- </packages>
- </test>
-</suite>
-
-
-
- Submmiting a contribution
-
- The submmition has the same rule that the EasyBeans contributions.
- You can see details in EasyBeans
- contribution.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/howto_00.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/howto_00.xml
deleted file mode 100644
index c7b3c509955323e9f8bbe3f54641bdf0662415fa..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/howto_00.xml
+++ /dev/null
@@ -1,230 +0,0 @@
-
-
- How to write a test
-
- The example shows the basis of a test with all steps used to build a
- EasyBeans test.
-
-
- Requirements
-
- This example only requires Java 5 knowledges.
-
-
-
- Writing the test class code
-
- This example tests if a business method can be invoked from a bean,
- and if the bean can return an Integer value without modifications.
-
- The source code(TestExample.java) can be found
- in the tests/examples folder of the project (named
- EasyBeans by default):
-
- package org.objectweb.easybeans.tests.examples;
-
-import static org.objectweb.easybeans.tests.common.helper.EJBHelper.getBeanRemoteInstance;
-import static org.testng.Assert.assertEquals;
-
-import org.objectweb.easybeans.tests.common.ejbs.base.ItfExample;
-import org.objectweb.easybeans.tests.common.ejbs.stateless.containermanaged.SLSBExample;
-import org.testng.annotations.Configuration;
-import org.testng.annotations.Test;
-
-/**
- * This is an example of a EasyBeans Test Suite Class.
- * @reference It is used to specify the document that the tests cover. Example:
- * JSR220-PROPOSED FINAL
- * @requirement It is used to specify the classes and files needed to run the
- * tests. Exampe: EasyBeans must be running and the bean
- * org.objectweb.easybeans.tests.common.ejbs.stateless.containermanaged.SFSBExample
- * must be deployed.
- * @setup It is used to specify the classes and files needed to run the test.
- * @author Eduardo Studzinski Estima de Castro
- * @author Gisele Pinheiro Souza
- */
-public class TestExample {
-
- /**
- * Constant.
- */
- private static final Integer INPUT = new Integer(1);
-
- /**
- * Bean used in tests.
- */
- private ItfExample<Integer> bean;
-
- /**
- * Gets a new bean instance used during the tests.
- * @throws Exception if an error occurs during the setup.
- */
- @Configuration(beforeTestMethod = true)
- public void setup() throws Exception {
- // Gets a bean instance.
- bean = getBeanRemoteInstance(SLSBExample.class, ItfExample.class);
- }
-
- /**
- * Indicates the test description. Example: Tests if the bean can return a
- * value without modifications.
- * @input It is used to specify the classes and files needed to run the
- * test. Example: Integer value.
- * @output It is used to specify the classes and files needed to run the
- * test. Example: The same input integer.
- * @throws Exception if an error occurs during the test.
- */
- @Test
- public void test00() throws Exception {
- // Output value, it must be the same as the input.
- Integer output = bean.getValue(INPUT);
-
- // Test if input and output are equal.
- assertEquals(INPUT, output, "The input and output values should be equal.");
- }
-}
-
-
-
- TestNG Annotations
-
- There are two mainly annotations in TestNG:
- @Configuration and @Test.
-
-
- @Configuration
-
- This annotation is used to make any method a setup or a teardown
- method. In addition, the @Configuration makes unnecessary to follow any
- naming convention in method names. The mainly properties that could be
- used are:
-
-
-
- afterTest - if true, the method will be run after
- each test.
-
-
-
- afterTestClass- if true, the method will be run
- after all the tests in the test class.
-
-
-
- beforeTestClass- if true, the method will be run
- after the test class instantiation and before tests methods.
-
-
-
- beforeTestMethod- if true, the method will be run
- before any test method.
-
-
-
- In the example, the method setup() will request a new
- bean instance before any test method.
-
- /**
- * Gets a new bean instance used during the tests.
- * @throws Exception if an error occurs during the setup.
- */
- @Configuration(beforeTestMethod = true)
- public void setup() throws Exception {
- // Gets a bean instance.
- bean = getBeanRemoteInstance(SLSBExample.class, ItfExample.class);
- }
-
-
-
- @Test
-
- This annotation is used to define a method that will be run as a
- test and it is not necessary follow any naming convention. In the
- example, the method test00() has the annotation and it will
- be a test case:
-
- @Test
- public void test00() throws Exception {
- ...
- }
-
- If it is necessary to disable this test, the enabled
- property could be used: @Test(enabled = false)
- public void test00() throws Exception {
- ...
- }
-
-
-
-
- Helper Classes
-
- To make easier the test development, some helper classes are
- available in the package
- org.objectweb.easybeans.tests.common.helper
-
- In the example, the EJBHelper class is used to get a bean
- instance:
-
- bean = getBeanRemoteInstance(SLSBExample.class, ItfExample.class);
-
- The method getBeanRemoteInstance() is used to a remote
- access of a bean and the method getBeanLocalInstance() is
- used to a local access of a bean. They need two parameters:
-
- The bean class;
-
-
-
- The bean interface;
-
-
-
-
-
- Writing the XML configuration file:
-
- Once the test class is defined, it is necessary to write the XML
- configuration file for TestNG. The following example indicates that the
- tests inside the package
- org.objectweb.easybeans.tests.examples must be
- run:
-
- <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd">
-<suite name="Test Suite Example" verbose="1">
- <test name="Test Example">
- <packages>
- <package name="org.objectweb.easybeans.tests.examples"/>
- </packages>
- </test>
-</suite>
-
- The TestNG XML configuration file also supports the
- classes/class tags that define which classes must be run.
- This following example indicates that only the tests in the TestExample
- class must be run:
-
- <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd">
-<suite name="Test Suite Example" verbose="1">
- <test name="Test Example">
- <classes>
- <class name="org.objectweb.easybeans.tests.examples.TestExample"/>
- </classes>
- </test>
-</suite>
-
-
-
- Additional Information
-
- Additional information about TestNG could be found in www.testng.org.
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/introduction.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/introduction.xml
deleted file mode 100644
index 8f61292ec378c670a34ff8e7ba3cc7b9f190d4be..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/introduction.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
- Goal
-
- The test suite objective is to verify that the EasyBeans conforms with
- the EJB3 specification. The suite is under construction and everyone that
- wants to contribute is welcome. Anyone can write or add tests cases
- according to the guidelines below.
-
- This test suite is designed for EasyBeans; however, with a few
- adaptations, it could work with others application servers.
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/packages.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/packages.xml
deleted file mode 100644
index efcd82bd21ccba5bf0c882bcce8bbd4fa04ee2f2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/packages.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
- Description of the source tree
-
- The test suite contains:
-
-
-
- build.xml - ant file to build, install and
- run the tests.
-
-
-
- tests-common.xml - ant file with the common
- definitions for all ant files.
-
-
-
- tests-functions.xml - ant file with common
- functions for all ant files.
-
-
-
- src directory - contains the source
- files.
-
-
-
- lib directory - contains the libraries used
- in the tests.
-
-
-
- conf directory - contains the files used to
- configure the tests.
-
-
-
- examples directory - contains the examples
- files.
-
-
-
- The source directory contains all test cases as well as the auxiliary
- classes used to make the tests. These sources are divided in packages by
- functionality. The src/java folder has the package
- org.objectweb.easybeans.tests which contains the follows
- packages:
-
-
-
- annotations - tests cases for verifying the
- annotations.
-
-
-
- common - contains all support classes to do the
- tests.
-
-
-
- asserts - contains alternative assert
- classes that are used during the tests.
-
-
-
- core - contains the classes that extends
- the server features.
-
-
-
- db - contains the classes that manipulates
- the database.
-
-
-
- ejbs - contains the beans that are used in
- the tests.
-
-
-
- enhancer - contains the classes that are
- used to test the enhancer.
-
-
-
- exception - contains exceptions used during
- the test.
-
-
-
- helper - contains the helper
- classes.
-
-
-
- inheritance - contains the classes that are
- used in the inheritance tests.
-
-
-
- interceptors - contains the classes that
- are used in the interceptor tests.
-
-
-
- interfaces - contains the common interfaces
- that are used by different classes ( beans, test class and
- others).
-
-
-
- resources - contains the classes that are
- used in the resource tests.
-
-
-
-
-
- deploymentdesc - tests cases for verifying the
- deployment descriptor.
-
-
-
- enhancer - tests cases for verifying the
- enhancer.
-
-
-
- inheritance - tests cases for verifying the inheritance.
-
-
-
- interceptors - tests cases for verifying the
- interceptors.
-
-
-
- transaction - tests cases for verifying the
- transaction.
-
-
-
- taglets - contains javadoc tags used to format
- correctly the documentation.
-
-
-
- The file src/java/testng_conformance.xml makes
- possible to run all tests in the same time. However, it is possible to
- execute a group of tests individually by using the XML file available in
- each test case package.
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/results.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/results.xml
deleted file mode 100644
index 4255dbb422fd80140024db3a41829355d4e25f97..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/results.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- Current conformance test results
-
- The EasyBeans tests results will be available as soon as
- possible.
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/running.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/running.xml
deleted file mode 100644
index db6f944f534595660c83291596ac21db3deba710..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/running.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- Running the suite
-
-
- Requirements
-
- First, all the requirements used in building chapter need to be
- checked.
-
-
-
- Using Ant
-
- In the tests folder of the project (named
- EasyBeans by default), the following three commands need to be
- used:
-
-
-
- ant install
-
- It will install the binaries required by the test suite in the
- folder ejb3s.
-
-
-
- ant run.server or
- run.server.debug (Server debug mode)
-
- Then, EasyBeans server will be launched. When the following
- message is received, next step needs to be done:
-
- [java] INFO: Waiting requests...
-
-
-
- ant tests.conformance
-
- All tests will be run and a report will be produced. The report
- will be available in
- tests/output/reports/conformance folder.
- After using ant tests.conformance, the
- JUnit Report format could be generated using the command
- ant report.junit.format. The output file
- junit-noframes.html will be available in
- tests/output/reports/conformance
- folder.
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/testguide.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/tests/testguide.xml
deleted file mode 100644
index 981cf92e225f45a26a03d17f94b0906554f39b7d..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/testguide.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
- EasyBeans Test Suite's Guide
-
-
-
-
-
-
-
-
-
- EduardoSTUDZINSKI ESTIMA DE CASTRO
-
- EasyBeans
- OW2 consortium
-
-
-
-
- GiselePINHEIRO SOUZA
-
- EasyBeans
- OW2 consortium
-
-
-
-
- $Id: testguide.xml 3272 2008-05-21 09:53:35Z benoitf $
-
-
- 2006-2008
-
- OW2 Consortium
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- The EasyBeans Test Suite guide is intended for developers wanting
- to develop tests to EJB3 Containers.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/userguide.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/userguide.xml
deleted file mode 100644
index bfab8aa0950b63655f4aae68e91bf9fbb1295060..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/userguide.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
- EasyBeans User's guide
-
-
-
-
-
-
-
-
-
- FlorentBENOIT
-
-
- EasyBeans
-
- OW2 consortium
-
-
-
-
- $Id: userguide.xml 4784 2009-03-11 10:34:46Z benoitf $
-
-
- 2006-2008
-
- OW2 Consortium
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- The EasyBeans user guide is intended for developers wanting to
- develop EJB3 applications.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/usingexamples.xml b/jonas_doc/core/src/docbook/doc-en/easybeans/usingexamples.xml
deleted file mode 100644
index 7f206dce95d2a0bc060a38d15b5be3931b690c40..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/easybeans/usingexamples.xml
+++ /dev/null
@@ -1,1102 +0,0 @@
-
-
- Using the Examples
-
-
- Compiling the Examples
-
-
- Requirements
-
- Before running the examples, be sure to follow the requirements
- for compiling and running these EasyBeans examples.
-
-
-
- Compile
-
- The ant tool is used to build the
- examples. To compile the examples, use the
- build.xml file that is located in the examples directory.
-
- The command ant install_all_examples must be
- launched in the examples
- directory:$ ant install_all_examples
-Buildfile: build.xml
-
-install_all_examples:
-
-init-maven-task:
-
-init:
- [mkdir] Created dir: /home/benoitf/workspace/easybeans/output/example-classes
- [mkdir] Created dir: /home/benoitf/workspace/easybeans/clients
- [mkdir] Created dir: /home/benoitf/workspace/easybeans/webapps
-
-compile:
- [javac] Compiling 4 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-[easybeans:ejb] Building Ejb in '/home/benoitf/workspace/easybeans/easybeans-deploy/entitybean.jar'.
-[easybeans:ejb] Building jar: /home/benoitf/workspace/easybeans/easybeans-deploy/entitybean.jar
-
-war:
-
-ear:
-
-client:
-
-client-standalone:
-[easybeans:client] Building Client in '/home/benoitf/workspace/easybeans/clients/client-entitybean.jar'.
-[easybeans:client] Building jar: /home/benoitf/workspace/easybeans/clients/client-entitybean.jar
-
-install:
-
-init-maven-task:
-
-init:
-
-compile:
- [javac] Compiling 3 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-[easybeans:ejb] Building Ejb in '/home/benoitf/workspace/easybeans/easybeans-deploy/mdb.jar'.
-[easybeans:ejb] Building jar: /home/benoitf/workspace/easybeans/easybeans-deploy/mdb.jar
-
-war:
-
-ear:
-
-client:
-
-client-standalone:
-[easybeans:client] Building Client in '/home/benoitf/workspace/easybeans/clients/client-mdb.jar'.
-[easybeans:client] Building jar: /home/benoitf/workspace/easybeans/clients/client-mdb.jar
-
-install:
-
-init-maven-task:
-
-init:
-
-compile:
- [javac] Compiling 7 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-[easybeans:ejb] Building Ejb in '/home/benoitf/workspace/easybeans/easybeans-deploy/migration21.jar'.
-[easybeans:ejb] Building jar: /home/benoitf/workspace/easybeans/easybeans-deploy/migration21.jar
-
-war:
-
-ear:
-
-client:
-
-client-standalone:
-[easybeans:client] Building Client in '/home/benoitf/workspace/easybeans/clients/client-migration21.jar'.
-[easybeans:client] Building jar: /home/benoitf/workspace/easybeans/clients/client-migration21.jar
-
-install:
-
-init-maven-task:
-
-init:
-
-compile:
- [javac] Compiling 5 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-[easybeans:ejb] Building Ejb in '/home/benoitf/workspace/easybeans/easybeans-deploy/security.jar'.
-[easybeans:ejb] Building jar: /home/benoitf/workspace/easybeans/easybeans-deploy/security.jar
-
-war:
-
-ear:
-
-client:
-
-client-standalone:
-[easybeans:client] Building Client in '/home/benoitf/workspace/easybeans/clients/client-security.jar'.
-[easybeans:client] Building jar: /home/benoitf/workspace/easybeans/clients/client-security.jar
-
-install:
-
-init-maven-task:
-
-init:
-
-compile:
- [javac] Compiling 7 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-[easybeans:ejb] Building Ejb in '/home/benoitf/workspace/easybeans/easybeans-deploy/stateless.jar'.
-[easybeans:ejb] Copying 5 files to /home/benoitf/workspace/easybeans/easybeans-deploy/stateless.jar
-
-war:
-
-war-standalone:
-[easybeans:war] Building War in '/home/benoitf/workspace/easybeans/webapps/web.war'.
-[easybeans:war] Copying 6 files to /home/benoitf/workspace/easybeans/webapps/web.war/WEB-INF/classes
-[easybeans:war] Copying 1 file to /home/benoitf/workspace/easybeans/webapps/web.war/WEB-INF
-
-ear:
-
-client:
-
-client-standalone:
-[easybeans:client] Building Client in '/home/benoitf/workspace/easybeans/clients/client-stateless.jar'.
-[easybeans:client] Building jar: /home/benoitf/workspace/easybeans/clients/client-stateless.jar
-
-install:
-
-init-maven-task:
-
-init:
-
-compile:
- [javac] Compiling 3 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-[easybeans:ejb] Building Ejb in '/home/benoitf/workspace/easybeans/easybeans-deploy/stateful.jar'.
-[easybeans:ejb] Building jar: /home/benoitf/workspace/easybeans/easybeans-deploy/stateful.jar
-
-war:
-
-ear:
-
-client:
-
-client-standalone:
-[easybeans:client] Building Client in '/home/benoitf/workspace/easybeans/clients/client-stateful.jar'.
-[easybeans:client] Building jar: /home/benoitf/workspace/easybeans/clients/client-stateful.jar
-
-install:
-
-init-maven-task:
-
-init:
-
-compile:
- [javac] Compiling 6 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-[easybeans:ejb] Building Ejb in '/home/benoitf/workspace/easybeans/easybeans-deploy/timer.jar'.
-[easybeans:ejb] Building jar: /home/benoitf/workspace/easybeans/easybeans-deploy/timer.jar
-
-war:
-
-ear:
-
-client:
-
-client-standalone:
-[easybeans:client] Building Client in '/home/benoitf/workspace/easybeans/clients/client-timer.jar'.
-[easybeans:client] Building jar: /home/benoitf/workspace/easybeans/clients/client-timer.jar
-
-install:
-
-init-maven-task:
-
-init:
-
-compile:
- [javac] Compiling 5 source files to /home/benoitf/workspace/easybeans/output/example-classes
-
-ejb:
-
-ejb-standalone:
-
-war:
-
-war-standalone:
-
-ear:
-[easybeans:ear] Building Ear in '/home/benoitf/workspace/easybeans/easybeans-deploy/ear3.ear'.
- [ejb] Building Ejb in '/tmp/easybeans-ant33717.tmp'.
- [ejb] Building jar: /tmp/easybeans-ant33717.tmp
- [war] Building War in '/tmp/easybeans-ant33718.tmp'.
- [war] Building war: /tmp/easybeans-ant33718.tmp
-[easybeans:ear] Building jar: /home/benoitf/workspace/easybeans/easybeans-deploy/ear3.ear
-
-client:
-
-install:
-
-BUILD SUCCESSFUL
-Total time: 22 seconds
-The examples are copied under the easybeans-deploy/ folder of the project and
- are available for the deployment.
-
-
- If the EasyBeans server is running, it will detect these new
- applications and deploy them automatically.
-
-
-
-
-
- Running Examples
-
- Each example has its own build.xml file; this
- allows each example to be run independently.
-
-
- Stateless Session Bean
-
- The build.xml file for this example is
- located in the examples/statelessbean folder.
-
-
- Description
-
- This example is a stateless session bean. It contains a
- helloWorld() method that displays text on the
- server side. Additionally, it demonstrates the use of EJB3 annotation,
- such as @Stateless.
-
- The trace() method is annotated with
- @AroundInvoke EJB3 annotation. This method will be
- called at each call on a business method. The business methods are
- defined in the interface implemented by the SessionBean class.
-
- The signature of the method annotated by
- @AroundInvoke when it is defined in the bean class,
- must follow this signature:
-
-
- (private|protected|public)
-
- Object
-
- methodName
-
-
- InvocationContext
-
- invocationContext
-
-
- Exception
-
-
-
- As a new feature of EJB3, the bean's interface does not need
- to extend the Remote interface.
-
-
-
-
- Running the Server
-
- If the server is not available, it must be run by following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The stateless session bean must be deployed. If the bean has
- been installed in the easybeans-deploy folder, this is done
- automatically.
-
- On the server side, the following output should display:
-
- [java] 5/16/07 10:59:32 AM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/stateless.jar]
- [java] 5/16/07 10:59:32 AM (I) JContainer3.start : Container started in : 408 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- Run the client with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed:
-
- [java] Calling helloWorld method...
- [java] Add 1 + 2...
- [java] Sum = '3'.
-
-
- In the client's code, the use of the
- PortableRemoteObject.narrow() call is no longer required.
-
-
-
-
-
- Stateful Session Bean
-
- The build.xml file for this example is
- located in the examples/statefulbean folder.
-
-
- Description
-
- This is an example of a stateful session bean using the
- SessionSynchronization
- interface.
-
- It uses the @Stateful annotation and uses the
- default transaction model, which is REQUIRED.
-
-
-
- Running the Server
-
- If the server is not available, it must be run by following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The stateful session bean must be deployed. It is done
- automatically if the bean has been installed in the easybeans-deploy folder.
-
- On the server side, the following output should be seen:
-
- [java] 5/16/07 10:59:37 AM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/stateful.jar]
- [java] 5/16/07 10:59:37 AM (I) JContainer3.start : Container started in : 94 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- Run the client with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed:
-
- [java] Start a first transaction
- [java] First request on the new bean
- [java] Second request on the bean
- [java] Commit the transaction
- [java] Start a second transaction
- [java] Buy 50 amount.
- [java] Rollback the transaction
- [java] after rollback, value = 30
- [java] Request outside any transaction
- [java] Check that value = 30
- [java] ClientStateful OK. Exiting.
-
-
-
-
- Entity Bean
-
- The build.xml file for this example is
- located in the examples/entitybean folder.
-
-
- Description
-
- This is an example of an entity bean. It describes how to use
- the new Java Persistence Model of an EJB3 persistence provider. To
- access EJB3 entities that are POJO, a stateless session bean is used.
- It is a facade bean.
-
- The Entity class is a POJO class annotated with
- @Entity. The entities class is managed by the
- persistence provider.
-
- Currently, the persistence provider is supplied by the Hibernate
- product, but the ObjectWeb Speedo product should be available soon.
- Users will have the choice between providers.
-
- This example uses the @Stateful annotation
- and uses the default transaction model, which is REQUIRED.
-
- The example shows an entity bean using EJB3 Hibernate-prototype
- persistence provider.
-
-
-
- Running the Server
-
- If the server is not available, it must be run following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The entity bean must be deployed. It is done automatically if
- the bean has been installed in the easybeans-deploy folder.
-
- On the server side, the following output should be seen:
-
- [java] 5/16/07 10:59:36 AM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/entitybean.jar]
- [java] 5/16/07 10:59:36 AM (I) JPersistenceUnitInfoHelper.getPersistenceUnitInfo : No persistence provider was set, set to value org.hibernate.ejb.HibernatePersistence.
- [java] 5/16/07 10:59:36 AM (I) JPersistenceUnitInfoHelper.getPersistenceUnitInfo : Found a default configuration for the persistence provider org.hibernate.ejb.HibernatePersistence
- [java] 5/16/07 10:59:36 AM (I) JPersistenceUnitInfoHelper.getPersistenceUnitInfo : Setting the property hibernate.transaction.manager_lookup_class with value org.hibernate.transaction.JOTMTransactionManagerLookup
- [java] 5/16/07 10:59:36 AM (I) JPersistenceUnitInfoHelper.getPersistenceUnitInfo : Setting the property hibernate.cache.provider_class with value org.hibernate.cache.HashtableCacheProvider
- [java] 5/16/07 10:59:36 AM (I) Ejb3Configuration.configure : Processing PersistenceUnitInfo [
- [java] name: entity
- [java] ...]
- [java] 5/16/07 10:59:36 AM (I) Ejb3Configuration.scanForClasses : found EJB3 Entity bean: org.objectweb.easybeans.examples.entitybean.Employee
- [java] 5/16/07 10:59:36 AM (I) Ejb3Configuration.scanForClasses : found EJB3 Entity bean: org.objectweb.easybeans.examples.entitybean.Employee
- ...
- [java] 5/16/07 10:59:36 AM (I) JContainer3.start : Container started in : 412 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- The client is run with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed:
-
- [java] Employee with id 1 = Florent
- [java] Employee with id 2 = Whale
-
-
-
- Properties for the persistence
-
- These properties are defined in the
- META-INF/persistence.xml file.
-
-
- JDBC Dialect
-
- By default, the dialect used to communicate with the database
- is set to HSQL, as it is embedded in EasyBeans.
-
- This dialect configuration is done with the following
- properties:
-
- <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
- <property name="toplink.target-database" value="HSQL"/>
- <property name="openjpa.jdbc.DBDictionary" value="hsql"/>
-
-
- These properties are for Hibernate, Apache OpenJPA and Oracle
- TopLink Essentials.
-
-
-
- Database (tables)
-
- By default, the tables are created and the database is empty
- after loading the entity beans.
-
- This configuration is done with the following
- properties:
-
- <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
- <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
- <property name="toplink.ddl-generation.output-mode" value="database"/>
- <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
-
- In order to keep data in the database, this property should be
- changed.
-
-
-
-
-
- Message Driven Bean
-
- The build.xml file for this example is
- located in the examples/messagedrivenbean folder.
-
-
- Description
-
- This is an example of a message driven bean. It describes how to
- use a JMS message driven bean.
-
- The class is a class annotated with
- @MessageDriven. Then, it is mapped to a JMS queue
- through the properties of this annotation.
-
- @MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "SampleQueue"),
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
- }
-)
-
- The Message Driven Bean will receive message from the
- SampleQueue queue.
-
-
-
- Running the Server
-
- If the server is not available, it must be run following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The entity bean must be deployed. It is done automatically if
- the bean has been installed in the easybeans-deploy folder.
-
- On the server side, the following output should be seen:
-
- 5/16/07 2:42:24 PM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/mdb.jar]
-5/16/07 2:42:24 PM (I) JContainer3.start : Container started in : 267 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- The client is run with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed:
-
- run.client:
- [java] May 16, 2007 3:39:08 PM org.objectweb.carol.util.configuration.ConfigurationRepository init
- [java] INFO: No protocols were defined for property 'carol.protocols', trying with default protocol = 'jrmp'.
- [java] May 16, 2007 3:39:08 PM org.objectweb.util.monolog.wrapper.javaLog.Logger log
- [java] INFO: Debug.initialize() - a3debug.cfg
- [java] May 16, 2007 3:39:09 PM org.objectweb.util.monolog.wrapper.javaLog.Logger log
- [java] INFO: ReliableTcpConnection.windowSize=100
- [java] Message [ID:0.0.1026c2m1, text:Message_0] sent
- [java] Message [ID:0.0.1026c2m2, text:Message_1] sent
- [java] Message [ID:0.0.1026c2m3, text:Message_2] sent
- [java] Message [ID:0.0.1026c2m4, text:Message_3] sent
- [java] Message [ID:0.0.1026c2m5, text:Message_4] sent
-
-
- And on the server side, the messages have been received:
-
- Receiving a message named '((org.objectweb.joram.client.jms.TextMessage@4391f0,messageID=ID:0.0.1026c2m1,destination=queue#0.0.1027,correlationId=null,deliveryMode=2,expiration=0,priority=4,redelivered=false,replyTo=null,timestamp=1179322749177,type=null),text=Message_0,RObody=true)'. with the content 'Message_0
-Receiving a message named '((org.objectweb.joram.client.jms.TextMessage@13e9934,messageID=ID:0.0.1026c2m4,destination=queue#0.0.1027,correlationId=null,deliveryMode=2,expiration=0,priority=4,redelivered=false,replyTo=null,timestamp=1179322749216,type=null),text=Message_3,RObody=true)'. with the content 'Message_3
-Receiving a message named '((org.objectweb.joram.client.jms.TextMessage@1e064c,messageID=ID:0.0.1026c2m5,destination=queue#0.0.1027,correlationId=null,deliveryMode=2,expiration=0,priority=4,redelivered=false,replyTo=null,timestamp=1179322749261,type=null),text=Message_4,RObody=true)'. with the content 'Message_4
-Receiving a message named '((org.objectweb.joram.client.jms.TextMessage@95ef17,messageID=ID:0.0.1026c2m2,destination=queue#0.0.1027,correlationId=null,deliveryMode=2,expiration=0,priority=4,redelivered=false,replyTo=null,timestamp=1179322749209,type=null),text=Message_1,RObody=true)'. with the content 'Message_1
-Receiving a message named '((org.objectweb.joram.client.jms.TextMessage@17c4779,messageID=ID:0.0.1026c2m3,destination=queue#0.0.1027,correlationId=null,deliveryMode=2,expiration=0,priority=4,redelivered=false,replyTo=null,timestamp=1179322749212,type=null),text=Message_2,RObody=true)'. with the content 'Message_2
-
-
-
-
-
- Timer example
-
- The build.xml file for this example is
- located in the examples/timerservice folder.
-
-
- Description
-
- This example shows the use of the @Timeout annotation on a
- method. The client invokes the TimerBean that will launch a timer.
- This timer will send a message to an MDB and then calls another bean
- which implements javax.ejb.TimedObject
- interface.
-
-
-
- Running the server
-
- If the server is not available, it must be run following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The timer bean example must be deployed. It is done
- automatically if the bean has been installed in the easybeans-deploy folder.
-
- On the server side, the following output should display:
-
- [java] 9/29/07 3:52:50 PM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/timer.jar]
- [java] 9/29/07 3:52:50 PM (I) JContainer3.start : Container started in : 104 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- The client is run with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed on the client side:
-
- run.client:
- [java] Sep 29, 2007 4:16:45 PM org.objectweb.carol.util.configuration.ConfigurationRepository init
- [java] INFO: No protocols were defined for property 'carol.protocols', trying with default protocol = 'jrmp'.
- [java] Calling init method that will fire a new timer...
-
-
- The following output is displayed on the server side:
-
- [java] SLSB -> Timer method called by the Timer Service.
- [java] SLSB -> Timer received = 'org.ow2.easybeans.component.quartz.EasyBeansTimer@6e7d3050'.
- [java] SLSB -> Info object inside the timer object is 'Simple Serializable object'.
- [java] SLSB -> Sending a message to a MDB which will start a timer.
- [java] SLSB -> Message sent
- [java] SLSB -> Call a local bean in order to start a new timer.
- [java] MDB -> Timer method called by the Timer Service.
- [java] MDB -> Timer received = 'org.ow2.easybeans.component.quartz.EasyBeansTimer@59d794d'.
- [java] MDB -> Info object inside the timer object is 'Timer started by the onMessage() method'.
- [java] TimedBean -> Got a timer with value 'org.ow2.easybeans.component.quartz.EasyBeansTimer@2dd5b883'.
-
-
-
-
-
- Security example
-
- The build.xml file for this example is
- located in the examples/security
- folder.
-
-
- Description
-
- This example illustrates the use of different Java EE 5
- annotations which are linked to the security part.
-
- The annotations used by the example are:
-
-
-
- @DeclareRoles, which is used to declare
- the roles used by an EJB component
-
-
-
- @RolesAllowed, which lists the authorized
- roles in order to call a method
-
-
-
- @DenyAll, which denies the call to the
- method (for every role)
-
-
-
- @RunAs, which sets a new identity when
- calling other EJBs
-
-
-
-
-
- Running the Server
-
- If the server is not available, it must be run following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The security bean example must be deployed. It is done
- automatically if the bean has been installed in the easybeans-deploy folder.
-
- On the server side, the following output should display:
-
- [java] 5/16/07 10:59:37 AM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/security.jar]
- [java] 5/16/07 10:59:37 AM (I) JContainer3.start : Container started in : 115 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- The client is run with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed on the client side:
-
- run.client:
- [java] Oct 16, 2006 5:27:03 PM org.objectweb.carol.util.configuration.ConfigurationRepository init
- [java] INFO: No protocols were defined for property 'carol.protocols', trying with default protocol = 'jrmp'.
- [java] Calling methods that everybody can call...
- [java] Call a bean with run-as in order to have 'admin' role...
- [java] Access denied as expected (method is denied)
-
- The following output is displayed on the server side:
-
- [java] someRolesAllowed() called
- [java] -> Caller is 'Principal[EasyBeans/Anonymous]'.
- [java] for run-as bean, caller is Caller is 'Principal[EasyBeans/Anonymous]
- [java] onlyAdminAllowed() called
- [java] -> Caller is 'Principal[admin]'.
- [java] someRolesAllowed() called
- [java] -> Caller is 'Principal[admin]'.
-
-
-
-
-
- Pool example
-
- The build.xml file for this example is
- located in the examples/pool
- folder.
-
-
- Description
-
- This example illustrates the definition of some values to limit
- the size of a pool. In the example, the pool size can be configured
- through the specific XML deployment descriptor or with
- annotations.
-
- The example contains two kind of beans, Stateless beans and
- Message Driven beans.
-
- The annotation used in the example is:
-
-
-
- @Pool, for configuring the pool.
-
-
-
- By using annotation to configure the pool, the @Pool annotation
- needs to be put on the class of the bean. For example : @Pool(max =
- MyInterface.MAX_INSTANCE)
-
- By using XML configuration, the settings are located in the
- META-INF/easybeans.xml entry of the EJB-JAR file.
-
- ...
- <!-- Configure pool element with pool namespace -->
- <pool:pool>
- <!-- Sets the max value to 2 -->
- <pool:max>2</pool:max>
- </pool:pool>
- ...
-
-
-
- Running the Server
-
- If the server is not available, it must be run following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The pool bean example must be deployed. It is done automatically
- if the bean has been installed in the easybeans-deploy folder.
-
- On the server side, the following output should display:
-
- 3/7/08 5:26:26 PM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/pool.jar]
-3/7/08 5:26:28 PM (I) JContainer3.start : Container 'easybeans-deploy/pool.jar' [2 SLSB, 0 SFSB, 2 MDB] started in 1,388 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- The client is run with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed on the client side:
-
- run.client:
- [java] Mar 7, 2008 5:31:35 PM org.objectweb.carol.util.configuration.ConfigurationRepository init
- [java] Calling bean's methods...
- [java] Waiting some time before checking the number of instances...
- [java] Number of instances Annotation Bean = 5
- [java] --> This value is OK, pool is limited to 5
- [java] Number of instances XML Bean = 2
- [java] --> This value is OK, pool is limited to 2
- [java] 3/7/08 5:31:41 PM (I) Logger.log : Debug.initialize() - a3debug.cfg
- [java] 3/7/08 5:31:42 PM (I) Logger.log : ReliableTcpConnection.windowSize=100
- [java] Sending messages with multiple threads...
- [java] Waiting some time to ensure that all messages have been sent...
- [java] Look at the server side console to check pool values of MDB ...
-
- The following output is displayed on the server side:
-
- [java] MDBAnnotationBean: Number of instances = '5', max = '5'.
- [java] MDBAnnotationBean: Number of instances = '5', max = '5'.
- [java] MDBAnnotationBean: Number of instances = '5', max = '5'.
- [java] MDBXMLBean:Number of instances = '2', max = '2'.
- [java] MDBAnnotationBean: Number of instances = '5', max = '5'.
- [java] MDBAnnotationBean: Number of instances = '5', max = '5'.
- [java] MDBXMLBean:Number of instances = '2', max = '2'.
- [java] MDBAnnotationBean: Number of instances = '5', max = '5'.
-
-...
-
- The instances are not exceeding the limits fixed in the example
- then everything is working fine.
-
-
-
-
- Migration EJB 2.1/3.0 example
-
- The build.xml file for this example is
- located in the examples/migrationejb21 folder.
-
-
- Description
-
- This example illustrates the use of annotations that provide
- Home and Remote interface for clients written for the EJB 2.1
- specification.
-
- The annotations used by the example are:
-
-
-
- @Remote, for the definition of the
- business interface.
-
-
-
- @RemoteHome, for defining the EJB 2.1
- Remote Home interface.
-
-
-
- @LocalHome, for defining the EJB 2.1
- Local Home interface.
-
-
-
- An EJB that is using these annotations can be used by an EJB3
- client and a EJB 2.1 client. These annotations can be used to do a
- migration of your beans on the server side while the clients are the
- same.
-
-
-
- Running the Server
-
- If the server is not available, it must be run following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the Bean
-
- The migration bean example must be deployed. It is done
- automatically if the bean has been installed in the easybeans-deploy folder.
-
- On the server side, the following output should display:
-
- 5/16/07 2:42:24 PM (I) AbsDeployer.deployEJB : Deploying EJB3DeployableImpl[archive=easybeans-deploy/migration21.jar]
-5/16/07 2:42:25 PM (I) JContainer3.start : Container started in : 166 ms
-
- Once this information is displayed on the screen, the container
- is ready to receive client calls.
-
-
-
- Running the Client
-
- Once the container has been started, the client can be
- launched.
-
- The client is run with the following ant command: ant
- run.client
-
- If the client runs successfully, the following output is
- displayed on the client side:
-
- run.client:
- [java] May 16, 2007 2:43:18 PM org.objectweb.carol.util.configuration.ConfigurationRepository init
- [java] INFO: No protocols were defined for property 'carol.protocols', trying with default protocol = 'jrmp'.
- [java] Calling hello() method on EJB 3.0 view of the Bean...
- [java] Calling hello() method on Remote EJB 2.1 view of the Bean...
-
- The following output is displayed on the server side:
-
- Hello world EJB 3.0 !
-Hello world EJB 2.1 Remote View !
-Link to itself remote = org.objectweb.easybeans.examples.migrationejb21.EJB2And3Bean_org.objectweb.easybeans.examples.migrationejb21.EJB2RemoteHome/8414877
-Link to itself local view = org.objectweb.easybeans.examples.migrationejb21.EJB2And3Bean_org.objectweb.easybeans.examples.migrationejb21.EJB2LocalHome/8414877
-Calling itself on the local view...
-Hello world EJB 2.1 Local View !
-
-
-
-
- EAR example
-
- The build.xml file for this example is
- located in the examples/ear
- folder.
-
-
- This example required the use of a web container, then it can
- work in EasyBeans/JOnAS, EasyBeans/Tomcat or EasyBeans/Jetty but not
- in standalone mode as the war file can't be deployed.
-
-
-
- Description
-
- This example will deploy the EJB3 included in the EAR file in
- EasyBeans EJB3 container while the .war file will be deployed in the
- web container This EAR example includes an EJB3 and a WAR file. This
- allows to use local interface between the WEB layer and the EJB layer.
- The EAR file has no entry named
- META-INF/application.xml, EasyBeans will detect
- the type of the given archives and use default values for the name of
- the web context. Due to the use of local interface, the Entities don't
- need to implement the Serializable interface. The interface is not
- annotated with @Local annotation as it is the
- default value. Each entity class provides a
- @NamedQuery query that allows to get all the
- objects There is a relationship between Author
- and Book entities. It is very simple: One
- Author can write several books, but a
- Book is written only by one
- Author. @OneToMany and
- @ManyToOne annotations are used to define the
- relationship
-
-
-
- Running the Server
-
- If the server is not available, it must be run following the
- steps described in Chapter 3, "Running the EasyBeans Server" of the developer's guide.
-
-
-
- Deploying the EAR
-
- The EAR application example must be deployed. It is done
- automatically if the EAR has been installed in the easybeans-deploy folder.
-
- When the EAR is detected by EasyBeans, the following traces will
- be displayed : JOnASDeployer.deployEAR : Deploying EARDeployableImpl[archive=/tmp/EasyBeans-Deployer-benoitf/EAR/ear3.ear]
-ENCManager.getInterceptorClass : Detecting JOnAS: using JOnAS ENC for the naming.
-JPersistenceUnitInfoHelper.loadDefaultValues : Default persistence provider set to value org.hibernate.ejb.HibernatePersistence.
-...
-Version.<clinit> : Hibernate Annotations 3.3.0.GA
-Environment.<clinit> : Hibernate 3.2.4
-...
-JContainer3.start : Container started in : 5619 ms
-AbsJWebContainerServiceImpl.registerWar : War /tmp/EasyBeans-Deployer-benoitf/EAR/ear3.ear/ear-web.war available at the context /ear-web.
-JOnASDeployer.deployEAR : 'EARDeployableImpl[archive=/tmp/EasyBeans-Deployer-benoitf/EAR/ear3.ear]' EAR Deployable is now deployed
-
-
- Once this information is displayed on the screen, the
- application can be used by using an HTTP browser.
-
-
-
- Using the Client
-
- Once the container has been started, the client can be
- accessed.
-
- The URL used to connect to the client is the following: http://localhost:9000/ear-web
- for JOnAS.
-
- The following text should be displayed on the browser:
-
- Initialize authors and their books...
-
-Get authors
-
-List of books with author 'Honore de Balzac' :
-
- * Title 'Le Pere Goriot'.
- * Title 'Les Chouans'.
-
-List of books with author 'Victor Hugo' :
-
- * Title 'Les Miserables'.
- * Title 'Notre-Dame de Paris'.
-
-
- There is no output on the server side.
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/ejb2_programmer_guide.xml b/jonas_doc/core/src/docbook/doc-en/ejb2_programmer_guide.xml
deleted file mode 100644
index cc8616fd2ff88b8a1caa01a3d30d6d0342fc6549..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/ejb2_programmer_guide.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
- EJB 2.1 Programmer's Guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- Feb 2008
-
-
-
- This guide explains how to program with EJB 2.1. To use the new EJB
- 3.0 beans, you should refer to EJB 3.0 Programmer's
- Guide
-
-
-
-
- Developing EJB 2.1 Session Beans
-
-
-
-
-
-
-
-
-
- Developing Entity Beans
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Developing Message Driven Beans
-
-
-
-
-
-
-
-
-
- General Issues Around EJB 2.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Appendix
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/ejb3_programmer_guide.xml b/jonas_doc/core/src/docbook/doc-en/ejb3_programmer_guide.xml
deleted file mode 100644
index daa04c98723081a697296aac712728f6913b2ccc..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/ejb3_programmer_guide.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
- EJB 3.0 Programmer's Guide
-
-
-
- FlorentBENOIT
-
-
- EasyBeans
-
- OW2 consortium
-
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- March 2009
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/essai.xml b/jonas_doc/core/src/docbook/doc-en/essai.xml
deleted file mode 100644
index 3f72edd3c613a2bf22b8c9bdb11ee4478c92da2a..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/essai.xml
+++ /dev/null
@@ -1,732 +0,0 @@
-
-
- Essai 1
-
-
-
-
- Essai 1 avec
-
- voici un lien sur le configuration_guide.
-
- carol.protocols=jrmp
-carol.jrmp.url=rmi://localhost:1099
-carol.jvm.rmi.local.call=false
-carol.jvm.rmi.local.registry=false
-carol.jrmp.server.port=0
-carol.jrmp.interfaces.bind.single=false
-
-
- choice of the protocol or list of protocols
-
-
-
- connexion url to the RMI registry the hostname (localhost) and
- port number must be changed if needed. In a distributed
- configuration changing the hostname is mandatory.
-
-
-
- if true local calls are optimized: calls to methods of the
- remote interface are treated as call to local methods (it is not
- always possible depending on the packaging of the
- application).
-
-
-
- if true a local Naming context is used. This must be used only
- with a collocated registry and it is mandatory when the
- jonas.security.manager property of jonas.properties is set to
- true.
-
-
-
- exported objects will listen on this port for remote method
- invocations. 0 means random port. Specify a port may be useful when
- the server run behind a firewall.
-
-
-
- if true use only a single interface when creating the
- registry. False means use all interfaces available.
-
-
-
-
-
- Essai2 avec
-
-
-
-
-
-
-
-
-
- Essai3 avec JOnAS
-
- The jonas-ra.xml contains JOnAS specific information describing
- deployment information, logging, pooling, jdbc connections, and RAR config
- property values:
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
-
-
- jndiname
-
- name the RAR will be registered as. This property is
- requiredThis value will be used in the
- resource-refsection of an J2EE
- AZEAEZAEAEAEAEZ
- composant.
-
-
-
- Anyname (for example jdbc_1)
-
-
-
-
-
- rarlink
-
- jndiname of a base RAR file. Useful for deploying
- multiple connection factories without having to deploy the
- complete RAR file again. When this is used, the only entry in
- RAR is a META-INF/jonas-ra.xml
-
-
-
- JONASJDBC_DM
-
-
-
- JONASJDBC_DS
-
-
-
- JONASJDBC_CP
-
-
-
- JONASJDBC_XA
-
-
-
-
-
- native-lib
-
- defines the path where native libraries can be
- found.
-
-
-
- Any string for a path
-
-
-
-
-
-
-
-
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
-
-
- pool-init
-
- Initial size of the managed connection pool
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-min
-
- Minimum size of the managed connection pool.
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-max
-
- Maximum size of the managed connection pool.
-
-
-
- n
-
-
-
- -1 = unlimited (default value)
-
-
-
-
-
- pool-max-age-minutes
-
- Maximum number of minutes to keep the managed connection
- in the pool.
-
-
-
- 0 = an unlimited amount of time.
-
-
-
- n in minutes
-
-
-
-
-
- pstmt-max
-
- Maximum number of PreparedStatements per managed
- connection in the pool. Only needed with the JDBC RA of JOnAS or
- another database vendor's RAR. Value of 0 is unlimited and -1
- disables the cache.
-
-
-
- 0 = unlimited
-
-
-
- n (default value = 10)
-
-
-
- -1 = cache disabled
-
-
-
-
-
- pool-max-opentime
-
- Identifies the maximum number of minutes that a managed
- connection can be left busy.
-
-
-
- 0 = an unlimited amount of time (default
- value).
-
-
-
- n in minutes
-
-
-
-
-
- pool-max-waiters:
-
- identifies the maximum number of waiters for a managed
- connection. Default value is 0.
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-max-waittime
-
- identifies the maximum number of seconds that a waiter
- will wait for a managed connection. Default value is 0.
-
-
-
- 0 (default value)
-
-
-
- n in seconds
-
-
-
-
-
- pool-sampling-period:
-
- identifies the number of seconds that will occur between
- statistics samplings of the pool. Default is 30 seconds.
-
-
-
- n in seconds (default value = 30s)
-
-
-
-
-
-
-
-
-
- Essai de screen avec scrollbar
-
- log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory
-
-handler.tty.type Console
-handler.tty.output Switch
-handler.tty.pattern %d : %O{1}.%M : %m%n
-
-handler.logf.type File
-handler.logf.output automatic
-handler.logf.pattern %d : %l : %h : %O{1}.%M : %m%n
-
-logger.root.handler.0 tty
-logger.root.handler.1 logf
-
-logger.root.level INFO
-logger.org.objectweb.level INFO
-
-#logger.org.objectweb.jonas_ejb.level DEBUG
-
-handler.mesonly.type Console
-handler.mesonly.output Switch
-handler.mesonly.pattern %m%n
-
-logger.org.objectweb.jonas.genic.handler.0 mesonly
-logger.org.objectweb.jonas.genic.additivity false
-
-[...]
-
-
-
- Essai de screen sans scrollbar
-
- se reporter au
- Chapitre 4, Conventions et règles diverses dfdgdgdfdgdgfgdgdgdg
- yyyy ...
- ant -f build-jb.xml create_jonas_base
-
-
-
-
-
- Essai de literallayout
-
- se reporter au <xref linkend="conventions" /> ...
- <chapter xml:id="conventions"/> <title>Conventions
- et règles diverses</title>
-
-
-
-
- Essai de rendus pour Strings
-
-
-
-
-
-
-
- string
-
- elements/attributs
-
- rendu
-
-
-
-
-
- logger.root.level
-
- aucun
-
- logger.root.level
-
-
-
- logger.root.level
-
- emphasis
-
- logger.root.level
-
-
-
- logger.root.level
-
- emphasis[bold]
-
- logger.root.level
-
-
-
- logger.root.level
-
- filename
-
- logger.root.level
-
-
-
- logger.root.level
-
- filename + class=directory
-
- logger.root.level
-
-
-
- logger.root.level
-
- filename + class=extension
-
- logger.root.level
-
-
-
- logger.root.level
-
- literal
-
- logger.root.level
-
-
-
- logger.root.level
-
- classname
-
- logger.root.level
-
-
-
- logger.root.level
-
- command
-
- logger.root.level
-
-
-
- logger.root.level
-
- envar
-
- logger.root.level
-
-
-
- logger.root.level
-
- interfacename
-
- logger.root.level
-
-
-
- logger.root.level
-
- package
-
- logger.root.level
-
-
-
- logger.root.level
-
- property
-
- logger.root.level
-
-
-
- logger.root.level
-
- function
-
- logger.root.level
-
-
-
- logger.root.level
-
- ulink
-
- logger.root.level
-
-
-
-
-
-
-
- Essai Q and A
-
-
-
-
-
-
-
- How can I use a java client inside the client
- container?
-
-
-
- see earsample and jaasclient for the use of client container.
- All examples under src show
- heavy clients without client container.
-
-
-
-
-
- I would like to use cluster of JOnAS
-
-
-
- see sampleCluster2 and the associated
- demo.
-
-
-
-
-
- Is it possible to use EJB3?
-
-
-
- it is possible to deploy and use EJB3 with JOnAS 4.8 EE + EJB3 EasyBeans
- container. EasyBeans is available for JOnAS 4.x with a resource
- adapter, you only have to use a JDK 5.0.The guide Getting
- started with the embedded EasyBeans for JOnAS J2EE server
- explains how to do this.
-
-
-
-
-
- Where can I find transaction management examples?
-
-
-
- nearly all examples use container managed transactions but
- some use explicit transaction demarcation in the client (light or
- heavy) like earsample, src/eb, src/sb
-
-
-
-
-
- Where can I find servlets and JSP examples?
-
-
-
- see earsample, alarm, cmp2, olstore,petstore1.3, j2eemanagement, etc...
-
-
-
-
-
- My application needs to access database
-
-
-
- see src/eb, cmp2, alarm, olstore, petstore1.3,hibernate, jdo examples.
-
-
-
-
-
- How to use JMS or message driven beans?
-
-
-
- see src/jms, src/mdb/sampleappli,src/mdb/*, alarm examples.
-
-
-
-
-
- Are there webservices examples?
-
-
-
- Yes, of course see webservices/beans/ws, webservices/beans/wsclient, webservices/webs/webclient, webservices/webs/webendpoint, olstore
-
-
-
-
-
- how to use security?
-
-
-
- earsample uses EJB
- security, jaasclient uses JAAS
- login module, JACC authentication is used by all servlet examples
- that use authentication like olstore, petsore1.3,alarm.
- webservices/beans/ws
- shows how to add security to a stateless session bean using
- WsGen
-
-
-
-
-
- I would like to use mail API
-
-
-
- see src/mailsb.
-
-
-
-
-
- Is it possible to access to Management beans (MBeans) of
- JOnAS?
-
-
-
- yes !j2eemanagement example shows how to use the Management
- EJB (MEJB) that allows to perform some management operations
- accordingly to the J2EE Management Specification (JSR77).
-
-
-
-
-
- How to build and package Java EE application?
-
-
-
- All examples are built and packaged via Ant. you can be
- inspired by the build.xml files.
-
- For example
- $JONAS_ROOT/examples/earsample/build.xml file
- is a very good example that can be followed. It shows ant targets
- for:
-
-
-
- compiling all the java sources
-
-
-
- building ejbjar file for JOnAS via the standard
- ejb ant target
-
-
-
- building war file
-
-
-
- building client jar file
-
-
-
- building rar file
-
-
-
- building ear file
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/essai2.xml b/jonas_doc/core/src/docbook/doc-en/essai2.xml
deleted file mode 100644
index 2ce2ef78b9a5f38f46fdf0d0b3b0ecabbc5ecf13..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/essai2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- Essai 2 pour inclusion de
-
- Nous allons inclure essai.xml ici:
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/essaibook.xml b/jonas_doc/core/src/docbook/doc-en/essaibook.xml
deleted file mode 100644
index cd415df486df0948ff3754a7f3175db1c4be6ee4..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/essaibook.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
- JOnAS Document
-
-
-
- CoqPhilippe
-
- DanesAdriana
-
- JOnAS Team
-
-
-
- 2007-2008
-
- OW2 consortium
-
-
-
-
- April 2007
-
-
- Developing Entity Beans
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/getting_started_guide.xml b/jonas_doc/core/src/docbook/doc-en/getting_started_guide.xml
deleted file mode 100644
index cda97be3f32334860da3935ef8374b8aaa8e2358..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/getting_started_guide.xml
+++ /dev/null
@@ -1,3439 +0,0 @@
-
-
-
-
- Getting started with JOnAS 5
-
-
-
- JOnAS Team
-
-
-
- CoqPhilippe
-
-
-
- SauthierGuillaume
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2007-2009
-
- OW2 Consortium
-
-
-
-
- March 2009
-
-
-
-
- Preface
-
-
- Welcome new users of ! This guide is intended to help you.
-
- shows that a
- downloaded is usable
- as is.
-
- The environment to set is truly minimal. It's child's play to run a
- application.
-
- This chapter shows not only how to perform some actions but also
- explains why everything runs so easily.
-
- is
- distributed with examples ready to use. Users can learn a lot by studying
- these examples
-
-
-
- Theses examples may be used as a tutorial for Java EE 5 technology.
- They are using the simplified programming model, dependency injection,
- Java Persistence API, security and other functionalities available in Java
- EE 5.
-
- Note that this guide wants to be simple and is not intended to
- resolve all problems that can be encountered in real
- life situtations, which can be very complex.
-
- For more experimented users that need to perform more complex tasks,
- we recommend taking a look at the JOnAS 5 Configuration
- guide
-
-
- summarizes downloading and installing .
-
-
- describes what you get when you download and install .
-
-
-
-
- First contact with JOnAS 5
-
-
- It is assumed, in this guide, that the first time user has already
- downloaded and installed . If this is not the case, please refer to .
-
- In this chapter an unexperienced user will learn how to run an
- existing
- application with . He will understand why it is so easy to
- achieve such results with nearly zero configuration.
-
-
-
- How do I set up a JOnAS environment?
-
-
- Once you have installed your distribution, you have to set up the
- JONAS_ROOT environment variable prior to using
- or any of its
- tools. You will also have to update your PATH variable.
-
-
-
- Unix platforms
-
- Open a new terminal and proceed as follows:
-
- bash>export JONAS_ROOT=<your_install_dir>
-bash>export PATH=${PATH}:${JONAS_ROOT}/bin
-
- or
-
-
-
-
-
- Windows platforms
-
- Open a new DOS window and proceed as follows:
-
- C:>set JONAS_ROOT=<your_install_dir>
-C:>set PATH=%PATH%;%JONAS_ROOT%\bin
-
- To update the path permanently, do the following depending
- upon your Windows version:
-
-
-
- Windows XP
-
-
- Go to the Start Menu, then double click on System. In
- the System Control Panel select the Advanced tab and push the
- Environment Variables button. Now, you can look for the
- PATH to edit. Append the value
- ;C:\jonas-5.x\bin (assuming that you
- installed JOnAS in the C:\jonas-5.x directory).
-
-
-
-
-
-
-
- distribution contains a number of configuration files in $JONAS_ROOT/conf directory. These files can
- be edited to change the default configuration. However, it is
- recommended to put the configuration files needed by a specific
- application running on in a separate location. This is done by using an
- additional environment variable called JONAS_BASE.
-
-
-
-
-
-
- How can I check if everything is correct?
-
-
- JOnAS provides the command jonas
- check that checks if your environment is set correctly.
-
-
-
-
-
-
- How can I run a JOnAS server?
-
-
- Now that your environment seems correct, it is possible to launch
- the server
- simply by typing the following command:
-
- bash>jonas start
-
-OW2 JOnAS 5.1.0 [ http://jonas.ow2.org / jonas@ow2.org ]
-
-JONAS_BASE is set to xxxxx
-
-Welcome to OW2 JOnAS (Running on Felix).
------------------------------------------------
-
-
-
- As soon as your server is ready, i.e when you can see on your
- terminal something that looks like:
-
- J2EEServer.__info : JOnAS AS v5.1 named 'jonas' RUNNING
-
- you can use your favorite browser and type in the following
- URL:
-
- http://localhost:9000/Here is the web page you
- should see:
-
-
-
-
-
-
-
-
-
-
-
- You just have run JOnAS for the first time.
-
- You are now able to do some interesting things like run a sample
- application packaged
- in a .ear file (the earsample example), run the web administration
- tool for , or
- you can do some other things that we will explain later on.
-
-
-
-
- How can I run my first Java EE application?
-
-
- If you have followed the previous steps you are now ready to run
- your first
- application in .
-
- First, we need an application to run. We have chosen the $JONAS_ROOT/examples/javaee5-earsample
- example.It is a fairly good example that shows some interesting
- functionnalities of the java EE 5 technology. See for more details.
-
- You must first compile and generate the Java EE application. This
- is done by using Ant
-
- bash> cd $JONAS_ROOT/examples/javaee5-earsample
-
-bash> ant
-
- When you get :
-
- Build SuccessfullYou have compiled all the java
- classes, packaged them in an ear archive and copied it under
- $JONAS_BASE/deploy.
-
- At JOnAS startup time this Java EE application will be
- automatically deployed.
-
- Now as soon as your JOnAS server is started you can run the
- application by typing the following URL in a browser:
-
- http://localhost:9000/javaee5-earsample
-
-
-
-
- Understanding how all of this runs out of the box
-
-
- There are several reasons why the previous earsample application
- is directly runnable on a freshly installed JOnAS:
-
-
-
- Tomcat servlet server is embedded in the distribution
-
-
-
- A deployment plan (ctxroot.xml)
- triggering the deployment of the web application
- jonas-ctxroot is pre-installed in $JONAS_ROOT/deploy directory. This
- explains why a web page is displayed when you type:
- http://localhost:9000/
-
-
-
- The javaee5-earsample.ear file has been
- copied in $JONAS_BASE/deploy
- directory. This way, the application has automaticaly
- been deployed when starts.
-
-
-
- By using newjb tool JOnAS has
- been correctly configured and default values has been set in
- configuration files located under $JONAS_BASE/conf
-
- These files are accordingly set in order to:
-
-
-
- force to use all the services needed for
- correct execution:
-
-
-
- jtm: provides the
- TransactionManager used in the back
- stage (for EJB methods and SQL execution)
-
-
-
- db: provides an HSQL
- Database for JPA entities
-
-
-
- security: provides
- security functionalities
-
-
-
- resource: service for
- using JMS and JDBC resource adaptors
-
-
-
- ejb3: there is a
- session bean to be deployed in an ejb3 container
-
-
-
- web: there is a
- servlet to be deployed in a servlet container
-
-
-
- ear: for deploying
- the javaee5-earsample.ear
- application
-
-
-
- jaxws: for deploying
- JAX-WS 2.0 web services
-
-
-
- depmonitor that
- deploys Java EE modules located in $JONAS_BASE/deploy
- directory
-
-
-
- jonas.properties is the configuration
- file
-
-
-
- set a default port (9000) for the connector HTTP (in
- $JONAS_BASE/conf/tomcat6-server.xml
- file)
-
-
-
- set a default port (1099) and a default protocol
- (jrmp) to be used by the registry (in
- $JONAS_BASE/conf/carol.properties
- file)
-
-
-
- a JMS resource adaptor correctly configured has been built
- and installed under $JONAS_BASE/deploy
-
-
-
- a JDBC resource adaptor for accessing HSQL Database has
- been built and installed under $JONAS_BASE/deploy
-
-
-
-
-
-
-
-
- First step in JOnAS administration
-
-
- Back on the web page displayed previously, you can see the second
- line that says:
-
- Go to the JOnAS administration web application. Use the login/password jonas/jonas
-
- This link allows you to run the administration tool jonasAdmin.
-
- After the authentication process is done
- (login=jonas,password=jonas) you have
- access to a page in which the left part shows the Management
- tree.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- From this tree it is possible
- to:
-
- get information on the management domain
-
-
-
- get information about the JOnAS server (protocol,
- JMX, registry, web container, JVM)
-
-
-
- get monitoring information (threads,
- memory)
-
-
-
- get or set logging information
-
-
-
- get information on existing web connectors or
- create new ones
-
-
-
- get information about JOnAS services
-
-
-
- make deployment operations (deploy/undeploy/upload/remove) for ear, war, ejbjar and rar files
-
-
-
- get configuration information, statistics, or
- perform operations on resources (data sources)
-
-
-
- get securtity configuration information or perform
- security operations
-
-
-
- get configuration information or perform
- operations on JORAM, our JMS provider.
-
-
-
- browse all the deployed MBeans in the
- server
-
-
-
-
-
- Here
- is a demonstration of cluster management features in jonasAdmin
- console.
-
-
-
-
-
- Learning JOnAS by examples
-
-
- provides a
- complete example javaee5-earsample that
- shows the multitiered application model for enterprise applications that a
- Java EE platform must support.
-
- In this example you will find all the java EE components
- possibles:
-
-
-
- Application clients
-
-
-
- Web components (servlets)
-
-
-
- Enterprise JavaBeans
-
-
-
- It may be interesting for a user that wants to start developing a
- application and run it
- in to look at the
- sample in order to see the new Java EE 5 features.
-
-
-
- javaee5-earsample example from a 10.000 foot view
-
-
- The javaee5-earsample example is a quick-start Java EE application
- that shows usage of new Java EE 5 features, like JPA, EJB3 (Session and
- Message Driven Bean), annotations, JAAS security.
-
- provides
- a little database, embedded in the server, namely HSQLDB. This database
- is helpful for running some examples that use JPA entity beans.
-
-
- The HSQL database is not appropriate for real life
- applications.
-
-
-
-
- Java EE Technologies in Use
-
-
- This sections offers an overview of the different Java EE
- technologies involved in the javaee5-earsample EAR.
-
-
-
- JPA 1.0
-
-
- JPA stands for Java Persistence API, that's a specification
- extracted from the EJB 3.0 core that addresses persistency problem.
- Basically, it allows POJOs to be persisted and queried to and from a
- JDBC database.
-
- Some JPA EntityManager Providers:
-
-
-
- ,
-
-
-
- ,
-
-
-
- etc ...
-
-
-
-
-
-
- EJB 3.0
-
-
- EJB 3.0 is the new Enterprise Java Beans
- specification targeting ease of development
- (EoD), a feature that was lacking in the previous
- version (EJB 2.x). This specification makes heavy use of Java 5
- annotations (@Stateless,
- @Stateful,
- @MessageDriven, ...). One of the main
- advantages is the introduction of the concept of business method
- Interceptors.
-
- EJBs are packaged in an EjbJar (.jar).
-
- OW2
- EasyBeans is the EJB 3.0 Container used in JOnAS 5.
-
-
-
-
- JAAS
-
-
- JAAS is the authentication and
- authorization mechanism of Java EE that manages Principals and
- Roles.It is used in this sample to authenticate one of the
- application's client users.
-
-
-
-
- JMS 1.1
-
-
- JMS is the standard for Messaging system
- (MOM) in Java. It is used to asynchronously (using JMS Destinations
- like Queues or Topics) perform calls to the application (usually
- using MessageDriven Beans).
-
- OW2
- JORAM is the JMS provider used in JOnAS 5.
-
-
-
-
- Servlet 2.5
-
-
- Servlets and JSPs compose the web front-end
- of a classical Java EE application. This is what is accessed when an
- HTTP URL (http://localhost:9000/javaee5-earsample for example) is
- called.
-
- Servlets/JSPs are packaged in a web application (.war).
-
-
-
-
- Application Client
-
-
- Application Clients are described in the Java EE specification
- as a way to package code for "heavy-weight" clients (not like web
- applications, usually known as "light-weight") of the application's
- business objects (EJBs, JMS Destinations, ...). Application Clients
- are top level Java EE modules so they benefit from uniform naming
- (java:comp/env).
-
- Application Clients are packaged in .jar files.
-
-
-
-
- Enterprise Application
-
-
- EARs do not contain any code but are used
- to package together all the modules composing the application
- (EjbJar + Web Applications + Resource Adapters + Application
- Clients).
-
-
-
-
-
- javaee5-earsample EAR Sample Architecture
-
-
- In this section, the sample's architecture will be described,
- execution flow and interactions will be explained.
-
- This application provides the following features:
-
-
-
- 2 separated business interfaces, one allowing write access
- and the other one read only access.
-
-
-
- It can receive Book creation orders asynchronously from a
- JMS Queue.
-
-
-
- A Web interface allowing to see the Books and Authors, with
- a special section authorized to add new Authors.
-
-
-
- The database (DB) is provided by a JOnAS
- service called db that launches an Hypersonic SQL
- server instance. A JDBC Resource Adapter is provided by JOnAS to allow
- applications to connect to this DB.
-
- Upon the data tier are located the business data objects. They
- are implemented using the JPA Entity model (with
- annotations).
-
- The model represented in this application is super easy:
-
-
-
- Author: This is the author of a(some)
- Book(s).
-
-
-
- Book: This Entity represents a book
- written by an Author
-
-
-
- An Author can write many Books
-
-
-
- A Book is written by only 1 Author
-
-
-
- Two EJB3 @Stateless beans are constructed
- on top of the business data objects (entities): Reader and
- Writer.
-
- The Reader bean provides read only methods
- (findAuthor,
- findBook, ...) that never change the backed
- data. On the contrary, the Writer bean provides
- write methods (addAuthor, ...) and thus has
- to be secured.
-
- On top of theses 2 "low level" EJBs, other, more business
- oriented, EJBs are provided: Mailer,
- Initializer, an MDB.
-
- The Initializer bean is a "hidden"
- EJB, whose role is to initialize, if needed, a
- first set of JPA Entitites (some well known
- Authors, and some of their Books). This bean is used from almost all
- the clients to ensure that there is something to show to the
- user.
-
- The Mailer bean can be used by anyone (it's
- does not use security features) and will only access the
- Reader bean to fill up a mail message that will
- be sent to a given mail address.
-
- The MDB (MessageDriven Bean) simply creates a
- new Book for each new JMS message received from
- the JMS Queue.
-
- The following business oriented functions are, in turn, used by
- the end-user clients:
-
-
-
- Web Application offering a web interface (HTTP/HTML)
-
-
-
- Java EE 5 Application Clients (runs from the command
- line)
-
-
-
- Concerning the web application, it offers 3 pages:
-
-
-
- An index page showing basic instructions on how to use the
- web application
-
-
-
- An open page (meaning not secured) displaying Books and
- Authors
-
-
-
- A secured page (needs user authentication) for new Authors
- addition
-
-
-
- There are also multiple standard application clients
- (AC for short) showing different ways to use the
- application:
-
-
-
- Not Secured AC: this client uses the Mailer and Reader bean.
- Using the Reader it displays the Authors and Books, and using the
- Mailer bean, it sends a mail with an equivalent content.
-
-
-
- JMS AC: this client mainly interacts with a dedicated JMS
- Queue to sends Book creation orders, then it waits some time and
- uses the Reader bean to see if the new Books were
- persisted.
-
-
-
- Secured AC: this clients shows usage of JAAS authentication.
- It uses the Writer bean, which requires a user with the
- "earsample" role in order to insert new Authors and Books.
-
-
-
-
-
-
-
- javaee5-earsample example detailed
-
-
- This section will focus on multiple aspects of the EAR sample:
- some basic server configuration (strictly limited to the elements in use
- for the sample, a more complete description is available in the
- configuration guide), simple programming guide showing JPA, EJB, JNDI
- usage...
-
-
-
- JOnAS Server Configuration
-
-
- Here we focus on JOnAS configuration needed by javaee5-earsample
- examples and obtained after having run the newjb command .
-
-
-
- Required Services
-
-
- The javaee5-earsample needs the following JOnAS services to be
- activated for a flawless execution:
-
-
-
- jtm
-
-
- Provides the transactions support
-
-
-
-
- db
-
-
- Provides the HSQL Database
-
-
-
-
- mail
-
-
- Provides the mail sending support
-
-
-
-
- security
-
-
- Provides the security provider
-
-
-
-
- resource
-
-
- Provides the connectivity to the database or the JMS
- provider via resource adapters
-
-
-
-
- ejb3
-
-
- Provides the EJB 3.0 Container runtime
-
-
-
-
- web
-
-
- Provides the Web container runtime for web applications
- (Servlets/JSP)
-
-
-
-
- ear
-
-
- Provides the Enterprise ARchive (EAR) container
-
-
-
-
-
-
-
- DataSource
-
-
- Access to the dataSource is provided by the resource service
- .
-
- A resource adapter has been created at the JONAS_BASE creation
- time via newjb tool from the properties found in
- $JONAS_ROOT/build-jb.properties file:
-
-
-rajdbc.hsql.user=jonas
-rajdbc.hsql.password=jonas
-rajdbc.hsql.url=jdbc:hsqldb:hsql://localhost:9001/db_jonas
-rajdbc.hsql.drivername=org.hsqldb.jdbcDriver
-rajdbc.hsql.jndiname=jdbc_1
-rajdbc.hsql.jdbcdriverjarfile=none
-rajdbc.hsql.mappername=rdb.hsql
-
-
- JDBC URL of the connection. This is
- one is specific to HSQL and corresponds to the HSQL port and
- DB name provided in the default db
- service configuration.
-
-
-
- JDBC driver fully qualified class
- name (including package name)
-
-
-
- JNDI name of the
- DataSource
- (DataSource will be available under
- that name in the JNDI registry)
-
-
-
-
-
-
-
- Data Tier: JPA Entity Beans
-
-
-
-
- This figure represents the model of the application. it is
- composed of 2 JPA Entities:
- Author and Book. Each
- one has an id attribute and are qualified by a
- name and a title respectively.
- Theses entities have a relationship between them: an Author instance
- knows all the Books he wrote (Author.getBooks()) and a Book knows who
- wrote it (Book.getAuthor()).
-
-
- Author Bean
-
- A JPA Entity bean is a simple class
- considered as a POJO (Plain Old Java Object).
- That means that the class has a public default constructor (no
- arguments). Moreover, for each attribute/field of the class, a
- getter and a setter method (getXYZ() and
- setXYZ(...)) has to be provided.
-
- A JPA Entity bean will be annotated with
- the @Entity annotation.
-
- The primary key is defined through an
- @Id annotation. In the earsample use case,
- this key has to be auto-generated. Finally, the
- getId() method should look like
- this:
-
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- public long getId() {
- return this.id;
- }
-The Author bean is in relation with the bean Book, because an Author
- can have many Books (a OneToMany relationship).
-
- The relation is also defined through an annotation:
-
- @OneToMany(mappedBy="author", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
- public Collection<Book> getBooks() {
- return books;
- }
-This relation is of One-To-Many type. The link will be done with the
- entity bean Book on the author attribute (owner
- of the relation).
-
- The fetching type is EAGER (it means that
- when the Author instance is constructed, all the linked books are
- fetched). Another choice could have been to use
- LAZY fetching (meaning that the Books will only
- be fetched when the getBooks() method will be called). In the
- earsample use case, the entity beans will be accessed from a client
- in another Java VM (detached mode), so, to reduce latencies caused
- by network exchanges, it was decided to not use
- LAZY fetching. Because the Author and Books
- classes are usable from the remote JVM, they must implements the
- Serializable interface.
-
- Finally, the cascading mode is set to ALL:
- when the Author bean is be persisted, all the Books related to the
- Author bean will be persisted too.package org.ow2.jonas.examples.ear.entity;
-
-import static org.ow2.jonas.examples.ear.entity.Author.QN.ALL_AUTHORS;
-import static org.ow2.jonas.examples.ear.entity.Author.QN.FIND_AUTHOR;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-
-/**
- * Author of a book.
- * @author Florent Benoit
- */
-@Entity
-@NamedQueries({@NamedQuery(name=ALL_AUTHORS, query="select o FROM Author o"),
- @NamedQuery(name=FIND_AUTHOR, query="select o FROM Author o WHERE name = :name")})
-public class Author implements Serializable {
- /**
- * Store Query names.
- */
- public static interface QN {
- /**
- * Search all authors.
- */
- String ALL_AUTHORS = "Author.allAuthors";
-
- /**
- * Search a named author.
- */
- String FIND_AUTHOR = "Author.findAuthor";
- }
-
- /**
- * Serial Version UID.
- */
- private static final long serialVersionUID = 0L;
-
- /**
- * Primary key (will be auto generated).
- */
- private long id;
-
- /**
- * Name of the author.
- */
- private String name = null;
-
- /**
- * List of books written by the author.
- */
- private Collection<Book> books;
-
- /**
- * Default constructor.
- */
- public Author() {
- books = new ArrayList<Book>();
- }
-
- /**
- * Constructor with a given author name.
- * @param name - the name of the author
- */
- public Author(final String name) {
- this();
- setName(name);
- }
-
- /**
- * Relation ship (do not using lazy mode).
- * @return books written by this author
- */
- @OneToMany(mappedBy="author", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
- public Collection<Book> getBooks() {
- return books;
- }
-
- /**
- * Add a book with a given title.
- * @param title - the title of the book
- */
- public void addBook(final String title) {
- Book livre = new Book();
- livre.setTitle(title);
- livre.setAuthor(this);
- getBooks().add(livre);
- }
-
- /**
- * Sets the collection of books written by this author.
- * @param books the list of the books
- */
- public void setBooks(final Collection<Book> books) {
- this.books = books;
- }
-
- /**
- * @return name of the author
- */
- public String getName() {
- return name;
- }
-
- /**
- * Sets the name of the author.
- * @param name - the name of this author
- */
- public void setName(final String name) {
- this.name = name;
- }
-
- /**
- * @return an id for this object (incremented automatically)
- */
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- public long getId() {
- return this.id;
- }
-
- /**
- * Sets the id of this author object.
- * @param id the given id of this author
- */
- public void setId(final long id) {
- this.id = id;
- }
-
-
- /**
- * @return String representation of this entity object.
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder(this.getClass().getName());
- sb.append("[id=");
- sb.append(getId());
- sb.append(", name=");
- sb.append(getName());
- sb.append("]");
- return sb.toString();
- }
-}
-
-
-
- Two EJB-QL queries have been defined in
- the bean's class.They will be used to retrieve all the authors
- and an author with a given name respectively.
-
-
-
-
- Book Bean
-
- The Book bean is also a JPA entity bean.
- There is a relationship with the Author bean, one book being related
- to only one Author: Many-To-One relationship.
-
- The @JoinColumn annotation defines the column of the primary
- key to be used for the association between 2 entity beans:
-
- @ManyToOne
- @JoinColumn(name="Author_id")
- public Author getAuthor() {
- return author;
- }
-Here is the complete Book class:package org.ow2.jonas.examples.ear.entity;
-
-import java.io.Serializable;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-
-/**
- * Define a book.
- * @author Florent Benoit
- */
-@Entity
-@NamedQueries({@NamedQuery(name=Book.QN.ALL_BOOKS, query="select o FROM Book o"),
- @NamedQuery(name=Book.QN.FIND_BOOK, query="select o FROM Book o WHERE name = :name")
-})
-public class Book implements Serializable {
-
- /**
- * Defines Query names.
- */
- public static interface QN {
- /**
- * Search all books.
- */
- String ALL_BOOKS = "Book.allBooks";
-
- /**
- * Search a book.
- */
- String FIND_BOOK = "Book.findBook";
- }
-
- /**
- * Serial Version UID.
- */
- private static final long serialVersionUID = 0L;
-
- /**
- * Primary key.
- */
- private long id;
-
- /**
- * Author's book.
- */
- private Author author;
-
- /**
- * title of the book.
- */
- private String title;
-
- /**
- * Default constructor.
- */
- public Book() {
-
- }
-
- /**
- * Constructor. Build a new Book with the given title and written by the
- * given author.
- * @param title the given title
- * @param author the given author.
- */
- public Book(final String title, final Author author) {
- setTitle(title);
- setAuthor(author);
- }
-
- /**
- * @return the Author of this Book.
- */
- @ManyToOne
- @JoinColumn(name="Author_id")
- public Author getAuthor() {
- return author;
- }
-
- /**
- * Sets the author of this book.
- * @param author the given author.
- */
- public void setAuthor(final Author author) {
- this.author = author;
- }
-
- /**
- * @return the title of this book.
- */
- public String getTitle() {
- return title;
- }
-
- /**
- * Set the title of the book.
- * @param title - the title of the book
- */
- public void setTitle(final String title) {
- this.title = title;
- }
-
- /**
- * @return an id for this object (incremented automatically)
- */
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- public long getId() {
- return this.id;
- }
-
- /**
- * Sets the id of this author object.
- * @param id the given id of this author
- */
- public void setId(final long id) {
- this.id = id;
- }
-
- /**
- * @return String representation of this entity object.
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder(this.getClass().getName());
- sb.append("[id=");
- sb.append(getId());
- sb.append(", title=");
- sb.append(getTitle());
- sb.append("]");
- return sb.toString();
- }
-}
-
-
-
-
- Persistence File
-
- It is required to have a persistency file
- META-INF/persistence.xml to describe useful
- information. For example, the JNDI name of the
- DataSource to be used for database
- persistency.
-
-
- JPA Entity: META-INF/persistence.xml
-
- <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
-<persistence-unit name="entity" transaction-type="JTA">
- <provider></provider>
- <jta-data-source>jdbc_1</jta-data-source>
- <properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
- <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-
- <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
- <property name="eclipselink.ddl-generation.output-mode" value="database"/>
- <property name="eclipselink.target-database" value="HSQL"/>
-
- <property name="toplink.target-database" value="HSQL"/>
- <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
- <property name="toplink.ddl-generation.output-mode" value="database"/>
-
- <property name="openjpa.jdbc.DBDictionary" value="hsql"/>
- <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
- </properties>
-</persistence-unit>
-</persistence>
-
-
-
-
-
-
-
- Business Tier: EJB3 Beans
-
-
- This section will decribe the business parts of the application.
- Session beans provide synchronous RPC interfaces and the MessageDriven
- bean provides the asynchronous interface.
-
-
- Session Beans
-
- The Session beans have been separated into two logical parts:
- Writer and Reader beans provide the basic operations (read/write) on
- the entities, while Mailer and Initializer are using the previous
- ones to perform more advanced operations.
-
-
- Reader Bean
-
- The Reader Bean is a Stateless Session Bean that provides
- both a Remote and a Local business interface. It is responsible
- for all the read-like operations the application can do on the JPA
- entities. The listAllXYZ and
- findXYZ methods return the JPA entity
- beans.
-
-
- Stateless Session Bean: Reader Business Interface
-
- package org.ow2.jonas.examples.ear.reader;
-
-import java.util.List;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-
-/**
- * The {@link Reader} business interface is an un-restricted
- * read only view of the entities.
- * @author Guillaume Sauthier
- */
-public interface Reader {
-
- /**
- * @return the list of all the persisted {@link Author}s.
- */
- List<Author> listAllAuthors();
-
- /**
- * @return the list of all the persisted {@link Book}s.
- */
- List<Book> listAllBooks();
-
- /**
- * Find a given {@link Author} using it's name as a key.
- * @param name {@link Author}'s name.
- * @return the first {@link Author} that matches the given name.
- */
- Author findAuthor(final String name);
-
- /**
- * Find a given {@link Book} using it's name as a key.
- * @param name {@link Book}'s name.
- * @return the first {@link Book} that matches the given name.
- */
- Book findBook(final String name);
-}
-
-
-
- This bean uses an
- EntityManager (injected through the
- @PersistenceContext annotation).
-
- /**
- * Entity manager used by this bean.
- */
- @PersistenceContext
- private EntityManager entityManager = null;
-The EntityManager is also used to perform EJB-QL queries (they have
- been defined with the @NamedQuery annotation on top of the JPA
- classes). /**
- * @returns the list of all the persisted {@link Author}s.
- */
- public List<Author> listAllAuthors() {
- return entityManager.createNamedQuery(ALL_AUTHORS).getResultList();
- }
-
-
- Here is the code of the Reader EJB:package org.ow2.jonas.examples.ear.reader;
-
-import static org.ow2.jonas.examples.ear.entity.Author.QN.ALL_AUTHORS;
-import static org.ow2.jonas.examples.ear.entity.Author.QN.FIND_AUTHOR;
-import static org.ow2.jonas.examples.ear.entity.Book.QN.ALL_BOOKS;
-import static org.ow2.jonas.examples.ear.entity.Book.QN.FIND_BOOK;
-
-import java.util.List;
-
-import javax.ejb.Local;
-import javax.ejb.Remote;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-
-/**
- *The {@link ReaderBean} EJB is an unrestricted, read-only, Stateless Bean.
- * @author Guillaume Sauthier
- */
-@Stateless
-@Local(LocalReader.class)
-@Remote(RemoteReader.class)
-public class ReaderBean implements LocalReader, RemoteReader {
-
- /**
- * Entity manager used by this bean.
- */
- @PersistenceContext
- private EntityManager entityManager = null;
-
- /**
- * Find a given {@link Author} using it's name as a key.
- * @param name {@link Author}'s name.
- * @return the first {@link Author} that matches the given name.
- */
- @SuppressWarnings("unchecked")
- public Author findAuthor(final String name) {
- Query query = entityManager.createNamedQuery(FIND_AUTHOR);
- query.setParameter("name", name);
- List<Author> authors = query.getResultList();
- if (authors != null && authors.size() > 0) {
- return authors.get(0);
- }
- return null;
- }
-
- /**
- * Find a given {@link Book} using it's name as a key.
- * @param name {@link Book}'s name.
- * @return the first {@link Book} that matches the given name.
- */
- @SuppressWarnings("unchecked")
- public Book findBook(final String name) {
- Query query = entityManager.createNamedQuery(FIND_BOOK);
- query.setParameter("name", name);
- List<Book> books = query.getResultList();
- if (books != null && books.size() > 0) {
- return books.get(0);
- }
- return null;
- }
-
- /**
- * @return the list of all the persisted {@link Author}s.
- */
- @SuppressWarnings("unchecked")
- public List<Author> listAllAuthors() {
- return entityManager.createNamedQuery(ALL_AUTHORS).getResultList();
- }
-
- /**
- * @return the list of all the persisted {@link Book}s.
- */
- @SuppressWarnings("unchecked")
- public List<Book> listAllBooks() {
- return entityManager.createNamedQuery(ALL_BOOKS).getResultList();
- }
-
-}
-
-
-
-
- Writer Bean
-
- The Writer Bean is also a Stateless Session Bean, with a
- Remote and a Local business interface. This bean provides
- write-like operations (that modify the database content). It is
- also secured to allow access only to a specific role.
-
-
- Stateless Session Bean: Writer business
- Interface
-
- package org.ow2.jonas.examples.ear.writer;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-
-/**
- * Remote interface for the bean Writer.
- * @author JOnAS team
- */
-public interface Writer {
-
- /**
- * Persists a new {@link Author}.
- * @param author {@link Author} to add.
- */
- void addAuthor(final Author author);
-
- /**
- * Persists a new {@link Book}.
- * @param book {@link Book} to add.
- */
- void addBook(final Book book);
-
- /**
- * Cascade remove an {@link Author}.
- * @param author {@link Author} to be removed.
- */
- void removeAuthor(final Author author);
-
- /**
- * Cascade remove a {@link Book}.
- * @param book {@link Book} to be removed.
- */
- void removeBook(final Book book);
-}
-
- Through that interface, clients will be able to add
- new Authors and Books, but will also be able to remove
- them.
-
- This bean uses (like the Reader) an
- EntityManager (injected through the
- @PersistenceContext annotation).
-
- /**
- * Entity manager used by this bean.
- */
- @PersistenceContext
- private EntityManager entityManager = null;
-The EntityManager will be used to persists and destroy JPA entity
- instances. /**
- * Persists a new {@link Book}.
- * @param book {@link Book} to add.
- */
- public void addBook(final Book book) {
- entityManager.persist(book);
- }
-
- /**
- * Cascade remove a {@link Book}.
- * @param book {@link Book} to be removed.
- */
- public void removeBook(final Book book) {
- entityManager.remove(book);
- }
-
-
- Security for the Writer bean is provided in a declarative
- way: the class is annotated with @DeclareRoles and
- @RolesAllowed.
-
-
-
- @DeclareRoles declares an array of role names that
- will be used later in the bean
-
-
-
- @RolesAllowed, when placed on the class (instead of a
- method) specifies the default set of roles that are allowed
- to call this bean's methods
-
- In this sample, only the
- earsample role is authorized to actually use
- the Writer bean.
-
- Here is the code of the Writer EJB:package org.ow2.jonas.examples.ear.writer;
-
-import javax.annotation.security.DeclareRoles;
-import javax.annotation.security.RolesAllowed;
-import javax.ejb.Local;
-import javax.ejb.Remote;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-
-/**
- * This is an example of Session Bean, stateless, secured, available
- * with a Local and a Remote interface (with the same methods).
- * @author JOnAS team
- */
-@Stateless
-@Remote(RemoteWriter.class)
-@Local(LocalWriter.class)
-@DeclareRoles("earsample")
-@RolesAllowed("earsample")
-public class WriterBean implements LocalWriter, RemoteWriter {
-
- /**
- * Entity manager used by this bean.
- */
- @PersistenceContext
- private EntityManager entityManager = null;
-
- /**
- * Persists a new {@link Author}.
- * @param author {@link Author} to add.
- */
- public void addAuthor(final Author author) {
- entityManager.persist(author);
- }
-
- /**
- * Persists a new {@link Book}.
- * @param book {@link Book} to add.
- */
- public void addBook(final Book book) {
- entityManager.persist(book);
- }
-
- /**
- * Cascade remove an {@link Author}.
- * @param author {@link Author} to be removed.
- */
- public void removeAuthor(final Author author) {
- entityManager.remove(author);
- }
-
- /**
- * Cascade remove a {@link Book}.
- * @param book {@link Book} to be removed.
- */
- public void removeBook(final Book book) {
- entityManager.remove(book);
- }
-
-}
-
-
-
-
- Mailer Bean
-
- The Mailer bean provides a business interface supporting
- status e-mail sending.
-
-
- Stateless Session Bean: Mailer Business
- Interface
-
- package org.ow2.jonas.examples.ear.mail;
-
-/**
- * The {@link Mailer} business interface is used to send a status
- * mail, with all the {@link org.ow2.jonas.examples.ear.entity.Author}s
- * and {@link org.ow2.jonas.examples.ear.entity.Book}s in the library.
- * @author Guillaume Sauthier
- */
-public interface Mailer {
-
- /**
- * Send a mail to the given mail address.
- * @param address target mail address (must be of the form: xyz@abc.z)
- */
- void sendStatusMail(final String address);
-}
-
- This bean only provides a Remote interface. It is
- binded in the JNDI under the name specified in the mappedName
- attribute of the @Stateless annotation.
-
- @Stateless(mappedName="myMailerBean")
-@Remote(Mailer.class)
-public class MailerBean implements Mailer {
-
-
- The Mailer needs some other components to help it to execute
- it's job:
-
-
-
- A mail Session and a MimePartDataSource that will be
- used to create and send the e-mail
-
-
-
- A reference to the Reader bean
-
- The mail Session and the MimePartDataSource are
- acquired though injection, using the @Resource annotation.
-
- /**
- * Mail Session used to send the Mail.
- */
- @Resource(mappedName="mailSession_1")
- private Session mailSession;
-
- /**
- * Template for the message's content.
- */
- @Resource(mappedName="mailMimePartDS_1")
- private MimePartDataSource mimePartDatasource;
-The mappedName attribute of the @Resource specifies the JNDI name to
- be used when looking up theses components in the JNDI
- registry.
-
- The reference to the Reader bean is injected with the help
- of the @EJB annotation. Notice that the annotation did not provide
- any JNDI or mapped name value.
-
- /**
- * {@link LocalReader} EJB (Local interface).
- */
- @EJB
- private LocalReader reader;
-Here is the complete code of the Mailer bean:package org.ow2.jonas.examples.ear.mail;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.ejb.EJB;
-import javax.ejb.Remote;
-import javax.ejb.Stateless;
-import javax.mail.Address;
-import javax.mail.Message;
-import javax.mail.MessageContext;
-import javax.mail.MessagingException;
-import javax.mail.NoSuchProviderException;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimePartDataSource;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-import org.ow2.jonas.examples.ear.reader.LocalReader;
-
-/**
- * @author Guillaume Sauthier
- */
-@Stateless(mappedName="myMailerBean")
-@Remote(Mailer.class)
-public class MailerBean implements Mailer {
-
- /**
- * Mail Session used to send the Mail.
- */
- @Resource(mappedName="mailSession_1")
- private Session mailSession;
-
- /**
- * Template for the message's content.
- */
- @Resource(mappedName="mailMimePartDS_1")
- private MimePartDataSource mimePartDatasource;
-
- /**
- * {@link LocalReader} EJB (Local interface).
- */
- @EJB
- private LocalReader reader;
-
- /**
- * Send a mail to the given mail address.
- * @param address target mail address (must be of the form: xyz@abc.z)
- * @see org.ow2.jonas.examples.ear.mail.Mailer#sendStatusMail(java.lang.String)
- */
- public void sendStatusMail(final String address) {
-
- Address mailAddress = null;
- try {
- mailAddress = new InternetAddress(address);
- } catch (AddressException e) {
- System.err.println("Invalid mail address: " + e.getMessage());
- e.printStackTrace();
- return;
- }
-
- MessageContext context = mimePartDatasource.getMessageContext();
- Message message = context.getMessage();
- try {
- message.setContent(getContent(), "text/plain");
- } catch (MessagingException e) {
- System.err.println("Cannot set message content:" + e.getMessage());
- e.printStackTrace(System.err);
- return;
- }
-
- Transport transport = null;
- try {
- transport = mailSession.getTransport(mailAddress);
- } catch (NoSuchProviderException e) {
- System.err.println("No provider found for @:" + address);
- e.printStackTrace(System.err);
- return;
- }
- try {
- transport.connect();
- transport.sendMessage(message, new Address[] {mailAddress});
- transport.close();
- } catch (MessagingException e) {
- System.err.println("Cannot send message:" + e.getMessage());
- e.printStackTrace(System.err);
- return;
- }
-
- System.out.println("Mail successfully sent to: " + address);
- }
-
- /**
- * Generate the mail's content.
- * @return the mail message content.
- */
- private String getContent() {
-
- StringBuilder sb = new StringBuilder();
-
- // Print Header
- sb.append("---------------------------------------------------\n");
- sb.append(" OW2 JOnAS EAR Sample Mailer Bean.\n");
- sb.append("---------------------------------------------------\n");
- sb.append("Generated the " + new Date() + "\n");
- sb.append("\n");
-
- // Print the Authors
- List<Author> authors = reader.listAllAuthors();
- sb.append("List of all registered Authors (" + authors.size() + ") and their Books:\n");
- for (Author author : authors) {
- sb.append(" * " + author.getName() + " [" + author.getId() + "]\n");
- Collection<Book> books = author.getBooks();
- for (Book book : books) {
- sb.append(" - " + book.getTitle() + "[" + book.getId() + "]\n");
- }
- }
-
- // Print the Books
- sb.append("\n");
- sb.append("List of all registered Books:\n");
- List<Book> books = reader.listAllBooks();
- for (Book book : books) {
- sb.append(" * " + book.getTitle() + "[" + book.getAuthor().getName() + "]\n");
- }
-
- // Print the footer
- sb.append("\n");
- sb.append("Enjoy your new JOnAS !\n");
- sb.append("\n");
- sb.append(" -- JOnAS Team\n");
-
- return sb.toString();
- }
-
-}
-
-
-
-
- Initializer Bean
-
- The Initializer bean is a kind of hidden bean: it does not
- provide operations that should be usable from the clients.
-
- The purpose of this bean is to ensure that the JPA model is
- initialized with some default values. Subsequent calls to the JPA
- model will then always show JPA entities.
-
- Since this session bean uses the Writer bean (required,
- because it writes values to the database), it needs to declare
- security.
-
- Because this bean can be used by any client (secured or
- not), and it uses a secured bean, it will need to have to be
- executed under a given role. This role name is specified with the
- @RunAs annotation:
-
- @RunAs("earsample")
-public class InitializerBean implements Initializer {
-Here is the complete code of the bean:
-
- package org.ow2.jonas.examples.ear.init;
-
-import javax.annotation.security.RunAs;
-import javax.ejb.EJB;
-import javax.ejb.Remote;
-import javax.ejb.Stateless;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-import org.ow2.jonas.examples.ear.reader.LocalReader;
-import org.ow2.jonas.examples.ear.writer.LocalWriter;
-
-/**
- * The {@link InitializerBean} EJB is here to initialize only once
- * the Database/Entities. It simply checks if there is some {@link Author}s
- * already persisted; if none are found, we will inject defaults values.
- * @author Guillaume Sauthier
- */
-@Stateless(mappedName="myInitializerBean")
-@Remote(Initializer.class)
-@RunAs("earsample")
-public class InitializerBean implements Initializer {
-
- /**
- * Injected reference to the {@link org.ow2.jonas.examples.ear.writer.Writer} EJB.
- */
- @EJB
- private LocalWriter writer;
-
- /**
- * Injected reference to the {@link org.ow2.jonas.examples.ear.reader.Reader} EJB.
- */
- @EJB
- private LocalReader reader;
-
- /**
- * Initialize the minimal set of entities needed by the sample.
- * @see org.ow2.jonas.examples.ear.init.Initializer#initializeEntities()
- */
- public void initializeEntities() {
-
- if (reader.findAuthor("Honore de Balzac") == null) {
- // Balzac was not persited, add it now.
- Author balzac = new Author("Honore de Balzac");
- Book pereGloriot = new Book("Le Pere Goriot", balzac);
- balzac.getBooks().add(pereGloriot);
- Book lesChouans = new Book("Les Chouans", balzac);
- balzac.getBooks().add(lesChouans);
-
- // Persists the Author and all of his books
- writer.addAuthor(balzac);
- }
-
- if (reader.findAuthor("Victor Hugo") == null) {
- // Hugo was not persited, add it now.
- Author hugo = new Author("Victor Hugo");
- hugo.addBook("Les Miserables");
- hugo.addBook("Notre-Dame de Paris");
-
- // Store
- writer.addAuthor(hugo);
- }
- }
-
-}
-
-
-
-
-
- MessageDriven Bean
-
- The javaee5-earsample application provides a MessageDriven
- bean, aka an EJB that receives
- JMS messages. A MDB does not
- have a business interface, therefore, it is not exposed (through
- JNDI) to application clients or other
- EJBs. The only way to interact with them is to
- send messages to the JMS destination they're
- listening on.
-
- A MDB is defined using the @MessageDriven
- annotation. The bean is also configured with the help of the
- @ActivationConfigProperty annotations. In this case, they define the
- JNDI name of the JMS
- destination ("SampleQueue") and the destination
- type (can be javax.jms.Queue or
- javax.jms.Topic for
- JMS destinations). MDBs
- listening to JMS destinations need to implement
- the javax.jms.MessageListener
- interface.
-
- @MessageDriven(activationConfig={
- @ActivationConfigProperty(propertyName="destination",
- propertyValue="SampleQueue"),
- @ActivationConfigProperty(propertyName="destinationType",
- propertyValue="javax.jms.Queue")
- })
-@RunAs("earsample")
-public class JMSMessageBean implements MessageListener {
-This bean is also executed with the @RunAs annotation. This is needed
- because (like the Initializer) it uses the Writer bean, which is a
- secured bean.
-
- Here is the code of the MDB:
-
- package org.ow2.jonas.examples.ear.mdb;
-
-import javax.annotation.security.RunAs;
-import javax.ejb.ActivationConfigProperty;
-import javax.ejb.EJB;
-import javax.ejb.MessageDriven;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.TextMessage;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-import org.ow2.jonas.examples.ear.reader.LocalReader;
-import org.ow2.jonas.examples.ear.writer.LocalWriter;
-
-/**
- * The {@link JMSMessageBean} is a message driven bean activated when a JMS
- * {@link Message} comes to a given Destination.
- * For each new {@link Message}, this bean will create and persists a new
- * {@link Book} instance.
- * This MDB is annotated with {@link RunAs} because it uses a secured
- * business interface.
- * @author Guillaume Sauthier
- */
-@MessageDriven(activationConfig={
- @ActivationConfigProperty(propertyName="destination",
- propertyValue="SampleQueue"),
- @ActivationConfigProperty(propertyName="destinationType",
- propertyValue="javax.jms.Queue")
- })
-@RunAs("earsample")
-public class JMSMessageBean implements MessageListener {
-
- /**
- * Secured business interface.
- */
- @EJB
- private LocalWriter writer;
-
- /**
- * Unsecured {@link LocalReader} business interface.
- */
- @EJB
- private LocalReader reader;
-
- /**
- * Called when a new JMS {@link Message} is received on the destination.
- * This method will use the {@link LocalWriter} Bean interface to add
- * Books to a given Author.
- * @param message {@link Message} containing {@link Book} title.
- * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
- */
- public void onMessage(final Message message) {
-
- // TODO to be removed
- System.out.println("Received JMS Message: " + message);
-
- // Extract Message's text value
- String text = null;
- if (message instanceof TextMessage) {
- TextMessage textMessage = (TextMessage) message;
- try {
- text = textMessage.getText();
- } catch (JMSException e) {
- System.err.println("Unexpected Exception: " + e.getMessage());
- e.printStackTrace(System.err);
- return;
- }
- } else {
- // not a TextMessage, I don't know what to do with it
- return;
- }
-
- Author edition = reader.findAuthor("Editions XY");
- if (edition == null) {
- edition = new Author("Editions XY");
- writer.addAuthor(edition);
- }
-
- // Persists a new Book
- Book book = new Book(text, edition);
- writer.addBook(book);
-
- }
-
-}
-
-
-
-
-
-
- Web Tier: Servlets
-
-
- Servlets are the web front end of the application, that's the
- presentation layer. Servlets are in charge of displaying business
- objects to the user and giving them handles to act on theses data
- objects.
-
- Following is a screenshot obtained when pressing the "View
- Library Content" button on the home page:
-
-
-
-
-
-
-
-
-
- The servlet ExampleServlet is
- used to generate the above web page.
-
- As it is only a presentation front end, it does not manage the
- data itself. The servlet uses the Reader EJB to retrieve the content
- of the model.
-
- The reference to the EJB is injected into the servlet in the
- Java EE 5 way: using annotations.
-
- /**
- * Link to the Local Reader bean. The bean will be injected by JOnAS.
- */
- @EJB
- private LocalReader readerBean;
-Thousands of times easier than the old J2EE 1.4 way (InitialContext,
- lookup and narrow) !
-
- Here is the code of the read-only servlet:package org.ow2.jonas.examples.ear.web;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Collection;
-import java.util.List;
-
-import javax.ejb.EJB;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-import org.ow2.jonas.examples.ear.init.Initializer;
-import org.ow2.jonas.examples.ear.reader.LocalReader;
-
-/**
- * Defines a servlet that is accessing the two entities through a local session
- * bean.
- * @author Florent Benoit
- */
-public class ExampleServlet extends HttpServlet {
-
- /**
- * Serializable class uid.
- */
- private static final long serialVersionUID = -3172627111841538912L;
-
- /**
- * Link to the Local Reader bean. Bean will be injected by JOnAS.
- */
- @EJB
- private LocalReader readerBean;
-
- /**
- * Link to the initializer bean.
- */
- @EJB
- private Initializer initializerBean;
-
- /**
- * Called by the server (via the service method) to allow a servlet to
- * handle a GET request.
- * @param request an HttpServletRequest object that contains the request the
- * client has made of the servlet
- * @param response an HttpServletResponse object that contains the response
- * the servlet sends to the client
- * @throws IOException if an input or output error is detected when the
- * servlet handles the GET request
- * @throws ServletException if the request for the GET could not be handled
- */
- @Override
- public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException {
-
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">");
- out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">");
- out.println(" <head>");
- out.println(" <link type=\"text/css\" href=\"ow2_jonas.css\" rel=\"stylesheet\" id=\"stylesheet\" />");
- out.println(" <title>Ear Sample of Servlet accessing an EJB</title>");
- out.println(" </head>");
- out.println("<body style=\"background : white; color : black;\">");
-
- out.println(" <div><a href=\"http://www.ow2.org\"><img src=\"img/logoOW2.png\" alt=\"logo\"/></a></div>");
- out.println(" <div class=\"logos\">");
- out.println(" <img src=\"img/tomcat.gif\" alt=\"Tomcat Logo\"/>");
- out.println(" <img src=\"img/jetty.gif\" alt=\"Jetty Logo\"/>");
- out.println(" <img src=\"img/ow_jonas_logo.gif\" alt=\"JOnAS Logo\"/>");
- out.println(" </div>");
-
- out.println(" <div class=\"titlepage\">Ear sample of Servlet accessing an EJB</div>");
-
-
- out.println(" <div class=\"links\">");
- initAuthorBooks(out);
- out.println(" <br />");
- out.println(" </div>");
-
- out.println(" <div class=\"links\">");
- displayAuthors(out);
- out.println(" </div>");
-
- out.println(" <div class=\"links\">");
- out.println(" <form action=\"secured/Admin\" method=\"get\">");
- out.println(" <div><input type=\"submit\" value=\"Modify Library Content\"/></div>");
- out.println(" </form>");
- out.println(" </div>");
-
- out.println(" <div class=\"footer\">");
- out.println(" <p>");
- out.println(" <a href=\"http://validator.w3.org/check/referer\">");
- out.println(" <img src=\"img/valid-xhtml11.png\" alt=\"Valid XHTML 1.1!\"");
- out.println(" title=\"Valid XHTML 1.1!\" height=\"31\" width=\"88\" />");
- out.println(" </a>");
- out.println(" <a href=\"http://jigsaw.w3.org/css-validator/\">");
- out.println(" <img style=\"border:0;width:88px;height:31px\" src=\"img/vcss.png\"");
- out.println(" title=\"Valid CSS!\" alt=\"Valid CSS!\" />");
- out.println(" </a>");
- out.println(" </p>");
- out.println(" </div>");
-
- out.println("</body>");
- out.println("</html>");
- out.close();
- }
-
- /**
- * Init list of authors/books.
- * @param out the given writer
- */
- private void initAuthorBooks(final PrintWriter out) {
- out.println("Initialize authors and their books...<br/>");
-
- try {
- initializerBean.initializeEntities();
- } catch (Exception e) {
- displayException(out, "Cannot init list of authors with their books", e);
- return;
- }
- }
-
- /**
- * Display authors.
- * @param out the given writer
- */
- private void displayAuthors(final PrintWriter out) {
- out.println("Get authors");
- out.println("<br /><br />");
-
- // Get list of Authors
- List<Author> authors = null;
- try {
- authors = readerBean.listAllAuthors();
- } catch (Exception e) {
- displayException(out, "Cannot call listAllAuthors on the bean", e);
- return;
- }
-
- // List for each author, the name of books
- if (authors != null) {
- for (Author author : authors) {
- out.println("List of books with author '" + author.getName() + "' :");
- out.println("<ul>");
- Collection<Book> books = author.getBooks();
- if (books == null) {
- out.println("<li>No book !</li>");
- } else {
- for (Book book : books) {
- out.println("<li>Title '" + book.getTitle() + "'.</li>");
- }
- }
- out.println("</ul>");
-
- }
- } else {
- out.println("No author found !");
- }
-
- }
-
- /**
- * If there is an exception, print the exception.
- * @param out the given writer
- * @param errMsg the error message
- * @param e the content of the exception
- */
- private void displayException(final PrintWriter out, final String errMsg, final Exception e) {
- out.println("<p>Exception : " + errMsg);
- out.println("<pre>");
- e.printStackTrace(out);
- out.println("</pre></p>");
- }
-
-}
-
-
- The web application allows the user to change the model's
- content (ie add new Authors to the list of managed authors). This
- time, this is a write-like operation, so security is required to
- restrict unauthorized users from changing the model.
-
-
-
-
-
-
-
-
-
-
-
- This behaviour is achieved through some additions into the
- WEB-INF/web.xml:
-
- <servlet>
- <servlet-name>AdminServlet</servlet-name>
- <servlet-class>org.ow2.jonas.examples.ear.web.AdminServlet</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>AdminServlet</servlet-name>
- <url-pattern>/secured/*</url-pattern>
- </servlet-mapping>
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Protected Area</web-resource-name>
- <!-- Define the context-relative URL(s) to be protected -->
- <url-pattern>/secured/*</url-pattern>
- <!-- If you list http methods, only those methods are protected -->
- <http-method>DELETE</http-method>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
- <http-method>PUT</http-method>
- </web-resource-collection>
- <auth-constraint>
- <!-- Anyone with one of the listed roles may access this area -->
- <role-name>earsample</role-name>
- </auth-constraint>
- </security-constraint>
-
- <!-- Default login configuration uses BASIC authentication -->
- <login-config>
- <auth-method>BASIC</auth-method>
- <realm-name>JOnAS Realm</realm-name>
- </login-config>
-
- <!-- Security roles referenced by this web application -->
- <security-role>
- <role-name>earsample</role-name>
- </security-role>
-By defining a <security-constraint> element,
- the web developer has decided to protect a given
- <url-pattern> (matching the servlet's
- mapping). Protection means that only authenticated users with the
- earsample<role-name> may
- access that page.
-
- Then, once the user has authenticated himself (assuming he has
- the earsample role), he will be able to access the
- web page, allowing changes to the model:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Application Clients
-
-
- The Java EE 5 EAR Sample provides multiple application clients
- (AC) showing how to interact with the application
- in different ways, and under different security levels:
-
-
-
- Not Secured AC: this client uses the
- Mailer and Reader bean, using the Reader, it displays the
- Authors and Books, and using the Mailer bean, it sends a mail
- with an equivalent content.
-
-
-
- JAAS Secured AC: this clients shows
- usage of JAAS authentication. It uses the
- Writer bean, which required a user with the
- "earsample" role, to insert new Authors and
- Books.
-
-
-
- JMS AC: this client mainly interacts
- with a dedicated JMS Queue to sends Book
- creation orders, then it waits some times and uses the Reader
- bean to see if the new Books were persisted.
-
-
-
-
- Not Secured Application Client
-
- This AC uses 3 beans that are freely available for anonymous
- usage: Initializer, Reader and Mailer.
-
- The Client can be launched using the following command
- line:
-
- >$jclient -nowsgen $JONAS_BASE/deploy/javaee5-earsample.ear -jarClient not-secured-application-client.jar
-ClientContainer.info : Use the application client
-'/tmp/client-deployer-coqp/EARDeployableImpl/javaee5-earsample.ear/not-secured-application-client.jar'
-of the Ear 'file:/tmp/client-deployer-coqp/EARDeployableImpl/javaee5-earsample.ear/'.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-OW2 JOnAS :: EAR Sample :: Not Secured Application Client
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Initialization ... Done.
-Get the RemoteReader Bean reference: org.ow2.jonas.examples.ear.reader.ReaderBean_org.ow2.jonas.examples.ear.reader.RemoteReader/7735352
-List of authors, and their books:
- * Honore de Balzac
- -> Le Pere Goriot [id: 1]
- -> Les Chouans [id: 2]
- * Victor Hugo
- -> Les Miserables [id: 3]
- -> Notre-Dame de Paris [id: 4]
-List of books:
- * Le Pere Goriot [Honore de Balzac]
- * Les Chouans [Honore de Balzac]
- * Les Miserables [Victor Hugo]
- * Notre-Dame de Paris [Victor Hugo]
-Get the Mailer Bean reference: org.ow2.jonas.examples.ear.mail.MailerBean_org.ow2.jonas.examples.ear.mail.Mailer/7735352
-Success.
-
-
- The Initializer, Mailer and Reader beans are get via
- annotation based injection (no JNDI lookup is necessary).
-
- @EJB
-RemoteReader reader;
-
-
-
-
- By default, a mail displaying the library content is sent to
- the ${user.name}@localhost address. This value
- can be changed by adding another mail address into the command
- line:
-
- >$jclient -nowsgen $JONAS_BASE/deploy/javaee5-earsample.ear \
- -jarClient not-secured-application-client.jar someone@somewhere.org
-
- An example of e-mail
-
- ---------------------------------------------------
- OW2 JOnAS EAR Sample Mailer Bean.
----------------------------------------------------
-Generated the Wed May 21 16:58:57 CEST 2008
-
-List of all registered Authors (3) and their Books:
- * Honore de Balzac [1]
- - Le Pere Goriot[1]
- - Les Chouans[2]
- * Victor Hugo [2]
- - Les Miserables[3]
- - Notre-Dame de Paris[4]
-
-List of all registered Books:
- * Le Pere Goriot[Honore de Balzac]
- * Les Chouans[Honore de Balzac]
- * Les Miserables[Victor Hugo]
- * Notre-Dame de Paris[Victor Hugo]
-
-Enjoy your new JOnAS !
-
- -- JOnAS Team
-
-
-
- Here is the not secured application client
- code:package org.ow2.jonas.examples.ear.client;
-
-import java.io.PrintStream;
-import java.util.Collection;
-import java.util.List;
-
-import javax.ejb.EJB;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-import org.ow2.jonas.examples.ear.init.Initializer;
-import org.ow2.jonas.examples.ear.mail.Mailer;
-import org.ow2.jonas.examples.ear.reader.RemoteReader;
-
-/**
- * Simple Application Client.
- * @author Guillaume Sauthier
- */
-public final class NotSecuredApplicationClient {
-
- /**
- * Empty default constructor for utility class.
- */
- private NotSecuredApplicationClient() {
-
- }
-
- /**
- * Link to the initializer bean.
- */
- @EJB
- static private Initializer initializerBean;
-
- /**
- * Link to the Remote Reader bean. Bean will be injected by JOnAS.
- */
- @EJB
- static private RemoteReader readerBean;
-
- /**
- * Link to the Mailer bean. Bean will be injected by JOnAS.
- */
- @EJB
- static private Mailer mailerBean;
-
-
- /**
- * @param args Command line arguments
- *
- */
- public static void main(final String[] args) {
-
- PrintStream out = System.out;
-
- // Print Header
- out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
- out.println("OW2 JOnAS :: EAR Sample :: Not Secured Application Client ");
- out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
-
- // Init datas if needed
- out.print("Initialization ... ");
- initializerBean.initializeEntities();
- out.println("Done.");
-
-
- out.println("The RemoteReader Bean reference is : " + readerBean);
-
- // List registered authors and their books
- out.println("List of authors, and their books:");
- // retrieve again the authors list (now it has been initialized)
- List<Author> authors = readerBean.listAllAuthors();
- for (Author author : authors) {
- out.println(" * " + author.getName());
- Collection<Book> books = author.getBooks();
- for (Book book : books) {
- out.println(" -> " + book.getTitle() + " [id: " + book.getId() + "]");
- }
- }
-
- // Only list registered books
- List<Book> books = readerBean.listAllBooks();
- out.println("List of books:");
- for(Book book : books) {
- out.println(" * " + book.getTitle() + " [" + book.getAuthor().getName() + "]");
- }
-
- // Use the Mailer bean to send
- // Use the first command line argument as a mail address.
- // Fall back to a reasonable default ${user.name}@localhost
- String address = System.getProperty("user.name") + "@localhost";
- if (args.length > 0) {
- // Got an argument, use it ...
- address = args[0];
- }
-
- out.println("The Mailer Bean reference is : " + mailerBean);
-
- // Call the Mailer bean to send the expected e-mail.
- mailerBean.sendStatusMail(address);
-
- // OK, we're done
- out.println("Success.");
-
- }
-}
-
-
-
-
- JAAS Secured Application Client
-
- This AC is secured using JAAS. It means that the client will
- be authenticated at startup.
-
- The Client can be launched using the following command
- line:
-
- >$jclient -nowsgen $JONAS_BASE/deploy/javaee5-earsample.ear -jarClient jaas-secured-application-client.jar
-ClientContainer.info : Use the application client
-'/tmp/client-deployer-sauthieg/EARDeployableImpl/javaee5-earsample.ear/jaas-secured-application-client.jar'
-of the Ear 'file:/tmp/client-deployer-sauthieg/EARDeployableImpl/javaee5-earsample.ear/'.
-ClientContainer.info : Using the login/password specified in the jonas-client.xml file with a specific CallbackHandler
-ClientContainer.info : Using JAAS loginContext 'javaee5-earsample'
-from the file 'jar:file:/tmp/client-deployer-sauthieg/EARDeployableImpl/javaee5-earsample.ear/jaas-secured-application-client.jar!/jaas.config'.
-ClientContainer.info : Starting client...
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-OW2 JOnAS :: EAR Sample :: Secured Application Client
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Initialization ... Done.
-Get the RemoteReader Bean reference: org.ow2.jonas.examples.ear.reader.ReaderBean_org.ow2.jonas.examples.ear.reader.RemoteReader/7735352
-List of authors, and their books:
- * Honore de Balzac
- -> Le Pere Goriot [id: 1]
- -> Les Chouans [id: 2]
- * Victor Hugo
- -> Les Miserables [id: 3]
- -> Notre-Dame de Paris [id: 4]
-Get the RemoteWriter Bean reference: org.ow2.jonas.examples.ear.writer.WriterBean_org.ow2.jonas.examples.ear.writer.RemoteWriter/7735352
-Created a new Author:
-org.ow2.jonas.examples.ear.entity.Author[id=0, name=Emile Zola]
-Updated authors' list:
- * Honore de Balzac
- -> Le Pere Goriot [id: 1]
- -> Les Chouans [id: 2]
- * Victor Hugo
- -> Les Miserables [id: 3]
- -> Notre-Dame de Paris [id: 4]
- * Emile Zola
- -> Germinal [id: 45]
- -> La Bete Humaine [id: 46]
-Cleaned added Author.
-Success.
-
-
- This AC has been configured to use the LoginCallbackHandler.
- The CallbackHandler will be configured by JOnAS to use the
- jonas/jonas username and password pair. So, nothing has to be done
- to provide a password interactively.
-
-
- META-INF/application-client.xml
-
- <application-client
- 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/application-client_5.xsd"
- version="5">
- <display-name>OW2 JOnAS :: EAR Sample :: Secured Application Client</display-name>
- <callback-handler>org.ow2.jonas.security.auth.callback.LoginCallbackHandler</callback-handler>
-</application-client>
-
- META-INF/jonas-client.xml
-
- <jonas-client xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://jonas.ow2.org/ns/jonas-client_5_0.xsd" >
-
- <jonas-security>
- <jaasfile>jaas.config</jaasfile>
- <jaasentry>javaee5-earsample</jaasentry>
- <username>jonas</username>
- <password>jonas</password>
- </jonas-security>
-
-</jonas-client>
-
-
- jaas.config
-
- javaee5-earsample {
- // Login Module to use for the example javaee5-earsample.
-
- // First, use a LoginModule for the authentication
- // Use the resource memrlm_1
- org.ow2.jonas.security.auth.spi.JResourceLoginModule required
- resourceName="memrlm_1"
- ;
-
- // Use the login module to propagate security to the JOnAS server
- org.ow2.jonas.security.auth.spi.ClientLoginModule required
- ;
-};
- The CallbackHandler is
- configured using the jonas-security element: it
- will load the specified JAAS configuration file
- (jaas.config), then load the entry named
- javaee5-earsample and will create a dedicated
- LoginModule chain. The
- ClientContainer will then configure the
- CallbackHandler to provide a
- specified username and password when requested by the
- LoginModules.
-
- As the authentication is done by the ClientContainer at
- startup, there are no security concerns in the code. The
- ClientContainer guarantees that if this code is executed, it is run
- by an authenticated user. If the user could not authenticate, the
- ClientContainer will exit before running the real client's
- code.
-
-
-package org.ow2.jonas.examples.ear.client;
-
-import java.io.PrintStream;
-import java.util.Collection;
-import java.util.List;
-import java.text.MessageFormat;
-
-import javax.ejb.EJB;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-import org.ow2.jonas.examples.ear.init.Initializer;
-import org.ow2.jonas.examples.ear.reader.RemoteReader;
-import org.ow2.jonas.examples.ear.writer.RemoteWriter;
-
-/**
- * Simple Application Client.
- * @author Guillaume Sauthier
- */
-public final class SecuredApplicationClient {
-
- /**
- * Empty default constructor for utility class.
- */
- private SecuredApplicationClient() {
-
- }
-
- /**
- * Link to the initializer bean.
- */
- @EJB
- static private Initializer initializerBean;
-
- /**
- * Link to the Remote Reader bean. Bean will be injected by JOnAS.
- */
- @EJB
- static private RemoteReader readerBean;
-
- /**
- * Link to the Remote Writer bean. Bean will be injected by JOnAS.
- */
- @EJB
- static private RemoteWriter writerBean;
-
- /**
- * @param args Command line arguments
- *
- */
- public static void main(final String[] args) {
-
- PrintStream out = System.out;
-
- // Print Header
- out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
- out.println("OW2 JOnAS :: EAR Sample :: Secured Application Client ");
- out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
- // Init. data if needed
- out.print("Initialization ... ");
- initializerBean.initializeEntities();
- out.println("Done.");
-
- out.println("The RemoteReader Bean reference is: " + readerBean);
-
- // List registered authors and their books
- out.println("List of authors, and their books:");
- // retrieve again the authors list (now it has been initialized)
- List<Author> authors = readerBean.listAllAuthors();
- for (Author author : authors) {
- out.println(" * " + author.getName());
- Collection<Book> books = author.getBooks();
- for (Book book : books) {
- out.println(MessageFormat.format(" -> {0} [id: {1}]", book.getTitle(), book.getId()));
- }
- }
-
- // Use the secured Bean (RemoteWriter)
- // ======================================
- out.println("Get the RemoteWriter Bean reference: " + writerBean);
-
- // Add another author, and some books
- Author zola = new Author("Emile Zola");
- Book germinal = new Book("Germinal", zola);
- Book beteHumaine = new Book("La Bete Humaine", zola);
- zola.getBooks().add(germinal);
- zola.getBooks().add(beteHumaine);
-
- // Display Author before storage
- out.println("Created a new Author: ");
- out.println(zola.toString());
-
- // Persists
- writerBean.addAuthor(zola);
-
- // See the new content
- out.println("Updated authors' list:");
- authors = readerBean.listAllAuthors();
- for (Author author : authors) {
- out.println(" * " + author.getName());
- Collection<Book> books = author.getBooks();
- for (Book book : books) {
- out.println(MessageFormat.format(" -> {0} [id: {1}]", book.getTitle(), book.getId()));
- }
- }
-
- // Remove Zola (and its books), so that next time the client
- // is executed, we can add them again.
- writerBean.removeAuthor(zola);
- out.println("Cleaned added Author.");
- out.println("Success.");
-
- }
-}
-
-
-
-
- JMS Application Client
-
- This AC demonstrates how to connect a client to the
- application using JMS instead of using
- RMI EJB objects.
-
- The Client can be launched using the following command
- line:
-
- >$jclient -nowsgen $JONAS_BASE/deploy/javaee5-earsample.ear
-ClientContainer.warn : There are 3 clients in this ear, choosing the first one : jms-application-client.jar
-ClientContainer.info : Use the application client '/tmp/client-deployer-sauthieg/EARDeployableImpl/javaee5-earsample.ear/jms-application-client.jar'
-of the Ear 'file:/tmp/client-deployer-sauthieg/EARDeployableImpl/javaee5-earsample.ear/'.
-ClientContainer.info : Starting client...
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-OW2 JOnAS :: EAR Sample :: Messager Application Client
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Initialization ... Done.
-Sended creation order for 'Encyclopedia Universalis Vol.0'
-Sended creation order for 'Encyclopedia Universalis Vol.1'
-Sended creation order for 'Encyclopedia Universalis Vol.2'
-Sended creation order for 'Encyclopedia Universalis Vol.3'
-Sended creation order for 'Encyclopedia Universalis Vol.4'
-Sended creation order for 'Encyclopedia Universalis Vol.5'
-Sended creation order for 'Encyclopedia Universalis Vol.6'
-Sended creation order for 'Encyclopedia Universalis Vol.7'
-Sended creation order for 'Encyclopedia Universalis Vol.8'
-Sended creation order for 'Encyclopedia Universalis Vol.9'
-Wait for 2500 ms...
-Get Reader Bean ...
- * Honore de Balzac
- -> Le Pere Goriot [id: 1]
- -> Les Chouans [id: 2]
- * Victor Hugo
- -> Les Miserables [id: 3]
- -> Notre-Dame de Paris [id: 4]
- * Editions XY
- -> Encyclopedia Universalis Vol.0 [id: 5]
- -> Encyclopedia Universalis Vol.1 [id: 6]
- -> Encyclopedia Universalis Vol.2 [id: 7]
- -> Encyclopedia Universalis Vol.3 [id: 8]
- -> Encyclopedia Universalis Vol.4 [id: 9]
- -> Encyclopedia Universalis Vol.5 [id: 10]
- -> Encyclopedia Universalis Vol.6 [id: 11]
- -> Encyclopedia Universalis Vol.7 [id: 12]
- -> Encyclopedia Universalis Vol.8 [id: 13]
- -> Encyclopedia Universalis Vol.9 [id: 14]
-Success.
-
-
- The client acts as a message producer: it retrieves a
- JMS Queue object
- (named SampleQueue) and a JMS
- QueueConnectionFactory. Then, it uses
- both to send asynchronous messages to the server.
-
- Each message represents a book registration order and contains
- the name of the Book to create.
-
- On the application's side (in other words, on the server),
- there is a dedicated MessageDrivenBean (see the ), that will be invoked for all the
- JMS messages received by the
- Queue.
-
- Usage of JMS objects have to be declared in
- standard and specific deployment descriptors (using
- resource-ref and/or
- resource-env-ref, respectively
- jonas-resource and/or
- jonas-resource-env)
-
- This JMS example shows how to use resource injection via
- @Resource annotation (see JMS client code below).
-
-
- META-INF/application-client.xml
-
- <application-client
- 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/application-client_5.xsd"
- version="5">
-
- <display-name>OW2 JOnAS :: EAR Sample :: JMS Application Client</display-name>
-
- <!-- The JMS ConnectionFactory to use -->
- <resource-ref>
- <res-ref-name>jms/QueueConnectionFactory</res-ref-name>
- <res-type>javax.jms.QueueConnectionFactory</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
-
- <!-- The JMS Queue where Messages will be send -->
- <resource-env-ref>
- <resource-env-ref-name>jms/SampleQueue</resource-env-ref-name>
- <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
- </resource-env-ref>
-
-</application-client>
-
- META-INF/jonas-client.xml
-
- <jonas-client xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://jonas.ow2.org/ns/jonas-client_5_0.xsd" >
- <jonas-resource>
- <res-ref-name>jms/QueueConnectionFactory</res-ref-name>
- <jndi-name>JQCF</jndi-name>
- </jonas-resource>
-
- <jonas-resource-env>
- <resource-env-ref-name>jms/SampleQueue</resource-env-ref-name>
- <jndi-name>SampleQueue</jndi-name>
- </jonas-resource-env>
-</jonas-client>
-
- Here is the code of the JMS client:package org.ow2.jonas.examples.ear.client;
-
-import java.io.PrintStream;
-import java.util.Collection;
-import java.util.List;
-import java.text.MessageFormat;
-
-import javax.jms.*;
-import javax.ejb.EJB;
-import javax.annotation.Resource;
-
-import org.ow2.jonas.examples.ear.entity.Author;
-import org.ow2.jonas.examples.ear.entity.Book;
-import org.ow2.jonas.examples.ear.init.Initializer;
-import org.ow2.jonas.examples.ear.reader.RemoteReader;
-
-/**
- * This application-client shows usage of JMS destinations to
- * interact with the server-side application.
- * @author Guillaume Sauthier
- */
-public final class JMSApplicationClient {
-
- /**
- * Number of Books to be created.
- */
- private static final int ITERATION_NUMBER = 10;
-
- /**
- * Link to the initializer bean.
- */
- @EJB
- private static Initializer initializerBean;
-
- /**
- * JMS conectionFactoery
- */
- // Resource injection
- @Resource(mappedName="JQCF")
- private static ConnectionFactory factory;
-
- /**
- * JMS Queue SampleQueue
- */
- // Resource injection
- @Resource(mappedName="SampleQueue")
- private static Queue queue;
-
-
- /**
- * Link to the Remote Reader bean. Bean will be injected by JOnAS.
- */
- @EJB
- static private RemoteReader readerBean;
-
- /**
- * Empty default constructor for utility class.
- */
- private JMSApplicationClient() {
-
- }
-
- /**
- * @param args Command line arguments
- * @throws Exception JMS
- */
- public static void main(final String[] args) throws Exception {
-
- PrintStream out = System.out;
-
- // Print Header
- out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
- out.println("OW2 JOnAS :: EAR Sample :: Messager Application Client ");
- out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
-
-
-
-
- // Init. data if needed
- out.print("Initialization ... ");
-
- initializerBean.initializeEntities();
- out.println("Done.");
-
- // Send Book creation Messages
- Connection connection = factory.createConnection();
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageProducer messageProducer= session.createProducer(queue);
-
- for (int i = 0; i < ITERATION_NUMBER; i++) {
- String title = "Encyclopedia Universalis Vol." + i;
- Message message = session.createTextMessage(title);
- messageProducer.send(message);
- out.println("Sended creation order for '" + title + "'");
- }
-
- // Close JMS objects
- messageProducer.close();
- session.close();
- connection.close();
-
- // Wait for some time ...
- // Remember JMS is for asynchronous messages :)
- final long period = 2500;
- out.println(MessageFormat.format("Wait for {0} ms...", period));
- Thread.sleep(period);
-
- out.println(MessageFormat.format("The RemoteReader Bean reference is: {0}", readerBean));
- // List Authors and Books
- List<Author> authors = readerBean.listAllAuthors();
- for (Author author : authors) {
- out.println(MessageFormat.format(" * {0}", author.getName()));
- Collection<Book> books = author.getBooks();
- for (Book book : books) {
- out.println(MessageFormat.format(" -> {0} [id: {1}]", book.getTitle(), book.getId()));
- }
- }
-
- out.println("Success.");
-
- }
-}
-
-
-
-
-
-
- EAR
-
-
- The javaee5-earsample.ear file is the
- enterprise archive wrapping all the Java EE modules into only one
- deployment unit.
-
- The EAR is all about packaging: there is no code and no
- resources (eg, classes, ...) directly inside of the .ear.
-
- Here is an overview of the ear structure:
-
- javaee5-earsample.ear:
- META-INF/application.xml
- ejb3.jar
- javaee5-earsample.war
- jms-application-client.jar
- not-secured-application-client.jar
- jaas-secured-application-client.jar
-
-
- Optional, inner jars can be discovered with .ear
- introspection
-
-
-
- The jar file containing the EJB3
-
-
-
- The Web Application archive
-
-
-
- The Application Client using JMS to interact with the
- application
-
-
-
- The Application Client using the Reader EJB without
- security
-
-
-
- The Application Client using the Reader and Writer EJBs
- after being authenticated with JAAS
-
-
-
-
-
-
-
-
- Download and installation instructions
-
-
-
-
- Where can I find JOnAS?
-
-
- The latest stable binary version can be found on the JOnAS site.
-
- The binary versions and sources are available at this site.
-
- The
- project is developped using SVN. All information for
- getting or browsing the source code can be found here.
-
-
-
-
- How can I download JOnAS?
-
-
- The JOnAS
- download page offers links to easily download .
-
-
-
-
- How can I install JOnAS?
-
-
- The JOnAS distribution can be downloaded as a .tar.gz or .zip
- file.
-
- The installation process simply consists of unzipping the
- downloaded .tar.gz file.
-
- To install using the .tar.gz file, select a location for JOnAS
- installation, for example your_install_dir, and point to it.
-
-
-
- Unix platforms
-
- bash>tar -zxvf <jonas-file-name>.tar.gz
- jonas-full-5.x.y/
- jonas-full-5.x.y/conf/
- jonas-full-5.x.y/examples/
- jonas-full-5.x.y/examples/javaee5-earsample/
- jonas-full-5.x.y/examples/javaee5-earsample/etc/
-...
-
-
-
- Be aware that if the same version of JOnAS has already been
- unpacked in the same directory, the new installation will
- overwrite previous files, and configuration files that have been
- customized may be lost. In this case, it is recommended that these
- files be saved before re-starting the installation process.
-
-
-
-
- Windows platforms
-
- If the .zip file format
- was downloaded, you must use a utility program such as WinZip or
- IZArc to extract the
- files from the archive.
-
-
-
-
-
-
- Pre-requisites
-
-
- To be sure can be used, the following products
- must be installed:
-
-
-
- a J2SE SDK 1.5 Java virtual machine
-
- Any J2SE certified java platform may be used to run
- .
-
- The most commonly used is SUN's (Java
- 2 Platform, Standard Edition), but there are others, such as
- BEA
- JRockit, IBM
- developper kits or other free/open source certified
- implementations.
-
-
-
- Ant 1.7 and BCEL
-
- The binary version of Ant 1.7 must be downloaded from the
- Apache Ant
- web site and installed
-
- bash>tar -jxvf apache-ant-1.7.0-bin.tar.bz2
-or
-bash>unzip apache-ant-1.7.0-bin.zip
-
- Set the ANT_HOME environment variable and update the
- path:
-
- on Unix platforms:
-bash>export ANT_HOME=<Ant Installation Directory>
-bash>PATH=$PATH;$ANT_HOME/bin
-
-on Windows:
-C:>set PATH=%ANT_HOME%/bin;%PATH%
-
- bcel-5.1.tar.gz must be dowloaded from
- the Apache
- Jakarta web site. The bcel-5.1.jar must be installed in the
- $ANT_HOME/lib/
- directory.
-
-
-
-
-
-
-
- JOnAS 5 distribution description
-
-
- Here we describe the directory tree you get under your installation
- directory (JONAS_ROOT environment).
-
-
-
-
-
-
- Glossary
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto.xml b/jonas_doc/core/src/docbook/doc-en/howto.xml
deleted file mode 100644
index 49ae090cb0f0b9133579de650615f0ee434d844e..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
- JOnAS "Howto" Documents
-
-
-
- JOnAS Team
-
-
-
-
- Durieux
-
- Philippe
-
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 consortium
-
-
- March 2009
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_addons.xml b/jonas_doc/core/src/docbook/doc-en/howto_addons.xml
deleted file mode 100644
index 1b1932b8a5ec8df521f063fd0bdb7c9018fe890b..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_addons.xml
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
- JOnAS Add-ons
-
-
- What is an Add-on?
-
-
- An Add-on is a package which can embeded every deployables (OSGi bundles, configurations, configadmin files, JavaEE
- applications, deployment plans, datasources, drivers, etc..). For example an add-on could assemble into one package all
- resources of a service.
-
-
-
- How to create a new Add-on?
-
-
- An Add-on is a ZIP archive (without the parent directory) or a directory with the following structure:
-
- conf/
- deploy/
- META-INF/jonas-addon.xml
-
-
-
-
- conf directory - optional. It should contain all configurations file of the add-on.
-
-
- deploy directory - optional. It should contain all deployables (OSGi bundles, configadmin files, JavaEE
- applications, deployment plans, datasources, drivers) of the add-on.
-
-
- the metadata file - mandatory. Specifies the
- metadata of the addon.
-
-
-
-
-
-
- JOnAS Add-on metadata file
- <jonas-addon xmlns="http://jonas.ow2.org/ns/jonas-addon/1.0">
-
- <name>tomcat6</name>
-
- <description>Tomcat6 Addon</description>
-
- <author>The JOnAS Team</author>
-
- <licence>LGPL</licence>
-
- <jonas-version>[5.3.0-M6-SNAPSHOT]</jonas-version>
-
- <autostart>true</autostart>
-
- <jvm-version>[1.0,2.0]</jvm-version>
-
- <repositories>
- <repository>http://my.repositories.com</repository>
- </repositories>
-
- <provides>jonas.service.tomcat6</provides>
-
- <requirements/>
-
- <properties>
- <jonas.service.web.class>org.ow2.jonas.web.tomcat6.Tomcat6Service</jonas.service.web.class>
- <jonas.service.web.parsingwithvalidation>true</jonas.service.web.parsingwithvalidation>
- <jonas.service.web.ondemand.enabled>true</jonas.service.web.ondemand.enabled>
- <jonas.service.web.ondemand.redirectPort>0</jonas.service.web.ondemand.redirectPort>
- </properties>
-
-
-
-
-
- name element - mandatory. Specifies the name of the add-on. It should be unique.
- Configuration files of
- an add-on will be unpacked in the JONAS_BASE/conf/${addon.name} directory.
-
-
-
- description element - optional. Specifies the description of the add-on.
-
-
-
- author element - mandatory. Specifies the author of the addon.
-
-
-
- licence element - mandatory. Specifies the licence of the addon.
-
-
-
- jonas-version element - mandatory. Defines required JOnAS version range.
-
-
-
- autostart element - mandatory. Specifies the autostart property. If set to false, the
- addon'll be just installed.
-
-
-
- jvm-version element - mandatory. Defines required JVM version range.
-
-
-
- repositories element - optional. Specifies the list of repositories that can be used
- to resolve dependencies between add-ons.
-
-
-
- repository element - optional. Should contains a URL to a repository which can be
- used by the resolver.
-
-
-
- provides element - mandatory. Provides properties for the resolver.
-
-
-
- requirements element - mandatory. Requirements properties for the resolver.
-
-
-
- properties element - optional. Properties of an OSGi service.
-
-
-
-
- See the XML Schema for the full
- structure of this XML file.
-
-
-
-
- How to install / uninstall an Add-on?
-
-
- Two ways to install / uninstall a new add-on:
-
-
- 1) Put/Remove the add-on under the deployment directory (JONAS_BASE/deploy).
-
-
- 2) Using the add-on manager.
- To complete
-
-
-
-
-
- The installation of the add-on will be successful
-
-
- if the addon metadata file is correct.
-
-
- if the name of the add-on is unique.
-
-
- if the deployment of all deployables of the add-ons is a success.
-
-
- if the JVM version of the JOnAS server is consistent with the required JVM version range specified in the
- metadata file.
-
-
- if the version of the JOnAS server is consistent with the required JOnAS version range specified in the
- metadata file.
-
-
- if requirements properties have been resolved.
-
-
-
-
-
-
- The Add-on resolver
-
-
- To do
-
-
-
-
- How to build a JOnAS 'a la carte' ?
-
-
- To do
-
-
-
-
- How to convert a JOnAS service into an Add-on?
-
-
- IAddonConfig API
-
- The Addon service provide a simple API which allow your specific service to access to its configuration files
- and to access to the directory where they have been installed.
-
-/**
- * Allow to retrieve configuration files of an Addon
- * @author Jeremy Cazaux
- */
-public interface IAddonConfig {
-
- /**
- * @param fileName The name of the resource to retrieve
- * @return the resource to retrieve
- */
- File getConfigurationFile(String fileName);
-
- /*
- * @return the configuration directory of an Addon
- */
- File getConfigurationDirectory();
-}
-
-
-
-
-
- iPOJO component descriptor
-
- In order to use this API, you just need to update your iPOJO component descriptor. It must required the associated
- IAddonConfig component. To achieve this, you should use an LDAP filter in the service requirement description with
- the name 'addon' and the value equals to the value of your metadata name element.
-
-
-
-<?xml version="1.0" encoding="UTF-8"?>
- <ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="org.apache.felix.ipojo"
- xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/1.6.0/core.xsd" >
-
- <component classname="org.ow2.jonas.myService"
- immediate="false">
-
- ...
-
- <requires optional="false"
- specification="org.ow2.jonas.addon.deploy.api.config.IAddonConfig"
- aggregate="false"
- filter="(addon=myService)">
- <callback type="bind" method="registerAddonConfig" />
- <callback type="unbind" method="unregisterAddonConfig" />
- </requires>
- </component>
-
- </ipojo>
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_auditListening.xml b/jonas_doc/core/src/docbook/doc-en/howto_auditListening.xml
deleted file mode 100644
index d988e7dcc699e5515869def992d6fc7b44ea5480..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_auditListening.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
- Add dispatcher for a new type of Event to audit
-
-
- Introduction
-
- Currently, there are 4 event types on JOnAS : WEB, EJB, JAXWS, JNDI.
- To add a new event type on JOnAS Audit, follow these instructions :
-
-
-
- Create a new audit report
-
- JOnAS audit works with a special type of event. To create a new
- event report, create a new class which implements
- org.ow2.util.auditreport.impl. GenericAuditReport . Put on it informations that
- you want to send. You can draw one's inspiration from
- org.ow2.util.auditreport.impl. WebInvocationAuditReport .
-
-
-
- Catch the EventService
-
- The org.ow2.util.event.impl. EventService is the heart of JOnAS
- Audit. You will send on it your report and every listener which are
- registered will receive your report.
-
- To catch the event Service there are several possilbilities
- according to environment :
-
-
-
- By annotations
-
-
-
- OSGi : @OSGiResource
-
-
-
- EJB : @EJB
-
-
-
-
-
- By the BundleContext (on a web application for example)
-
-
-
- Use the following code
-
- EventService eventService;
-
- try {
- InitialContext ic = new InitialContext();
- BundleContext bc = (BundleContext) ic.lookup("java:comp/env/BundleContext");
- ServiceReference servRefPersist = bc.getServiceReference(IPersistenceNoSQL.class.getName());
- eventService = (IEventService) bc.getService(servRefEvent);
- } catch (Exception e) {
- throw new IllegalStateException("Error at constructor, impossible to catch BundleContext", e);
- }
-
-
-
-
-
-
-
-
- Send the report
-
- It is very easy now to send the report. Try to catch EventDispatcher
- with the name of you choice. If you can't, create it then send on it the
- event. See below :
-
- YouClassImplementsGenericAuditReport report;
-org.ow2.util.auditreport.impl.event.Event e = new Event(report);
-
-if(eventService.getDispatcher("nameThatYouWant") == null) {
- EventDispatcher d = new EventDispatcher();
- d.setNbWorkers(2);
- d.start();
- eventService.registerDispatcher("nameThatYouWant", d);
-}
-eventService.getDispatcher("nameThatYouWant").dispatch(e)
-
- Your report is send !
-
-
-
- Register a Listener to catch the precedent report sent
-
- Now, you are going to want to catch this event somewhere and it is
- easy too.
-
-
-
-
-
- Create a class which implements org.ow2.util.event.api.IEventListener
-
-
-
- Complete methods added as below. You can adapt its as you
- want
-
- public boolean accept(IEvent event)
- return true;
-}
-
-public EventPriority getPriority() {
- return EventPriority.SYNC_NORM;
-}
-
-public void handle(IEvent event) {
- YouClassImplementsGenericAuditReport report = ((Event) event).getReport();
-}
-
-
-
- Register you class as Listener of you dispatcherpublic registerListener() {
- eventService.registerListener(this, "nameThatYouWant");
- //You can register this listener for different dispatcher, just concatenate dispatcher name with a pipe ( | ) without space between name.
-}
-public unregisterListener() {
- eventService.unregisterListener(this);
-}
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_auditPersistence.xml b/jonas_doc/core/src/docbook/doc-en/howto_auditPersistence.xml
deleted file mode 100644
index f842e6a5695b7f9a766d16dab20ca3f8b2709ac6..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_auditPersistence.xml
+++ /dev/null
@@ -1,644 +0,0 @@
-
-
- Create a audit persistence on JOnAS with HBase (NoSQL)
-
-
- Introduction
-
- Currently, there are 4 event types on JOnAS : WEB, EJB, JAXWS, JNDI
- that you can persiste on HBase. In this HOWTO, you will create a Hadoop
- and HBase cluster, there isn't any HOWTO to create this on a standalone
- mode.
-
- Create a cluster is a very good thing to separate informations and
- to obtain a low time wait to research with a very large base.
- Nevertheless, a cluster is costly (several machines) and not really
- interesting below 10 machines on the cluster.
-
- This HOWTO works with the following versions :
-
- JAVA JDK 6
-
- Hadoop 1.0.3
-
- HBase 0.92.1
-
- Zookeeper 3.3.5
-
-
-
- Create a Hadoop Cluster to obtain an HDFS (Hadoop Distributed File
- System)
-
-
-
- Download Java
-
-
-
- Extract file
-
-
-
- Place environment variable JAVA_HOME
-
- export JAVA_HOME=~/yourPathToJavaJDK-6
-
-
-
- Download Hadoop
-
-
-
- Extract file
-
-
-
- Put it on each machine of the cluster.
-
-
-
- Place environment variable HADOOP_HOME on each machine
-
- export HADOOP_HOME=~/yourPathToHadoop
-
-
-
- Choice which machine will be the master (NameNode), all others
- will be slaves (DataNode)
-
- A NameNode can be a DataNode too but not really
- recommanded
-
-
-
- On NameNode and DataNodes
-
-
-
- Open conf/hadoop-env.sh
-
-
-
- Delete # in front of "JAVA_HOME" and set exactly same as
- previously
-
-
-
-
-
- On NameNode
-
-
-
- Open conf/masters
-
-
-
- Write localhost if it's not already done
-
-
-
-
-
- Open conf/slaves
-
-
-
- Write all ip (or name if these ip are defined on
- /etc/hosts) of DataNodes (one per line)
-
-
-
-
-
- Open conf/core-site.xml
-
-
-
- Complete file as below replacing HERE by ip (or host) of
- the NameNode. Localhost could work but it's not tested.
-
- <configuration>
- <property>
- <name>fs.default.name</name>
- <value>hdfs://HERE:54310</value>
- <final>true</final>
- </property>
-</configuration>
-
-
-
-
-
- Open conf/mapred-site.xml
- (configuration of Map/Reduce)
-
-
-
- Complete file as below replacing HERE by ip (or host) of
- the NameNode.
-
- A JobTracker can be an other machine than NameNode but
- to simplify here it's merge.
-
- You can also change port 54311 as you want, it's just
- for example.
-
-
-
- <configuration>
- <property>
- <name>mapred.job.tracker</name>
- <value>HERE:54311</value>
- <final>true</final>
- </property>
-
- <property>
- <name>mapred.local.dir</name>
- <value>Select Your Directory</value>
- </property>
-
- <property>
- <name>mapred.system.dir</name>
- <value>Select Your Directory</value>
- <final>true</final>
- </property>
-</configuration>
-
-
-
- Open conf/hdfs-site.xml
-
-
-
-
- Complete file as below. Suppress dfs permission to
- simplify acces fr JOnAS
-
- <configuration>
- <property>
- <name>dfs.permissions</name>
- <value>false</value>
- </property>
-</configuration>
-
-
-
-
-
-
-
- On DataNodes
-
-
-
- Open conf/masters
-
-
-
- Write ip (or host) of NameNode
-
-
-
-
-
- Open conf/slaves
-
-
-
- Write ip (or host) of all DataNodes including
- localhostC
-
-
-
-
-
- Open conf/core-site.xml
-
-
-
- Complete file as below replacing HERE by ip (or host) of
- the NameNode.
-
- To pay attention to put the same port that before in
- the same part.
-
- <configuration>
- <property>
- <name>fs.default.name</name>
- <value>hdfs://HERE:54310</value>
- <final>true</final>
- </property>
-</configuration>
-
-
-
-
-
-
- Open conf/mapred-site.xml
- (configuration of Map/Reduce)
-
-
-
- Complete file as below replacing HERE by ip (or host) of
- the NameNode.
-
- To pay attention to put the same port that before in
- the same part.
-
- <configuration>
- <property>
- <name>mapred.job.tracker</name>
- <value>HERE:54311</value>
- </property>
-</configuration>
-
-
-
-
-
- Open conf/hdfs-site.xml
-
-
-
- Complete file as below. Suppress dfs permission to
- simplify acces fr JOnAS<configuration>
- <property>
- <name>dfs.permissions</name>
- <value>false</value>
- </property>
-</configuration>
-
-
-
-
-
-
-
- To start Hadoop Cluster.
-
- Don't forget to create a ssh connexion between machines if
- it's not already done.
-
-
-
- Open a terminal, go to HADOOP_HOME file and write
- this
-
- bin/start-all.sh
-
-
-
- You will flash past all ip (or host) with their work
- (NameNode,JobTracker,DataNode,TaskTracker)
-
-
-
-
-
- To stop Hadoop Cluster
-
-
-
- Open a terminal, go to HADOOP_HOME file an write this
-
- bin/stop-all.sh
-
-
-
- You will flash past all ip (or host) stoping one by
- one
-
-
-
-
-
- To restart Hadoop Cluster
-
-
-
- Open a terminal, go to HADOOP_HOME file an write this
-
- bin/hadoop dfsadmin -safemode get
-
-
-
- If the response is not Safe mode is
- OFF write this
-
- Hadoop Cluster works ONLY if the response is : Safe mode
- is OFF
-
- bin/hadoop dfsadmin -safemode leave
-
-
-
-
-
- Watch NameNode interface
-
- http://ip:port/dfshealth.jsp
-
- ip : The namenode’s HTTP server address
-
- port : The namenode’s HTTP server port (default 50070)
-
-
-
-
-
- Create Zookeeper cluster
-
-
-
- Download Zookeeper
-
-
-
- Extract file
-
-
-
- Put this file on at least 2 machines
-
-
-
- Open conf/zoo.cfg
-
-
-
- Select your data directory
-
- dataDir=/yourSelectedDirectory
-
-
-
- List the whole Zookeeper cluster with this scheme :
- server.numberOfServer=ip
-
- server.1=123.456.789.01:2888:5888
-server.2=456.789.123.02:2888:5888
-server.3=789.123.456.03:2888:5888
-[...]
-
-
-
- On each machine respect the same numberOfServer with the same
- ip.
-
-
-
- Start Zookeeper
-
- bin/zkServer.sh start
-
-
-
- Check if Zookeeper is runing
-
- bin/zkServer.sh status
-
-
-
- It is running if we can see
-
- JMX enabled by default
-Using config: ZOOKEEPER_HOME/bin/../conf/zoo.cfg
-Mode: follower
-
- Or
-
- JMX enabled by default
-Using config: ZOOKEEPER_HOME/bin/../conf/zoo.cfg
-Mode: leader
-
-
-
- Verify that numberOfServer matches the selected ip. Go to
- /yourSelectedDirectory and open myid on each machine.
-
- One the first machine (server.1=123.456.789.01:2888:5888 on the
- example), we have to see on myid : 1
-
- One the second machine (server.2=456.789.123.02:2888:5888 on the
- example), we have to see on myid : 2
-
- Etc.
-
-
-
- Leader and Followers
-
- On the Zookeeper cluster, we must have only one Leader and many
- Followers.
-
-
-
-
-
- Create HBase cluster
-
-
-
- Download HBase
-
-
-
- Extract file
-
-
-
- Put this file on each DataNode and NameNode machines
-
- Each machine have to be the same login and the same url
- directory for HBase
-
-
-
- On HMaster and HRegionServers (same idea that NameNode and
- DataNode for Hadoop)
-
-
-
- Edit conf/hbase-env.sh
-
- export JAVA_HOME=~/yourPathToJavaJDK-6
-export HBASE_MANAGES_ZK=false
-
- HBASE_MANAGES_ZK=true to run a local HBase and skip
- section 3 because HBase will create his own Zookeeper
- server
-
-
-
- Edit conf/hbase-site.xml replacing HERE by ip(or host) of
- the NameNode
-
- List onhbase.zookeeper.quorum all zookeeper ip
- listed before on 3.6
-
- <configuration>
- <property>
- <name>hbase.rootdir</name>
- <value>hdfs://HERE:54310/user/yourAccount/hbase</value>
- </property>
- <property>
- <name>hbase.defaults.for.version.skip</name>
- <value>true</value>
- </property>
- <property>
- <name>hbase.cluster.distributed</name>
- <value>true</value>
- </property>
- <property>
- <name>hbase.zookeeper.quorum</name>
- <value>123.456.789.01,456.789.123.02,789.123.456.03,...</value>
- </property>
- <property>
- <name>hbase.zookeeper.property.dataDir</name>
- <value>/SelectYourSaveDirectory</value>
- </property>
-</configuration>
-
-
-
-
-
- On HMaster (Same machine that the NameNode), edit conf/regionservers and list all the HRegionServers
- (on per line)
-
-
-
- On HRegionServers (Same machine that the NameNode), edit
- conf/regionservers and list all the
- HRegionServers (on per line) including localhost for the own ip adress
- of HRegionServer
-
-
-
- Start HBase
-
- bin/start-hbase.sh
-
-
-
- Check if HBase is running
-
- bin/hbase shell
-
- hbase(main):001:0> status
-
-1 servers, 0 dead, 2.0000 average load
-
-
-
- Create the EventPath table where will be save persistence
- calculations
-
- hbase(main):002:0> create 'EventPath','primary','secondary'
-
- Attention : To be very strict with the case
- sensitivity
-
- hbase(main):003:0> list
-
-TABLE
-EventPath
-1 row(s) in 0.0470 seconds
-
- hbase(main):004:0> status
-
-1 servers, 0 dead, 3.0000 average load
-
-
-
-
-
- Start persistence
-
-
-
- Start JOnAS (use -Deasybeans.useSimplePool=true if there is a
- possibility to undeploy "audit-jpa-nosql"-"jpa" bundle)
-
-
-
- check out
- git@gitorious.ow2.org:ow2-jonas/audit-jpa-nosql.git
-
-
-
- compile project (using Maven)
-
- mvn clean install
-
-
-
- Go on audit-jpa-nosql/deployment/goToZip/target/distrib
-
-
-
- There is a Zookeeper Server started on the same machine that
- JOnAS will be start
-
- ant -DzkServer=on
-
-
-
- There is not any Zookeeper Server started on the same
- machine that JOnAS will be start
-
-
-
- To open persistence.xml and modify the following
- property
-
- <property name="datanucleus.ConnectionURL" value="hbase:ip:port" />
-
- ip : The namenode’s server address
-
- port : The namenode’s server port
-
- (write on $HADOOP_HOME/conf/core-site.xml)
-
-
-
- Start
-
- ant
-
-
-
-
-
- To restore the persistence.xml used by JOnAS (works with
- Zookeeper)
-
- ant -Drestore=on
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_configadmin.xml b/jonas_doc/core/src/docbook/doc-en/howto_configadmin.xml
deleted file mode 100644
index b394fb822d057bcadeaf618975676d3759c41c15..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_configadmin.xml
+++ /dev/null
@@ -1,459 +0,0 @@
-
-
- Deploying OSGiTM Configurations
-
-
- OSGi Configuration Admin
-
- Configuration
- Admin is a specification produced by the OSGiTM
- Alliance that defines how to configure OSGi services in a standard
- way.
-
- A Configuration is basically a
- Map storing key/value. Typically, a
- management application query the ConfigurationAdmin service for
- Configuration(s), set the appropriate key/value pairs and update the
- Configuration. It is them take in charge by the ConfigurationAdmin service
- that will push the configurations to the interested components.
-
- What is important to understand is that the
- ConfigurationAdmin service is an
- intermediate tier between the management application (pushing
- Configurations) and the managed system (receiving Configurations). A
- Configuration targets an OSGi service using
- the persitent identifier of that service (PID). If the
- target service is not available when the
- Configuration is pushed to the
- ConfigurationAdmin service, the
- Configuration is put on hold and persisted
- somehow until the service become available. At this moment in time, the
- Configuration is restored and applied to
- the managed element (the target service), it is said to be "bound to the
- service".
-
-
- Managed components
-
- Two kinds of components are recognised by ConfigurationAdmin:
- ManagedService and
- ManagedServiceFactory. They have to be
- registered in the OSGiTM service registry
- under one of theses 2 interfaces.
-
-
- ManagedService
-
- A ManagedService is an already
- existing service instance that can be configured (and updated) through
- ConfigurationAdmin.
-
- It just have to implements the following interface (and be
- exposed under it when registered as a service):
-
- public interface ManagedService {
- /**
- * Update the configuration for a Managed Service.
- * @param properties A copy of the Configuration properties, or null.
- */
- void updated(Dictionary properties) throws ConfigurationException;
-}
-
- The Dictionary parameter contains
- the updated configuration properties. The implementation have to look
- for specific (application defined) properties and uses the queried
- values for configuring its internal state. The implementation may
- throw a ConfigurationException if
- something goes wrong.
-
-
-
- ManagedServiceFactory
-
- The other kind of component is a
- ManagedServiceFactory. A
- ManagedServiceFactory instance will
- receive Configurations not for itself, but in the goal of creating
- instances (may or may not be OSGiTM
- services themselves). A factory has to implement the following
- interface:
-
- public interface ManagedServiceFactory {
- /**
- * Return a descriptive name of this factory.
- */
- String getName();
-
- /**
- * Create a new instance, or update the configuration of an existing instance.
- * @param pid The PID for this configuration.
- * @param properties A copy of the configuration properties.
- */
- void updated(String pid, Dictionary properties) throws ConfigurationException;
-
- /**
- * Remove the factory instance associated with the PID.
- * @param pid the PID of the service to be removed.
- */
- void deleted(String pid);
-}
-
- The updated() method will be called by
- the ConfigurationAdmin service when it
- will receive a new Configuration (or if
- an existing matching Configuration has
- been updated).
-
-
-
-
- Identification
-
- A Configuration contains both the
- configuration properties that have to be pushed to a consumer and an
- identifier that the ConfigurationAdmin
- service will use to find a matching component (the Configuration's
- consumer).
-
- The identifier to use is the service PID (See Constants.SERVICE_PID)
- of the component that will receive the
- Configuration.
-
-
-
- Asynchronous
-
- Once the Configuration is updated
- by the management application, everything happen asynchronously. That
- means that another Thread will be used to push the
- Configuration to its consumer (when a
- matching factory/service will be available).
-
-
-
-
- Usage
-
- JOnAS supports deploying ConfigurationAdmin Configurations through
- its ConfigAdminDeployer that is an extension of the
- deployment system.
-
- Every XML file with its root element declared within the configadmin
- namespace (http://jonas.ow2.org/ns/configadmin/1.0)
- will be handled by this deployer.
-
-
- ConfigurationAdmin XML file example
-
- <configadmin xmlns="http://jonas.ow2.org/ns/configadmin/1.0">
-
- <configuration pid="service.pid.of.a.ManagedService">
- <property name="name">Guillaume</property>
- <property name="role">Developer</property>
- </configuration>
-
- <factory-configuration pid="service.pid.of.a.ManagedServiceFactory">
- <property name="name">OW2 JOnAS</property>
- <property name="category">Java EE</property>
- </factory-configuration>
-
-</configadmin>
-
-
- This generic format allows to produce both simple and factory
- Configurations without interacting with the
- ConfigurationAdmin API programmatically. The deployer handles mapping
- between the XML format and the ConfigurationAdmin API model.
-
-
- Only java.lang.String properties are
- supported right now.
-
- Some component model convert from
- java.lang.String to the desired type
- automatically (acting as a type adapter between ConfigurationAdmin and
- the real component), but it is not mandatory.
-
-
-
- Configuration
-
- A <configuration> element represents the
- configuration to be applied to a ManagedService
- instance.
-
- The pid attribute is the service PID of the
- targeted ManagedService (match the
- service.pid service property of a registered
- OSGiTM service).
-
- Every key/value pair is expressed using a
- <property> element. The name attribute denotes
- (indeed) the property name used as a key in the
- Configuration's
- Dictionary. The text node's value is used as the
- key's value.
-
- When the configuration XML file is undeployed, all the
- Configurations are deleted, ant the
- ManagedService.updated() method is called with
- a null argument. The
- ManagedService instance is then
- responsible to take the appropriate actions.
-
-
- Example of a <configuration>
-
- <configuration pid="service.pid.of.a.ManagedService">
- <property name="name">Guillaume</property>
- <property name="role">Developer</property>
-</configuration>
-
-
-
-
- Factory Configuration
-
- A <factory-configuration> element
- represents the configuration to be applied to a
- ManagedServiceFactory instance.
-
- The pid attribute is the service PID of the
- targeted ManagedServiceFactory (match the
- service.pid service property of a registered
- OSGiTM service).
-
- Every key/value pair is expressed using a
- <property> element. The name
- attribute denotes (indeed) the property name used as a key in the
- Configuration's Dictionary. The text node's value is used as the key's
- value.
-
- Every <factory-configuration> will trigger
- the creation of a new instance by the targeted
- service factory.
-
- When the configuration XML file is undeployed, all the created
- instances are stopped and destroyed.
-
-
- Example of a
- <factory-configuration>
-
- <factory-configuration pid="org.ow2.jonas.web.tomcat7.internal.Tomcat7AjpConnector">
- <property name="address">localhost</property>
- <property name="port">9011</property>
-</factory-configuration>
-
-
-
-
-
- Extensibility
-
- JOnAS has, out of the box, a generic ConfigurationAdmin support (ie
- <configuration> and
- <factory-configuration>). Whilst this support can
- handle everything that can be described through ConfigurationAdmin, it may
- be a bit verbose and non user-friendly.
-
- Here are some of the drawbacks of this approach:
-
-
-
- The user have to know before hand the exact service PID to
- use.
-
-
-
- Impossible to know in advance what is the set of required
- properties. It's possible to push an invalid configuration for
- example.
-
-
-
- Property typing: a property could be typed (Integer / String /
- ...) and with a generic schema it's possible to select the wrong type
- for a given property, leading to later Exceptions when the
- Configuration is actually applied to the service..
-
-
-
-
- Expressiveness
-
- The extensibility layer supported by the ConfigurationAdmin
- deployer allows to use different schema element inside the XML
- configuration file. Theses schema will provides a dedicated
- format/syntax for a specific domain, something like an XML DSL (Domain
- Specific Language).
-
-
- Mail Configuration Example
-
- <configadmin xmlns="http://jonas.ow2.org/ns/configadmin/1.0"
- xmlns:mail="http://jonas.ow2.org/ns/configadmin/mail/1.0">
-
- <!-- This syntax is provided as an example only... -->
- <mail:session jndi-name="MailSession"
- from="no-reply@ow2.org">
- <transport name="smtp" />
- <store name="pop3"
- host="localhost" />
- </mail:session>
-
-</configadmin>
-
-
-
-
- APIs
-
- The ConfigurationAdminDeployer provides a simple API for
- developers to extends the initial set of supported syntaxes.
-
-
- XmlConfigurationAdapter
-
- Most of the work is done in an
- XmlConfigurationAdapter. A
- XmlConfigurationAdapter is responsible
- to convert a DOM Element into one or
- multiple ConfigurationInfo (equivalent to the
- ConfigurationAdmin Configuration
- object).
-
- This object will be given a DOM
- Element (child of the
- <configadmin> root element). The adapter will
- then read the XML format and produces one (or more)
- ConfigurationInfo objects, each of them
- representing one ConfigurationAdmin
- Configuration.
-
- package org.ow2.jonas.configadmin;
-
-public interface XmlConfigurationAdapter {
-
- /**
- * Convert the given Node into one or more ConfigurationInfo instance(s).
- * @param node DOM Element to be converted
- * @return Adapted ConfigurationInfo(s)
- * @throws AdapterException if the Element cannot be converted into ConfigurationInfo(s)
- */
- Set<ConfigurationInfo> convert(Element node) throws AdapterException;
-}
-
-
-
-
- XmlConfigurationAdapterRegistry
-
- The
- XmlConfigurationAdapterRegistry
- contains the adapters related to a namespace URI.
- When an element from a namespace is found, the deployer select the
- dedicated registry and then ask it for the adapter supporting the
- current element's name.
-
- Each implementation of this interface has to be exposed as an
- OSGi service with the 'namespace' service
- property.
-
- package org.ow2.jonas.configadmin;
-
-public interface XmlConfigurationAdapterRegistry {
-
- /**
- * Returns the adapter handling the given Xml Element local-name.
- * @param name Xml Element local-name (not prefixed)
- * @return the associated adapter or null if none found
- */
- XmlConfigurationAdapter getAdapter(String name);
-}
-
-
-
-
-
- Example
-
- This example will show how to add support of the
- <mail:session> extension element.
-
- Apache
- Felix iPOJO will be used to ease the implementation.
-
- First, start with the adapter. Its code will take care of creating
- the internal ConfigurationInfo object. The
- adapter knows before hand the target Service PID that will accept the
- resulting configuration properties. The adapter then parse (or navigate
- through) the given DOM Element and
- extract the needed information from it, manipulating it if required
- (type convertion for example).
-
- public class MailSessionAdapter implements XmlConfigurationAdapter {
-
- public static final String MAIL_SESSION_PID = "org.ow2...mail.Session";
-
- public Set<ConfigurationInfo> convert(Element node) throws AdapterException {
-
- // Create an empty configuration that will store the info from Xml
- // Hard-code the target PID
- ConfigurationInfo info = new ConfigurationInfo(MAIL_SESSION_PID, true);
-
- // Transfer from Xml format into internal format
- Map<String, Object> props = info.getProperties();
- props.put("jndi.name", node.getAttribute("jndi-name"));
- props.put("mail.from", node.getAttribute("from"));
-
- Element transport = getChildElement(node, "transport");
- props.put("mail.transport.protocol", transport.getAttribute("name"));
-
- // Remaining parsing omitted for brevity ...
-
- return Collections.singleton(info);
- }
-}
- A simple implementation choice is to perform the Xml parsing
- by hand (navigating directly through the DOM structure), but it is
- also possible to use other parsing technics: XPath or JAXB (useful when schema is
- pre-compiled before hand).
- Once the adapter is finished, it is needed to create an
- XmlConfigurationAdapterRegistry. This one
- is the component that will be registered as an
- OSGiTM service with a
- 'namespace' service property.
-
- @Component
-@Provides
-@Instantiate
-public class MailAdapterRegistry implements XmlConfigurationAdapterRegistry {
-
- @ServiceProperty(value = "http://jonas.ow2.org/ns/example/mail")
- private String namespace;
-
- private XmlConfigurationAdapter sessionAdapter = new MailSessionAdapter();
-
- public XmlConfigurationAdapter getAdapter(String name) {
- if ("session".equals(name)) {
- return sessionAdapter;
- }
- return null;
- }
-}
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_deployme.xml b/jonas_doc/core/src/docbook/doc-en/howto_deployme.xml
deleted file mode 100644
index 25ef3b9d3b223db73f8e2bec01d87a7264e4eb98..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_deployme.xml
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
- DeployME
-
-
- What is an Add-on?
-
-
- An Add-on is a package which can embeded every deployables (OSGi bundles, configurations, configadmin files, JavaEE
- applications, deployment plans, datasources, drivers, etc..). For example an add-on could assemble into one package all
- resources of a service.
-
-
-
- How to create a new Add-on?
-
-
- An Add-on is a ZIP archive (without the parent directory) or a directory with the following structure:
-
- conf/
- deploy/
- META-INF/jonas-addon.xml
-
-
-
-
- conf directory - optional. It should contain all configurations file of the add-on.
-
-
- deploy directory - optional. It should contain all deployables (OSGi bundles, configadmin files, JavaEE
- applications, deployment plans, datasources, drivers) of the add-on.
-
-
- the metadata file - mandatory. Specifies the
- metadata of the addon.
-
-
-
-
-
-
- JOnAS Add-on metadata file
- <jonas-addon xmlns="http://jonas.ow2.org/ns/jonas-addon/1.0">
-
- <name>tomcat6</name>
-
- <description>Tomcat6 Addon</description>
-
- <author>The JOnAS Team</author>
-
- <licence>LGPL</licence>
-
- <jonas-version>[5.3.0-M6-SNAPSHOT]</jonas-version>
-
- <autostart>true</autostart>
-
- <jvm-version>[1.0,2.0]</jvm-version>
-
- <repositories>
- <repository>http://my.repositories.com</repository>
- </repositories>
-
- <provides>jonas.service.tomcat6</provides>
-
- <requirements/>
-
- <properties>
- <jonas.service.web.class>org.ow2.jonas.web.tomcat6.Tomcat6Service</jonas.service.web.class>
- <jonas.service.web.parsingwithvalidation>true</jonas.service.web.parsingwithvalidation>
- <jonas.service.web.ondemand.enabled>true</jonas.service.web.ondemand.enabled>
- <jonas.service.web.ondemand.redirectPort>0</jonas.service.web.ondemand.redirectPort>
- </properties>
-
-
-
-
-
- name element - mandatory. Specifies the name of the add-on. It should be unique.
- Configuration files of
- an add-on will be unpacked in the JONAS_BASE/conf/${addon.name} directory.
-
-
-
- description element - optional. Specifies the description of the add-on.
-
-
-
- author element - mandatory. Specifies the author of the addon.
-
-
-
- licence element - mandatory. Specifies the licence of the addon.
-
-
-
- jonas-version element - mandatory. Defines required JOnAS version range.
-
-
-
- autostart element - mandatory. Specifies the autostart property. If set to false, the
- addon'll be just installed.
-
-
-
- jvm-version element - mandatory. Defines required JVM version range.
-
-
-
- repositories element - optional. Specifies the list of repositories that can be used
- to resolve dependencies between add-ons.
-
-
-
- repository element - optional. Should contains a URL to a repository which can be
- used by the resolver.
-
-
-
- provides element - mandatory. Provides properties for the resolver.
-
-
-
- requirements element - mandatory. Requirements properties for the resolver.
-
-
-
- properties element - optional. Properties of an OSGi service.
-
-
-
-
- See the XML Schema for the full
- structure of this XML file.
-
-
-
-
- How to install / uninstall an Add-on?
-
-
- Two ways to install / uninstall a new add-on:
-
-
- 1) Put/Remove the add-on under the deployment directory (JONAS_BASE/deploy).
-
-
- 2) Using the add-on manager.
- To complete
-
-
-
-
-
- The installation of the add-on will be successful
-
-
- if the addon metadata file is correct.
-
-
- if the name of the add-on is unique.
-
-
- if the deployment of all deployables of the add-ons is a success.
-
-
- if the JVM version of the JOnAS server is consistent with the required JVM version range specified in the
- metadata file.
-
-
- if the version of the JOnAS server is consistent with the required JOnAS version range specified in the
- metadata file.
-
-
- if requirements properties have been resolved.
-
-
-
-
-
-
- The Add-on resolver
-
-
- To do
-
-
-
-
- How to build a JOnAS 'a la carte' ?
-
-
- To do
-
-
-
-
- How to convert a JOnAS service into an Add-on?
-
-
- IAddonConfig API
-
- The Addon service provide a simple API which allow your specific service to access to its configuration files
- and to access to the directory where they have been installed.
-
- /**
- * Allow to retrieve configuration files of an Addon
- * @author Jeremy Cazaux
- */
- public interface IAddonConfig {
-
- /**
- * @param fileName The name of the resource to retrieve
- * @return the resource to retrieve
- */
- File getConfigurationFile(String fileName);
-
- /*
- * @return the configuration directory of an Addon
- */
- File getConfigurationDirectory();
- }
-
-
-
-
-
- iPOJO component descriptor
-
- In order to use this API, you just need to update your iPOJO component descriptor. It must required the associated
- IAddonConfig component. To achieve this, you should use an LDAP filter in the service requirement description with
- the name 'addon' and the value equals to the value of your metadata name element.
-
-
-
- <?xml version="1.0" encoding="UTF-8"?>
- <ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="org.apache.felix.ipojo"
- xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/1.6.0/core.xsd" >
-
- <component classname="org.ow2.jonas.myService"
- immediate="false">
-
- ...
-
- <requires optional="false"
- specification="org.ow2.jonas.addon.deploy.api.config.IAddonConfig"
- aggregate="false"
- filter="(addon=myService)">
- <callback type="bind" method="registerAddonConfig" />
- <callback type="unbind" method="unregisterAddonConfig" />
- </requires>
- </component>
-
- </ipojo>
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_distributed_joram.xml b/jonas_doc/core/src/docbook/doc-en/howto_distributed_joram.xml
deleted file mode 100644
index 7ebe3859b854f9268c345eaf402f606a593ba259..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_distributed_joram.xml
+++ /dev/null
@@ -1,256 +0,0 @@
-
-Distributed Message Beans
-
-
- JOnAS release 4.1 dramatically simplifies the use of a distributed JORAM platform from within JOnAS servers. For example, such a configuration allows a bean hosted by JOnAS instance "A" to send messages on a JORAM queue, to which a MDB hosted by JOnAS instance "B" listens.
-
-
- This advancement is due to the following:
-
-
-
- JORAM Resource Adapter allows a much more refined configuration than the JMS service did.
-
-
- JORAM provides a distributed JNDI server which allows JOnAS instances to share information.
-
-
-
- Before going through this chapter, it is highly recommended that the
-
- JORAM Resource Adapter
-
- configuration guide be reviewed.
-
- Scenario and general architecture
-
-
- The following scenario and general settings are proposed:
-
-
-
- Two instances of JOnAS are run (JOnAS "A" and JOnAS "B"). JOnAS A hosts a simple bean providing a method for sending a message on a JORAM queue. JOnAS B hosts a message-driven bean listening on the same JORAM queue.
-
-
- Each JOnAS instance has a dedicated collocated JORAM server: server "s0" for JOnAS A, "s1" for JOnAS B. Those two servers are aware of each other.
-
-
- The queue is hosted by JORAM server s1.
-
-
- An additional JNDI service is provided by the JORAM servers that will be used for storing the shared information (basically, the queue's naming reference).
-
-
-
- Common configuration
-
-
- The JORAM servers are part of the same JORAM platform described by the following
-
- a3servers.xml
-
- configuration file:
-
-
-<?xml version="1.0"?>
-<config>
- <domain name="D1"/>
- <server id="0" name="S0" hostname="hostA">
- <network domain="D1" port="16301"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager"
- args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
- args="16010"/>
- <service class="fr.dyade.aaa.jndi2.distributed.DistributedJndiServer"
- args="16400 0"/>
- </server>
- <server id="1" name="S1" hostname="hostB">
- <network domain="D1" port="16301"/>
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager"
- args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
- args="16010"/>
- <service class="fr.dyade.aaa.jndi2.distributed.DistributedJndiServer"
- args="16400 0 1"/>
-
- </server>
-</config>
-
- This configuration describes a platform made up of two servers, "s0" and "s1", hosted by machines "hostA" and "hostB", listening on ports 16010, providing a distributed JNDI service (more info on JORAM's JNDI may be found
-
- here
-
- ).
-
-
- Each JOnAS server must hold a copy of this file in its
-
- conf/
-
- directory. In its
-
- jonas.properties
-
- file, each must declare the
-
- joram_for_jonas_ra.rar
-
- as a resource to be deployed (and each should remove
- jms
- from its list of services).
-
-
- Specific configuration
-
-
- JOnAS A
- embeds JORAM server
- s0
- . The
-
- jonas-ra.xml
-
- descriptor packaged in the
-
- joram_for_jonas_ra.rar
-
- archive file must provide the following information:
-
-
-<jonas-config-property>
- <jonas-config-property-name>HostName</jonas-config-property-name>
- <jonas-config-property-value>hostA</jonas-config-property-value>
-</jonas-config-property>
-
- The other default settings do not need to be changed.
-
-
- JOnAS B
- embedds JORAM server
- s1
- . The
-
- jonas-ra.xml
-
- descriptor packaged in the
-
- joram_for_jonas_ra.rar
-
- archive file must provide the following properties values:
-
-
-<jonas-config-property>
- <jonas-config-property-name>ServerId</jonas-config-property-name>
- <jonas-config-property-value>1</jonas-config-property-value>
-</jonas-config-property>
-<jonas-config-property>
- <jonas-config-property-name>ServerName</jonas-config-property-name>
- <jonas-config-property-value>s1</jonas-config-property-value>
-</jonas-config-property>
-<jonas-config-property>
- <jonas-config-property-name>HostName</jonas-config-property-name>
- <jonas-config-property-value>hostB</jonas-config-property-value>
-</jonas-config-property>
-
- The other default settings do not need to be changed.
-
-
- The
- shared queue
- will be hosted by JORAM server s1. It must then be declared in the JOnAS B's
-
- joramAdmin.xml
-
- file as follows:
-
-
-
- <Queue name="sharedQueue">
- <freeReader/>
- <freeWriter/>
- <jndi name="scn:comp/sharedQueue"/>
- </Queue>
-
-
- The
-
- scn:comp/
-
- prefix is a standard way to specify which JNDI provider should be used. In this case, the shared queue will be bound to JORAM's distributed JNDI server, and may be retrieved from both JOnAS A and JOnAS B. To provide this mechanism, both JOnAS servers must provide access to a standard
-
- jndi.properties
-
- file. For JOnAS A, the file looks as follows, and should be placed in its
-
- conf/
-
- directory:
-
-
-java.naming.factory.url.pkgs org.objectweb.jonas.naming:fr.dyade.aaa.jndi2
-scn.naming.factory.host hostA
-scn.naming.factory.port 16400
-
- For JOnAS B, the file looks as follows, and should be placed in the right
-
- conf/
-
- directory:
-
-
-java.naming.factory.url.pkgs org.objectweb.jonas.naming:fr.dyade.aaa.jndi2
-scn.naming.factory.host hostB
-scn.naming.factory.port 16400
-
- And now, the beans!
-
-
- The
- simple bean
- on JOnAS A needs to connect to its local JORAM server and access the remote queue. The following is an example of consistent resource definitions in the deployment descriptors:
-
-
- Standard deployment descriptor:
-
-
-<resource-ref>
- <res-ref-name>jms/factory</res-ref-name>
- <res-type>javax.jms.ConnectionFactory</res-type>
- <res-auth>Container</res-auth>
-</resource-ref>
-<resource-env-ref>
- <resource-env-ref-name>jms/sharedQueue</resource-env-ref-name>
- <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
-</resource-env-ref>
-
- Specific deployment descriptor:
-
-
-<jonas-resource>
- <res-ref-name>jms/factory</res-ref-name>
- <jndi-name>CF</jndi-name>
-</jonas-resource>
-<jonas-resource-env>
- <resource-env-ref-name>jms/sharedQueue</resource-env-ref-name>
- <jndi-name>scn:comp/sharedQueue</jndi-name>
-</jonas-resource-env>
-
- The ConnectionFactory is retrieved from the local JNDI registry of the bean. However, the Queue is retrieved from the distributed JORAM JNDI server, because its name starts with the
- scn:comp/
- prefix. It is the same queue to which the
- message-driven bean
- on JOnAS B listens. For doing so, its activation properties should be set as follows:
-
-
-<activation-config>
- <activation-config-property>
- <activation-config-property-name>destination</activation-config-property-name>
- <activation-config-property-value>scn:comp/sharedQueue</activation-config-property-value>
- </activation-config-property>
- <activation-config-property>
- <activation-config-property-name>destinationType</activation-config-property-name>
- <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
- </activation-config-property>
-</activation-config>
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_firewall.xml b/jonas_doc/core/src/docbook/doc-en/howto_firewall.xml
deleted file mode 100644
index 1b956f419bb92a6ebb097e76e39d7e2961f6b2d0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_firewall.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- Configuring RMI for use through a Firewall
-
-
- By default, the RMI protocol in JOnAS uses a random port at each
- startup, which implies that there is no way to configure a firewall as the
- port number changes each time the system restarts.
-
- However you can easily configure the RMI port number by setting only
- one property per protocol in the
- $JONAS_BASE/conf/carol.properties file.
-
- To configure the RMI exported-port number, edit the
- $JONAS_BASE/conf/carol.properties file to change the following
- protocols from 0 (choose a random port number) to the port number you
- want:
-
-
-
- For the RMI/JRMP protocol, change: carol.jrmp.server.port=0
-
-
-
- For the RMI/IRMI protocol, change: carol.irmi.server.port=0
-
-
-
- For the RMI/IIOP protocol, change: carol.iiop.server.port=0
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_install_jdbc_driver.xml b/jonas_doc/core/src/docbook/doc-en/howto_install_jdbc_driver.xml
deleted file mode 100644
index 6b2226d45df56e046403f2333b62f39ff4b6d533..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_install_jdbc_driver.xml
+++ /dev/null
@@ -1,320 +0,0 @@
-
-
-
- Install a JDBC driver
-
-
- This document describes the process to transform a
- JDBC driver jar file into an OSGi
- bundle suitable for usage in JOnAS.
-
- It targets a developer audience. Some OSGi
- vocabulary is used in this document.
-
-
- This howto has been tested using
- DataSource provided using a Resource
- Adapter.
-
-
-
- Why creating an OSGi bundle ?
-
- JOnAS is performing an automatic bundle generation during startup
- for jars found in $JONAS_ROOT/lib/ext/ and $JONAS_BASE/lib/ext/. That means that the jar
- file dropped into the lib/ext/ directory will be
- analyzed and appropriate entries will be added in the MANIFEST of the jar.
-
-
- Theses new entries are OSGi related
- attributes (Bundle-SymbolicName,
- Bundle-ClassPath, Import-Package,
- Export-Package, ...). They describe what the bundle is
- (symbolic name, ...), what it requires from the system
- (Import-Package) and what it gives to the system
- (Export-Package). Concretely the Import-Package entry
- contains a list of package that are necessary in order to have a working
- bundle and the Export-Package is also a list of packages "offered" to the
- system.
-
- By default, JOnAS use very simple directives to generate a bundle
- that should mostly work:
-
-
-
- Every package required by the code in the jar file is placed in
- the Import-Package list, with a resolution:=optional
- attribute. That means that, during startup (when the bundle
- is installed then started), the OSGi framework
- will try to resolve as much required packages as possible, but if some
- are missing, there will be no failures. At the end, the bundle is
- ready to be used, but it's possible that it won't work as a really
- needed package could not be found during the resolution.
-
-
-
- Every package provided by the original jar file is placed in the
- Export-Package list. That means that all the
- classes that are in the jar file are potentially visible from other
- part of the server. This is bad for modularity.
-
-
-
- Bundle-SymbolicName is simply the jar file
- short name.
-
-
-
- Creating a handmade bundle with controled content will also avoid
- seeing that kind of traces during JOnAS start-up sequence:
-
- 07/09/09 12:26:22 (I) ExtensionLoaderComponent.__start : Some jars have been found in [<JONAS_ROOT>\lib\ext, <JONAS_BASE>\lib\ext].
- They have been transformed into bundles (see <JONAS_BASE>\work\ext-bundles directory).
- This is NOT the prefered way to extends JOnAS libraries, prefer to use carefully
- created and tested bundles, and place them in your deploy/ directory.
-07/09/09 12:26:22 (I) ExtensionLoaderComponent.__start : file:/<JONAS_BASE>/work/ext-bundles/ojdbc14.jar installed as a bundle.
-07/09/09 12:26:22 (I) ExtensionLoaderComponent.__start : file:/<JONAS_BASE>/work/ext-bundles/mysql-connector-java-3.1.10-bin.jar installed as a bundle.
-
-
-
- Using Bnd to generate an OSGi bundle
-
- Bnd is a bundle generation tool. It helps a lot the developer of
- OSGi bundles by automating MANIFEST generation and
- bundle content creation.
-
- The references section
- contains links to some Bnd documentations and examples that a user should
- read to better understand the Bnd philisophy.
-
- This howto focus on practical operations to be done to transform a
- jar file containing a JDBC driver into a suitable
- OSGi bundle.
-
-
- Installing Bnd
-
- Bnd can be downloaded here: http://www.aqute.biz/Code/Download.
-
- This is an all-in-one executable jar file (sources can be seen in
- /OSGI-OPT/src/ ).
-
- It can be executed using the following command line:
-
- >$ java -jar bnd.jar
-
-
-
- Bnd requires a 1.5 JVM (at minimum, also works with 1.6).
-
-
-
- Later in this article, a command named bnd is
- used. It refers to a shell script that could looks like the
- following:
-
- #!/bin/sh
-java -jar /path/to/your/bnd.jar $*
-
-
-
-
-
- Default jar wrapping
-
- Bnd provides a utility wrapping mode. Here is a quote from the Bnd
- documentation:
-
- The wrap command takes an existing JAR file and guesses the
- manifest headers that will make this JAR useful for an OSGi Service
- Platform.
-
- Looks promising :) In fact, this mode the one used by JOnAS when a
- library is placed in lib/ext/. If
- the jar in lib/ext/ had already been transformed and tested as a bundle,
- it's probably safe to use it as is (transformed bundle are in <JONAS_BASE>/work/bundle-ext/).
-
- The following command show how to use it using a MySQL driver
- jar:
-
- >$ bnd wrap mysql-connector-java-5.1.8-bin.jar
-mysql-connector-java-5.1.8-bin 239 0
-One warning
-1 : Superfluous export-package instructions: [org, com, com.mysql.jdbc.jdbc2, org.gjt, org.gjt.mm, com.mysql.jdbc.integration, com.mysql]
-This command has created a
- mysql-connector-java-5.1.8-bin.bar file that is an
- OSGi bundle. It can be placed in <JONAS_BASE>/deploy/ and renamed with
- a .jar extension and then JOnAS
- will automatically deploy it.
-
- As a side note, here is what is imported and exported from the
- MySQL bundle after wrapping (this output can be useful for advanced
- users):
-
- >$ bnd print -impexp mysql-connector-java-5.1.8-bin.bar
-[IMPEXP]
-Import-Package
- com.mchange.v2.c3p0 {resolution:=optional}
- javax.naming {resolution:=optional}
- javax.naming.spi {resolution:=optional}
- javax.net {resolution:=optional}
- javax.net.ssl {resolution:=optional}
- javax.sql {resolution:=optional}
- javax.transaction.xa {resolution:=optional}
- javax.xml.parsers {resolution:=optional}
- javax.xml.stream {resolution:=optional}
- javax.xml.transform {resolution:=optional}
- javax.xml.transform.dom {resolution:=optional}
- javax.xml.transform.sax {resolution:=optional}
- javax.xml.transform.stax {resolution:=optional}
- javax.xml.transform.stream {resolution:=optional}
- org.apache.commons.logging {resolution:=optional}
- org.apache.log4j {resolution:=optional}
- org.jboss.resource.adapter.jdbc {resolution:=optional}
- org.jboss.resource.adapter.jdbc.vendor{resolution:=optional}
- org.w3c.dom {resolution:=optional}
- org.xml.sax {resolution:=optional}
- org.xml.sax.helpers {resolution:=optional}
-Export-Package
- com.mysql.jdbc
- com.mysql.jdbc.configs
- com.mysql.jdbc.exceptions
- com.mysql.jdbc.exceptions.jdbc4
- com.mysql.jdbc.integration.c3p0
- com.mysql.jdbc.integration.jboss
- com.mysql.jdbc.interceptors
- com.mysql.jdbc.jdbc2.optional
- com.mysql.jdbc.log
- com.mysql.jdbc.profiler
- com.mysql.jdbc.util
- org.gjt.mm.mysql
-
-
-
- Advanced wrapping
-
- This section is for lib/ext/ bundles that cannot be installed with
- the default process or address developers wanting to control exactky
- their bundle's content.
-
- The wrap command's default values can be changed using a property
- file:
-
- Import-Package: !com.mchange.v2.c3p0,\
- !org.jboss.*,\
- javax.transaction.*;version=1.1,\
- *;resolution:=optional
-
-Export-Package: !com.mysql.jdbc.integration.*,\
- *;version=5.1.8
-
-Bundle-Version 5.1.8
-
-Bundle-SymbolicName MySQL Connector/J
-
-
- Inside JOnAS, the c3p0 and jboss related packages don't have
- to be imported (they are not even exported, so the dependencies
- can never be resolved). Using the '!' prefix exclude them.
-
-
-
- Specify a version for this required package (not optional).
- The bundle will be installed only if a package with the correct
- version is exported.
-
-
-
- The trainling '*' is required. If omitted, Bnd will not
- discover the imported packages of the jar.
-
-
-
- Similar to Import-Package exclusions, Bnd can avoid
- exporting some packages that are part of the original jar by
- prefixing their package name with '!'
-
-
-
- That line indicates to Bnd that all exported packages will
- be "tagged" with a particular version. It's a good practice to
- always have a version on exported packages.
-
-
-
- By default, the value will be '0'. For consistency, it
- should be set accordingly to the version of the driver.
-
-
-
- By default, the value will be the jar file name.
-
- This file can then be used on the command line:
-
- >$ bnd wrap -properties mysql-connector-java-5.1.8-bin.bnd mysql-connector-java-5.1.8-bin.jar
-mysql-connector-java-5.1.8-bin 239 728542
-
- That section was only an example of an advanced bundle
- generation. the import/export directives shown above may not be
- suitable for your own bundle. It is advised to read the links
- provided in the references
- section to better understand and see other capabilities of
- Bnd.
-
-
-
-
-
- References
-
-
-
- Bnd: Bundle
- Tool
-
-
-
- Example: Using Bnd To Do a
- Quick Wrap of Hibernate
-
-
-
- SpringSource: Creating
- OSGi bundles
-
-
-
- Documentation: Maven
- bundle Plugin (FAQ)
-
-
-
- Download
- Bnd
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_jndi.xml b/jonas_doc/core/src/docbook/doc-en/howto_jndi.xml
deleted file mode 100644
index 7cf353269393d12186d970b27785d10bf2f4e1af..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_jndi.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
- Dynamic injection of applications parameters into the JNDI context
-
-
- Introduction
-
-
- You can dynamically inject applications parameters into the JNDI context using a specific XML file call
- ConfigAdminJndiEntryDeployable. This specific file is an extensibility layer of the standard ConfigAdmin XML
- file.
-
-
-
-
- Usage
-
- Firstly, you need to activate depmonitor and JNDI services which allow you to dynamically inject applications
- parameters into the JNDI context. To do that, edit the jonas.services property contained in the jonas.properties
- file.
- jonas.services ...,depmonitor,jndi
-
- You can edit the global policy of the JNDI injection. The global policy describe the JNDI injection policy of all
- entries of each XML file (if the local policy is not set in theses files). Possible values are 'strict-consistency'
- (default value) and 'last-update'.
-
-
-
- strict-consistency: requires an exact match between entries of the XML file and the
- directory content. If an entry of the XML file isn't already bound in the JNDI
- context, it'll be injected. Otherwise, the deployment of the whole file will fail.
- When the deployable is undeployed, each entries will be removed from the JNDI context.
-
-
- last-update: the directory contains the latest value injected. If an entry of the XML
- file isn't already bound in the JNDI context, it'll be injected. Otherwise the entry
- will be updated with the new value.
-
-
-
-
-#Possible values of JNDI policy are: strict-consistency and last-update
-jonas.service.jndi.defaultPolicy strict-consistency
-
-
- Then you have to put into the JONAS_BASE/deploy directory your ConfigAdminJndiEntryDeployable file.
- See the XML Schema for the full
- structure of this XML file.
-
-
-
- ConfigAdminJndiEntryDeployable
-
-
- Sample example injecting two entries into the JNDI context.
-
-<configadmin xmlns="http://jonas.ow2.org/ns/configadmin/1.0">
- <jndi-entries xmlns="http://jonas.ow2.org/ns/jndientries/1.0">
- <policy>strict-consistency</policy>
- <entry>
- <name>java:global/jndi/developper</name>
- <description>The description of my first entry</description>
- <type>java.lang.String</type>
- <value>The JOnAS Team</value>
- </entry>
- <entry>
- <name>java:global/jndi/arch</name>
- <description>The description of my second entry</description>
- <type>java.lang.Float</type>
- <value>64.0</value>
- </entry>
- </jndi-entries>
-</configadmin>
-
-
-
- An entry is composed of :
-
-
- The <jndiEntries> tag. It describes an optional policy and a list of entries
- to inject in the JNDI context.
-
-
-
- The <entry> tag. It describes an entry to inject in the JNDI context.
-
-
-
- The <policy> tag. It describes the JNDI injection policy of each entries of the XML file.
- Possible values are 'strict-consistency' (default value) and 'last-update'. This policy parameter is local to the XML
- deployable file. It applies to all entries and overload the global policy set in the jonas.properties file.
-
-
-
- The <name> tag. It's the name of an entry to inject in the JNDI context.
-
-
-
- The <description> tag. It's the description of an entry to inject in the JNDI context.
-
-
-
- The <type> tag. It's the type of the value of an entry to inject in
- the JNDI context. The type should be available in the Java
- plateform (java.lang.String, java.lang.Integer,java.lang.Float,
- ...).
-
-
-
- The <value> tag. It's the value of an entry to inject in
- the JNDI context.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_mbeans.xml b/jonas_doc/core/src/docbook/doc-en/howto_mbeans.xml
deleted file mode 100644
index 58090e1b5e991160e9674e08c5bba6f78e7f4485..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_mbeans.xml
+++ /dev/null
@@ -1,409 +0,0 @@
-
-
- JOnAS and JMX, registering and manipulating MBeans
-
-
- By Jonny Way.
-
- Introduction
-
-
- JMX (Java Management eXtensions) is an API for managing, among other things, J2EE applications. JOnAS (version 4 and above) integrates the MX4J open-source JMX server and registers a number of MBeans. The web-based JonasAdmin application acts as a JMX client, enabling viewing and manipulation of these MBeans.
-
-
- It maybe desirable for an application to expose its own MBeans via the JMX server to allow application management (using, for example, MC4J). JOnAS currently does not provide a prebuilt method for registering MBeans with its JMX server. The intent of this document is to illustrate one method of registering application-specific MBeans with the JOnAS JMX server based on the m-let service.
-
-
- ServletContextListener
-
-
- The basic task of registering an MBean with the JOnAS JMX server is accomplished by the following implementation of the
-
- ServletContextListener
-
- interface. This implementation reads a number of MLet files, which specify the MBeans to be registered, and attempts to register those beans during the web application context initialization.
-
-
-
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ReflectionException;
-import javax.management.MBeanServer;
-import javax.management.MBeanException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServerFactory;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.loading.MLet;
-import javax.management.loading.MLetMBean;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextListener;
-
-import org.apache.log4j.Logger;
-
-/**
- * ServletContextListener designed to register JMX MBeans into
- * an existing JMX server when the application starts up. The
- * MBeans to be loaded are specified in the MLet files whose
- * names are given in the servlet context parameter with the name mletFiles,
- * in a semi-colon delminated list (although this is not really
- * needed as multiple mlets can be specifyed in one file, it might
- * be useful). Note that the filename are relative to the WEB-INF
- * directory of the servlet context being listened to.
- *
- * Note, that this listener should precede (in web.xml) any other that depend
- * on the MBeans being registered.
- *
- * Note that the MBean registration is sensitive to classloader issues. For
- * example, when registering the MBeans in the JMX server provided by
- * the Jonas application server any libraries required by the MBeans need
- * to be in the central lib directory (lib/ext).
- *
- *
- * @author Jonny Wray
- *
- */
-public class MBeanRegistrationListener implements ServletContextListener {
-
- private static final String MLET_DOMAIN = "MBeanRegistrationListener";
- private static final String MLET_BEAN_NAME = MLET_DOMAIN+":Name=MLet";
- private static final String MLETFILE_INITPARAM_NAME = "mletFiles";
- private static final Logger log = Logger.getLogger(MBeanRegistrationListener.class);
-
-
- private MBeanServer lookForExistingServer(){
- List mbeanServers = MBeanServerFactory.findMBeanServer(null);
- if(mbeanServers != null && mbeanServers.size() > 0){
- return (MBeanServer)mbeanServers.get(0);
- }
- return null;
- }
-
- private MBeanServer getMBeanServer(){
- MBeanServer server = lookForExistingServer();
- if(server == null){
- server = MBeanServerFactory.createMBeanServer(MLET_DOMAIN);
- }
- return server;
- }
-
-
- public void contextDestroyed(ServletContextEvent arg0) {
- log.info("Destroy event");
- // Anything that needs to be done here on deregistering of the
- // web application?
- }
-
-
- private List getMLetURLs(String filenames){
- List urls = new ArrayList();
- StringTokenizer tok =
- new StringTokenizer(filenames, ";");
- while(tok.hasMoreTokens()){
- String filename = tok.nextToken();
- URL configURL = Thread.currentThread().getContextClassLoader().getResource(filename);
- if(configURL == null){
- log.error("Cound not load MLet file resource from "+filename+" using current thread context classloader");
- }
- else{
- urls.add(configURL);
- }
- }
- return urls;
- }
-
- private List getMLetURLs(ServletContext context, String filenames){
- List urls = new ArrayList();
- StringTokenizer tok =
- new StringTokenizer(filenames, ";");
- while(tok.hasMoreTokens()){
- String filename = "/WEB-INF/"+tok.nextToken();
- URL configURL = null;
- try {
- configURL = context.getResource(filename);
- }
- catch (MalformedURLException e) {
- log.error("URL for "+filename+" is malformed", e);
- }
- if(configURL == null){
- log.error("Cound not find MLet file resource from "+filename+" in servlet context");
- }
- else{
- urls.add(configURL);
- }
- }
- return urls;
- }
-
- /**
- * Dynamically register the MBeans specified in the list
- * of MLet files (relative to /WEB-INF/) specified in servlet context parameter
- * mletFiles as a semi-colon deliminated list of file names.
- *
- * The algorithm looks for already running JMX servers and uses
- * the first it comes across. If no servers are running, then
- * it creates one.
- *
- * Note, the interface does not define any exceptions to be
- * thrown. Currently, any exceptions thrown during registration
- * are logged at error level and then ignored. This seems
- * reasonable, as these may or may not be a fatal event. In
- * this way the registration process reports its failure and
- * the application context initialization continues.
- */
- public void contextInitialized(ServletContextEvent arg0) {
- log.info("Initializing event");
- String filenames = arg0.getServletContext().getInitParameter(MLETFILE_INITPARAM_NAME);
- if(filenames != null && filenames.length() > 0){
- MBeanServer server = getMBeanServer();
- if(server != null){
- try{
- ObjectName name = new ObjectName(MLET_BEAN_NAME);
- if(!server.isRegistered(name)){
- log.info("Creating new MLetMBean for dynamic registration");
- MLetMBean mletService = new MLet();
- server.registerMBean(mletService, name);
- }
- List urls = getMLetURLs(arg0.getServletContext(), filenames);
- for(int i=0;i < urls.size();i++){
- URL url = (URL)urls.get(i);
- try {
- log.info("Registering MBeans from MLet file "+url);
- Set loadedMBeans = (Set)server.invoke(name, "getMBeansFromURL",
- new Object[]{url}, new String[]{URL.class.getName()});
-
- processRegisteredMBeans(loadedMBeans);
- }
- catch (InstanceNotFoundException e) {
- log.error("Unable to register MBeans from MLet file "+url, e);
- }
- catch (MBeanException e) {
- log.error("Unable to register MBeans from MLet file "+url, e);
- }
- catch (ReflectionException e) {
- log.error("Unable to register MBeans from MLet file "+url, e);
- }
- }
- }
- catch(MalformedObjectNameException e){
- log.error("Unable to register the MLetMBean", e);
- }
- catch(NotCompliantMBeanException e){
- log.error("Unable to register the MLetMBean", e);
- }
- catch(MBeanRegistrationException e){
- log.error("Unable to register the MLetMBean", e);
- }
- catch(InstanceAlreadyExistsException e){
- log.error("Unable to register the MLetMBean", e);
- }
- }
- else{
- log.error("MBeanServer not found and could not be created. Not registering MBeans.");
- }
- }
- else{
- log.error("No mletFiles servlet context parameter found.");
- }
- }
-
- private void processRegisteredMBeans(Set loadedMBeans) {
- log.debug("Loaded beans: "+loadedMBeans.size());
- Iterator it = loadedMBeans.iterator();
- while(it.hasNext()){
- Object o = it.next();
- if(o instanceof ObjectInstance){
- ObjectInstance inst = (ObjectInstance)o;
- log.info("Registered: "+inst.getObjectName());
- }
- else if(o instanceof Throwable){
- Throwable err = (Throwable)o;
- log.error("Error registering MBeans", err);
- }
- }
- }
-
-}
-
-
-
-
- Configuration
-
-
- In order to use the above ServletContextListener, it must be configured in the web.xml of the web application that wants to register the MBeans. For example, the following lines added to the web.xml will result in the registeration of the MBeans specified in the application.mlet file under the WEB-INF directory. Multiple MLet files can be specified in a comma-separated list.
-
-
-
-
- <context-param>
- <param-name>mletFiles</param-name>
- <param-value>application.mlet</param-value>
- </context-param>
-
- <listener>
- <listener-class>net.fiveprime.jmx.MBeanRegistrationListener</listener-class>
- </listener>
-
-
-
-
- An example MLet file to load an extension (detailed below) of the HibernateService MBean is:
-
-
-
-
-<mlet code="ConfigurableHibernateService"
- name="HibernateService:Name=HibernateService"
- archive="mbeans.jar">
- <arg type="java.lang.String" value="hibernate.cfg.xml">
- <arg type="java.lang.String" value="hibernate/HibernateSessionFactory">
- <arg type="java.lang.String" value="DefaultDS">
-</mlet>
-
-
- Library Dependences
-
-
- Registration of MBeans results in their construction by the JMX server. As such, any classes the MBean is dependent on must be available to the JMX server, in lib/ext.
-
-
- HibernateService Extension
-
-
- The Hibernate distribution provides an implementation of HibernateServiceMBean in the class HibernateService. In the MLet file above, an extension of this class is specified that allows the HibernateService to be configured from an external file, such as the standard hibernate.cfg.xml file. There are a number of situations where it is desirable to use the Hibernate mapped classes outside of Jonas running a JMX server. This allows the Hibernate mapping files and properties to be specified in one place and used in multiple situations. If this is not needed, then the HibernateService class can be used directly.
-
-
-
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import net.sf.hibernate.HibernateException;
-import net.sf.hibernate.jmx.HibernateService;
-
-import org.apache.commons.digester.Digester;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.xml.sax.SAXException;
-/**
- * Extension of the HibernateService class to add configuration
- * ability from a Hibernate XML configuration file.
- *
- * @author Jonny Wray
- *
- */
-public class ConfigurableHibernateService extends HibernateService {
-
- private static Log log = LogFactory.getLog(ConfigurableHibernateService.class);
-
- /**
- * Configure this HibernateService from an XML file
- *
- * @param filename The Hibernate XML configuration file, for example hibernate.cfg.xml
- * @param jndiName The JNDI name that the session factory will be registered under
- * @param datasourceName The name of the datasource used by the session factory
- * @throws HibernateException If there's a problem reading the configuration file
- */
- public ConfigurableHibernateService(String filename, String jndiName, String datasourceName)
- throws HibernateException{
-
- init(filename, jndiName, datasourceName);
- start();
- }
-
- private void init(String filename, String jndiName, String datasourceName) throws HibernateException {
- if(log.isDebugEnabled()){
- log.debug("Configuring Hibernate JMX MBean with filename "+filename+
- ", JNDI name "+jndiName+" and datasource "+datasourceName);
- }
- try{
- URL url = this.getClass().getClassLoader().getResource(filename);
- Digester mappingDigester = configureMappingDigester();
- List results = (List)mappingDigester.parse(url.openStream());
- Iterator it = results.iterator();
- while(it.hasNext()){
- StringBuffer buffer = (StringBuffer)it.next();
- addMapResource(buffer.toString());
- log.debug("Adding mapping resource "+buffer.toString());
- }
-
- Digester propertyDigester = configurePropertyDigester();
- Map resultMap = (Map)propertyDigester.parse(url.openStream());
- it = resultMap.keySet().iterator();
- while(it.hasNext()){
- String key = (String)it.next();
- String value = (String)resultMap.get(key);
- setProperty("hibernate."+key, value);
- log.debug("Adding property ("+key+","+value+")");
- }
- setJndiName(jndiName);
- setDatasource(datasourceName);
- }
- catch(IOException e){
- throw new HibernateException(e);
- }
- catch(SAXException e){
- throw new HibernateException(e);
- }
- }
-
- private Digester configureMappingDigester(){
- Digester digester = new Digester();
- digester.setClassLoader(this.getClass().getClassLoader());
- digester.setValidating(false);
- digester.addObjectCreate("hibernate-configuration/session-factory", ArrayList.class);
-
- digester.addObjectCreate("hibernate-configuration/session-factory/mapping", StringBuffer.class);
- digester.addCallMethod("hibernate-configuration/session-factory/mapping", "append", 1);
- digester.addCallParam("hibernate-configuration/session-factory/mapping", 0, "resource");
- digester.addSetNext("hibernate-configuration/session-factory/mapping", "add");
-
- return digester;
- }
-
- private Digester configurePropertyDigester(){
- Digester digester = new Digester();
- digester.setClassLoader(this.getClass().getClassLoader());
- digester.setValidating(false);
- digester.addObjectCreate("hibernate-configuration/session-factory", HashMap.class);
-
- digester.addCallMethod("hibernate-configuration/session-factory/property", "put", 2);
- digester.addCallParam("hibernate-configuration/session-factory/property", 0, "name");
- digester.addCallParam("hibernate-configuration/session-factory/property", 1);
-
- return digester;
- }
-}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_packaging.xml b/jonas_doc/core/src/docbook/doc-en/howto_packaging.xml
deleted file mode 100644
index bb55066c1dde3ddbf831629503c33c2fe99c5f75..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_packaging.xml
+++ /dev/null
@@ -1,348 +0,0 @@
-
-
-
- Packaging service
-
-
- This service is used essentially in the context of PaaS. To deploy an application in the platform, this service
- take a descriptor of the application as parameter and generate an addon.
-
-
-
-
- Cloud descriptors
-
-
-
- These are xml files which describe :
-
-
- Environment (environment-template.xml): describes the components of the platform
- such as instances of JOnAS application servers, data sources, etc..
-
-
- Application (cloud-application.xml): Each application is described in a file of that
- type. An application can be composed of several modules, their locations are specified in this file.
-
-
- Mapping topology (deployment.xml): describes the relationship between applications
- and application servers
-
-
-
-
- To parse these xml files, some APIs were developed in
- JPaaS-Util project using JAXB.
-
-
-
- Example of use for cloud-application.xml
-
-
- First, create an instance of Cloud application descriptor. The constructor has three signatures :
-
-
- Empty constructor
-
-/**
-* Default constructor
-*/
-public CloudApplicationDesc() throws Exception;
-
-
-
- With the URL of the xml file
-
-/**
-* Constructor with xml url
-* @param urlCloudApplication
-* @throws Exception
-*/
-public CloudApplicationDesc(URL urlCloudApplication) throws Exception;
-
-
-
- With the content of the xml file
-
-/**
-* Constructor with xml content
-* @param cloudApplication
-* @throws Exception
-*/
-public CloudApplicationDesc(String cloudApplication) throws Exception;
-
-
-
-
-
-
-
- Parse an xml file
-
-
-
- To parse an xml file, use the constructor with the URL of xml content.
-
-URL urlCloudApplication = new URL(CLOUD_APPLICATION_URL);
-CloudApplicationDesc desc = new CloudApplicationDesc(urlCloudApplication);
-
- Then, retrieve the root element of xml schema :
-
-CloudApplicationType cloudApplication = desc.getCloudApplication();
-
- After, for getting any element content in the xml file, just call the corresponding method on the root
- element. To get application name for example, do :
-
-String applicationName = cloudApplication.getName();
-
-
- The cloud-application.xml contains a list of deployables that form the application. These
- deployables are defined in two separated namespaces embedded-xml and artefact.
- To get the list of deployables from cloud-application.xml do:
-
-
-// Gets deployables
-DeployablesType deployables = cloudApplication.getDeployables();
-List<Object> listDeployables = deployables.getDeployables();
-
- Then, for each element in listDeployables test if it is an instance of
- org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.artefact.v1.generated.ArtefactDeployableType
- or org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.xml.v1.generated.XmlDeployableType.
-
-
-
-
-
- Construct an xml file
-
-
-
- To generate a cloud-application.xml file, start by creating a new element corresponding
- to the root element of the xml:
-
-CloudApplicationType cloudApplicationType = new CloudApplicationType();
-
- Then, set the content of each xml element. For example, to set application name do :
-
-cloudApplicationType.setName("my application");
-
- To construct the list of deployables, retrieve the empty list of deployables created when
- cloudApplicationType was instantiated :
-
-DeployablesType deployablesType = new DeployablesType();
-List<Object> listDeployables = deployablesType.getDeployables();
-
- And then, create deployables. Suppose that the application has one artefact deployable, do:
-
-ArtefactDeployableType deployable = new ArtefactDeployableType();
-deployable.setName("my deployable");
-deployable.setId("my id");
-deployable.setLocation(MY_DEPLOYABLE_URL);
-...
-
- Add this deployable to the list of deployables :
-
-listDeployables.add(deployable);
-
- Now, all xml elements were set. So, generate the xml. For that, create an empty cloud application
- descriptor :
-
-CloudApplicationDesc desc = new CloudApplicationDesc();
-
- Construct the JAXB element corresponding to the root element cloudApplicationType:
-
-ObjectFactory objectFactory = new ObjectFactory();
-JAXBElement<CloudApplicationType> cloudApplication = objectFactory.createCloudApplication(cloudApplicationType);
-
- And call the method generateCloudApplication() :
-
-String xml = desc.generateCloudApplication(cloudApplication);
-
- This one returns the xml content.
-
-
-
-
-
-
-
- Packaging
-
-
-
- The Packaging service is responsible of package of applications in the platform. It takes a
- cloud-application.xml (required) and a tenant identifier (optional) as parameters. By default,
- the addon is placed in $JONAS_BASE/work/addons, set the outputDir parameter
- otherwise.
-
-
-
- Computing generated addons number
-
-
-
- Each application deployable can include these requirements :
-
-<artefact:requirements>
- <artefact:requirement>(collocated-to=id1)</artefact:requirement>
- <artefact:requirement>(not-collocated-to=id2)</artefact:requirement>
-</artefact:requirements>
-
- collocated-to means "must be hosted in the same container". Similarly,
- not-collocated-to means "must be not hosted in the same container".
-
-
- Therefore, it is possible that as a result of packaging of one application, more than one addon will be
- generated (the effect of not-collocated-to property). In order to optimize the number
- of addons generated, an algorithm was implemented.
-
-
- This problem is resolved by using a non-oriented graph. Each deployable is represented by a vertex. There is
- an edge between two vertices if these represented deployables are collocated.
-
-
- Consider this cloud-application.xml:
-
-<cloud-application>
- ...
- <deployables>
- <artefact:deployable name="ear" id="artefact1">
- <artefact:location></artefact:location>
- <artefact:requirements>
- <artefact:requirement>(collocated-to=artefact2)</artefact:requirement>
- <artefact:requirement>(not-collocated-to=xml2)</artefact:requirement>
- </artefact:requirements>
- </artefact:deployable>
-
- <artefact:deployable name="war" id="artefact1">
- <artefact:location></artefact:location>
- <artefact:requirements>
- <artefact:requirement>(not-collocated-to=xml1)</artefact:requirement>
- </artefact:requirements>
- </artefact:deployable>
-
- <embedded-xml:deployable name="xml1" id="xml1">
- <embedded-xml:requirements>
- <embedded-xml:requirement>(collocated-to=xml2)</embedded-xml:requirement>
- </embedded-xml:requirements>
- </embedded-xml:deployable>
-
- <embedded-xml:deployable name="xml2" id="xml2">
- <embedded-xml:requirements>
- <embedded-xml:requirement>(collocated-to=xml1)</embedded-xml:requirement>
- <embedded-xml:requirement>(not-collocated-to=artefact1)</embedded-xml:requirement>
- </embedded-xml:requirements>
- </embedded-xml:deployable>
- </deployables>
-</cloud-application>
-
-
- We deduce the following graph :
-
-
-
-
-
-
- Then, we take each connected components, in this case {artefact1, artefact2} and
- {xml1, xml2}, and we try to merge them one by one. Two connected components are merged if
- any element in the first has a not-collocated-to requirement with an element in the second.
- This is not the case in the example above because artefact1 which is in the first connected
- component is not-collocate-toxml2 which is in the second component.
-
-
- After merging, the final connected components represent the content of generated addons. In the example, the
- first addon will contain artefact1 and artefact2 and the second addon
- will contain xml1 and xml2.
-
-
-
-
-
- Addon's repository provisioning
-
-
- After computing the content of each addon to generate, a deployment plan is generated and deployables will be
- stored in the maven repository/ directory inside the addon :
-
-
- The groupid of all deployables is org.ow2.jonas.jpaas
-
-
- The version of deployables is the application version set in cloud-application.com.
-
-
- The artifact of each deployable is its name.
-
-
- The type for artefact deployables is the extension of the file. For xml
- deployable, the type is xml.
-
-
-
-
- When the addon is being deployed, the repository inside the addon is added to repositoryManager.
-
-
-
-
-
-
- Usage
-
-
-
- Packaging service can be used by two way:
-
-
-
- As a JOnAS service
-
-
-
- Start a addon profile JOnAS and deploy the addon of packaging service.
- See org.ow2.jonas.packaging.IPackagingManager.
-
-
-
-
-
- Command line
-
-
- It is possible to generate application addon using a maven plugin.
-
-<groupId>org.ow2.jonas.tools.maven</groupId>
-<artifactId>maven-packaging-plugin</artifactId>
-<phase>generate-resources</phase>
-<goal>generate-application-addon</goal>
-
- This plugin require the URL of cloud-application.xml and the URL of outputDirectory.
- In fact, this plugin is executed without a running JOnAS. TenantId is an optional parameter. Basic maven plugin usage:
-
-mvn org.ow2.jonas.tools.maven:maven-packaging-plugin:5.3.0-M7-SNAPSHOT:generate-application-addon
--DurlCloudApplication=cloud-application.xml -DoutPutDirectory=. -Dtenant-id=T1
-
- To use easily this plugin, a shell script is written and simplify the command line :
-
-Usage: gen-addon -app urlCloudApplication -out urlOutputDir
-Options:
- -tid tenant identifier value
- -env url of environment-template.xml
- -map url of deployment.xml (mapping topology)
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_services.xml b/jonas_doc/core/src/docbook/doc-en/howto_services.xml
deleted file mode 100644
index 3f9bfa246f5c4af995d065d9a23d84ad393d8c8a..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_services.xml
+++ /dev/null
@@ -1,893 +0,0 @@
-
-
-
- Creating a New JOnAS Service
-
-
-
-
- Target audience and rationale
-
-
- This chapter is intended for advanced JOnAS users who require that
- some "external" services run along with the JOnAS server. A service is
- something that may be initialized, started, and stopped. JOnAS itself
- already defines a set of services, some of which are cornerstones of the
- JONAS Server. The JOnAS pre-defined services are listed in Configuring JOnAS
- services .
-
- Java EE application developers may need to access other services,
- for example another Web container or a Versant container, for their
- components. Thus, it is important that such services be able to run along
- with the application server. To achieve this, it is possible to define
- them as JOnAS services.
-
- This chapter describes how to define a new JOnAS service and how to
- specify which service should be started with the JOnAS server.
-
-
-
-
- Introducing a new service
-
-
- The customary way to define a new JOnAS service is to encapsulate it
- in a class whose interface is known by JOnAS. More precisely, such a class
- provides a way to start and stop the service. Then, the
- jonas.properties file must be modified to make JOnAS
- aware of this service.
-
-
-
- Defining the service interface and implementation
-
-
- A JOnAS service is represented by a class that implements its
- service interface and extends the class
- org.ow2.jonas.lib.service.AbsServiceImpl, and
- thus must implement at least the following methods:
-
-
-
- public void doStart() throws
- ServiceException;
-
-
-
- public void doStop() throws
- ServiceException;
-
-
-
- These methods will be called by JOnAS for starting and stopping
- the service.
-
- The service interface should look like the following:package com.company.jonas.myservice;
-
-/**
- * Defines the "business" interface of the service (no life-cycle methods).
- */
-public interface IMyService {
- void doSomething();
-}
-
-
- The service class should look like the following:
-
- package com.company.jonas.myservice.internal;
-
-import com.company.jonas.myservice.IMyService;
-
-import org.ow2.jonas.lib.service.AbsServiceImpl;
-import org.ow2.jonas.service.ServiceException;
-
-.....
-
-public class DefaultMyService extends AbsServiceImpl implements IMyService {
-
- /** A configurable property. */
- private String property;
-
- @Override
- protected void doStart() throws ServiceException {
- // Do something on start-up
- // All the configuration and service dependencies has been injected at this time
- }
-
- @Override
- protected void doStop() throws ServiceException {
- // Do something on shutdown
- // Service dependencies are still available
- }
-
- public void doSomething() {
- // Business code ...
- }
-
- public void setProperty(String property) {
- this.property = property;
- }
-}
-
-
-
-
-
- Building the OSGi bundle
-
-
- A JOnAS service must be packaged in an OSGi bundle in order to be
- deployed on the JOnAS OSGi platform. It implies to create a standard
- packaging structure. An OSGi bundle is like a classic JAR file plus a
- specific MANIFEST file. To ease the service creation, configuration and
- management of dynamic dependencies to other JOnAS services, it is
- recommanded to use iPOJO
- to build your services. This guide will present the iPOJO
- solution.
-
- The JAR structure of the bundle must contain the following
- parts:
-
-
-
- com/company/jonas/myservice
-
- contains the service interface(s)
-
-
-
- com/company/jonas/myservice/internal
-
- contains the service implementation classe(s)
-
-
-
- META-INF/MANIFEST.MF
-
- OSGi manifest file
-
-
-
- metadata.xml
-
- iPOJO metadata file
-
-
-
-
-
- The OSGi MANIFEST should contain the following attributes:
-
- Import-Package: org.ow2.jonas.lib.service, org.ow2.jonas.service, ...
-Export-Package: com.company.jonas.myservice
-Private-Package: com.company.jonas.myservice.internal
-Bundle-Version: 5.1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: MyService
-Bundle-SymbolicName: com.company.jonas.myservice
-
- If the project is built with Maven, it is possible to
- generate this file during the project compilation thanks to the maven-bundle-plugin.
- This plugin is based on the BND tool which can
- also be used separately.
-
-
- Building with maven
-
- Even if it's not mandatory to use maven to build OSGi bundles,
- the JOnAS team use it extensively because of the large number of
- integrated OSGi build tools.
-
-
- Maven project structure
-
- The maven project that will contains the new service's code is
- structured just like any well known maven project:
-
- <myservice>/
- src/
- main/
- java/
- a/b/<myservice>/
- ...
- resources/
- META-INF/
- <myservice>.bnd (optional)
- metadata.xml
- test/
- ...
- pom.xml
-
-
- src/main/java/
- contains all the Java source code that have been written for
- the new service (interface + implementation + any other new
- classes)
-
-
-
- src/main/resources/ contains the
- iPOJO component description file named metadata.xml, plus an
- optional Bnd descriptor that will be used to describe the
- bundle's content (for advanced usages)
-
-
-
- src/test/
- contains all the unit tests that may have been written to unit
- test the service implementation (optional altough
- recommanded)
-
-
-
- pom.xml is the maven project's
- module descriptor
-
-
-
-
-
- Maven project descriptor (pom.xml)
-
- <?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">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.company.jonas</groupId>
- <artifactId>myservice</artifactId>
- <version>1.0.0</version>
- <packaging>bundle</packaging>
-
- <name>JOnAS Service</name>
-
- <properties>
- <jonas.version>5.1.2</jonas.version>
- <ipojo.version>1.4.0</ipojo.version>
- </properties>
-
- <dependencies>
- <!-- Imports the AbsService and required interfaces in our module -->
- <dependency>
- <groupId>org.ow2.jonas</groupId>
- <artifactId>jonas-commons</artifactId>
- <version>${jonas.version}</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <!-- Creates the bundle -->
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <_include>-target/classes/META-INF/${project.artifactId}.bnd</_include>
- </instructions>
- </configuration>
- </plugin>
-
- <!-- Manipulate the bundle (iPOJO) -->
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-ipojo-plugin</artifactId>
- <version>${ipojo.version}</version>
- <executions>
- <execution>
- <goals>
- <goal>ipojo-bundle</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
-Here we go into more details about the different sections of
- this file.
-
- <groupId>com.company.jonas</groupId>
- <artifactId>myservice</artifactId>
- <version>1.0.0</version>
- <packaging>bundle</packaging>
-
-
- groupId,
- artifactId and version
- elements are identifying uniquely the bundle in the maven
- repository
-
-
-
- packaging defines the type of the
- artifact produces by this module. In this case, an
- OSGi bundle.
-
- <properties>
- <jonas.version>5.1.2</jonas.version>
- <ipojo.version>1.4.0</ipojo.version>
- </properties>
-The properties section defines re-usables
- key/value pairs. Here, it is used to store the JOnAS version that
- will be used to compile the module against. It also defines the
- ipojo version to be used.
-
-
- Notice that there is a relationship between JOnAS and iPOJO
- version:
-
-
-
- JOnAS 5.1.x uses iPOJO 1.4.0
-
-
-
- JOnAS 5.2.x uses iPOJO 1.6.x
-
-
-
-
- <dependencies>
- <!-- Imports the AbsService and required interfaces in our module -->
- <dependency>
- <groupId>org.ow2.jonas</groupId>
- <artifactId>jonas-commons</artifactId>
- <version>${jonas.version}</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
-
- The dependencies section of the POM
- declares library dependencies of the module. In this case, the new
- service requires jonas-commons because it extends
- the AbsServiceImpl class (that is in the
- jonas-commons module). The
- scope element is used to limit the transitive
- maven dependency resolution mechanism.
-
- <!-- Creates the bundle -->
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions> <!-- Do not forget the extensions element ! -->
- <configuration>
- <instructions>
- <_include>-target/classes/META-INF/${project.artifactId}.bnd</_include>
- </instructions>
- </configuration>
- </plugin>
-
-
- The build/plugins section contains the
- definition (and configuration) of all the plugin(s) that will be
- invoked during the build.
-
- This snippet show the configuration to be used for the
- maven-bundle-plugin (in charge of the manifest and bundle
- generation): it simply states that it must read a .bnd file (located in
- src/main/resources/META-INF/***.bnd) named
- after the project's artifactId value. If this file is not present,
- default
- values will be used.
-
- <!-- Manipulate the bundle (iPOJO) -->
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-ipojo-plugin</artifactId>
- <version>${ipojo.version}</version>
- <executions>
- <execution>
- <goals>
- <goal>ipojo-bundle</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
-
- This important section hooks iPOJO in the build process. It
- will reads the src/main/resources/metadata.xml
- file as input. Then, it manipulate the bundle (modify the classes,
- update the manifest) and save it on disk.
-
-
-
- iPOJO component descriptor (metadata.xml)
-
- iPOJO is a Service Component Runtime aiming to simplify OSGi
- application development. You have to create the iPOJO component
- which will define your JOnAS service. This component must declare
- the provided and required services, the start/stop callback methods
- and the service properties.
-
- The iPOJO metadata file should look like the following:
-
- <?xml version="1.0" encoding="UTF-8"?>
-<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="org.apache.felix.ipojo"
- xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/1.4.0/core.xsd" >
-
- <component classname="com.company.jonas.myservice.internal.DefaultMyService"
- immediate="false">
- <provides specifications="com.company.jonas.myservice.IMyService" />
-
- <!-- Required dependencies -->
- <requires optional="false"
- specification="org.ow2.jonas.properties.ServerProperties">
- <callback type="bind" method="setServerProperties" />
- </requires>
-
- <!-- LifeCycle Callbacks -->
- <callback transition="validate" method="start" />
- <callback transition="invalidate" method="stop" />
-
- <!-- Configuration properties -->
- <properties propagation="true">
- <property name="property" method="setProperty" />
- </properties>
- </component>
-
-</ipojo>
-
- iPOJO component
- description
-
- The component
- classname represents
- the service implementation class
-
-
-
- The provides
- element list all OSGi services provided by the component, here
- only the service interface
-
-
-
- In this example, the component requires the
- ServerProperties
- service which will be injected to the component instance
- during activation
-
-
-
- Two callbacks are defined, one for the component
- validation during service startup and one for the component
- invalidation for the service shutdown
-
-
-
- Property names must match service properties defined in
- the jonas.properties file. The property
- value will be injected to the component instance via
- setters
-
-
-
-
-
- Build execution
-
- Simply type mvn clean install to launch the
- build, that will delete the target/ directory (that contains only
- generated/compiled stuff) and then compile and package everything,
- including generating the bundle with its manifest and manipulating
- it with iPOJO.
-
- >$ mvn clean install
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building JOnAS Service 1.0.0
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] --- maven-resources-plugin:2.4.2:resources (default-resources) @ myservice ---
-[INFO] Copying 1 resource
-[INFO]
-[INFO] --- maven-compiler-plugin:2.3:compile (default-compile) @ myservice ---
-[INFO] Compiling 1 source file to /home/sauthieg/sandboxes/playground/myservice/target/classes
-[INFO]
-[INFO] --- maven-resources-plugin:2.4.2:testResources (default-testResources) @ myservice ---
-[INFO] skip non existing resourceDirectory /home/sauthieg/sandboxes/playground/myservice/src/test/resources
-[INFO]
-[INFO] --- maven-compiler-plugin:2.3:testCompile (default-testCompile) @ myservice ---
-[INFO] No sources to compile
-[INFO]
-[INFO] --- maven-surefire-plugin:2.5:test (default-test) @ myservice ---
-[INFO] No tests to run.
-[INFO]
-[INFO] --- maven-bundle-plugin:2.1.0:bundle (default-bundle) @ myservice ---
-[INFO]
-[INFO] --- maven-ipojo-plugin:1.4.0:ipojo-bundle (default) @ myservice ---
-[INFO] Start bundle manipulation
-[INFO] Metadata file : /home/sauthieg/sandboxes/playground/myservice/target/classes/metadata.xml
-[INFO] Input Bundle File : /home/sauthieg/sandboxes/playground/myservice/target/myservice-1.0.0.jar
-[INFO] Bundle manipulation - SUCCESS
-[INFO]
-[INFO] --- maven-install-plugin:2.3:install (default-install) @ myservice ---
-[INFO] Installing /home/sauthieg/sandboxes/playground/myservice/target/myservice-1.0.0.jar to /home/sauthieg/.m2/repository/com/company/jonas/myservice/1.0.0/myservice-1.0.0.jar
-[INFO]
-[INFO] --- maven-bundle-plugin:2.1.0:install (default-install) @ myservice ---
-[INFO] Installing com/company/jonas/myservice/1.0.0/myservice-1.0.0.jar
-[INFO] Writing OBR metadata
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 8.088s
-[INFO] Finished at: Tue Jul 06 10:37:43 GMT+01:00 2010
-[INFO] Final Memory: 9M/315M
-[INFO] ------------------------------------------------------------------------
-
-
-
-
-
-
-
- Preparing Service Installation
-
-
-
- Bundle Repository
-
- The generated bundle has to be placed in a maven repository that
- is available to the JOnAS instance that will host the service.
-
- 2 simples solutions:
-
- Bundle was locally produced using maven, so it's already
- available in the local developer's repository (usually in
- ~/.m2/repository/). This
- repository has to be declared to the JOnAS instance.
-
- The easiest way to declare a repository is to edit the
- $JONAS_BASE/conf/initial-repositories.xml
- and make sure that a similar entry is present:
-
- <repository id="maven2-local-repository">
- <type>maven2</type>
- <url>file:///home/john/.m2/repository</url>
- </repository>
-
-
-
-
- Bundle is not already present in a maven repository. It's
- necessary to place it in the appropriate location (according to
- its maven coordinates: groupId, artifactId, version,
- ...):$JONAS_ROOT/repositories/maven2-internal/<groupId>/<artifactId>/<version>/<artifactId>-<version>.jar
- groupId is expressed with '.' as separator in POMs,
- but '.' are to be replaced with '/' in the location
- The path follows the Maven repository structure. By
- default, each JOnAS service is located in the
- $JONAS_ROOT/repositories/maven2-internal
- directory. This directory can be seen as a Maven local
- repository where JOnAS looks for OSGi
- bundles
-
-
-
-
-
- Service Deployment Plan
-
- After the setup of the maven repository hosting the new service
- bundle, a deployment plan (XML file) referencing this resource has to
- be created. This deployment plan must be placed in the
- $JONAS_ROOT/repositories/url-internal directory .
- The file name must be the same than the service name:
- myservice.xml in the example.
-
-
- Deployment plan filename HAS TO BE equals to the service name
- used in the jonas.properties.
-
-
- Here is an example of deployment plan that will trigger the
- installation of a bundle available as a maven artifact.
-
- <?xml version="1.0" encoding="UTF-8"?>
-<deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
- xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="deployment-plan-1.0.xsd"
- atomic="false">
-
- <deployment id="com.company.jonas:myservice:jar"
- xsi:type="m2:maven2-deploymentType"
- reloadable="false"
- start="true"
- reference="true"
- startlevel="1"
- starttransient="true">
- <m2:groupId>com.company.jonas</m2:groupId>
- <m2:artifactId>myservice</m2:artifactId>
- <m2:version>1.0.0</m2:version>
- </deployment>
-
-</deployment-plan>
-
-
- As the service name and the deployment plan name are equal,
- JOnAS will automatically try to deploy this deployment plan during the
- service startup. This will trigger the deployment of the
- OSGi bundle.
-
- More information about deployment plans here.
-
-
-
-
-
- Modifying the jonas.properties file
-
-
- The service is defined and its initialization parameters specified
- in the jonas.properties file. First, choose a name
- for the service (e.g. "myservice"), then do the
- following:
-
-
-
- add this name to the jonas.services
- property; this property defines the set of services
- (comma-separated) that will be started with JOnAS.
-
-
-
- add a jonas.service.myservice.class
- property specifying the service implementation class.
-
-
-
- add jonas.service.myservice.XXX
- properties which specify the service configuration. These properties
- will be set to the implementation class before the service
- startup.
-
-
-
- This is illustrated as follows:
-
- jonas.services .......,myservice
-jonas.service.myservice.class com.company.jonas.myservice.internal.DefaultMyService
-jonas.service.myservice.property value
-
-
-
-
-
- Using the new service
-
-
- When started, the new JOnAS service will espose an OSGi service as
- defined in the iPOJO component declaration which will be accessible
- through the OSGi registry. The specification of this service is defined by
- the Java interface and could be concretely looked up by specifying the
- com.company.jonas.myservice.IMyService interface.
- There are many ways to get the OSGi service reference:
-
-
-
- Getting the OSGi service using the BundleContext:BundleContext bundleContext = …
-ServiceReference serviceReference = bundleContext.getServiceReference(IMyService.class.getName());
-IMyService myService = (IMyService) bundleContext.getService(serviceReference);
-
-
-
- Getting the OSGi service using iPOJO. iPOJO components can
- declare service requirements which will be dynamically injected to
- the component instance.
-
-
-
- Using another Service Component Runtime (Declarative Service,
- Dependency Manager, ...)
-
-
-
-
-
-
- Advanced understanding
-
-
- Refer to the JOnAS sources for more details about the classes
- mentioned in this section.
-
-
-
- JOnAS built-in services
-
-
- The existing JOnAS services are the following:
-
-
-
-
-
- Service name
-
- Service class
-
-
-
-
-
- registry
-
- CarolRegistryService
-
-
-
- jmx
-
- JOnASJMXService
-
-
-
- wc
-
- JOnASWorkCleanerService
-
-
-
- wm
-
- JOnASWorkManagerService
-
-
-
- ejb2
-
- JOnASEJBService
-
-
-
- ejb3
-
- EasyBeansService
-
-
-
- versioning
-
- VersioningServiceImpl
-
-
-
- web
-
- Tomcat6Service / Jetty6Service
-
-
-
- jaxrpc
-
- AxisService
-
-
-
- wsdl-publisher
-
- DefaultWSDLPublisherManager
-
-
-
- jaxws
-
- CXFService / Axis2Service
-
-
-
- ear
-
- JOnASEARService
-
-
-
- dbm
-
- JOnASDataBaseManagerService
-
-
-
- jtm
-
- JOTMTransactionService
-
-
-
- mail
-
- JOnASMailService
-
-
-
- resource
-
- JOnASResourceService
-
-
-
- security
-
- JonasSecurityServiceImpl
-
-
-
- discovery
-
- JgroupsDiscoveryServiceImpl /
- MulticastDiscoveryServiceImpl
-
-
-
- cmi
-
- CmiServiceImpl
-
-
-
- ha
-
- HaServiceImpl
-
-
-
- depmonitor
-
- DeployableMonitorService
-
-
-
- resourcemonitor
-
- JOnASResourceMonitorService
-
-
-
- smartclient
-
- SmartclientServiceImpl
-
-
-
-
-
-
-
-
- The ServiceException
-
-
- The org.ow2.jonas.service.ServiceException
- exception is defined for Services. Its type is
- java.lang.RuntimeException and it can encapsulate
- any java.lang.Throwable .
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_services_on_demand.xml b/jonas_doc/core/src/docbook/doc-en/howto_services_on_demand.xml
deleted file mode 100644
index 89bb455f76ebbd701433e3a0ba886a8c426f61cc..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_services_on_demand.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
- Requiring
- services in Java EE applications
-
-
- In some case, Java EE applications you want to execute need specifics
- services to run
- correctly. If the required services are already started, that means you have
- defined in the jonas.services property of the configuration file the list of
- the services you want to start, there is no special things to do. But it may
- be not the case for many reasons. One of them is that you didn't need thoses
- services before deploying your applications.
-
-
- service
- dependency
-
- An application that sends emails needs the mail service to retrieve the
- Session and MimePartDataSource objects.
-
-
-
- Declaring JOnAS service dependencies
-
- To ensure that a set of services will be started before deploying a Java
- EE application, you have to set the
- Require-JOnAS-Services attribute in the root
- manifest file of the archive. The value of this property is a
- comma-separed list of service names. Service names must match with the
- ones defined in the jonas.properties configuration
- file. In case of an EAR archive, there is no need to modify the manifest
- files of the embedded JARs, WARs, RARs or CARs archives.
-
-
- MANIFEST.MF file content
-
- Manifest-Version: 1.0
-...
-Require-JOnAS-Services: mail,web
-
-
-
- Startup of required services
-
- During the deployment phase of an Java EE archive, the manifest
- file is analysed to check if the
- Require-JOnAS-Services property exists. For each
- declared service, the server verifies wheither the service is already
- started. If not, two operations should be performed:
-
-
-
- Install/start bundles for the required service if
- needed
-
-
-
- Create configuration for the required service
-
-
-
- After that, the service should be started and the application can
- also be started.
-
-
- If the application is undeployed, there is at the moment no ways
- to specify if these service dependencies should also be stopped or
- uninstalled.
-
-
-
-
- Addition of the manifest attribute during maven build
-
- The addition of the manifest attribute during a maven build can be
- automated by configurating the maven plugin like below.
-
- ...
- <configuration>
- <archive>
- <manifestEntries>
- <Require-JOnAS-Services>service1,service12,..,servicen</Require-JOnAS-Services>
- </manifestEntries>
- </archive>
- </configuration>
- ...
-
- More info may be found here.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml b/jonas_doc/core/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml
deleted file mode 100644
index c8b12dd980e58e53a6e6c9d5e8b76b85dcb2583a..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
- Tracking JDBC Connection Leaks in Java EE Applications
-
-
- When an application is managing itself the access to the database
- through JDBC Datasources, the release of JDBC resources needs to be done. In
- some cases, the close of the connection is not done. As the JOnAS
- application server is using a pool to manage these accesses to the database,
- it means that the pool may reach its maximum size as the connections are not
- closed (and then put back into the pool). And if the pool reach its maximum
- size, new requests will go in the wait state or wll be aborted. Thus, this
- kind of problems is a huge problem in a production system.
-
- Fortunately, there are some features provided by JOnAS to handle this
- case.
-
-
-
- For example there are JDBC Pooling mechanisms that will kill
- connections if they've not be used since a long time (that can be
- configured) so the pool can lowered its size.
-
-
-
- There is also a new feature that will close automatically
- connections if they are not closed after their access. This feature is
- provided through the JDBC JNDI Interceptor which may be configured with
- JONAS_BASE/conf/jndi-interceptors.xml file. By
- default, all connections that are not closed will be closed
- automatically. This can be changed with the
- forceClose option. Also, by default this mechanism
- is applied on all datasources. This can be changed by updating the
- jndiRegexp element.
-
- Here is an example disabling the automatic close of the connection
- leaks and enabling the check on all the JDBC datasources by using
- pattern.
-
- <jndi-interceptors xmlns="http://org.ow2.jonas.jndi.interceptors.impl.mapping">
-
- <!-- Define interceptors -->
- <interceptors>
-
- <!-- Detect leaks of JDBC connections -->
- <ds-leak-detector resourceCheckerManager="#RCManager" forceClose="true" jndiRegExp=".*" />
-
-
- </interceptors>
-</jndi-interceptors>
-
-
-
- JOnAS is providing informations that allows to track the root of
- the problem in the source code of the application. For example, when
- there is a connection leak, JOnAS is able to print in the log or to show
- in the JOnAS Admin console (With the JDBC Connection Leaks module) the
- line of code where the connection was opened. Thus, a quick review of
- the code needs to be done in order to know why the close() instruction
- has not be done.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_use_cdi.xml b/jonas_doc/core/src/docbook/doc-en/howto_use_cdi.xml
deleted file mode 100644
index 2b5c1b11d8793d259fd026f669eae4eb2914ec52..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_use_cdi.xml
+++ /dev/null
@@ -1,414 +0,0 @@
-
-
- Use CDI in JOnAS
-
-
- Java Context and Dependency Injection (CDI)
-
-
-
-
- What is this all about ?
-
- In a nutshell, the Java Context and Dependency
- Injection (CDI for short) is a
- Java EE 6 specification that defines a powerful set
- of complementary services that help improve the structure of application
- code.
-
-
-
- A well-defined lifecycle for stateful objects bound to
- lifecycle contexts, where the set of contexts is extensible
-
-
-
- A sophisticated, typesafe dependency injection mechanism,
- including the ability to select dependencies at either development
- or deployment time, without verbose configuration
-
-
-
- Support for Java EE modularity and the Java EE component
- architecture - the modular structure of a Java EE application is
- taken into account when resolving dependencies between Java EE
- components
-
-
-
- Integration with the Unified Expression Language
- (EL), allowing any contextual object to be used
- directly within a JSF or JSP
- page
-
-
-
- The ability to decorate injected objects
-
-
-
- The ability to associate interceptors to objects via
- typesafe interceptor bindings
-
-
-
- An event notification model
-
-
-
- A web conversation context in addition to the three standard
- web contexts defined by the Java Servlets specification
-
-
-
- An SPI allowing portable extensions to
- integrate cleanly with the container
-
-
-
- CDI can be seen as a standard alternative to
- proprietary containers (Spring framework, Guice, ...).
-
-
-
-
-
-
- CDI Services
-
- Here is a quick description of the major features of the
- CDI programming model.
-
-
- Injection
-
- CDI injection is based on the Dependency
- Injection specification (JSR 330) that
- defines basic injection capabilities. CDI extends
- this specification by adding the Qualifier annotation concept that helps
- to disambiguate between 2 possible injection targets.
-
- It provides means to assemble your application components very
- easily, using only annotations, in a type-safe way.
-
- Definition of a qualifier @Synchronous
- annotation:
-
- @Qualifier
-@Retention(RUNTIME)
-@Target({METHOD, FIELD, PARAMETER, TYPE})
-public @interface Synchronous {}
-Placed on top of a bean class, it qualifies the bean.
-
- /**
- * Declaration of a PaymentProcessor bean qualified with @Synchronous.
- */
-@Synchronous
-class SynchronousPaymentProcessor
- implements PaymentProcessor {
- ...
-}
-It's used at the injection point to help the container choose
- the right PaymentProcessor bean to inject.
-
- /**
- * Declared a dependency on a PaymentProcessor bean qualified with @Synchronous
- */
-@Inject @Synchronous PaymentProcessor paymentProcessor;
-
-
-
-
- Interception
-
- Interception in the CDI model is also
- annotation based. Any CDI bean can be intercepted
- using the Java EE 5 interception mechanism
- (@AroundInvoke).
-
- Interceptors allow common, cross-cutting concerns to be applied to
- beans via custom annotations. Interceptor types may be individually
- enabled or disabled at deployment time.
-
- The AuthorizationInterceptor class defines
- a custom authorization check:
-
- @Secure @Interceptor
-public class AuthorizationInterceptor {
- @Inject @LoggedIn User user;
- @Inject Logger log;
- @AroundInvoke
- public Object authorize(InvocationContext ic) throws Exception {
- try {
- if ( !user.isBanned() ) {
- log.fine("Authorized");
- return ic.proceed();
- }
- else {
- log.fine("Not authorized");
- throw new NotAuthorizedException();
- }
- }
- catch (NotAuthenticatedException nae) {
- log.fine("Not authenticated");
- throw nae;
- }
- }
-}
-The @Interceptor annotation,
- identifies the AuthorizationInterceptor class as
- an interceptor. The @Secure annotation is a
- custom interceptor binding type.
-
- @Inherited
-@InterceptorBinding
-@Target({TYPE, METHOD})
-@Retention(RUNTIME)
-public @interface Secure {}
-The @Secure annotation is used to
- apply the interceptor to a bean:
-
- @Model
-public class DocumentEditor {
- @Inject Document document;
- @Inject @LoggedIn User user;
- @Inject @Documents EntityManager em;
- @Secure
- public void save() {
- document.setCreatedBy(currentUser);
- em.persist(document);
- }
-}
-
-
-
- By default interceptors are not activated. They have to be
- explicitely declared in the beans.xml
- file.
-
- <beans 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/beans_1_0.xsd">
- <interceptors>
- <!-- Interceptors are only activated if listed in the beans.xml file -->
- <class>org.ow2.jonas.examples.cdi.interceptor.AroundMethodLogInterceptor</class>
- </interceptors>
-</beans>
-
-
-
-
- Decoration
-
- The CDI programming model eases the usage of
- the decorator
- pattern.
-
- An abstract bean type (implementing an interface) can be annoted
- with @Decorator, it has a
- @Delegate annotated member and overrides one (or
- more) methods of the interface.
-
- public interface User {
- String getName();
- String getCompanyName();
-}
-
-
- The LongNameUserDecorator will be applied
- on all User beans.
-
- @Decorator
-public abstract class LongNameUserDecorator implements User {
-
- @Inject
- @Delegate
- private User delegate;
-
- public String getName() {
- return delegate.getName() + " (Last name added with @Decorator)";
- }
-
-
-
-
- Like interceptors, decorators may be easily enabled or
- disabled at deployment time with the beans.xml
- file.
-
- <beans 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/beans_1_0.xsd">
- <decorators>
- <!-- Decorators are only activated if listed in the beans.xml file -->
- <class>org.ow2.jonas.examples.cdi.user.decorator.LongNameUserDecorator</class>
- </decorators>
-</beans>
-
-
-
-
- Eventing
-
- CDI comes with a full featured eventing
- support. It nicely decouple the observed object from the observers: the
- container links each of them together.
-
-
-
-
- Observed Element
-
- @SessionScoped @Model
-public class Login implements Serializable {
- @Inject Credentials credentials;
- @Inject @Users EntityManager userDatabase;
- @Inject @LoggedIn Event<User> userLoggedInEvent;
- ...
- private User user;
-
- @Inject
- void initQuery(@Users EntityManagerFactory emf) {
- ...
- }
-
- public void login() {
- List<User> results = ... ;
- if ( !results.isEmpty() ) {
- user = results.get(0);
- userLoggedInEvent.fire(user);
- }
- }
- @Produces @LoggedIn User getCurrentUser() {
- ...
- }
-}
-The Login class is injected with an
- Event<User> instance (notice the
- @LoggedIn qualifier annotation).
-
- When the User gets logged in,
- userLoggedInEvent.fire(user) is executed and
- all observer methods will be synchronously invoked.
-
-
-
- Observer Method
-
- @SessionScoped
-public class Permissions implements Serializable {
- @Produces
- private Set<Permission> permissions = new HashSet<Permission>();
- @Inject @Users EntityManager userDatabase;
- Parameter<String> usernameParam;
-
- ...
-
- void onLogin(@Observes @LoggedIn User user) {
- permissions = new HashSet<Permission>(
- userDatabase.createQuery(query)
- .setParameter(usernameParam, user.getUsername())
- .getResultList() );
- }
-}
-Notice the onLogin() method, it's an
- observer method because of the @Observes
- parameter annotation. This method will be invoked when a
- User event will be fired by a
- @LoggedIn annotated
- Event<User> field.
-
-
-
-
- Scoping/Context
-
- Instance's life-cycle is bound to a scope (request, session,
- application).
-
- Beans can de declared to be bound in one scope
-
- @SessionScoped
-public class Order { ... }
-
-
- Injection/Producers points can also be annotated with scope
- requirements:
-
- public class Shop {
- @Produces @ApplicationScoped @All
- public List<Product> getAllProducts() { ... }
- @Produces @SessionScoped @WishList
- public List<Product> getWishList() { ..... }
-}
-
-
-
-
-
- Activation
-
- In order to activate CDI on JOnAS, the 'cdi'
- service must be declared in the
- $JONAS_BASE/conf/jonas.properties in the
- jonas.services property.
-
- jonas.services registry,jmx,... ,cdi
-JOnAS is using Weld (the CDI reference implementation) under
- the hood.
- Current CDI support in JOnAS is limited to web applications.
- Future versions will enable EJB and EAR support.
-
-
-
-
- Resources
-
-
-
- Dependency Injection Specification (JSR
- 330)
-
-
-
- @Inject Google
- project
-
-
-
- Java Context and Dependency Injection Specification (JSR
- 299)
-
-
-
- RedHat JBoss
- Weld (Reference Implementation) + Documentation
-
-
-
- Apache
- WebBeans (ASL2 Licensed Implementation) + Documentation
-
-
-
- JOnAS CDI Sample (in examples/ or online)
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_use_jaxrs.xml b/jonas_doc/core/src/docbook/doc-en/howto_use_jaxrs.xml
deleted file mode 100644
index b8930f1a125f84f9bc5e0221ce0a6e75cf1c8529..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_use_jaxrs.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-
-
- Use JAX-RS 1.1 in JOnAS
-
-
- Introduction
-
- JAX-RS stands for Java API
- for XML RESTful
- Services (JAX-RS). It's a Java EE 6 specification
- that introduces the REST
- support in the Java EE platform.
-
- Its goal is to provide an easy to use REST development model based
- on annotations for the Java platform. It's a server-side
- only specification (no client API is described).
-
- The developer is responsible to declare REST
- resources that will act as entry point to its
- application:
-
- // The Java class will be hosted at the URI path "/helloworld"
-@Path("/helloworld")
-public class HelloWorldResource {
-
- // The Java method will process HTTP GET requests
- @GET
- // The Java method will produce content identified by the MIME Media type "text/plain"
- @Produces("text/plain")
- public String helloWorld() {
- // Return some cliched textual content
- return "Hello World";
- }
-}
-
-
-
- JAX-RS Applications
-
- A JAX-RS application is an application model abstraction that allows
- the developer to specify the list of resources and singleton classes that
- will be exposed by the REST container.
-
- // Identifies the application path that serves as the base URI for all resource URIs provided by Path
-@ApplicationPath("/application")
-public class MyApplicaton extends Application {
-
- // Returns the list of resources that will be managed by the container
- public Set<Class<?>> getClasses() {
- Set<Class<?>> s = new HashSet<Class<?>>();
- s.add(HelloWorldResource.class);
- return s;
- }
-}
-
-
-
- JAX-RS Resources
-
- Resources are the main concept manipulated all along JAX-RS.
-
-
- Using Resources
-
- Root resource classes are POJOs (Plain Old Java Objects) that are
- annotated with @Path, have at least one method
- annotated with @Path or a resource method
- designator annotation such as @GET,
- @PUT, @POST, or
- @DELETE. Resource methods are methods of a
- resource class annotated with a resource method designator.
-
- HelloWorldResource is a root
- resource:
-
- @Path("/helloworld")
-public class HelloWorldResource {
-
- // Resource method
- @GET
- public String getClichedMessage() {
- return "Hello World";
- }
-}
-
-
- Sub Resources
-
- Root resource methods can return types that are also resources
- (annotated with @Path), that allows application
- decomposition.
-
- HelloResource:
-
- @Path("/hello")
-public class HelloResource {
-
- // Resource method
- @GET
- public WorldResource getClichedMessage() {
- return new WorldResource();
- }
-}And it's sub-resource
- WorldResource:
-
- @Path("/world")
-public class WorldResource {
-
- @GET
- public String getClichedMessage() {
- return "Hello World";
- }
-}
-
-
-
-
- Using Parameters
-
-
-
-
- @PathParam
-
- @Path declares an URI path
- template: it can contains variable definition. This
- variable can then be accessed as a resource method parameter:
-
- @GET
-@Path("/hello/{username}")
-public String hello(@PathParam("username") String username) {
- return "Hello " + username;
-}A callable URI:
-
- /hello/Guillaume
-
-
-
- @QueryParam
-
- The HTTP query parameters (ex: ?param=value)
- are also accessible as mapped method parameter:
-
- @GET
-public String hello(@QueryParam("username") String username) {
- return "Hello " + username;
-}A callable URI:
-
- /hello?username=Guillaume
-
-
-
-
- Using Mime-Types
-
- Resources can be configured to accept and produces specific input
- (respectively output) types.
-
-
-
-
-
- @Consumes
-
- The @Consumes annotation declares the
- expected MIME type that will be accepted by a resource.
-
- Only HTTP requests with the right Accept header
- will be dispatched to the resource method:
-
- @POST
-@Consumes("text/plain")
-public void postClichedMessage(String message) {
- // ...
-}
-
-
-
- @Produces
-
- The @Produces annotation declares the MIME
- type that will be returned by this resource method:@GET
-@Produces({"application/xml", "application/json"})
-public String doGetAsXmlOrJson() {
- ...
-}
-
-
-
-
- Activation in JOnAS
-
- In order to activate JAX-RS on JOnAS, the 'jaxrs'
- service must be declared in the
- $JONAS_BASE/conf/jonas.properties in the
- jonas.services property.
-
- jonas.services registry,jmx,... ,jaxrs
-JOnAS is using Jersey (the reference implementation) as
- default JAX-RS provider.
-
-
- The JAX-RS support in JOnAS is currently limited to Web
- Applications
-
- JAX-RS Supports needs a Servlet 3.0 container: JOnAS
- 'web' service in use must be Tomcat7 (at time of
- writing):
-
- #
-###################### JOnAS Web container service configuration
-#
-# Set the name of the implementation class of the web container service.
-jonas.service.web.class org.ow2.jonas.web.tomcat7.Tomcat7Service
-
-
-
-
-
- Resources
-
-
-
- JAX-RS
- Specification
-
-
-
- Representational State Transfer (REST)
-
-
-
- Oracle Jersey
- (Reference Implementation) + Documentation
-
-
-
- Apache CXF
- (ASL2 Licensed Implementation) + Documentation
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_webspheremq.xml b/jonas_doc/core/src/docbook/doc-en/howto_webspheremq.xml
deleted file mode 100644
index 7b3ecfd961faccf3f68afdc004b25930124c54b5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_webspheremq.xml
+++ /dev/null
@@ -1,523 +0,0 @@
-
-Using WebSphere MQ JMS guide
-
-
- This document explains how WebSphere MQ (formerly MQSeries) can be used as JMS provider within a JOnAS application server.
-
-
- WebSphere MQ is the messaging platform developed by IBM. It provides Java and JMS interfaces. Documentation is located at
-
- http://www-3.ibm.com/software/integration/mqfamily/library/manualsa/
-
- .
-
-
- This document was written after integration work done with JOnAS 3.3 and 3.3.1 and WebSphere MQ 5.3.
-
-
- This document may be used only when working with JOnAS 3.3
-
-
- Since JOnAS 4.8 a specific resource adaptor JCA JOnAS-MQ is available for accessing to WebSphere MQ. The corresponding documentation is currently being written and will be available soon.
-
- Architectural rules
-
-
- WebSphere MQ, contrary to JORAM or SwiftMQ, cannot run collocated with JOnAS. WebSphere MQ is an external software which must be independently administered and configured.
-
-
- Administering WebSphere MQ consists of the following:
-
-
-
- Creating and configuring resources (such as queues) through the WebSphere MQ Explorer tool.
-
-
- Creating the corresponding JMS objects (
-
- javax.jms.Queue
-
- ,
-
- javax.jms.Topic
-
- ,
-
- javax.jms.QueueConnectionFactory
-
- , etc.), and binding them to a registry.
-
-
-
- The link between JOnAS and WebSphere MQ is established via the registry. WebSphere MQ JMS objects are bound to the JOnAS registry. JMS lookups will then return the WebSphere MQ JMS objects, and messaging will take place through these objects.
-
-
- Given the complex configuration of WebSphere MQ JMS objects, it is not possible to create these objects from JOnAS. Therefore, during the starting phase, a JOnAS server expects that WebSphere MQ JMS objects have already been bound to the registry. Thus it is necessary to start an independent registry to which WebSphere MQ can bind its JMS objects, and which can also be used by the starting JOnAS server. The start-up sequence looks like the following:
-
-
-
- Starting a registry.
-
-
- Creating and binding WebSphere MQ JMS objects.
-
-
- Launching the JOnAS server.
-
-
-
- The following architecture is proposed:
-
-
-
- A JOnAS server (e.g., called "Registry") providing only a registry.
-
-
- A JOnAS server (e.g., called "EJB") using the registry service of server "Registry."
-
-
- A WebSphere MQ server running locally.
-
-
-
- Setting the JOnAS Environment
-
-
- The proposed architecture requires running two JOnAS server instances. For this, the following steps are proposed:
-
-
-
- Create two base directories: e.g.,
-
- JONAS_REGISTRY
-
- and
-
- JONAS_EJB
-
- .
-
-
- Set the JONAS_BASE environment variable so that it points to the
-
- JONAS_REGISTRY
-
- directory.
-
-
- In the $JONAS_ROOT directory, type:
- ant create_jonasbase.
-
-
- Set the JONAS_BASE environment variable so that it points to the
-
- JONAS_EJB
-
- directory.
-
-
- In the $JONAS_ROOT directory, type:
- ant create_jonasbase.
-
-
-
- The JOnAS servers can now be configured independently.
-
- Configuring the "Registry" server
-
-
- The "Registry" server is the JOnAS server that will host the registry service. Its configuration files are in
-
- JONAS_REGISTRY/conf
-
- .
-
-
- In the
-
- jonas.properties
-
- files, declare only the registry and jmx services:
-
-
-
- jonas.services registry,jmx
-
-
-
- In the carol.properties file, declare the jeremie protocol:
-
-
-
- carol.protocols=jeremie
-
-
-
- Its port can also be configured:
-
-
-
- carol.jeremie.url=jrmi://localhost:2000
-
-
-
- Configuring the "EJB" server
-
-
- The "EJB" server is the JOnAS server that will be used as the application server. Its configuration files are in
-
- JONAS_EJB/conf
-
- . Libraries must be added in
-
- JONAS_EJB/lib/ext
-
- .
-
-
- In the jonas.properties files, set the registry service as remote:
-
-
-
- jonas.service.registry.mode remote
-
-
-
- ... and the JMS service as WebSphere MQ:
-
-
-
- jonas.service.jms.mom org.objectweb.jonas_jms.JmsAdminForWSMQ
-
-
-
- In the carol.properties file, declare the jeremie protocol and set the correct port:
-
-
-
- carol.protocols=jeremie
-
-
- carol.jeremie.url=jrmi://localhost:2000
-
-
-
- In
-
- lib/ext
-
- , the following libraries must be added:
-
-
-
-
- com.ibm.mqjms.jar
-
- , including WebSphere MQ JMS classes.
-
-
-
- com.ibm.mq.jar
-
- , also a WebSphere MQ library.
-
-
-
-
- Configuring WebSphere MQ
-
-
- WebSphere MQ JMS administration is documented in chapter 5 of the
-
- "WebSphere MQ Using Java"
-
- document.
-
-
- The configuration file of the JMS administration tool must be edited so that the JOnAS registry is used for binding the JMS objects. This file is the
-
- JMSAdmin.config
-
- file located in WebSphereMQ's
-
- Java/bin
-
- directory. Set the factory and provider URL as follows:
-
-
-
- INITIAL_CONTEXT_FACTORY=org.objectweb.jeremie.libs.services.registry.
-
-
- jndi.JRMIInitialContextFactory
-
-
- PROVIDER_URL=jrmi://localhost:2000
-
-
-
- The JOnAS's
-
- client.jar
-
- library must also be added to the classpath for WebSphere MQ.
-
-
- When starting, JOnAS expects JMS objects to have been created and bound to the registry. Those objects are connection factories, needed for connecting to WebSphere MQ destinations, and destinations.
-
-
- JOnAS automatically tries to access the following factories:
-
-
-
- An
-
- XAConnectionFactory
-
- , bound with name "wsmqXACF".
-
-
- An
-
- XAQueueConnectionFactory
-
- , bound with name "wsmqXAQCF".
-
-
- An
-
- XATopicConnectionFactory
-
- , bound with name "wsmqXATCF".
-
-
- A
-
- ConnectionFactory
-
- , bound with name "JCF".
-
-
- A
-
- QueueConnectionFactory
-
- , bound with name "JQCF".
-
-
- A
-
- TopicConnectionFactory
-
- , bound with name "JTCF".
-
-
-
- If one of these objects cannot be found, JOnAS will print a message that looks like the following:
-
-
-
- JmsAdminForWSMQ.start : WebSphere MQ XAConnectionFactory could not be retrieved from JNDI
-
-
- This does not prevent JOnAS from working. However, if there is no connection factory available, no JMS operations will be possible from JOnAS.
-
-
- If destinations have been declared in the
-
- jonas.properties
-
- file, JOnAS will also expect to find them. For example, if the following destinations are declared:
-
-
-
- jonas.service.jms.topics sampleTopic
-
-
- jonas.service.jms.queues sampleQueue
-
-
-
- The server expects to find the following JMS objects in the registry:
-
-
-
- A
-
- Queue
-
- , bound with name "sampleQueue".
-
-
- A
-
- Topic
-
- , bound with name "sampleTopic".
-
-
-
- If one of the declared destination cannot be retrieved, the following message appears and the server stops:
-
-
-
- JOnAS error: org.objectweb.jonas.service.ServiceException : Cannot init/start service jms': org.objectweb.jonas.service.ServiceException : JMS Service Cannot create administered object: java.lang.Exception: WebSphere MQ Queue creation impossible from JOnAS
-
-
- Contrary to connection factories, the JOnAS administration tool allows destinations to be created. Since it is not possible to create WebSphere MQ JMS objects from JOnAS, this will work only if the destinations are previously created and bound to the registry.
-
-
- For example, if you want to create a queue named "myQueue" through the JonasAdmin tool, this will only work if:
-
-
-
- A queue has been created through the WebSphere MQ Explorer tool.
-
-
- The corresponding JMS
-
- Queue
-
- has been created and bound to the registry with the name "myQueue".
-
-
-
- To launch WebSphere MQ administration tool, type:
- JMSAdmin
-
-
- The following prompt appears:
- InitCtx>
-
-
- To create a
-
- QueueConnectionFactory
-
- and binding it with name "JQCF", type:
-
-
-
- InitCtx> DEF QCF(JQCF)
-
-
- More parameters can be entered (for example for specifying the queue manager).
-
-
- To create a
-
- Queue
-
- that represents a WebSphere MQ queue named "myWSMQqueue", and to bind it with name "sampleQueue", type:
-
-
-
- InitCtx> DEF Q(sampleQueue) QUEUE(myWSMQqueue)
-
-
- Objects bound in the registry can be viewed by typing:
-
-
-
- InitCtx> DIS CTX
-
-
- Starting the application
-
-
- To start the registry server:
-
-
-
- Clean the local CLASSPATH:
- set/export CLASSPATH="".
-
-
- Set the JONAS_BASE variable so that it points to
-
- JONAS_REGISTRY
-
- .
-
-
- Start the JOnAS server:
- jonas start -n Registry.
-
-
-
- To administer WebSphere MQ:
-
-
-
- In WebSphere MQ's
-
- Java/bin
-
- directory, launch the JMSAdmin tool:
- JMSAdmin.
-
-
- Create the needed JMS objects.
-
-
-
- To start the EJB server:
-
-
-
- Clean the local CLASSPATH:
- set/export CLASSPATH="".
-
-
- Set the JONAS_BASE variable so that it points to
-
- JONAS_EJB
-
- .
-
-
- Start the JOnAS server:
- jonas start -n EJB.
-
-
-
- To start an EJB client:
-
-
-
- Add in the jclient classpath the
-
- ibm.com.mq.jar
-
- and
-
- ibm.com.mqjms.jar
-
- libraries.
-
-
- Launch the client:
- jclient ...
-
-
-
- Limitations
-
-
- Using WebSphere MQ as JMS transport within JOnAS has some limitations, as compared with using JORAM or SwiftMQ.
-
-
- First of all, WebSphere MQ is compliant with the old 1.0.2b JMS specifications. Code that is written following the JMS 1.1 latest spec (such as the jms samples provided with JOnAS) will not work with WebSphere MQ.
-
-
- Depending on the WebSphere MQ distribution, JMS Publish/Subscribe may not be available. In this case, the message-driven bean samples provided with JOnAS will not work. For this reason, a
-
- specific sample
-
- is provided.
-
-
- Finally, for an unknown reason, asynchronous consumption of messages (through message-driven beans) does not work in transactional mode. Further inquiry is needed to resolve this issue.
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_win32_service.xml b/jonas_doc/core/src/docbook/doc-en/howto_win32_service.xml
deleted file mode 100644
index 356d4abbd14f9874cd5b26d577c1e6892833cf10..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_win32_service.xml
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
- Execute JOnAS as a Windows Service
-
-
- This document describes the procedures necessary to run JOnAS as a
- system service on Microsoft Windows platforms.
-
-
-
- Instructions
-
-
- The procedure uses the Tanuki Java Service Wrapper open source
- project which must be downloaded and installed separately.
-
-
-
- Download and Install Apache ANT
-
-
-
-
- Download Apache ANT
- version 1.7.1 or later.
-
-
-
- Unzip the package to a directory in the local
- filesystem.
-
-
-
- Set ANT_HOME environment variable to the root
- directory for Apache ANT.
-
- For example, if the package for ANT version 1.7.1 is unzipped
- into C:\Program Files , then set ANT_HOME =
- C:\Program Files\apache-ant-1.7.1
-
-
-
- Add %ANT_HOME%\bin to your PATH
- environment variable.
-
-
-
-
-
-
- Download and Install Java Service Wrapper
-
-
-
-
- Download
- Tanuki Java Service Wrapper version 3.3.9 or later (the
- "Community Edition" is sufficient for executing JOnAS as a Windows
- Service).
-
-
-
- Unzip the package to a directory in the local
- filesystem.
-
-
-
- Set WRAPPER_HOME environment variable to the
- root directory for Java Service Wrapper.
-
- For example, if the package for Wrapper version 3.3.9 is
- unzipped into C:\Program Files , then set
- WRAPPER_HOME = C:\Program
- Files\wrapper-windows-x86-32-3.3.9
-
-
-
-
-
-
- Create the JOnAS Windows service
-
-
- Before JOnAS can be run as a Windows service, it is necessary to
- create a Java Service Wrapper configuration file. Prior to executing the
- steps in this section, it is necessary to create a JONAS_BASE directory
- as described in the JOnAS Configuration Guide
- .
-
-
-
- Verify that JAVA_HOME is set as a system environment
- variable.
-
-
-
- Verify that JONAS_ROOT, JONAS_BASE and WRAPPER_HOME
- environment variables are set.
-
-
-
- Set %JONAS_ROOT%\templates\windows_service as the current
- directory.
-
-
-
- Set environment variables required for JOnAS execution (see
- list below).
-
-
-
- Execute ant
- [-Djonas.name=<server_name>]
-
-
- The -Djonas.name=<server_name>
- parameter is optional. If not specified, the default server name
- is 'jonas'.
-
-
-
-
- Once this is done, the wrapper.conf file inside your
- JONAS_BASE will be filled with all launch options required by
- JOnAS.
-
-
- Do not change the wrapper.conf file as it will be
- regenared everytime you run the Apache ANT task. To put your own,
- personalized options, use the wrapper_extra.conf file in
- JONAS_BASE instead.
-
-
-
-
-
- Personalise JOnAS options
-
-
- To add options to your JOnAS server running as a Windows service,
- modify the wrapper_extra.conf file in JONAS_BASE.
-
-
- Once this file is changed, you'll need to restart the JOnAS
- service to see the effects. You do not need to reinstall the service,
- thought.
-
-
-
-
-
- Test the JOnAS Windows service
-
-
- After the %JONAS_BASE% directory has been updated for use with
- Java Service Wrapper, the Windows service configuration can be tested by
- executing the command:
- jonas ntservice console
-
-
- Once you see that JOnAS is running, simply press CTRL + C to stop
- it.
-
-
-
-
- Install the JOnAS Windows service
-
-
- Once you're assured the Windows service is operational, install in
- onto Windows using the following command:
- jonas ntservice install
-
-
-
-
-
- Start the JOnAS Windows service
-
-
- To start the JOnAS Windows service, you can use the Windows
- Services control panel item or launch the following
- command:
- jonas ntservice start
-
-
-
- By default, JOnAS will be started automatically each time
- Windows is started. After installing the service, it can be started
- manually to avoid the need to reboot Windows.
-
-
-
-
-
- Stop the JOnAS Windows service
-
-
- To stop the JOnAS Windows service, you can use the Windows
- Services control panel item or launch the following
- command:
- jonas ntservice stop
-
-
-
-
-
- Restart the JOnAS Windows service
-
-
- To restart the JOnAS Windows service, you can use the Windows
- Services control panel item or launch the following
- command:
- jonas ntservice restart
-
-
-
-
-
- Uninstall the JOnAS Windows service
-
-
- To uninstall the JOnAS Windows service, use the following
- command:
- jonas ntservice uninstall
-
-
-
- Do not re-create the JOnAS Windows service before uninstalling
- it; else JOnAS might lose the reference to the Windows service entry
- and therefore never manage to uninstall the service.
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/howto_wrapper.xml b/jonas_doc/core/src/docbook/doc-en/howto_wrapper.xml
deleted file mode 100644
index 324d4ddf6c838f9ef95c3b0c2ac3e2eafb44839b..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/howto_wrapper.xml
+++ /dev/null
@@ -1,223 +0,0 @@
-
-
-
- Use JOnAS as an OS service
-
-
- Introduction
-
-
- This chapter is intended for users who want to use JOnAS as an operating system service. It's dedicated to
- YAJSW integration.
-
-
-
-
- Installation
-
-
- Firstly download the JOnAS wrapper zip archive here.
- Unzip it in the location where you want to install the wrapper root configuration. The default installation directory
- is in JONAS_ROOT directory. Then you need to build the wrapper configuration dedicated to your
- JONAS_BASE instance.
-
-
- Using DeployME tools
-
-
- Please, see DeployME documentation.
-
-
-
-
- Using Wrapper ANT task
-
- The JOnAS wrapper archive provides ANT task in order to build the specific wrapper configuration dedicated to
- your JONAS_BASE instance.
-
- The ANT script is located in ${JONAS_WRAPPER_ROOT}/templates/ant/ directory.
-
-
- Example of a wrapper ANT task.
-
- <project name="JOnAS_BASE tools"
- default="apply_configuration"
- basedir=""
- xmlns:jant="http://jonas.objectweb.org/ant">
-
- <target name="init">
-
- <property environment="myenv" />
- <property name="jonas.root" value="${myenv.JONAS_ROOT}" />
- <property name="jonas.base" value="${myenv.JONAS_BASE}" />
-
- <taskdef name="wrapper"
- classname="org.ow2.jonas.antmodular.jonasbase.wrapper.Wrapper"
- classpath="../../lib/ant/ow2_jonas_wrapper_ant.jar"/>
- </target>
-
- <target name="apply_configuration" depends="init">
- <wrapper serviceName="jonas"
- serviceDescription="JOnAS OS service"
- verbosity="false"
- logfile="path/to/logfile"
- logfileRollmode="JVM"
- wrapperHome="path/to/wrapperHome"
- javaHome="path/to/javaHome" />
- </target>
- </project>
-
-
-
-
-
- serviceName property - optional. Specifies the name of the OS service.
-
-
- serviceDescription property - optional. Specifies the description of the OS service.
-
-
- verbosity property - optional. Specifies the verbosity mode. Default value is false.
-
-
- logfile property - optional. Specifies the wrapper log file. Default value is set
- to '${JONAS_BASE}/logs/wrapper.log'
-
-
- logfileRollmode property - optional. Specifies the log file rollmode. Possible values
- are 'JVM' (only one logfile per service) or 'DATE' (a log file per day). Default value is 'DATE'.
-
-
- wrapperHome property - optional. Specifies the home of the wrapper root. Default
- value is '${JONAS_ROOT}/wrapper'.
-
-
- javaHome property - optional. Specifies the JAVA_HOME. If not set, the wrapper'll
- use your JAVA_HOME system environment variable.
-
-
-
- Don't forget to set your JONAS_ROOT and JONAS_BASE environment variable.
- To create a wrapper configuration for your JONAS_BASE instance:
-
- bash$ ant -file $JONAS_WRAPPER_ROOT/templates/ant/build-wrapper.xml
-
-
-
-
-
- Manual installation
-
-
-
-
- Create a 'wrapper' directory in the JONAS_BASE directory.
-
-
- Copy wrapper templates conf and binaries files (locate in ${JONAS_WRAPPER_ROOT}/templates/conf/conf/ and
- ${JONAS_WRAPPER_ROOT}/templates/bat/bat) to your wrapper base directory (${JONAS_BASE}/wrapper/').
-
-
- Set your own configuration (see Advanced configuration section)
-
-
-
-
-
-
-
-
- Usage
-
-
- The JOnAS wrapper provides a jonas command in order to manage JOnAS as an Operating Service. The jonas command -
- called jonas - can be found in 'JONAS_BASE/wrapper/bat/' directory.
-
- If the wrapper root installation directory is different than 'JONAS_ROOT/wrapper' directory, please set the
- JONAS_WRAPPER_ROOT environment variable.
-
-
-
- Unix platforms
-
- Open a new terminal and proceed as follows:
-
-
- bash>export JONAS_WRAPPER_ROOT=<your_install_dir>
-
-
-
-
- Windows platforms
-
- Open a new DOS window and proceed as follows
-
- C:>set JONAS_WRAPPER_ROOT=<your_install_dir>
-
-
-
-
-
- jonas console
-
- Test the startup of the wrapped server in a console.
-
-
-
-
- jonas install
-
- Install JOnAS as an operating system service. You need root privileges to install JOnAS as an operating system
- service.
-
-
-
-
- jonas start
-
- Start JOnAS OS service. You need root privileges to start JOnAS OS service.
-
-
-
-
- jonas stop
-
- Stop JOnAS OS service. You need root privileges to stop JOnAS OS service.
-
-
-
-
- jonas query
-
- Check the state of the JOnAS OS service (installed, running, ...).
-
-
-
-
- jonas uninstall
-
- Uninstall JOnAS OS service. You need root privileges to install JOnAS as an operating system
- service.
-
-
-
-
-
-
- Advanced configuration
-
-
- For advanced users, you can set you own configuration by editing ${JONAS_WRAPPER_BASE}/conf/jonas_wrapper_base.conf
- configuration file. For more information, please see YAJSW
- documentation.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/index.html b/jonas_doc/core/src/docbook/doc-en/index.html
deleted file mode 100644
index 6ee2239bfcb41c8aa767682b042e1a5fd0b32cb5..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/index.html
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
- JOnAS Platform Documentation
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/install/install_j2ee.xml b/jonas_doc/core/src/docbook/doc-en/install/install_j2ee.xml
deleted file mode 100644
index 0a9fa1e157eccf0c5249db34b44d3184915681cc..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/install/install_j2ee.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-
-Installing JOnAS/Tomcat or JOnAS/Jetty from scratch
-
-
- This guide provides instructions for installing JOnAS (with a web container already included) from scratch.
-
- J2SE SDK 1.4 installation
-
-
- Download the binary version of a
-
- J2SE SDK 1.4
-
- from the
-
- java Sun web site
-
- into the appropriate directory. Launch the executable file:
-
-
-
- ./j2sdk-1_<version number>-<system>.bin
-
- for Unix
-
- ./j2sdk-1_<version number>-<system>.sh
-
- for Linux
-
- j2sdk-1_<version number>-windows-i586.exe
-
- for Windows
-
-
- Set the JAVA_HOME environment variable and update the path:
-
-
-
- export JAVA_HOME=<Installation Directory>
- PATH=$JAVA_HOME/bin:$PATH (on Windows : PATH=%JAVA_HOME%/bin;%PATH%)
-
-
-
- ANT 1.6 installation
-
-
- Download the binary version of Ant 1.6 from the
-
- Ant Apache web site
-
- . Untar or Unzip it into the appropriate directory:
-
-
-
- tar -jxvf apache-ant-1.6.1-bin.tar.bz2
-
- (
- or
-
- unzip apache-ant-1.6.1-bin.zip
-
- )
-
-
- Set the ANT_HOME environment variable and update the path:
-
-
-
- export ANT_HOME=<Installation Directory>
- PATH=$PATH;$ANT_HOME/bin (on Windows : PATH=%ANT_HOME%/bin;%PATH%)
-
-
-
- Download
-
- bcel-5.1.tar.gz
-
- from the
-
- Jakarta web site
-
- and install bcel-5.1.jar in the directory
-
- $ANT_HOME/lib.
-
-
-
- JOnAS/Web Container installation
-
-
- Download the binary version of JOnAS with Tomcat or Jetty from the
-
- ObjectWeb forge web site
-
- .
- Choose a location for the JOnAS installation.
- Be aware that if you have already installed a previous version of JOnAS in this location, the new installation will overwrite the existing files, thus customized configuration files may be lost. Therefore, it is prudent to save these files before starting the installation process.
- The installation process consists of untaring the downloaded file.
- Change to the directory in which JOnAS will be installed and untar this file, using
- the
-
- tar -zxvf jonas.tgz
-
- command. Note that this file can be opened with winzip on Windows.
- After installing the JOnAS product, set the following environment variable:
-
-
-
- export JONAS_ROOT = <Installation Directory>
- PATH = $JONAS_ROOT/bin/unix:$PATH (on Windows: PATH=%JONAS_ROOT%/bin/nt;%PATH%)
-
-
-
- Setup
-
-
- Before using JOnAS, complete the following setup activities:
-
-
-
- If a
-
- CATALINA_HOME
-
- or
-
- CATALINA_BASE
-
- or
-
- JETTY_HOME
-
- environment variable has already been set, it should be unset. JOnAS will set these variables, without requiring any modifications.
-
-
- Based on the data source being used, create a file
-
- <data source>.properties
-
- (templates are located in the directory
-
- $JONAS_ROOT/conf
-
- ). Then add the data source file name (without the extension
-
- .properties
-
- ) to the
-
- jonas.properties
-
- file:
-
- jonas.service.dbm.datasource <data source>
-
- Add the JDBC driver in
-
- $JONAS_ROOT/lib/ext
-
- or in
-
- $JONAS_BASE/lib/ext
-
- directory.
-
-
- If required, configure the Mail service (for PetStore or the example mailsb, for example). JOnAS provides two types of mail factories:
-
- javax.mail.Session
-
- and
-
- javax.mail.internet.MimePartDataSource
-
- . Two types of files that can be adapted to fit your installation are located in the directory
-
- $JONAS_ROOT/conf
-
- :
-
- MailSession1.properties
-
- and
-
- MailMimePartDS1.properties
-
- . Then, in the
-
- jonas.properties
-
- file, define the
-
- jonas.service.mail.factories
-
- property:
-
- jonas.service.mail.factories MailSession1,MailMimePartDS1
-
-
-
-
- Starting JOnAS and running some examples
-
-
- If the
-
- has not been completed as described, JOnAS may not
- work
- .
- Use the command
-
- jonas check
-
- to verify that the environment is correct.
-
-
- If the environment is
- correct
- , JOnAS is
- ready
- to use.
- Do a
-
- jonas start
-
- , then use a browser to go
-
- http://localhost:9000/
-
- . (
- Modify this url with the appropriate hostname
- .)
- From the root context in which JOnAS was deployed, you can execute the earsample, access the JOnAS administration application, as well as perform other functions.
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/install/install_jonas.xml b/jonas_doc/core/src/docbook/doc-en/install/install_jonas.xml
deleted file mode 100644
index 10950b670b636d481db6db914a810304a68ed5d3..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/install/install_jonas.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- Installing JOnAS from scratch
-
- The JOnAS distribution can be downloaded as a .tar.gz or .zip
- file.
-
- The installation process simply consists of unzipping the
- downloaded .tar.gz file.
-
- To install using the .tar.gz file, select a location for JOnAS
- installation, for example your_install_dir, and point to it.
-
-
-
- Unix platforms
-
- bash>tar -zxvf <jonas-file-name>.tar.gz
- jonas-osgi-5.x.y/
- jonas-osgi-5.x.y/conf/
- jonas-osgi-5.x.y/examples/
- jonas-osgi-5.x.y/examples/javaee5-earsample/
- jonas-osgi-5.x.y/examples/javaee5-earsample/etc/
-...
-
-
-
- Be aware that if the same version of JOnAS has already been
- unpacked in the same directory, the new installation will
- overwrite previous files, and configuration files that have been
- customized may be lost. In this case, it is recommended that these
- files be saved before re-starting the installation process.
-
-
-
-
- Windows platforms
-
- Open a new DOS window and proceed as follows:
-
- If the .zip file format
- was downloaded, you must use a utility program such as WinZip or
- IZArc to extract the
- files from the archive.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/classloader.xml b/jonas_doc/core/src/docbook/doc-en/j2ee/classloader.xml
deleted file mode 100644
index 0fd8506247911fe2bc4f3cf8df0c1eeca3dc7e9c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/j2ee/classloader.xml
+++ /dev/null
@@ -1,616 +0,0 @@
-
-
-
- JOnAS classloading architecture
-
-
- This section introduces the classloading architecture of JOnAS.
-
-
-
- Understanding class loaders hierarchies
-
-
- Obviously, a ClassLoader is used to load
- classes (and resources) that will then be usable from the application.
- Most of the ClassLoaders are URLClassLoaders, that
- means that they are based on a set of URLs. Theses URLs will be the place
- where the ClassLoader, when asked for a resource (using its fully
- qualified name, ie including full package name), will try to find the
- resource.
-
- An URLClassLoader always have a parent
- ClassLoader. When loading a class, the first thing a ClassLoader do is to
- ask its parent to load the class (this is recursive). If the parent return
- the Class, it's returned to the caller. Otherwise, the URLs will be search
- for the given class. this is the default Java delegation model (parent
- first).
-
- Let's roll with an example: you have a ClassLoader (let's call it A)
- that can load the class Test, A is the parent of B,
- but B do not contains the Test class, and B is the
- parent of C, with C that contains also the Test
- class. Clearly, there is a ClassLoader hierarchy here (C->B->A, with
- "->" meaning "is child of"). If you ask C to load
- Test, the following steps will be performed:
-
-
-
- C have B as parent, so asks B to try to load
- Test
-
-
-
- B have A as parent, so asks A to try to load
- Test
-
-
-
- A is the top level ClassLoader, no parent, it will try to load
- test by itself
-
-
-
- As A contains the Test class, it can be
- loaded and returned
-
-
-
- B see that A (its parent) have loaded the class, so it return it
- as is
-
-
-
- C see that B (its parent) have loaded the class, so it return it
- as is
-
-
-
-
- Using the Java delegation model, the loaded class is always
- coming from the parent ClassLoader that is closer to the System class
- loader (the well known CLASSPATH), even if the class
- exists in a lower level ClassLoader (aka child ClassLoaders).
- Java EE makes an heavy use of ClassLoaders: the application
- server in itself may be composed of multiple ClassLoaders and the Java EE
- applications (EAR, Rar, War, EjbJar) themselves are using
- ClassLoaders.
-
- An application is deployed by its own class loader. This means, for
- example, that if a Web Application and an EjbJar are deployed separately,
- the classes contained in the two archives are loaded with two separate
- classloaders with no hierarchy between them. Thus, the EJBs from within
- the JAR will not be visible to the Web components in the WAR. This is not
- acceptable in cases where the Web components of an application need to
- reference and use some of the EJBs (this concerns local references in the
- same JVM).
-
-
- Class loaders are used to ensure class space
- isolation.
-
-
- For this reason, prior to EAR files, when a Web application had to
- be deployed using EJBs, the EjbJar had to be located in the WEB-INF/lib directory of the Web
- application.
-
- Currently, with the Java EE integration and the use of the EAR
- packaging, that kind of class visibility problems no longer exist and the
- EjbJar is no longer required in the WEB-INF/lib directory.
-
- The following sections describe the JOnAS class loaders and explain
- the mechanism used to locate the referenced classes.
-
-
-
-
- Application Server's class loaders
-
-
- JOnAS is basically an assembly of modules providing the features
- that makes JOnAS an application server. Each of the modules have an
- associated class loader. All theses loaders have visibility constraints,
- meaning that some of the internal classes or libraries used by JOnAS are
- hidden from the application class space. In clear, even if JOnAS may use a
- library also used by a deployed application, there will be no
- conflicts.
- Having visibility constraints on class loaders reduce the risks
- of conflicting libraries.
-
-
- The loaders of JOnAS are not in a tree hierarchy. They all share the
- same parent class loader (the System classloader), so it's a flat
- hierarchy. Nevertheless, there are links (aka wires) between theses class
- loaders. A module can export some of its packages (and thus, all the
- classes from that package) to the system. Theses exported packages can
- then be imported by other modules. That creates a wire. As a module can be
- wired to multiple others modules, the class loaders of the application
- server forms an oriented graph of loaders.
- The class loading rules are described in much more details in
- the OSGi specification.
-
- Only exported packages are available to the applications
-
-
-
-
-
-
-
-
-
-
-
- Extending JOnAS class loaders
-
- As JOnAS is build on a modular system
- (OSGi), it's very natural to "extends" the
- application server's class space.
-
- There are 2 way that can be used to augment the class
- space:
-
-
-
- Place an OSGi bundle containing your
- classes in the ${jonas.base}/deploy/
- directory
-
- It will be deployed as any normal bundle, and if it's
- resolved (ie all imported packages are found), all the packages
- exported by this bundle will be made available to the server (and
- applications).
- This is the preferred way to augment the class
- space.
-
-
-
-
- Place a classic jar file in the ${jonas.base}/lib/ext/ (or ${jonas.root}/lib/ext/). During JOnAS
- startup, theses jar files will automatically be transformed into
- bundle (using default creation rules) and installed like all other
- bundles.
-
-
- The default rule is: every required packages that is not
- in the jar file will be imported, and every packages of the
- jar will be exported.
-
- This option, even if it is seducing, should be used with
- caution: it can break application server modularity (if they
- export a package required by some of the JOnAS modules, maybe
- that can cause weird classes exceptions), and, because of the
- default transformation rule (all is exported), it's highly
- possible that a jar file will export some internal packages
- that should not have been exposed to the world.
-
- So the right method to augment the class space is to
- provide a well constructed bundle (with imports and exports
- constrained with versions).
-
-
-
-
-
-
- Using JDBC driver jars
-
- In order to connect the applications to an external database (not
- HSQL which is embedded in JOnAS), the user must
- provide the jar file that contains the JDBC Driver's
- classes.
-
- Providing theses jar files are just like extending JOnAS class
- loaders:
-
-
-
- The driver's jar file is already an
- OSGi bundle, so it can be placed in
- ${jonas.base}/deploy and it
- will be deployed automatically
-
-
-
- The jar file is not a bundle, it could be placed in
- ${jonas.base}/lib/ext and
- will be (at startup only) transformed into a
- bundle (see previous section for detailed information), or the
- user takes the responsability of transformation (more fine control
- on the bundle).
-
-
-
-
-
-
-
- Java EE module's class loaders
-
-
- Java EE modules are following the classic, hierarchical, parent
- oriented graph of class loaders.
-
- The class loader hierarchy for Java EE modules that allows the
- deployment of EAR applications without placing the EJB JAR in the
- WEB-INF/lib directory consists of
- the following:
- Work in progress
-
-
-
- Standalone resource
- adapters loader
-
- This class loader, child of the OSGi class
- loader, contains only the libraries provided by the system level
- resource adapters (i.e. resource adapters not part of an EAR
- application).
-
- This class loader is the parent of all the deployed Java EE
- modules:
-
-
-
- Standalone Web Applications (.war files)
-
-
-
- Standalone EjbJars (.jar files)
-
-
-
- Java EE Applications (.ear files)
-
-
-
- This means that all the classes available from this loader are
- also made available for the child loaders.
-
-
-
- Standalone EjbJar loader
-
- A standalone EjbJar classloader contains the classes packaged
- inside of the ejbjar. The parent of this classloader is the . It can therefore see
- all the classes available from the system level resource adapters and
- its ancestors.
-
- The classloading policy of this loader is to ask its parent first,
- and then (if the class was not found) try to search in itself.
- There is no way to invert the classloading policy of an EjbJar
- classloader.
-
-
-
- Standalone WebApp loader
-
- The classloader for standalone web applications modules contains
- the classes and libraries packaged inside of the war.
-
- It contains the WEB-INF/classes/ directory (that usually
- matches the classes of the application) and all the jar files located
- under the WEB-INF/lib/ directory.
- Notice that only jars directly under the lib/ directory are available, jars in
- WEB-INF/lib/subdirectory/ will
- not be accessible from the classloader.
-
- The parent of the standalone webapp classloader is the , meaning that all
- standalone web applications will be able to use system level resource
- adapters classes/libraries and the classes available from its
- ancestors.
-
- A webapp loader also have a direct link with the system
- classloader (classes of the JVM + what's available from the
- CLASSPATH environment variable). All class
- loading actions are first directed to the system classloader
- to avoid JVM class overloading from the web application (in short,
- guards the developer from overloading primordial classes).
-
- Then, if the system classlaoder did not find the required class,
- the loader will ask either the parent, or itself. Asking the parent or
- itself is configured by the delegation model choosed by the
- developer.
-
-
- By default, java2 delegation model is turned on.
-
-
-
- Java 2 delegation model
-
- The default classloading policy of a web application in an
- application server (in opposition of a webapp hosted in a standalone
- servlet container) is to ask the parent loader first, and then look
- inside itself (if the parent did not find the required class), this is
- the default java2 delegation model.
-
- Nevertheless, a web application developer can configure the web
- classloader to use first itself, then ask the parent loader. That
- means that the web application classes will have more priority than
- classes from the parent loader, in other words it can be used to
- overload some classes provided by the application server.
-
- The delegation model can be configured using the
- WEB-INF/jonas-web.xml specific deployment
- descriptor, as shown below.
-
- <?xml version="1.0" encoding="ISO-8859-1"?>
-<jonas-web-app xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://jonas.ow2.org/ns/jonas-web-app_4_0.xsd">
- <!--
- true : the context uses a classloader using the Java 2 delegation model (default)
- false : the class loader looks inside the web application first, before asking parent class loader
- -->
- <java2-delegation-model>false</java2-delegation-model>
-</jonas-web-app>
-
-
-
-
-
- EAR class loader
-
-
- The EAR class loader is the common parent (directly or indirectly)
- of all the class loaders of the inner modules (ejbjars, rar, webapps).
- There is only one EAR class loader per EAR application. This class
- loader is the child class loader, thus making JOnAS classes visible to
- it. The parent of all the EAR class loaders is a JOnAS special class
- loader that is able to seek for classes/resources exported by all the
- other module's class loaders of JOnAS.
-
-
- Class-Path: entries and lib/folder
-
- In Java EE 5, if libraries are required to any module packaged
- into the EAR file, these libraries could be added in the lib/ folder
- of the EAR.
-
- By using this mechanism, the use of "Class-Path" entries in the
- MANIFEST file of each application (WAR / EJB-JAR) is no longer
- required.
-
-
-
-
-
- EJB class loader
-
-
- The EJB class loader is responsible for loading all the EJB JARs
- of the EAR application, thus all the EJBs of the same EAR application
- are loaded with the same EJB classloader. This class loader is the child
- of the EAR class loader.
-
-
-
-
- WEB class loader
-
-
- The WEB class loader is responsible for loading the Web
- components. There is one WEB class loader per WAR file, and this class
- loader is the child of the EJB class loader. Using this class loader
- hierarchy (the EJB class loader is the parent of the WEB class loader)
- eliminates the problem of visibility between classes when a WEB
- component tries to reference EJBs; the classes loaded with the EJB class
- loader are definitely visible to the classes loaded by its child class
- loader (WEB class loader).
-
- The compliance of the class loader of the web application to the
- java 2 delegation model can be changed by using the
- WEB-INF/jonas-web.xml file. This is described in
- the section Defining the
- Web Deployment Descriptor.
-
- If the java2-delegation-model element is set to
- false, the class loader of the web application looks for the class in
- its own repository before asking its parent class loader. See for more detailed
- explanations.
-
-
-
-
- Filtering class loaders
-
-
- The problem
-
- By default, all classes exported by the application server can be
- accessed within an application. Sometimes this may cause problems if
- there are different versions of the library (in the AS and in the
- application).
-
- For example, JOnAS is using Apache Commons Digester. If an
- application wants to use an older version of this library, there is a
- problem as the default loading mechanism of classes is searching first
- in the parent classloaders. Then the library provided by JOnAS and not
- by the application will be used.
-
- For web applications, this mechanism could be changed by using
- java2-delegation-model but this may raise problems
- for EAR case, etc.
-
-
-
- The solution
-
- JOnAS is providing the concept of filtering classloader. A
- filtered classloader will hide to applications some packages/resources
- exported by the Application Server.
-
- A FilteringClassLoader is simply placed
- between a child ClassLoader and its parent and
- filter any requests coming from the child to the parent.
-
-
-
- This approach allows a fine grain control over what is visible or
- not from a given ClassLoader.
-
- Any loading request for a resource will trigger a matching against
- a list of excluded patterns. If any of the pattern match, the resource
- will not be loaded and the flow will return to the caller.
-
- Loading of a filtered resource (image, static content, ...) will
- result in null (the usual return for a resource not
- found) being returned. If the loading request a filtered class, a
- ClassNotFoundException will be thrown back to the
- caller (the usual return when a class is not found).
-
-
-
- Filtering system resources
-
- Some filters are configured by default in JOnAS. They will be
- applied to the "standalone rars" ClassLoader, effectively filtering
- resource/class request from all the deployed applications (among just
- the standalone resource adapters). This is a system
- wide configuration.
-
- These default filters are located in the
- JONAS_BASE/conf/classloader-default-filtering.xml
- file.
-
- <class-loader-filtering xmlns="http://org.ow2.jonas.lib.loader.mapping">
-
- <!-- List of filters used to exclude packages/resources that are used internally by
- the Application Server but that will not be available to applications.
- An empty list will not hide any packages to the applications
- This list is used both to hide resources and classes to applications. -->
- <default-filters>
- <filter-name>org.apache.commons.digester.*</filter-name>
- </default-filters>
-</class-loader-filtering>
-
- By modifying the set of filters, some packages will be hidden to
- the applications. Note that resources name can be specified. For
- example, when putting a resource in JONAS_BASE/conf folder, this resource can
- be obtained by using ClassLoader.getResource()
- method. By adding a filter on this resource, the resource won't be
- available to applications (This includes EAR, WAR and EJB-JAR
- modules).
-
-
-
- Filtering deployed modules
-
- In addition of the system wide filters configuration, JOnAS allows
- Java EE modules to provide themselves the filters they requires.
-
- It can be done by providing a
- classloader-filtering.xml file in the info
- directory of the deployed module (META-INF/ or WEB-INF/).
-
-
- Supported module types
-
- Not all modules supports the classloader filtering
- feature.
-
- Supported modules includes:
-
-
-
- EAR applications (.ear)
-
-
-
- Web Applications (.war), inside or outside an
- application
-
-
-
- EjbJars (.jar), only
- the ones outside of an application
-
-
-
-
- Web Applications filtering rules also apply when they are in
- an application (EAR).
-
-
-
-
- Declaring the filters
-
- A Java EE module declares the filters it requires with an XML
- file named META-INF/classloader-filtering.xml
- (WEB-INF/classloader-filtering.xml for a web
- application). its format is very similar to the system wide
- configuration file (<default-filters> simply
- become <filters>):
-
- <class-loader-filtering xmlns="http://org.ow2.jonas.lib.loader.mapping">
-
- <filters>
- <!-- Excludes all CXF resources as another version is embed in the web application -->
- <filter-name>org.apache.cxf.*</filter-name>
- <!-- plus some other dependencies of CXF ... -->
- <filter-name>org.springframework.*</filter-name>
- <filter-name>net.sf.cglib.*</filter-name>
- <filter-name>org.objectweb.asm.*</filter-name>
- </filters>
-
-</class-loader-filtering>
-
-
-
- What about Rars and Ejbjars ?
-
- Standalone Resource Adapters are all sharing the same
- ClassLoader. This loader is the parent of all
- the applications and is the one that is filtered by the system wide
- configuration file. That means that standalone Rars cannot have their
- own filtering configuration. They have to use (or modify) the
- classloader-default-filtering.xml file to fit
- their needs.
-
- EjbJars in Ear do not have support for the filtering. First, an
- EjbJar should not contains any library, so what could you filter ?
- Then EjbJars are all placed (along with Ear libraries) inside a unique
- ClassLoader, direct child of the application
- loader (containing Rars embed in the Ear), so they can indirectly
- benefit from the filters declared inside the application.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-app.xml b/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-app.xml
deleted file mode 100644
index b4b29563ceafe2e6aac4ab0f77709943701f68b8..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-app.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- Application Deployer and Administrator
-
-
- JOnAS provides tools for the deployment and administration of
- Enterprise Beans (EJB JARs), Web applications (WARs), and Java EE
- applications (EARs).
-
- The Deployment
- and Installation Guide covers issues related to the deployment of
- application components.
-
- The Administration
- Guide presents information about how to manage the JOnAS server and
- the JOnAS services that allow deployment of the different types of
- application components: EJB Container service, Web Container service, and
- EAR service.
-
diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-ejb.xml b/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-ejb.xml
deleted file mode 100644
index 9e2ff40234f16d649ff5c449d9e7fbe604cc943e..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-ejb.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
- Enterprise Bean Creation
-
-
- The individual in charge of developing Enterprise Beans should consult
- the for instructions on how to perform the following tasks:
-
-
-
- Write the source code for the beans.
-
-
-
- Specify the deployment descriptor.
-
-
-
- Bundle the compiled classes and the deployment descriptor into an
- EJB JAR file.
-
-
-
- JOnAS 5 supports both versions 2 and 3 of the Enterprise Java Beans
- (EJB) specifications. Programming and configuration methods between these
- two versions have changed drastically, we therefore provide you with two
- different programmer's guides:
-
-
-
- Enterprise Beans
- Programmer's Guide, for EJB version 3 (recommended)
-
-
-
-
-
- Enterprise Beans
- Programmer's Guide, for EJB version 2
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-web.xml b/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-web.xml
deleted file mode 100644
index c26af95c68779d37ef372c318251eaaaac4bf483..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-web.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- Web Components Creation
-
-
- Web designers in charge of JSP pages and software developers providing
- servlets can consult the Web Application Programmer's Guide.
-
- The Developing Web
- Components guide explains how to construct Web components, as well as
- how to access Enterprise Beans from within the Web Components.
-
- Deployment descriptor specification is presented in the Defining the Web Deployment
- Descriptor chapter.
-
- Web components can be used as Web application components or as Java EE
- application components. In both cases, a WAR file will be created, but the
- content of this file is different in the two situations. In the first case,
- the WAR contains the Web components and the Enterprise Beans. In the second
- case, the WAR does not contain the Enterprise Beans. The EJB JAR file
- containing the Enterprise Beans is packed together with the WAR file
- containing the Web components, into an EAR file. Principles and tools for
- providing WAR files are presented in WAR Packaging and the Deployment and Installation
- Guide.
-
diff --git a/jonas_doc/core/src/docbook/doc-en/j2eeclient_pg.xml b/jonas_doc/core/src/docbook/doc-en/j2eeclient_pg.xml
deleted file mode 100644
index f276242d211a704966afb382a3bc8fb4347d9765..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/j2eeclient_pg.xml
+++ /dev/null
@@ -1,420 +0,0 @@
-
-
-
- Java EE Client Programmer's Guide
-
-
-
- JOnAS Team
-
-
-
- COQPhilippe
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- Feb 2008
-
-
-
- The target audience for this guide is the Client component provider,
- i.e. the person in charge of developing the Client components on the
- client side. It describes how the Client component provider should build
- the deployment descriptors of its Client components and how the client
- components should be packaged.
-
-
-
-
- Launching Java EE Client Applications
-
-
-
-
- Launching clients
-
-
- The Java EE client application can be
-
-
-
- a standalone client in a .jar file,
-
-
-
- a client bundled in an .ear file. An ear can contain many java clients.
-
-
-
- a class name which must be found in the CLASSPATH.
-
-
-
- All the files required to launch the client container are in the
- JONAS_ROOT/lib/client.jar file. This jar includes a
- manifest file with the name of the class to launch. To launch the client
- container on a computer where a JONAS_TROOT is present , simply
- type:
-
- jclient -? . This will launch the client container
- and display usage information about this client container.
-
- To launch the client container on a remote computer, copy the
- client.jar and invoke the client container by typing java -jar
- path_to_your/client.jar
-
- The client that must be launched by the client container is given
- as an argument of the client container. example : java -jar
- client.jar myApplication.ear or java -jar client.jar
- myClient.jar .
-
-
-
-
- Configuring client container
-
-
-
-
- JNDI access
-
-
- Defining the JNDI access and the protocol to use is an important
- part of configuration. The JOnAS server, as well as the
- ClientContainer, uses the values specified in the
- carol.properties file. This file can be used at different
- levels. The carol.properties is searched with the
- following priority (high to low):
-
-
-
- the
-
- carol.properties
-
- specified by the
-
- -carolFile
-
- argument to the client container
-
-
-
- the
-
- carol.properties
-
- packaged into the client application (the jar client)
-
-
-
- if not located previously, it will use the
-
- carol.properties
-
- contained in the
-
- JONAS_ROOT/lib/client.jar
-
- .
-
-
-
- A convenient way is to update the carol.properties
- of a client.jar with a customized
- carol.properties file. That is, use the jar -uf
- client.jar carol.properties command.
-
-
-
-
- Trace configuration
-
-
- The client container client.jar includes a
- traceclient.properties file. This is the same file as the one
- in JONAS_ROOT/conf directory. A different configuration
- file can be used for the traces by specifying the parameter
- -traceFile when invoking the client container. The file in the
- client.jar can be replaced with the jar -uf
- client.jar traceclient.properties command.
-
-
-
-
- Classpath configuration
-
-
- Some jars/classes can be added to the client container. For
- example if a class requires some extra libraries/classes, the option
- -cp path/to/classes can be used.
-
- The classloader of the client container will use the
- libraries/classes provided by the -cp flag.
-
-
-
-
- Specifying the client to use (EAR case)
-
-
- An ear can contain many java clients, which are described in the
- application.xml file inside the
- <module><java> elements. To invoke the client
- container with an ear, such as java -jar client.jar my.ear
- , specify the java client to use if there are many clients.
- Otherwise, it will take the first client. To specify the jar client to
- use from an ear, use the argument -jarClient and supply
- the name of the client to use. The earsample example in
- the JOnAS examples has two java clients in its ear.
-
-
-
-
- Specifying the directory for unpacking the ear (EAR
- case)
-
-
- By default, the client container will use the system property
- java.io.tmpdir To use another temporary directory,
- specify the path by giving the argument -tmpDir to the
- client container.
-
-
-
-
- Disable Automated WsGen
-
-
- By default, the client container will apply WsGen (generation of
- web services artifacts) on all given archives. To disable that feature
- (because WsGen has already been applied on the application, or because
- the client contains no web services), add the -nowsgen
- option to the client container.
-
-
-
-
-
- Examples
-
-
- The Java EE 5 EAR Sample located under
- $JONAS_ROOT/examples/javaee5-earsample provides three application
- clients showing how to interact with the application in different ways,
- and under different security levels.
-
- These application clients are described in details in Getting
- started with JOnAS 5
-
-
-
-
-
- Defining the Client Deployment Descriptor
-
-
-
-
- Principles
-
-
- The Client component programmer is responsible for providing the
- java class of the Client annotated accordingly to the Java EE 5
- Specification.
-
- If the Client component programmer wants to provide a XML
- deployment descriptor, this one mus be compliant to the XML Schema for
- the application client 5 deployment descriptor http://java.sun.com/xml/ns/javaee/application-client_5.xsd
-
- To customize the Client components, information not defined in the
- standard XML deployment descriptor may be needed.
-
- The JOnAS-specific deployment descriptor's XML schema is located
- in http://jonas.ow2.org/ns/jonas-client_5_0.xsd
-
-
-
-
-
-
-
- Examples of Client Deployment Descriptors
-
-
-
-
-
-
-
- Example of a standard Client Deployment Descriptor
- (application-client.xml):
-<?xml version="1.0" encoding="UTF-8"?>
-
-<application-client
- 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/application-client_5.xsd"
- version="5">
-
- <display-name>OW2 JOnAS :: EAR Sample :: JMS Application Client</display-name>
-
- <!-- The JMS ConnectionFactory to use -->
- <resource-ref>
- <res-ref-name>jms/QueueConnectionFactory</res-ref-name>
- <res-type>javax.jms.QueueConnectionFactory</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
-
- <!-- The JMS Queue where Messages will be send -->
- <resource-env-ref>
- <resource-env-ref-name>jms/SampleQueue</resource-env-ref-name>
- <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
- </resource-env-ref>
-
-</application-client>
-
-
-
-
-
-
- Example of a specific Client Deployment Descriptor
- (jonas-client.xml): <jonas-client xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://jonas.ow2.org/ns/jonas-client_5_0.xsd" >
- <jonas-resource>
- <res-ref-name>jms/QueueConnectionFactory</res-ref-name>
- <jndi-name>JQCF</jndi-name>
- </jonas-resource>
-
- <jonas-resource-env>
- <resource-env-ref-name>jms/SampleQueue</resource-env-ref-name>
- <jndi-name>SampleQueue</jndi-name>
- </jonas-resource-env>
-</jonas-client>
-
-
-
- For advices about xml file writing, refer to
-
-
-
- .
-
-
-
-
-
- Client Packaging
-
-
-
-
- Principles
-
-
- Client components are packaged for deployment in a standard Java
- programming language Archive file called a jar file (Java ARchive). The
- document root contains a subdirectory called META-INF , which contains
- the following files and directories:
-
-
-
- application-client.xml : The standard xml deployment descriptor in the format defined in the Java EE 5 Specification. Refer to
-
- http://java.sun.com/xml/ns/javaee/application-client_5.xsd
-
- .
-
-
-
- jonas-client.xml : The optional JOnAS specific xml deployment descriptor in the format defined in
-
- http://jonas.ow2.org/ns/jonas-client_5_0.xsd
-
- .
-
-
-
- The manifest of this client jar must contain the name of the class
- to launch (containing the main method). This is defined by the value of
- the Main-Class attribute of the manifest file. For a standalone client
- (not bundled in an Ear), all the Ejb classes (except the skeleton) on
- which lookups will be performed must be included.
-
-
-
-
- Example
-
-
- Two examples of building a java client are provided.
-
-
-
- The first is the
-
- build.xml
-
- of the
-
- earsample
-
- example with a java client inside the ear. Refer to the client1jar and client2jar targets.
-
-
-
- The second is the
-
- build.xml
-
- of the
-
- jaasclient
-
- example with a java standalone client which performs a lookup on an EJB. Refer to the clientjars target.
-
-
-
-
-
-
-
- Appendix
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/j2eeprogrammerguide.xml b/jonas_doc/core/src/docbook/doc-en/j2eeprogrammerguide.xml
deleted file mode 100644
index 2510f6b35cbe09be166146c723a07acf45dc64b0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/j2eeprogrammerguide.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
- Java EE Programmer's Guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- Feb 2008
-
-
-
- The target audience for this guide is the application component
- provider, i.e., the person in charge of developing the software components
- on the server side (the business tier).
-
-
-
-
- Principles
-
-
- JOnAS supports two types of Java EE application components:
- Enterprise Beans and Web components. In addition to providing guides for
- construction of application components, guides are supplied for
- application assembly, deployment, and administration.
-
-
-
-
-
-
-
-
-
- Java EE Application Assembler
-
-
- The application assembler in charge of assembling the application
- components already bundled in EJB JAR files and WAR files into a Java EE
- EAR file, can obtain useful information from the Java EE Application Assembler's Guide
- .
-
-
-
-
-
- JOnAS Class Loader
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/jaxws_developer_guide.xml b/jonas_doc/core/src/docbook/doc-en/jaxws_developer_guide.xml
deleted file mode 100644
index 9267458928918f67d427c12db21de3e205c7e4cb..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/jaxws_developer_guide.xml
+++ /dev/null
@@ -1,1599 +0,0 @@
-
-
-
- JAX-WS Developer's Guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2009
-
- OW2 Consortium
-
-
- March 2009
-
-
-
- Preface
-
- JAX-WS stands for Java API
- for XML
- WebServices. It's a technology
- used to implement webservices endpoints and webservices clients
- communicating using XML.
-
- SOAP and XML messaging is a complex domain, but JAX-WS aims to hide
- the complexity of that domain. Endpoint development is an easy task: the
- developer writes a Java interface that will defines the available
- webservices operations, writes a concrete class (can be multiple class in
- case of inheritance) that will implement the Java interface. A minimal set
- of annotations is required to declares the class and interface as
- webservices. Writing webservices client is also an easy task: using
- generated classes from a given WSDL, the client can access the webservice
- without knowing any technical details. This is the role of the JAX-WS
- engine to do all the XML marshalling/unmarshalling, SOAP processing,
- ...
-
- With JAX-WS, developers takes both advantages of a standard Java
- webservices specification (portability) and of the Java platform
- independence (OS/hardware neutral). Moreover, with JAX-WS (and webservices
- in general), a client can access a webservice not implemented with Java
- and vice versa. This is possible because JAX-WS respects the W3C
- recommendations (World Wide
- Web Consortium) for HTTP, SOAP
- and WSDL (WebServices Description Language).
-
-
-
- Developing a Webservice Endpoint
-
- A Webservice endpoint is the implementation of a webservice. It's a
- server side artifact that can answer to webservices requests.
-
- An endpoint can be implemented using a POJO or using a Stateless
- EJB3.
-
- Two approaches can be used to develop an endpoint:
-
-
-
- Starting from Java
-
-
-
- Starting from WSDL
-
-
-
- Taking one of theses 2 approaches is the developer's choice.
-
-
- Starting from Java
-
- Choosing a Java-first approach is typical of a webservices
- development from scratch.
-
-
- Defining the Service Endpoint Interface
-
- The service endpoint interface (SEI) is a Java interface that
- specified the methods that will be exposed as webservices operations.
- This interface is required to be annotated with the @WebService
- annotation.
-
- @WebService(name="QuoteReporter",
- targetNamespace="http://jonas.ow2.org/examples/jaxws/quote")
-public interface QuoteReporter {
- public Quote getQuote(@WebParam(name="ticker") String ticker);
-}The @WebService
- annotation, placed on a SEI, provides the information required to
- generate a valid WSDL:
-
-
-
- name: this value will be used as the
- wsdl:portType name in the generated WSDL
-
-
-
- targetNamespace: this value will be used as the XML
- namespace containing the WSDL.
-
- It's required that this value is a URI, it's NOT required to
- use an URL or that this URL is accessible.
-
-
-
-
- Annotating the SEI will provides all the necessary information
- to build an abstract WSDL (types + messages + portType).
-
-
- The @WebParam
- annotation is placed on the method parameter because Java compilation
- do not store the parameter name ('ticker' here) in the byte code.
- Having a @WebParam ensure that the generated WSDL will always have the
- correct operation parameter names.
-
-
-
- Implementing the Service Endpoint Interface
-
- Once the SEI has been created, the developer has to implement
- the SEI.
-
- @WebService(portName="QuoteReporterPort",
- serviceName="QuoteReporterService",
- targetNamespace="http://jonas.ow2.org/examples/jaxws/quote",
- endpointInterface="org.ow2.jonas.examples.jaxws.quote.QuoteReporter")
-public class QuoteReporterBean implements QuoteReporter {
- public Quote getQuote(final String ticker) {
- return new Quote(ticker, Math.random() * 100);
- }
-}Once again, the developer has to annotate its class with the
- @WebService annotation.
-
-
-
- portName: this value specifies the wsdl:port to
- be used
-
-
-
- serviceName: this value specifies the
- wsdl:service to be used
-
-
-
- targetNamespace: this value specifies the targetNamespace of
- the wsdl:service
-
-
-
- endpointInterface: this value specifies the service endpoint
- interface classname (SEI)
-
-
-
- That's it, a first simple webservice endpoint code ! The next
- section will focus on the most important webservices
- annotations.
-
-
-
- Annotating the code
-
-
-
-
-
- Generate WSDL
-
- Once you have a codebase fully annotated, you may choose to
- generate a WSDL contract.
-
-
- With JOnAS 5.1 M4, there is no simple way to perform a
- wsdl2java operation, although the Apache CXF ant tasks are
- available.
-
- Next releases will provide more examples and documentation
- about the generation process.
-
-
-
-
-
- Starting from WSDL
-
- In the WSDL first approach, the developer is required to implement
- a webservice that is constrained by a WSDL contract.
-
- In that case, 2 options are available:
-
-
-
- Generates, from the WSDL, the SEI interface and an
- implementation skeleton.
-
-
-
- Implements a Provider that will allow the developer to work at
- the XML level.
-
-
-
-
- Generates skeleton
-
- JAX-WS tools are provided to help the developers to quickly
- start to implement business code by generating most of the plumbing.
- wsdl2java for a webservice endpoint will generate the following
- artifacts:
-
-
-
- {portType}.java: this is the fully annotated SEI interface.
- By default, its name is based on the wsdl:portType name.
-
-
-
- {portType}Impl.java: this is an implementation skeleton,
- annotated with @WebService. The developer just have to fill the
- blanks in this class.
-
-
-
- {types}.java + ObjectFactory.java: theses JAXB generated
- classes represents the operations parameters and documents.
-
-
-
-
- Insert here a picture of generated classes.
-
-
-
- Generates the Service Endpoint Interface
-
- A SEI generated by a JAX-WS 2.1 compatible tool look like
- this:
-
-
-
-
-
- Implements the Service Endpoint Interface
-
- Implementing the SEI simply means that the developer has to
- fill in the blanks of the generated skeleton. This part focus on
- business code.
-
-
-
-
-
- Writing a Provider
-
- JAX-WS allows developers to write endpoints dealing directly with
- XML messages using the Provider interface. This can be done by
- implementing Provider<Source> or Provider<SOAPMessage> or
- Provider<DataSource>.
-
- T invoke(T request) throws WebServiceException;
-
- Supported parameter's types are: Source,
- SOAPMessage,
- DataSource.
- They define the format of the data that will be manipulated inside the
- invoke method. What will be available in theses data structures depends
- on the ServiceMode specified. ServiceMode can be either MESSAGE or
- PAYLOAD (PAYLOAD being the default when no mode is specified):
-
-
-
- ServiceMode.MESSAGE: The structure will represent the whole
- request message (allowing access to the SOAP envelop and SOAP
- headers for example)
-
-
-
- ServiceMode.PAYLOAD: The structure will represent only the
- body of the request (restricting access to business data located
- inside the SOAP Body element)
-
-
-
- When writing a Provider, the webservice developer MUST starts with
- a WSDL, because the Provider implementation do not provide any
- exploitable information about the XML data structures expected (such as
- bean class parameters and such).
-
-
- Providers cannot be implemented using Stateless EJB.
-
-
- Providers implementation supports the one way MEP (Message
- Exchange Pattern) simply by returning null.
-
-
- Supported modes
-
- Although many modes and types combinations are possibles, there
- are some logical restrictions given the Binding type (HTTP, SOAP) in
- use.
-
- Supported combinations are described below.
-
-
- Using SOAP Binding (1.1 or 1.2)
-
- In the absence of any customization (like applying a
- @BindingType annotation on the Provider), the binding is assumed to
- be SOAP 1.1.
-
-
- Provider<SOAPMessage> used in conjunction with a
- ServiceMode set to PAYLOAD is invalid.
-
- Indeed the SOAPMessage type represents the whole message,
- not just the SOAP Body element.
-
-
-
- Provider<DataSource> is always
- invalid when used with a SOAP Binding.
-
-
-
- Provider<Source> and MESSAGE mode
-
- Using a Provider<Source> with the MESSAGE mode is used
- to change the message's content (provided as a
- javax.xml.transform.Source object) using XSLT Transformers.
-
- @WebServiceProvider
-@ServiceMode(Service.Mode.MESSAGE)
-public class ProviderImpl implements Provider<Source> {
- public Source invoke(Source message) {
- // Process the request
- ...
- // Prepare the response Source
- Source response = ...;
- return response;
- }
-}
-
-
-
- Provider<Source> and PAYLOAD mode
-
- Using a Provider<Source> with the PAYLOAD mode is used
- to change the message's payload (provided as a
- javax.xml.transform.Source object) using XSLT Transformers.
-
- @WebServiceProvider
-public class ProviderImpl implements Provider<Source> {
- public Source invoke(Source source) {
- // Process the request
- ...
- // Prepare the response Source
- Source response = ...;
- return response;
- }
-}
-
-
-
- Provider<SOAPMessage> and MESSAGE mode
-
- Using a Provider<SOAPMessage> with the MESSAGE mode is
- used to change the message's content (provided as a
- javax.xml.soap.SOAPMessage object) with a DOM-like API.
-
- @WebServiceProvider
-@ServiceMode(Service.Mode.MESSAGE)
-public class ProviderImpl implements Provider<SOAPMessage> {
- public SOAPMessage invoke(SOAPMessage message) {
- // Process the request
- ...
- // Prepare the response SOAPMessage
- SOAPMessage response = ...;
- return response;
- }
-}
-
-
- Provider<SOAPMessage> used in conjunction with a
- ServiceMode set to PAYLOAD is
- invalid.
-
- Indeed the SOAPMessage type
- represents the whole message, not just the SOAP Body
- element.
-
-
-
-
-
- Using HTTP Binding
-
- Providers can also be implemented using the HTTP binding. That
- means that no SOAP messages are involved and that the interaction
- will only be based on XML/HTTP.
-
-
- Provider<DataSource> used in conjunction with a
- ServiceMode set to PAYLOAD is invalid.
-
-
-
- Provider<SOAPMessage> is always
- invalid when used with an HTTP Binding.
-
- Indeed, using the HTTP binding assume that the messages are
- not SOAP messages.
-
-
-
- Provider<Source> and MESSAGE mode
-
- Using a Provider<Source> with the MESSAGE mode and the
- HTTP binding is used to change the message's content (provided as
- a javax.xml.transform.Source object) using XSLT
- Transformers.
-
- @WebServiceProvider
-@ServiceMode(Service.Mode.MESSAGE)
-@BindingType(HTTPBinding.HTTP_BINDING)
-public class ProviderImpl implements Provider<Source> {
- public Source invoke(Source message) {
- // Process the request
- ...
- // Prepare the response Source
- Source response = ...;
- return response;
- }
-}
-
-
-
- Provider<Source> and PAYLOAD mode
-
- Using a Provider<Source> with the PAYLOAD mode and the
- HTTP binding is used to change the message's body (provided as a
- javax.xml.transform.Source object) using XSLT Transformers.
-
- @WebServiceProvider
-@BindingType(HTTPBinding.HTTP_BINDING)
-public class ProviderImpl implements Provider<Source> {
- public Source invoke(Source message) {
- // Process the request
- ...
- // Prepare the response Source
- Source response = ...;
- return response;
- }
-}
-
-
-
- Provider<DataSource> and MESSAGE mode
-
- Using a Provider<DataSource> with the MESSAGE mode and
- the HTTP binding is used to process the message attachment
- (provided as a javax.xml.transform.Source object). This style of
- provider is useful when dealing only with
- message's attachments (no XML changes).
-
- @WebServiceProvider
-@ServiceMode(Service.Mode.MESSAGE)
-@BindingType(HTTPBinding.HTTP_BINDING)
-public class ProviderImpl implements Provider<DataSource> {
- public DataSource invoke(DataSource message) {
- // Process the request
- ...
- // Prepare the response DataSource
- DataSource response = ...;
- return response;
- }
-}
-
-
-
-
-
- Wrap up
-
- The table below summarizes the requirement with all the possible
- combinations ().
-
-
-
-
-
-
XML/HTTP Binding
-
-
SOAP/HTTP Binding
-
-
-
-
Provider<Source>
-
-
-
-
Payload
-
-
Primary part or content as Source
-
-
SOAP Body from the primary part or SOAP Body as Source
-
-
-
-
Message
-
-
Primary part or content as Source
-
-
SOAP Envelope from the primary part or SOAP Envelope as
- Source
-
-
-
-
Provider<DataSource>
-
-
-
-
Payload
-
-
Not Valid [1]
-
-
Not Valid [1]
-
-
-
-
Message
-
-
DataSource as an object
-
-
Not Valid [2]
-
-
-
-
Provider<SOAPMessage>
-
-
-
-
Payload
-
-
Not Valid [3]
-
-
Not Valid [3]
-
-
-
-
Message
-
-
Not Valid [4]
-
-
SOAPMessage as an object
-
-
-
-
- Source Arun Gupta (http://weblogs.java.net/blog/arungupta/archive/2006/03/jaxws_20_provid_1.html)
-
- Provider<DataSource> is used for sending attachments
- and thus payload mode is not valid.
-
- Provider<DataSource> in SOAP/HTTP is not valid since
- attachments in SOAP are sent using Provider<SOAPMessage>.
-
-
- Provider<SOAPMessage> in payload mode is not valid
- because the entire SOAPMessage is received, not just the payload
- which corresponds to the body of the SOAPMessage.
-
- Provider<SOAPMessage> in message mode using XML/HTTP
- binding is not valid since the client may have sent an XML message
- that may not be SOAP.
-
-
-
-
- Implementing RESTful services using Providers
-
-
-
-
- Using HTTP Binding + provider can be used to implement simple
- RESTful services (in the absence of JAX-RS support).
-
- This topic will be covered in future versions in this
- documentation.
-
-
-
-
-
- Overriding annotations
-
- Some annotations values can be overridden in a Java EE application
- server using the webservices.xml (located in WEB-INF/ or META-INF/ given
- the implementor is respectively a POJO or an EJB).
-
- The link between @WebService (or @WebServiceProvider) and the XML
- <port-component> description is done through the
- <service-impl-bean> element:
-
-
-
- <ejb-link> with an ejb-name pointing to a Stateless EJB3
- annotated with @WebService / @WebServiceProvider.
-
-
-
- <servlet-link> with a servlet-name pointing to a Servlet
- declaration in the web.xml.
-
-
-
-
- Overriding @WebServiceProvider
-
-
-
-
- AnnotationÂ
-
- Deployment descriptor elementÂ
-
- Comment
-
-
-
-
-
- @WebServiceProvider
-
- <webservices>/<webservice-description>/<port-component>
-
- One @WebServiceProvider per
- <port-component>
-
-
-
- @WebServiceProvider.wsdlLocation
-
- <webservices>/<webservice-description>/<wsdl-file>
-
- Overrides the WSDL location value for all the
- <port-component> declared in the
- <webservice-description>
-
-
-
- @WebService.serviceName
-
- <webservices>/<webservice-description>/<port-component>/<wsdl-service>
-
-
-
-
-
- @WebService.portName
-
- <webservices>/<webservice-description>/<port-component>/<wsdl-port>
-
-
-
-
-
- @WebService.endpointInterface
-
- N/A
-
- It is not required for a Provider to specify a
- SEI
-
-
-
-
-
-
-
-
- Overriding @BindingType
-
-
-
-
- Deployment descriptor
-
- Possible valuesÂ
-
-
-
-
-
- <port-component>/<protocol-binding>
-
- Specify the protocol binding used by this
- port-component. The following alias are
- supported:
-
- ##SOAP11_HTTP: SOAP 1.1
- Binding
-
-
-
- ##SOAP11_HTTP_MTOM: SOAP 1.1
- Binding with MTOM enabled
-
-
-
- ##SOAP12_HTTP: SOAP 1.2
- Binding
-
-
-
- ##SOAP12_HTTP_MTOM: SOAP 1.2
- Binding with MTOM enabled
-
-
-
- ##XML_HTTP: XML Binding
-
-
-
-
-
- <port-component>/<enable-mtom>
-
- This element permits to enable/disable the SOAP MTOM/XOP
- mechanism for the endpoint. This element has higher priority
- than <protocol-binding>, meaning that if
- ##SOAP11_HTTP_MTOM is specified as protocol
- binding and <enable-mtom> is false, it will be equivalent
- to a protocol binding set to
- ##SOAP11_HTTP
-
-
-
-
-
-
-
- Endpoint packaging
-
- When the webservices implementation has been finished, code
- compiled, it's time to take care of the application packaging. There are
- some simple packaging rules to follow.
-
-
- Web Application
-
- When the endpoint is implemented as a POJO, the implementation
- class may be referenced as a servlet in the WEB-INF/web.xml. If it is
- not declared in the web.xml, it will be auto discovered at deployment
- time. If it is declared in the web.xml, it must be specified as a new
- servlet element and the servlet must have an associated
- servlet-mapping.<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"
- version="2.5">
-
- <servlet>
- <servlet-name>{servlet-name}</servlet-name>
- <servlet-class>{implementor-fully-qualified-classname}</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>{servlet-name}</servlet-name>
- <url-pattern>{webservice-endpoint-url-pattern}</url-pattern>
- </servlet-mapping>
-
-</web-app>
-
- A usual servlet name: unique among other servlets.
-
-
-
- The implementor fully qualified classname (It's not a
- Servlet, but that's OK, it will be changed during
- deployment).
-
-
-
- The same servlet name specified first in the servlet
- element.
-
-
-
- The URL pattern that will point to the webservice
- endpoint.
-
-
-
-
- If the endpoint is declared in the
- WEB-INF/web.xml but no
- servlet-mapping is provided, the endpoint will not be
- accessible (No URLs will point to the servlet).
- If the WSDL is referenced from the endpoint (using
- @WebService.wsdlLocation(), @WebServiceProvider.wsdlLocation() or
- webservices.xml), it has to be provided in the WEB-INF/wsdl/ directory of the
- webapp.
-
-
- Default Web URL Mapping
-
- The webservice endpoint contained in the webapp will be
- available through an URL.
-
- If no servlet-mapping was specified in the web.xml a default
- mapping will be automatically introduced.
-
-
- Automatic Web Endpoints Servlet Mappings Patterns
-
-
-
-
- Â Condition
-
- Servlet Mapping PatternÂ
-
-
-
-
-
- serviceName has been
- provided in the @WebService(s)
-
- /{service-qname-local-part}
-
-
-
- no serviceName
- provided
-
- /{simple-implementor-classname}Simple
-
-
-
-
-
-
-
-
- EjbJar
-
- When the webservice endpoint is implemented as a Stateless
- EJB
-
-
- Endpoint URL Mapping
-
- As an ejbjar is not a webapp, there is no available web
- context, or url-pattern that can be used to access the endpoint
- through HTTP.
-
- A Web context is created and named after the ejbjar's filename
- (stopping at the first '_' character).
-
-
- Automatic EJB Endpoints Servlet Mappings Patterns
-
-
-
-
- Â Condition
-
- Servlet Mapping PatternÂ
-
-
-
-
-
- <endpoint-address> provided
- for the bean in the easybeans.xml
-
- provided value
-
-
-
- serviceName has been
- provided in the @WebService(s)
-
- /{service-qname-local-part}
-
-
-
- no serviceName
- provided
-
- /{simple-implementor-classname}Simple
-
-
-
-
-
-
-
- EasyBeans deployment descriptor customizations
-
- The EasyBeans deployment descriptor provides a mean for
- customizing some webservices endpoint properties.
-
-
- To be completed with XML references.
- (easybeans/webservices/endpoint and
- easybeans/ejb/session/endpoint-address).
-
-
-
-
-
-
-
- Developing a Webservice Consumer
-
- A Webservice consumer is a client of a webservice endpoint. It's a
- client side artifact that perform webservices requests.
-
- With JAX-WS, clients can benefits of asynchronous invocations (more
- on this later).
-
- A webservice consumer can be any of the following Java EE
- components: EJB (Session/MessageDriven), Servlet (or any web components
- such as JSP, JSF, ...) or Application Client. For any of theses
- components, the creation process is the same.
-
- A consumer typically starts with a WSDL (describing the endpoint's
- contract), but dynamic invocation (working at the XML level) can also be
- performed.
-
-
- Port
-
- A webservice consummer can be implemented using a Port. A Port is
- a Java interface that hides to the client all the WS low level
- mechanisms (masrshalling, unmarshalling, handler chains, ...).
-
- A Port is usually generated from a WSDL.
-
-
- Generates portable client artifacts
-
- When the client's developer starts with a WSDL, it usually
- generates the client artifacts (Java classes) using a wsdl2java
- tool.
-
-
- With JOnAS 5.1 M4, there is no simple way to perform a
- wsdl2java operation, although the Apache CXF ant tasks are
- available.
-
- Next releases will provide more examples and documentation
- about the generation process.
-
-
-
-
-
-
-
- Example of generated Service
-
-
-
-
-
- Example of generated Port
-
-
-
-
-
-
- Synchronous consumer
-
- Using synchronous consumer is the easiest way of consuming a
- webservice: by default, wsdl2java tools generate classes supporting
- only synchronous operations.
-
- The following code snippet shows the Port source code that a
- wsdl2java tool generate using an input WSDL file.
-
- @WebService(targetNamespace = "http://jonas.ow2.org/samples/jaxws/calculator",
- name = "Calculator")
-public interface Calculator {
-
- @ResponseWrapper(localName = "addResponse",
- targetNamespace = "http://jonas.ow2.org/samples/jaxws/calculator",
- className = "org.ow2.jonas.samples.jaxws.calculator.AddResponse")
- @RequestWrapper(localName = "add",
- targetNamespace = "http://jonas.ow2.org/samples/jaxws/calculator",
- className = "org.ow2.jonas.samples.jaxws.calculator.Add")
- @WebResult(name = "return", targetNamespace = "")
- @WebMethod
- public int add(@WebParam(name = "arg0", targetNamespace = "")
- int arg0,
- @WebParam(name = "arg1", targetNamespace = "")
- int arg1);
-}
-
-
-
- Asynchronous consumer
-
- By default, WSDL2Java generation do not generate asynchronous
- methods for each operation of the wsdl:portType.
-
- To enable the async method generation, a binding customization
- has to be provided during the WSDL2Java execution.
-
- It can be provided as part of the WSDL file:
-
- <portType name="CalculatorPort">
- <operation name="add">
- <input message="tns:addRequest"/>
- <output message="tns:addResponse"/>
- </operation>
-</portType>
-<binding name="CalculatorBinding" type="tns:CalculatorPort">
- <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
- <operation name="add">
- <soap:operation soapAction=""/>
- <input>
- <soap:body use="literal"/></input>
- <output>
- <soap:body use="literal"/>
- </output>
- </operation>
-</binding>
-
-
- Or as a separate bindings declaration file:
-
- <bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns="http://java.sun.com/xml/ns/jaxws"
- wsdlLocation="...">
-
- <bindings node="wsdl:definitions">
- <package name="org.ow2.jonas.ws.async.client"/>
- <enableAsyncMapping>true</enableAsyncMapping>
- </bindings>
-</bindings>
-
-
- // Synchronous method
-public int add(int a, int b);
-
-// Asynchronous polling method
-public Response<AddResponse> add(int a, int b);
-
-// Asynchronous callback method
-public Future<?> add(int a, int b, AsyncHandler<AddResponse>);
-
-
-
- Asynchronous polling
-
-
-
-
-
- Asynchronous callback
-
-
-
-
-
-
-
- Dispatch
-
- A Dispatch<T> is an object that allows the client to perform
- XML level operations. It is the client side equivalent to the
- Provider<T> interface.
-
-
- Configure dynamic Service
-
-
-
-
-
- Create a Dispatch
-
-
-
-
-
- Invoke the Dispatch
-
- The Dispatch interface provides support for 4 MEP:
- request-response, asynchronous polling, asynchronous callback
-
-
- Synchronous request response
-
-
-
-
-
- Asynchronous request response
-
-
-
-
-
- One way
-
-
-
-
-
-
-
- Packaging
-
-
-
-
-
-
- Developing Handlers
-
-
-
-
- Types
-
-
-
-
- SOAP handlers
-
-
-
-
-
- Logical handlers
-
-
-
-
-
-
- Defining the handler-chains
-
-
-
-
- Handler chains description file
-
-
-
-
- HandlerChain annotation
-
-
-
-
-
-
- Defining handlers on the endpoint
-
-
-
-
- Using the @HandlerChain annotation
-
-
-
-
-
- Using the webservices.xml
-
-
-
-
-
-
- Defining handlers for the consumer
-
-
-
-
- Using the @HandlerChain annotation
-
-
-
-
-
- Using the javaee:service-ref element
-
-
-
-
-
- Using the HandlerResolver
-
-
-
-
-
-
-
-
- Annotations references
-
-
-
-
- JWS Annotations (javax.jws)
-
-
-
-
- javax.jws.WebService
-
-
-
-
-
- javax.jws.WebMethod
-
-
-
-
-
- javax.jws.WebParam
-
-
-
-
-
- javax.jws.WebResult
-
-
-
-
-
- javax.jws.OneWay
-
-
-
-
-
- javax.jws.HandlerChain
-
-
-
-
-
- javax.jws.soap.SOAPBinding
-
-
-
-
-
-
- JAX-WS Annotations (javax.xml.ws)
-
-
-
-
- javax.xml.ws.WebServiceProvider
-
-
-
-
-
- javax.xml.ws.WebServiceRef
-
-
-
-
-
- javax.xml.ws.WebServiceRefs
-
-
-
-
-
- javax.xml.ws.WebServiceClient
-
-
-
-
-
- javax.xml.ws.BindingType
-
-
-
-
-
- javax.xml.ws.RequestWrapper
-
-
-
-
-
- javax.xml.ws.ResponseWrapper
-
-
-
-
-
- javax.xml.ws.RespectBinding
-
-
-
-
-
- javax.xml.ws.ServiceMode
-
-
-
-
-
- javax.xml.ws.WebEndpoint
-
-
-
-
-
- javax.xml.ws.WebFault
-
-
-
-
-
- javax.xml.ws.Feature
-
-
-
-
-
- javax.xml.ws.FeatureParameter
-
-
-
-
-
- javax.xml.ws.Action
-
-
-
-
-
- javax.xml.ws.FaultAction
-
-
-
-
-
- javax.xml.ws.soap.Addressing
-
-
-
-
-
- javax.xml.ws.soap.MTOM
-
-
-
-
-
-
-
-
- JAX-WS Terminology
-
-
- Endpoint
-
-
- A Webservice endpoint is the web service implementation. It's
- a server side artifact. It can be implemented as a POJO or as a
- Stateless EJB.
-
-
-
-
- Consumer
-
-
- Also known as a webservice client. It is a client side
- artifact.
-
-
-
-
- Portable Artifacts
-
-
- JAX-WS generated artifacts (classes / WSDL / XSD) that are
- portable across JAX-WS implementation. It means that artifacts
- generated using Sun RI tools will be usable without any
- changes on any Java EE 5 compliant application
- server.
-
-
-
-
- Provider
-
-
- Endpoint can be implemented as Providers if they require low
- level XML access.
-
-
-
-
- Handler
-
-
- A Handler can be seen like a webservice interceptor. It can be
- used on client and/or server side. Two kinds of handlers exists:
- Logical and SOAP handlers.
-
-
-
-
- Dispatch
-
-
- A Dispatch is a webservice client working at the XML level. A
- Dispatch is the client side equivalent to a Provider.
-
-
-
-
- POJO
-
-
- Plain Old Java Object. Commonly used word meaning that the
- beans do not have to implement an interface to be usable by the
- container.
-
-
-
-
- QName
-
-
- XML Qualified Name. Disambiguate XML names by prefixing the
- names (local-part) with a namespace (URI).
-
-
-
-
- MEP
-
-
- Message Exchange Pattern. This is the pattern of the exchange
- (one-way, request-response, ...).
-
-
-
-
- SEI
-
-
- Service Endpoint Interface. This is an annotated Java
- interface that represents the business object.
-
-
-
-
- MTOM
-
-
- Message Transmission Optimization Mechanism. This is a W3C
- recommendation defining a method to efficiently sending binary data
- to and from webservices.
-
-
-
-
- WSDL
-
-
- Web Service Description Language. This is the cornerstone of
- the webservices system. It is an XML file that can basically be
- compared to a Java interface: it's the contract defining the wire
- exchange (possible operations, expected types and parameters, ...)
- between a consumer and an endpoint.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/jonas-transactions.xml b/jonas_doc/core/src/docbook/doc-en/jonas-transactions.xml
deleted file mode 100644
index b871f96ac1386a411b8cfc847f4b16d38895919c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/jonas-transactions.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
- JOnAS and the transactions
-
-
-
- JOnAS Team
-
-
-
- FlorentBENOIT
-
-
- OW2 Consortium
-
-
-
-
-
- 2011-2012
-
- OW2 Consortium
-
-
-
- Creative Commons
-
-
- 2011/10/01
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/basics-of-classloading.xml b/jonas_doc/core/src/docbook/doc-en/loaders/basics-of-classloading.xml
deleted file mode 100644
index 925340c31b813aa8169f7d4d7bfceca1b6a4c3d3..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/loaders/basics-of-classloading.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
- Basics of ClassLoading
-
-
- ClassLoader
-
-
- Usage
-
- A ClassLoader knows how to load resources
- (class, images, ...).
-
- Where the ClassLoader locates the resources
- is an implementation detail: it could search on a network drive, a local
- file, in a jar or in a directory, ...
-
- Additionaly, for Java classes, a
- ClassLoader supports the class definition
- process: turning a byte[] into a
- Class<T> instance.
-
-
- Beware of ClassLoaders, behind the interface, how they works
- can differ a lot from an implementation to another.
-
- Ex: an OSGi Classloader has no
- automatic delegation to parent loader, unlike an
- URLClassLoader.
-
- Understanding the execution chain requires a knowledge of the
- ClassLoader's internals
-
-
-
-
- Delegation
-
- ClassLoaders delegate loading of resources to other ClassLoaders,
- under certains circumstances and conditions.
-
-
- a Class using java.lang.String must use
- the same Class<String> definition to be
- interoperable with other Class (potentially loaded by different
- loaders ).
-
- Delegation is essential !
-
-
- In order to delegate resource loading to other loaders, a
- ClassLoader defines some relationships. At least, a ClassLoader have a
- parent loader (Only system loader do not have a parent : it is the root
- loader). It may (or may not) also have other links to other loaders.
- Theses links may (or may not) be used to delegate loading of a resource
- (or a class) to another loader.
-
-
- The way the ClassLoader uses theses links to other loaders,
- including link to the parent loader are depending on the ClassLoader
- implementation.
-
-
-
-
-
- Class
-
- Class is a Java object (Class<T>), it
- is uniquely identified with a String,
- ClassLoader couple. The
- String being the Class' name, and the
- ClassLoader being the loader which has effectively
- loaded the Class (Not necessarily the one used primarily to load the class
- !).
-
-
- ClassLoader.loadClass(String) may
- return a Class<T> definition that was not
- loaded by the ClassLoader itself but that comes
- from an "ancestor".
- That means that ClassCastException
- may happen between classes having the same name !
-
-
- Two classes with the same name but loaded by 2 different loaders
- are incompatibles : they don't have the same definition.
-
-
-
-
- CLASSPATH
-
-
-
-
-
-
-
- When a Java VM starts 3 loaders are created:
- <bootstrap>,
- <extensions> and
- <system>.
-
- System delegates to Extension, itself delegating to Boostrap, all
- using a parent first delegation model.
-
-
- Bootstrap loader
-
- The <bootstrap> loader is the primordial
- VM ClassLoader. It is responsible to load the core Java libraries
- (rt.jar, ...) located in
- JAVA_HOME/lib/*.jar.
-
- The loader has no parent and is implemented with native
- code.
-
-
-
- Extensions loader
-
- The <extensions> loader is the only child
- of <bootstrap>, it is responsible to load Java
- extensions (security, ...) from
- JAVA_HOME/lib/ext/*.jar. The content of this loader
- can be adapted using the java.ext.dirs system
- property. This property accepts a comma separated list of paths, all
- .jar files in theses directories
- will be added in the <extension> loader.
-
- This loader is implemented (at least when using Hotspot VM) with
- sun.misc.Launcher$ExtClassLoader.
-
-
-
- System loader
-
- The <system> loader is the only child of
- the <extensions> loader, it contains the
- content of the CLASSPATH environment variable. It is
- implemented using
- sun.misc.Launcher$AppClassLoader (at least when
- using Hotsport VM).
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/classloading-in-jonas.xml b/jonas_doc/core/src/docbook/doc-en/loaders/classloading-in-jonas.xml
deleted file mode 100644
index 40df22742e8215afb9937eda94c48f9bff1b30f2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/loaders/classloading-in-jonas.xml
+++ /dev/null
@@ -1,577 +0,0 @@
-
-
- ClassLoading in JOnAS
-
-
- JOnAS Internals (OSGi)
-
-
- Modular Application Server
-
- JOnAS is a modular application server, it relies on
- OSGi to provide the module layer.
-
- As a consequence, JOnAS is simply an aggregation of Bundles (more
- or less): a right sized (no more, no less) JOnAS assembly is possible by
- just choosing the right set of bundles needed by the application.
-
-
-
-
-
- OSGi ClassLoading
-
-
- Bundle
-
- An OSGiBundle is
- the module unit, it contains classes and resources.It may also contain
- other jar files (useful for privatizing resources).
-
- Bundle's metadata are defined in
- META-INF/MANIFEST.MF. Theses metadata are
- providing information that helps to:
-
-
-
- Identify uniquely the Bundle
- (Bundle-SymbolicName +
- Bundle-Version)
-
-
-
- Defines what is published to the outside of the
- module
-
-
-
- Define module's boundaries
-
-
-
-
- Bundle ClassPath
-
- A Bundle may also have access to
- resources provided by inner jar files. Theses jar files will form
- the Bundle's ClassPath.
-
-
-
- Exporting Packages
-
- Bundle's metadata may declare exported packages. That means
- that theses packages (and all contained resources/classes) will be
- available for other Bundles to use
- (imported).
-
- Theses packages have to be contained in the
- Bundle.
-
-
-
- Importing Packages
-
- Bundle's metadata may also declares imported packages. A wire
- is created for each imported package that matches a corresponding
- exported package.
-
-
-
-
- Class Space
-
- A class space is a notion associated to a
- Bundle: it represent all the resources
- accessibles from the bundle. A Bundle cannot
- access a resource outside of its class space.
-
- The figure below show the Class space of Bundle A. This Bundle
- can access all resources from its own classpath (the Bundle's content)
- plus all imported packages' resources.
-
-
-
-
-
- Delegation
-
- The OSGi specification defines strict
- classloading rules. Theses rules are applied when a
- Bundle is asked to load a class (or find a
- resource).
-
-
- Parent classloader is usually the system Classloader (true
- for JOnAS), but that may change depending on the underlying
- OSGi framework and its
- configuration.
-
- This workflow may look complex, but it is well documented
- and have to be compared with custom loader with unclear behavior
- (and unspecified delegation rules) ...
-
- This is the price to pay to avoid the well known
- Classpath Hell !
-
-
-
-
-
-
- System Bundle
-
- The System Bundle is a "Wrapper" around the
- System loaders to make it looks like a Bundle:
- it has a Bundle symbolic name (value:
- system.bundle), is always the first "installed"
- Bundle (and so it's ID is 0) and have export
- packages.
-
- Wrapping the system ClassLoaders as a Bundle is important
- because other Bundles may imports some packages that are only
- available in rt.jar (and other libraries provided
- in the System Classloaders - <bootstrap>,
- <extensions> and
- <system>). So for the standard package
- resolution mechanism to work, a Bundle
- representing the system was necessary.
-
- The System Bundle exports some of the system packages: not all,
- only a selected subset (can be configured). This is some kind of mask
- or filter allowing to hide some packages.
-
- Hiding a package is then as simple as not exporting it from
- System Bundle (Ex : javax.transaction because the
- JVM provides an incomplete package).
-
-
-
- JOnAS
-
- JOnAS being built on top of OSGi, it's
- building blocks are OSGi bundles. Each of them
- having their own Bundle ClassLoader, exporting
- more or less of their content and importing packages from other
- bundles.
-
-
-
- The figure above shows a simplified view of JOnAS Classloading
- architecture. Each Bundle correspond to a JOnAS' module, green parts
- represents the subset of module's packages that are exported to the
- environment. Each Bundle have wire to other Bundles for each resolved
- imported package (not shown on the picture). All of theses loaders
- have the System ClassLoader as parent (not to be confound with System
- Bundle: the all-green module on the left). The usage of this parent
- loader is very controlled: only java.* packages
- (java.lang, java.nio, ...) and
- package's patterns configured in boot delegation are delegated to the
- parent loader (the two first steps in bundle delegation section).
-
-
-
-
-
- Endorsed
-
- Endorsed is a system level (JVM) mechanism allowing to override the
- classes provided by the System
- ClassLoaders of the JVM (rt.jar, ...).
-
- It is traditionally used in Java EE server to force usage of newer
- version of some packages/libraries.
-
-
- In JOnAS, Apache Xerces, Apache Xalan, JAXP APIs plus RMI/IIOP
- APIs (CORBA) are provided in ${jonas.root}/lib/endorsed/.
-
-
- The endorsed mechanism is configurable through a system property:
- java.endorsed.dirs. the value provides a list of
- directories (separator : ':' or ';'
- depending on the host Operating System). All jars in theses directories
- will be inserted before rt.jar (thus gaining priority
- at load-time).
-
-
- Jars in endorsed directories are inserted in the
- <bootstrap> loader (the very first loader
- created by the JVM).
-
- They are not auto-magicaly visible to applications.
-
- This is because their visibility is constrained to the list of
- system exported packages (System Bundle).
-
-
-
-
- Code Sharing
-
- Sharing additional resources is done by adding bundles to JOnAS.
- That's it!
-
-
-
-
- Existing Bundles
-
- Existing Bundles have to be deployed using the usual JOnAS
- deployment mechanisms:
-
-
-
- Deployment directory: Dropping the Bundle in the
- ${jonas.base}/deploy/ directory is
- enough
-
-
-
- Command line: jonas admin add
- ${path-to}/users-bundle.jar
-
-
-
- Web console
-
-
-
-
-
- Jar Files
-
- Jar files (do not have OSGi metadata in
- their manifest) cannot be deployed by Just dropping a jar in
- ${jonas.base}/deploy/. They have to be turned into
- bundle first.
-
- JOnAS offers a fast, easy and efficient mechanism to perform that
- operation: Extension Loader.
-
- This mechanism look for jar files in the lib/ext/ directories of ${jonas.root} and ${jonas.base}. Every jar file (extension:
- *.jar) in these directorier will
- be transformed into a Bundle (using aQute Bnd).
-
-
- Default set of bnd instructions
-
- # Symbolic Name is computed from source jar filename
-# A maven-like artifact name is expected <artifactId>-<version>.jar (-version is optional)
-# <artifactId> maps to Symbolic Name
-# <version> maps to bundle version (if missing 0.0.0 is used)
-Bundle-SymbolicName <artifactId>
-Bundle-Version <version>
-
-# Imports all discovered required packages
-# Have them marked as optional to avoid startup resolution errors
-Import-Package *;resolution:=optional
-
-# Export all the packages contained in the original jar
-Export-Package *
-
-# Can load any non-imported package at runtime
-DynamicImport-Package *
-
-
-
-
- The lib/ext/
- directories are only traversed once: when JOnAS starts. Any update
- or jar file removal will be ignored until next restart.
-
- Generated Bundles can be found in ${jonas.base}/work/ext-bundles/
-
- Once they have been generated they could be used as standard
- Bundles (placed in deploy/).
-
-
-
-
-
- Java EE Modules
-
- Java EE modules are not Bundles, so they not obey the same
- classloading rules. This section will explain how works Java EE
- classloading in JOnAS.
-
-
- Overview
-
- Java EE modules can be represented in two groups: standalone
- modules and embed modules. The classloading hierarchies are different
- from one case to another.
-
-
-
- By default, a classloader follows the Java 2 delegation model:
- asking it's parent first. So any embed WebApp can see the content of the
- embeds EjbJars, embeds libraries, embed Resource Adapters of its
- containing Ear. And transitively, it can also access resources provided
- by standalone Resource adapters. But it will not be able to see
- resources coming from sibling WebApps and ApplicationClient, neither
- from standalone EjbJars and WebApps.
-
-
- Standalone modules
-
- Standalone modules means modules primarily deployed on JOnAS
- (artefact in deploy/ for
- example).
-
-
-
- Ears (Java EE Applications) are de facto standalone modules
- because they cannot be embed in another Java EE module.
-
-
-
- EjbJars and Web Applications are standalone module if
- deployed outside of an Ear.
-
-
-
- Rars (Resource Adapters) are standalone module if deployed
- outside of an Ear.
-
-
-
- Standalone Rars are specials because they don't have an isolated
- ClassLoader for each, this unique loader is also the parent of all
- other standalone modules.
-
- It is necessary for them to share the same loader because Rars
- contains jars/resources that have to be available to all Java EE
- deployed modules (thus be accessible in an ancestor of the Java EE
- loaders).
-
-
- As Standalone Resource Adapters (not in .ear) are sharing the
- same ClassLoader, if 2 resources overlaps, the one coming from the
- earliest deployed Rar is preferred.
-
-
- Standalone Ears, EjbJars and WebApps are direct childs of this
- common ancestor: they can load resources/classes from the standalone
- Rars.
-
-
-
- Embed modules
-
- Embed modules are all Java EE modules types that are available
- in Ears:
-
-
-
- EjbJars
-
-
-
- WebApps
-
-
-
- Resource Adapters
-
-
-
-
-
-
- Java 2 Delegation Model
-
- The Java2 delegation model is a delegation strategy where the
- parent loader is asked first, then local sources are probed if resource
- was not found by parent. This ensure a maximum class space consistence,
- ensuring a preference for shared sources over local sources.
-
- This model is the default delegation model applied on all JVM
- provided ClassLoaders (System, URLClassLoader,
- ...).
-
- The Servlet specification states that web applications must run
- within an inverted delegation model. In other words :
- local resources (WEB-INF/classes/
- + WEB-INF/lib/) are preferred
- over server's resources. Standalone Jetty/Tomcat runs apps with this
- model by default.
-
- On the contrary, the Java EE specification states that the default
- model must be the normal delegation model.
-
-
-
- Web Applications
-
- A WebApp loader can access resource from 3 main locations:
-
-
-
- The System ClassLoader
-
-
-
- WEB-INF/classes/ and
- WEB-INF/lib/*.jar.
-
-
- All resources relative to WEB-INF/classes/ will be
- available
-
- Only jar files (*.jar) directly under WEB-INF/lib/ are loaded,
- subdirectories (if any) are not traversed.
-
- For example, a .properties file in WEB-INF/lib/ will not be visible
- from the ClassLoader.
-
-
-
-
- Its parent Classloader: if WebApp is standalone, its parent is
- the standalone Rars loader, otherwise it is the EjbJars +
- Libraries.
-
-
-
-
- Delegation Strategy
-
- A WebApp ClassLoader uses the following strategy to load
- resources/class:
-
-
-
- Ask to System ClassLoader.
-
-
- Prior to JOnAS 5.1, this step is always executed.
-
- For JOnAs 5.1, this access is disabled if the execution
- JVM is superior to Java 6, enabled otherwise (Java 5).
-
- Post JOnAS 5.2, this access is always disabled
- (disregarding the Java version)
-
-
-
-
- If the delegation model property is true (default):
-
-
-
- Ask to the parent.
-
-
-
- Ask to local sources.
-
-
-
-
-
- Else (java2 delegation model = false):
-
-
-
- Ask to local sources.
-
-
-
- Ask to parent.
-
-
-
-
-
-
-
-
- Ears, EjbJars and Rars
-
- The ClassLoaders for non Web Applications are behaving like
- traditional ClassLoaders: they use the standard Java2 delegation
- strategy (parent first).
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/configuration.xml b/jonas_doc/core/src/docbook/doc-en/loaders/configuration.xml
deleted file mode 100644
index 9ae80c68176fd6ceba8c99053560febb2c2bf4d7..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/loaders/configuration.xml
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
- Configuration
-
-
- Isolating Java EE modules with filters
-
-
- ClassLoader Filtering
-
- ClassLoaders of Java EE modules can be filtered with JOnAS.
- Filtering acts as a runtime package mask hiding a specified set of
- patterns.
-
- When a resource/class is trying to be loaded by a
- ClassLoader, this one first checks if the fully
- qualified resource name (ie: includes the package name) matches a
- provided pattern. If so, it cut the execution flow and throw a
- ClassnotFoundException or return
- null when a class (respectively a resource) matches
- one of the patterns.
-
- ClassLoader Filtering is a fine grained approach to filtering,
- based on pattern matching (ex: org.springframework.*
- excludes all resources from the org.springframework
- packages). It is implemented as an intermediate (pass through)
- ClassLoader seating between 2 other ClassLoaders
- (ex: Web -> (filtering) -> EjbJars).
-
- Two levels of filters are available: system-wide (shared by all
- Java EE modules in the system) and per-module (only impacts a given
- module).
-
-
- Before version 5.1.6, JOnAS only offered system wide filtering
- configuration
-
-
- It is globally deactivatable using the System property
- jonas-disable-filtering-class-loader=true
-
-
- Acts as a barrier between Java EE modules and the application
- server: isolate modules from resources also available in JOnAS.
-
-
-
-
-
- XML Configuration
-
- System wide configuration is applied to the parent loader of
- applications (the loader of standalone Rars). It is configurable in
- the
- ${jonas.base}/conf/classloader-default-filtering.xml
- file.
-
-
- Default system-wide filtering configuration
-
- <?xml version="1.0" encoding="UTF-8"?>
-<class-loader-filtering xmlns="http://org.ow2.jonas.lib.loader.mapping">
-
- <!--
- List of filters used to exclude packages/resources that are used
- internally by the Application Server but that will not be available
- to applications.
- An empty list will not hide any packages to the applications
- This list is used both to hide resources and classes to applications.
- -->
- <default-filters>
- <!--
- Filters are using regexp as specified at
- http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#matches(java.lang.String)
- -->
- <filter-name>org.apache.commons.digester.*</filter-name>
- <filter-name>org.springframework.*</filter-name>
- </default-filters>
-</class-loader-filtering>
-
-
- The per-module configuration is available for:
-
-
-
- Webapp (either standalone or embed) with
- WEB-INF/classloader-filtering.xml
-
-
-
- Ear with
- META-INF/classloader-filtering.xml
-
-
-
- The configuration style is not applicable for RARs or EjbJars
- Standalone since they directly uses the system filters. When embed in
- Ear, they uses filters defined in the application.
-
-
- Per-module configuration sample
-
- <?xml version="1.0" encoding="UTF-8"?>
-<class-loader-filtering xmlns="http://org.ow2.jonas.lib.loader.mapping">
- <filters>
- <filter-name>org.apache.xml.*</filter-name>
- </filters>
-</class-loader-filtering>
-
-
-
-
-
- Filtering Usage
-
- ClassLoader filtering should be used when JOnAS provides libraries
- are conflicting with application's embed libraries. That will make sure
- that application libraries are used instead of application server's
- ones.
-
-
- Make sure that all needed packages are filtered: some libraries
- aggregates multiple packages.
-
- Ex : Apache Xalan includes org.apache.xalan +
- org.apache.xml +
- org.apache.xpath in
- Xalan.jar
-
-
-
-
-
- Inverting Java2 delegation model for webapp
-
- As stated in the section related to Java2 delegation model, Java EE
- and Servlet specifications dictates different default delegation strategy.
- In order to limit behavioral changes when migrating from a standalone web
- container to JOnAS, a switch is available through the
- WEB-INF/jonas-web.xml:
-
-
-
- It only applies to web application (included or not in
- Ear)
-
-
-
- Search ordering is inverted if delegation is disabled
-
-
-
-
- Invertion of Java2 Delegation Strategy (jonas-web.xml)
-
- <?xml version="1.0" encoding="ISO-8859-1"?>
-<jonas-web-app xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://jonas.ow2.org/ns/jonas-web-app_4_0.xsd">
- <!-- true : the context uses a classloader using the Java 2 delegation model (default)
- false : the class loader looks inside the web application first, before asking parent class loader -->
- <java2-delegation-model>false</java2-delegation-model>
-</jonas-web-app>
-
-
-
-
- Avoid using java2-delegation-model: use
- filtering instead.
-
- Filtering permits to touch only the required bits while
- invertion apply for the whole web application.
-
- What happen when a lib needs inversion and another do not
- ?
-
- Invertion is more lenient than filtering,
- preference over exclusion : can still use server's classes where
- filtering defines a real barrier.
-
-
-
-
- Publishing system packages
-
- JOnAS comes with a predefined list of system packages adapted to the
- runtime JVM version. By default, the System Bundle will exports all of the
- listed packages.
-
- For some uses cases (endorsed addition, ...), it may be useful to
- add some packages to this list. This is indeed configurable in
- JOnAS.
-
- JOnAS 5.1 configuration is provided as a full felix configuration
- file. This file is located in the
- lib/bootstrap/felix-launcher.jar file (See org/ow2/jonas/launcher/felix/default-config.properties).
-
- Configuration customizers have to get a full copy of that file and
- perform manual changes in it.
-
- When satisfied, JOnAS must be started with a system property named
- felix.configuration.file pointing to the modified
- file's path.
-
- For JOnAS 5.2 (and superior), most of the Felix/OSGi configuration
- is accessible in conf/osgi/ folder.
- It is commented, readable and comprehensive. Most useful properties are
- easily accessible.
-
-
- System Packages
-
- The list of System Bundle exported package is expressed using 2
- properties : org.osgi.framework.system.packages and
- org.osgi.framework.system.packages.extra.
-
- The format of theses properties is a comma separated list of
- package names (ex :
- org.osgi.framework;version=1.5.0), just like a
- standard Export-PackageOSGi
- header.
-
-
- Wildcards are not accepted in this list, all packages (even
- sub-packages) have to be declared individually.
-
-
- Theses packages will then be importable from
- other Bundles installed on the OSGi
- gateway.
-
- Tweaking the list of system packages may be used to hide or change
- some attributes of packages, that let a possibility for other bundles to
- provide a different version of the exported packages, and leave the
- choice to the bundle consummer.
-
- That configuration freedom has to be used with care:
- org.osgi.framework.system.packages property has to
- be used only when it's needed to remove/modify a package in the system
- default exported list.
-
-
- javax.transaction +
- javax.transaction.xa are not exported by the
- System Bundle in JOnAS because the JVM misses some of the classes in
- theses packages
-
-
- The System extra packages list has to be used when
- bundles/applications need an additional package from a library placed in
- endorsed directories (or in any of the place seached for System
- ClassLoader: extensions + CLASSPATH).
-
-
- Resolve package constraint resolution error with the addition
- of a new exported packages declaration to the system.
-
-
-
-
- Boot Delegation
-
- Boot delegation packages is one of the OSGi joker for known
- non-modular JVM packages. They have priority over all other way of
- classloading.
-
- It is configurable through the
- org.osgi.framework.bootdelegation property. The
- value is a comma separated list of packages patterns: wildcard
- ('*') is only accepted at the end of the
- pattern.
-
-
- com.sun.image* : accept classes from
- com.sun.image and sub-packages
-
-
-
- Theses packages do NOT appear in system's exported packages (may
- lead to unexpected resolution error)
-
-
- Touching this property should be avoided as much as possible,
- because it breaks modularity. As per the osgi delegation strategy,
- bootdelegation have the top most priority in loading, so no overridde is
- possible: a Bundle cannot use a different version (even if it import it
- and the import was resolved) !
-
- In clear, it should be used as last resort:
- when adding packages to System Bundle did not worked or when a class in
- a bundle performs some dynamic class loading and makes the assumption
- that its own ClassLoader can load the wanted Class. There are multiple
- condition for this to happen:
-
-
-
- The wanted class is unknown at build time (otherwise a proper
- import would have been generated)
-
-
-
- The wanted class is in the system ClassLoader (otherwise
- servicing this class from the System ClassLoader does not make
- sense)
-
-
-
- The bundle do not import the resource's package
-
-
-
- You cannot change this Bundle :-(
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/glossary.xml b/jonas_doc/core/src/docbook/doc-en/loaders/glossary.xml
deleted file mode 100644
index 7307ebe5c2687635958d7af3c9cbdf579f1b7e96..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/loaders/glossary.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
- Glossary
-
-
- ClassLoader
-
-
-
-
-
-
-
- Loader
-
-
-
-
-
-
-
- OSGiTM
-
-
-
-
-
-
-
- Bundle
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/tips.xml b/jonas_doc/core/src/docbook/doc-en/loaders/tips.xml
deleted file mode 100644
index 9af442bd1677453372cbef2155b5e0807d27acdf..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/loaders/tips.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-
-
- Tips
-
-
- Abstract Factory Pattern
-
-
- Error pattern
-
- In an eye blink, suspect all static
- Factory.newInstance() methods.
-
- The AbstractFactory pattern is a well known and quite used
- pattern. There is an abstract Factory class with an implemented static
- method (newInstance()). This method is in
- charge of finding a suitable implementation that will be returned to the
- consumer. JAXP API are using this pattern.
-
- Usually this method performs the following operations:
-
-
-
- Try to find the name of a class (the concrete Factory) to
- load.
-
- Usually, the search is done in some dedicated property files,
- system properties, default hardcoded value, ...
-
-
-
- Try to load the discovered class using a guessed
- loader.
-
- Used loaders depends on the code but usually involves (ordre
- is not significant here):
-
-
-
- Thread Context ClassLoader
-
-
-
- ClassLoader of the Factory
-
-
-
- System ClassLoader
-
-
-
- A given ClassLoader (could be passed as parameter with
- some luck)
-
-
-
-
-
- Creates an instance of the loaded Class (if one could be
- loaded)
-
-
-
-
- This kind of code make the assumption that they can load any
- class.
-
- This is not true (even completely wrong) in a modular
- world
-
-
-
-
- Solutions
-
- The environment has to be adapted to what is expected by the
- code:
-
-
-
- Give an appropriate ClassLoader (if possible)
-
-
-
- Set a Thread Context ClassLoader to a ClassLoader that will be
- able to load the Class.
- Do not forget to reset to old ClassLoader after the call
- (try/finally) !
-
-
- ClassLoader expected = ...
-ClassLoader old = Thread.currentThread().getContextClassLoader();
-Thread.currentThread.setContextClassLoader(expected);
-try {
- // Do whatever you want in this block
- Factory factory = Factory.newInstance();
-} finally {
- // Reset the TCCL
- Thread.currentThread.setContextClassLoader(old);
-}
-
-
-
-
-
-
- ClassCastException
-
-
- Error pattern
-
- Conflicting libraries are found in JOnAS and in an
- application.
-
- Delegation mechanism, and the logic used to find an
- implementation, produces an instance from a Class incompatible
- with expected type.
-
- For example, the loaded type comes from the System ClassLoader but
- the expected type comes from the webapp ClassLoader.
-
-
-
- Solutions
-
- Use the stacktrace to extract faulty classnames: that's the main
- suspects.
-
- Use the console to find from where theses classes/packages are
- loaded.
-
- Display Right/Left ClassLoader of the assignation to discover the
- ClassLoader sources. -
-
-
-
- Interesting values: Expected type/loader, Returned
- type/loader, TCCL
-
-
-
- Similar to the info the console provides
-
-
-
- Filter the package(s) to force resolution in your application
- codebase.
-
- Usually go back to first bullet until no more Exceptions .
-
-
-
-
- Code rules !
-
- To understand what happen, knowing the ClassLoader hierarchies helps
- a lot but is not always sufficent.
-
- Reading the source code gives the final clues explaining the
- observed behavior.
-
-
- People do a lot of things in Java with class loading (some even
- weird)
-
-
-
-
- Boot Delegation
-
- Format of boot delegation pattern is somehow sensible. Here are
- examples and explanations.
-
-
-
- No wildcard (ex: com.sun.xml): Only matches
- classes directly in the given package
-
-
-
- Dot and wildcard (ex: com.sun.xml.*): Only
- matches classes in sub packages (direct content does not match)
-
-
-
- Only wildcard (ex: com.sun.xml*): Matches
- both direct package and sub packages. But also matches for packages
- sharing the same chars at the beginning of their names.
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/tooling.xml b/jonas_doc/core/src/docbook/doc-en/loaders/tooling.xml
deleted file mode 100644
index c8456e8fbe38559900987685b7d6a12d244bb3f9..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/loaders/tooling.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- Tooling
-
-
- Web Console: Classloader monitoring
-
- The "Classloader monitoring" module in the jonasAdmin web console
- aims to help diagnosis of classloading issues.
-
- It provides a graphical view of Java EE classloading hierarchies and
- gives a direct way to interact with ClassLoaders and see their
- behaviors.
-
-
- OSGi Diagnosis
-
- The web console offers a search feature that helps to know from
- which Bundle a class/package/resource comes from.It displays the wired
- consumer Bundle(s).
-
- It helps to see if a Bundle is wired to the right package
- provider.
-
-
-
-
-
- Java EE Hierarchies
-
- The web console also offers a Java EE ClassLoading hierarchy view.
- It is dedicated to a selected Java EE module and show the ancestry of
- Classloader.
-
- Filtering patterns associated to ClassLoaders are also
- displayed.
-
- This view permits to test resource loading from the selected
- ClassLoader. That helps to see if the class comes from the expected
- source.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/log/config.xml b/jonas_doc/core/src/docbook/doc-en/log/config.xml
deleted file mode 100644
index 09bac5bfbf71d5dad09fb3b1d92fa5b68d9af638..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/log/config.xml
+++ /dev/null
@@ -1,511 +0,0 @@
-
-
-
- Configuring the logging System
-
-
- Monolog is
- the Objectweb solution for logging. It is not only a new logging
- implementation but can be seen as a bridge between different logging
- implementations. A library that uses the Monolog API can be used with any
- logging implementation at runtime.
-
- Furthermore some components of JOnAS like CAROL, JOTM, Tomcat etc...
- doesn't use the Monolog API but Jakarta commons loggins or log4j or other
- implementation. However all these components will be configured via the
- JOnAS Monolog configuration file.
-
-
-
- Monolog
-
-
- JOnAS Monolog configuration files are:
-
-
-
- $JONAS_BASE/conf/trace.properties
- the name can be changed via
- jonas.log.configfile property in
- jonas.properties
-
-
- which is the server side Monolog configuration file
-
-
-
- $JONAS_BASE/conf/traceclient.properties
-
- which is used for a client in a client container.
-
-
-
- Configuring trace messages inside can be done in
- two ways:
-
-
-
- Changing the trace.properties file to
- configure the traces statically, before the Server is
- run
-
-
-
- Using the jonas admin command or the JonasAdmin administration
- tool to configure the traces dynamically while the Server is
- running. In this case the modification are not persistent
- (trace.properties file is not modified).
-
-
-
-
-
-
- trace.properties syntax
-
-
- Applications make logging calls on logger
- objects.Loggers are organized in a hierarchical namespace and
- child loggers may inherit some logging properties
- from their parents in the namespace. Loggers
- allocates messages and passes them to handler for
- output; they uses logging levels in order to decide
- if they are interested in by a particular message.
-
- In trace.properties it is possible to define
- handlers, loggers,
- levels:
-
-
-
- handlers
-
- A handler represents an output, is identified by its name, has a
- type, and has some additional properties. By default three handlers
- are used:
-
-
-
- tty is basic standard
- output on a console
-
-
-
- logf is a handler for
- printing messages on a file
-
-
-
- mesonly handler used by
- generation tools for traces without header
-
-
-
- Each handler can define the header it will use, the type of
- logging (console, file, rolling file), and the file name.
-
- The handler properties are the following:
-
-
-
- type: is the type of the handler that may be:
-
-
-
- Console : Log stream ends inside
- System.out or
- System.err
-
-
-
- File : Log stream is directed into a file
-
-
-
- Rollingfile : A file set is used to roll the logs
-
-
-
- JMX : Logging actions are send to the JMX notification
- system
-
-
-
-
-
- pattern:is the message format. A pattern can be composed of
- elements. An element is prefixed by the % character.The possible
- items:
-
-
-
- %h: the thread
- name
-
-
-
- %O{1} : the Class name
- (basename only)
-
-
-
- %M the method
- name
-
-
-
- %L the line
- number
-
-
-
- %d the date
-
-
-
- %l the level
-
-
-
- %m the message
- itself
-
-
-
- %n a new line
-
-
-
-
-
- output: is the output filename.
-
- If automatic
- By default automatic is set for the handler logf
- is used, JOnAS will replace this tag with a file
- pointing to
- $JONAS_BASE/logs/<jonas_name_server>-<timestamp>.log
-
- Switch is used for logging either on
- System.out or System.err
- depending on the level of the log
-
-
-
- fileNumber: is the number of file to use (for
- RollingFile)
-
-
-
- maxSize:is the maximal size of the file (for Rolling
- file)
-
-
-
- Note that another handler, named jmxHandler,
- can be used to allow to view the recent logs in the
- administration console.
- By default the definition of this handler is commented, for performance reason.
-
-
-
-
-
- loggers
-
- Loggers are identified by names that are structured as a tree.
- The root of the tree is named root. Each logger
- is associated with a topic. Topic names are usually based on the
- package name. Each logger can define the handler it will use and the
- trace level (see below). By default loggers inherit their level from
- their parents.
-
- By default handlers assigned to the parent logger are
- automatically assign to child loggers. Setting 'additivity' to false
- inform the system that the logger will use only its own set of
- handlers.
- this property is optional and its default value is
- 'yes'
-
-
-
-
- levels
-
- the trace levels are the following:
-
-
-
- ERROR errors. Should always be printed.
-
-
-
- WARN warning. Should be printed.
-
-
-
- INFO informative messages.
-
-
-
- DEBUG debug messages. Should be printed only for
- debugging.
-
-
-
-
-
-
-
-
- default trace.properties file
-
-
- log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory
-
-handler.tty.type Console
-handler.tty.output Switch
-handler.tty.pattern %d : %O{1}.%M : %m%n
-
-handler.logf.type File
-handler.logf.output automatic
-handler.logf.pattern %d : %l : %h : %O{1}.%M : %m%n
-
-logger.root.handler.0 tty
-logger.root.handler.1 logf
-
-logger.root.level INFO
-logger.org.objectweb.level INFO
-logger.org.ow2.level INFO
-
-#logger.org.ow2.jonas.lib.ejb21.level DEBUG
-
-handler.mesonly.type Console
-handler.mesonly.output Switch
-handler.mesonly.pattern %m%n
-
-logger.org.ow2.jonas.generators.genic.handler.0 mesonly
-logger.org.ow2.jonas.generators.genic.additivity false
-
-[...]
-
- Definition of the wrapper to use: here the java logging API
- wrapper.
-
-
-
- Definition of the console handler tty
-
-
-
- Switch means that the logs will be on System.out or System.err
- depending of the level of the log.
-
-
-
- Definition of the message format. here it contains the date
- followed by ':' the basename of the class followed by '.' the method
- name followed by ':' the message itself terminated by
- newline.
-
-
-
- Definition of the file handler logf
-
-
-
- Logs are in a file whose name is
- $JONAS_BASE/logs/<jonas_name_server>-<timestamp>.log
-
-
-
- Definition of the root logger. It uses handler tty
-
-
-
- Definition of the root logger: It uses also handler
- logf
-
-
-
- Definition of the root logger: level INFO is used for all
- child loggers if there is no overriden definition
-
-
-
- This line must be uncommented for setting DEBUG level for the
- logger used in the jonas ejb21 module
-
-
-
- Definition of the console handler mesonly used by generator tool, such as GenIC,
- which want to log messages without headers
-
-
-
- Definition of the handler used by the logger
- org.ow2.jonas.generators
-
-
-
- This logger wants to use its own handler.
-
-
-
-
-
-
- Tips for setting loggers for JOnAS
-
-
- When a problem occurs it may be worth to set some debugging traces
- in the server.
- It is not easy to know which logger to set to obtain the pertinent traces
- that may help the debbugging process.
-
- The trace.properties file contains several
- commented lines prepared to set loggers in DEBUG level.
-
- Usually the name of loggers are related to the java package name in
- which it is used.
-
-
-
- To set debug traces of the EJB2 container uncomment one or more
- lines related to logger org.ow2.jonas.lib.ejb2 for example:
-
- logger.org.ow2.jonas.lib.ejb21.interp.level DEBUG
-logger.org.ow2.jonas.lib.ejb21.synchro.level DEBUG
-logger.org.ow2.jonas.lib.ejb21.tx.level DEBUG
-
-
-
- To set traces related to resource adapters:
-
- logger.org.ow2.jonas.jca.level DEBUG
-logger.org.ow2.jonas.jca.pool.level DEBUG
-
-
-
- To set traces into the CAROL library::
-
- logger.org.ow2.carol.level DEBUG
-
-
-
- To set traces in JORAM:
-
- logger.fr.dyade.aaa.level DEBUG (for the MOM)
-
-# for the JORAM resource adapter:
-logger.org.objectweb.joram.client.jms.Client.level DEBUG
-logger.org.objectweb.joram.client.connector.Adapter.level DEBUG
-
-
-
- To set traces in Tomcat:
-
-
-
- for all web application :
-
- logger.org.apache.catalina.core.ContainerBase.[jonas].[localhost].level DEBUG
-
- jonas is the attribute name of the
- element Engine in $JONAS_BASE/conf/tomcat6-server.xml
-
- localhost is the attribute name of the element Host in
- $JONAS_BASE/conf/tomcat6-server.xml
-
-
-
- for a particular web application :
-
- logger.org.apache.catalina.core.containerBase.[jonas].[localhost].[jonasAdmin].level DEBUG
-
- jonas is the attribute name of the
- element Engine in $JONAS_BASE/conf/tomcat6-server.xml
-
- localhost is the attribute name of the
- element host in $JONAS_BASE/conf/tomcat6-server.xml
-
- jonasAdmin is the name of the web
- application
-
-
-
-
- the attributes debug in elements of
- $JONAS_BASE/conf/tomcat6-server.xml are not used anymore in Tomcat.
-
-
-
-
- There are a lot of traces possible for
- management, discovery, jtm, clustering, mail, ear,...
-
-
-
-
-
-
- Logging with particular log systems
-
-
-
-
- java logging API
-
-
- If Monolog is configured to use the JDK logger it will replace the
- JDK logger implementation with its own implementation and so all JDK
- logs are intercepted by Monolog. By default Monolog is configured to use
- the JDK logger.
-
-
-
-
- Jakarta commons logging
-
-
- There is no special configuration file for Jakarta commons
- login.If it is used on top of the java logging API it is the same case
- than the previous section.
-
-
-
-
-
-
- log4j
-
-
- don't provide the corresponding
- jar file so, log4j must be
- packaged (.jar file and
- log4j.properties) in any application that want to
- use it. The log4j.properties file must be
- configured correctly.
-
- If log4j is used by several applications it is possible to
- centralize the log4j configuration by putting log4j.properties in
- $JONAS_BASE/conf and log4j jar
- file in $JONAS_BASE/lib/commons.
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/mastering-jonas-classloaders.xml b/jonas_doc/core/src/docbook/doc-en/mastering-jonas-classloaders.xml
deleted file mode 100644
index aa9b8cf82a44d4c7fa741e2e8608c2f9161085c0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/mastering-jonas-classloaders.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
- Mastering JOnAS ClassLoaders
-
-
-
- JOnAS Team
-
-
-
- GuillaumeSauthier
-
-
- OW2 Consortium
-
-
-
-
-
- 2011
-
- OW2 Consortium
-
-
-
- Creative Commons
-
-
- 2011/06/20
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_7.xml b/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_7.xml
deleted file mode 100644
index efae235a790039133b3eb05b167941588ece0eac..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_7.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-
-Migrating from JOnAS 4.6 to JOnAS 4.7
-
- Applications developed for JOnAS 4.6.x do not require changes; The
- main changes occur within the JOnAS configuration files. Therefore, it
- is recommended that customizations be reported in the new JOnAS 4.7.x
- configuration files, especially for those mentioned below.
-
- Configuration changes
-
-
- The most visible configuration changes are the following:
-
-
-
- A new JORAM configuration file for defining the JMS objects.
- This file, named joramAdmin.xml, replaces
- joram-admin.cfg. The new format allows
- clustered JMS destinations, DMQ, and other information to be
- defined. See in Configuring JMS Resource Adapters
- for a full description.
-
-
-
- A new configuration file for the domain management. This
- file, named domain.xml, enables definition of
- the domain without need of the discovery service. Additionally,
- the JOnAS instances are visible from jonasAdmin console even when
- they are stopped. See here
- for a full description.
-
-
-
- A new CMI configuration file for specifying the JGroups's
- configuration stack. This file, named
- jgroups-cmi.xml, can be customized to fit
- with the network environnement being used. See here for a full description.
-
-
-
-
-
-
- Updating $JONAS_BASE
-
-
- If starting from an existing JONAS_BASE, it must be updated in
- order to upgrade to the latest ear/war/jar/rar files provided (e.g.
- new versions of the JORAM or JDBC rars).
-
- cd $JONAS_ROOT
-ant update_jonasbase
-
-
- JORAM 4.3.0
-
-
- JOnAS 4.4.1 integrates the new JORAM 4.3.0 which
- contains:
-
-
-
- performance optimizations
-
-
-
- new feature: SSL for client-server communications
-
-
-
- new feature of SoftReference Messages allowing swap out:
- ability to send large messages, destinations can store more and
- more messages, the messages are not held in memory.
-
-
-
- The last implementation required changes to the message
- persistance module. Therefore, JORAM's stored messages from previous
- versions are not compliant with this new version; the JORAM
- persistance directory (s0 by default) must be deleted before the
- migration.
-
-
- Domain management restrictions
-
-
- Due to evolutions in the discovery protocol, mixing 4.6 and 4.7
- JOnAS servers within a management domain is not allowed. To take
- advantage of the new domain and cluster management features, all the
- servers that were started in a same domain with the discovery service
- activated and using the same multicast address for discovery, must be
- JOnAS 4.7 version servers.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_8.xml b/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_8.xml
deleted file mode 100644
index ce4ed11b283527795dcdf5d82d13538a5ee3c2c0..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_8.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- Migrating from JOnAS 4.7.x EE to JOnAS 4.8 EE
-
- Applications developed for JOnAS 4.7.x do not require changes.
-
- Configuration changes
-
- No configuration changes
-
- New JORAM version(JORAM_4_3_25)
-
-
- This implementation required changes to the message persistance
- module. Therefore, JORAM's stored messages from previous versions are
- not compliant with this new version; the JORAM persistance directory
- (s0 by default) must be deleted before the migration.
-
- remember that this directory is created in the JOnAS's working
- directory at run time
-
-
- Updating $JONAS_BASE
-
-
- if starting from an existing JONAS_BASE, it must be updated in
- order to upgrade to the latest ear/war/jar/rar files provided (e.g.
- new versions of the JORAM or JDBC rars).
-
- cd $JONAS_ROOT
-ant update_jonasbase
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_9.xml b/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_9.xml
deleted file mode 100644
index e18b1351dc5bf9945f88d279847e7de02ab11c42..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_9.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- Migrating from JOnAS 4.8 EE to JOnAS 4.9
-
- Applications developed for JOnAS 4.8 EE do not require changes.
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_5_0.xml b/jonas_doc/core/src/docbook/doc-en/migration/jonas_5_0.xml
deleted file mode 100644
index b60c3fe138a2b7211b0040e72e72cedba9f501b6..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/migration/jonas_5_0.xml
+++ /dev/null
@@ -1,653 +0,0 @@
-
-
-
- Migrating from JOnAS 4.x to JOnAS 5
-
-
-
- has been completely rewritten in order to leverage the
- technology.
-
- People who were familiar with the JOnAS world will not be amazed.
- However, they should be aware of some important changes that must be taken
- into account.
-
-
-
- Before migration
-
-
- Before begining the migration process, you must be aware of the
- versions of the API supported by .
-
- JOnAS 4 is v1.4 compliant whereas. is 5 compliant. This
- means that the supported versions of most APIs have changed.
-
- Here is a small table describing the differences:
-
-
-
-
-
- Prerequisites
-
-
- A JDK 5 is required to build JOnAS 5 but JDK 6
- for those using SUN JDK6 the parameter
- -Dsun.lang.ClassLoader.allowArraySyntax=true may be required
- may be used for running JOnAS 5.
-
-
-
-
-
- Upgrading An Application Environment from 4.x to 5.x
-
-
-
-
- Application environment definition
-
-
- Usually, an application environment is composed of one JONAS_ROOT
- (JOnAS distribution) and one or more JONAS_BASE depending on the number
- of JOnAS instances needed for the application.
-
- In JOnAS 4.x JONAS_BASE contains :
-
-
-
-
- applications to be deployed in the new environment:
-
- An application consists of several deployable archives: ear,
- ejbjar, war + some associated connectors packaged in rar
- archives.
-
-
-
- Configuration files:
-
- All configuration files are located under $JONAS_BASE/conf
-
-
-
- External libraries:
-
- Some libraries may be installed under:
-
-
-
- $JONAS_BASE/lib/apps
-
- (applicative
- libraries)
-
-
-
- $JONAS_BASE/lib/ext
-
-
-
- $JONAS_BASE/lib/commons
-
-
-
- $JONAS_BASE/lib/tools
-
- (libraries whoses classes are made available to all JOnAS
- services)
-
-
-
-
-
- For a successful upgrade you must be aware of the JOnAS changes in
- :
-
-
-
- the class loader hierarchy see Understanding
- class loader hierarchy for a complete description of the
- classloader mechanism.
-
-
-
- deployment process, due to a new deployment
- architecture
-
-
-
- configuration files
-
-
-
- third party libraries processing
-
-
-
- To upgrade an application environment you must first create a new
- application environment and then customize it according to the old
- environment.
-
-
-
- Creating a new Application environment
-
-
- To create a new application environnement you must create a new
- JOnAS_BASE.
-
-
-
- When running newjb based on information located in your home
- directory ($HOME/jb.config/conf/jonas-newjb.properties), you will
- probably have to review this file and upgrade it to conform to
- $JONAS_ROOT/build-jb.properties syntax. For example, jonas services
- names have changed between JOnAS version 4 and version 5.
-
-
-
-
-
- New deployment architecture
-
-
- With JOnAS 5.x, the following deployment directories have been
- removed :
-
-
-
-
- apps
-
-
-
-
-
- apps/autoload
-
-
-
-
-
- clients
-
-
-
-
-
- ejbjars
-
-
-
-
-
- ejbjars/autoload
-
-
-
-
-
- rars
-
-
-
-
-
- rars/autoload
-
-
-
-
-
- webapps
-
-
-
-
-
- webapps/autoload
-
-
-
-
- The above directories no longer exist in JONAS_BASE and have been
- replaced by a single directory:
-
-
-
-
- deploy
-
-
-
-
- To deploy a
- archive in JOnAS 5.x, the only thing required is to put it in the
- $JONAS_BASE/deploy directory. This directory is
- periodically scanned in order to deploy new archives.
- The periodic scan can be disabled by setting the
- jonas.development property to false in
- JONAS_BASE/conf/jonas.properties
-
-
- The deployment policy has changed in JOnAS
- 5 since at server starting time the deployment order of the archives
- found in $JONAS_BASE/deploy is the following:
-
-
-
- Deployment plan repositories
-
-
-
- OSGi bundles
-
-
-
- RAR archives
-
-
-
- Deployment plan resources
-
-
-
- EJB archives
-
-
-
- WAR archives
-
-
-
- EAR archives
-
-
-
- For each category, file names are chosen in alphabetical
- order
-
-
-
-
-
- Here a basic how to that explains how to
- create a very simple deployment plan.
-
-
-
- For more information see the depmonitor service configuration in
- the JOnAS
- Configuration Guide.
-
-
-
-
- Script files
-
-
- The path of the script command files has been changed, and is
- $JONAS_ROOT/bin instead of
- $JONAS_ROOT/bin/unix and
- $JONAS_ROOT/bin/nt.
-
-
-
-
- Configuration files
-
-
- JOnAS configuration files have changed. Here we will focus on the
- changes that may impact the upgrade process.
-
-
-
- carol.properties file
-
-
- jeremie protocol is no longer supported.
-
- New properties have been added to configure cmi clusters. Note
- that cmi is not anymore a protocol
- but a JOnAS service used for clustering.
-
- For applications that uses a carol.properties file on the client
- side the best practice is to start from
- $JONAS_ROOT/template/conf/conf/carol.properties and to customize it
- (see the JOnAS
- Configuration Guide). .
-
-
-
-
- clusterd.properties file
-
-
- With JOnAS 5 the cluster deamon can start the discovery
- service.
-
-
-
-
- context.xml, server.xml, web.xml
-
-
- JOnAS 5 now embeds Tomcat 6 instead of Tomcat 5.
-
- context.xml, server.xml and web.xml
- configuration files are replaced by
- tomcat6-context.xml,
- tomcat6-server.xml and
- tomcat6-web.xml.
-
- See Apache
- Tomcat 6.0 Documentation for more information.
-
-
-
-
- jaas.config
-
-
- No new properties in this file. The only difference is the name
- of the package for the LoginModule classes.
-
- For applications that uses a jaas.config on the client side the
- best practice is to start from
- $JONAS_ROOT/template/conf/conf/jaas.config and to customize it.
-
-
-
-
- jetty5-webdefault.xml & jetty5.xml
-
-
- These configuration files are now named jetty6-web.xml
- and jetty6.xml.
-
- For more information see Jetty
- Documentation
-
-
-
-
- jgroups-cmi.xml & jgroups-ha.xml
-
-
- JOnAS 5 now uses a newer version of JGroups. The JGroups
- Protocol Stack configuration files format is different. Therefore
- customizations made in the old jgroups-cmi.xml
- and jgroups-ha.xml files must be updated to the
- new formats.
-
-
-
-
- jonas.properties
-
-
- The jonas.properties file has changed
- significantly . Some changes do not impact the upgrade process at all
- (package name changes), while others must be studied carefully.
-
- In the following, we focus on the parts of the
- jonas.properties file that may be impacted during
- the upgrade process.
-
-
-
- jonas.services property
-
-
- thread and jms services have been suppressed (see below).
-
- ejb service has been renamed
- to ejb2 service.
-
- ws service has been renamed
- to jaxrpc service.
-
- wm, wc, ha,
- ejb3, versioning, depmonitor, cmi,resourcemonitor,jaxws and smartclient are new services in JOnAS
- 5
-
- With JOnAS 5, the default jonas.services properties are set
- to:
-
- jonas.services jtm,db,dbm,security,resource,ejb3,jaxws,web,ear,depmonitor
-
- (in order to learn more about these services see the JOnAS
- configuration_guide)
-
-
-
-
- ejb2 service configuration
-
-
- ejb2 service replaces the
- previous ejb service.
-
- Configuration of worker threads has been moved from the
- ejb service configuration to the
- Work Manager (wm) service
- configuration.
-
- See the Work Manager configuration part in
-
-
-
-
- jms service configuration
-
-
- The JORAM resource adapter must be used in replacement of the
- jms service.
-
- In order to use JMS via the JORAM resource adapter
-
-
-
- The resource service must
- be set in the jonas.services property
-
-
-
- joram.xml must be deployed (it must
- be located under $JONAS_BASE/deploy)
-
-
-
- JORAM port must be configured in the
- $JONAS_BASE/conf/joramAdmin.xml file
-
-
-
- JMS destinations must be defined in the
- $JONAS_BASE/conf/joramAdmin.xml file
-
-
-
- If for tuning purposes, the size and/or the max size of the
- worker thread pool used for the message driven beans has been set
- (jonas.service.ejb.minworkthreads,
- jonas.service.ejb.maxworkthreads properties)
- you must update the equivalent settings in the Work Manager
- configuration (see below).
-
-
-
-
- resource service configuration
-
-
- Configuration of worker threads has been moved from resource service configuration to Work
- Manager (wm) service
- configuration.
-
- Work Manager configuration:
-
-
-
-
-
-
- discovery service configuration
-
-
- The property indicating that the current instance is (or is
- not) a master server is no longer a discovery
- service property, but instead, a
- jonas.properties global property
-
- jonas.master falseThe discovery service supports two
- implementations. One of them uses JGroups, the other one uses
- multicast. Multicast is the default..
-
- For more information about configuring discovery service see
- discovery
- service configuration.
-
-
-
-
-
- trace.properties & traceclient.properties
-
-
- Logger names have changed because of changes in internal JOnAS
- packages name.
-
-
-
-
-
- libraries
-
-
- There are several ways to use libraries in portable Java EE
- applications :
-
-
-
- placing the library JAR file into the WEB-INF/lib directory of
- the WAR file,
-
-
-
- using the Class-Path attribute in the manifest file to
- reference one or more library JAR files included in the EAR
- file.
-
-
-
- using the Extension-List attribute in the manifest file to
- reference one or more library JAR files that are not bundled in the
- EAR file, but are installed in the lib/ext directory of the Java
- Runtime Environment (JRE)
-
-
-
- If the application to migrate follows one of these policies it can
- be used with without changes.
-
- There is no guarantee that a library installed in
- JOnAS_BASE/lib/ext and referenced via the Extension-List attribute in
- the manifest file will be accessible to your application.
-
- It is worth knowing that tomcat 6, embedded in , tries to resolve
- extension dependencies for web applications before deploying them, and
- that it uses the system property catalina.ext.dirs
- to try and locate libraries.
-
- The JDBC driver can be installed under $JONAS_BASE/lib/ext or
- packaged into an bundle, we recommend the latest
- way.
-
-
-
- Using the Management bean MEJB
-
-
-
-
-
-
- Changes that can affect application code
-
- If the application to port was pointing to JOnAS java internal
- classes with org.objectweb.jonas.xxx
- packages, all references to these packages must be replaced by
- references to org.ow2.jonas.xxx
- package.
-
- For example if the application is using the authentication mechanism
- implemented by the class org.objectweb.jonas.security.realm.web.catalina55.JACC
- in JOnAS 4 this mechanism is now implemented in JOnAS5 by org.ow2.jonas.web.tomcat6.security.Realm.
-
- org.objectweb.jonas.security.realm.web.jetty50.Standard
- must be changed by org.ow2.jonas.web.jetty6.security.Realm
-
- org.objectweb.jonas.security.auth.callback.LoginCallbackHandler
- must be changed by org.ow2.jonas.security.auth.callback.LoginCallbackHandler
-
- org.objectweb.jonas.security.auth.spi.JResourceLoginModule
- by org.ow2.jonas.security.auth.spi.JResourceLoginModule
-
- org.objectweb.jonas.security.auth.spi.ClientLoginModule
- by org.ow2.jonas.security.auth.spi.ClientLoginModule
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/migration/versionAPI.xml b/jonas_doc/core/src/docbook/doc-en/migration/versionAPI.xml
deleted file mode 100644
index 56408dee4836dbaf098f6ac714910e164284d14a..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/migration/versionAPI.xml
+++ /dev/null
@@ -1,239 +0,0 @@
-
-
-
- API versions of the Java EE components
-
-
-
-
-
-
-
-
- API Â
-
- JOnAS 4.xÂ
-
- JOnAS 5.x
-
-
-
-
-
- JDK
-
- 1.4
-
- 1.5
-
-
-
- JNDI
-
- 1.2
-
- 1.2
-
-
-
- EJB
-
- 2.1
-
- 3.0
-
-
-
- Servlet
-
- 2.4
-
- 2.5
-
-
-
- JSP
-
- 2.0
-
- 2.1
-
-
-
- JMS
-
- 1.1
-
- 1.1
-
-
-
- Connector Architecture
-
- 1.5
-
- 1.5
-
-
-
- JDBC
-
- 3.0
-
- 3.0
-
-
-
- JavaMail
-
- 1.3.1
-
- 1.4
-
-
-
- JavaBeans Activation Framework
-
- 1.0
-
- 1.1.1
-
-
-
- JTA
-
- 1.0.1B
-
- 1.1
-
-
-
- JTS
-
- 1.0
-
- 1.0
-
-
-
- JAX-RPC
-
- 1.1
-
- 1.1
-
-
-
- SAAJ
-
- 1.2
-
- 1.3
-
-
-
- JAXR
-
- 1.0
-
- 1.0
-
-
-
- JWSDL
-
- 1.0
-
- 1.0
-
-
-
- JAXP
-
- 1.2
-
- 1.3
-
-
-
- J2EE_Deployment
-
- 1.1
-
- 1.1
-
-
-
- J2EE_Mgmt
-
- 1.0
-
- 1.0
-
-
-
- JACC
-
- 1.0
-
- 1.1
-
-
-
- JAAS
-
- 1.0
-
- 1.0
-
-
-
- JAX-WS
-
- n/a
-
- 2.1
-
-
-
- JAXB
-
- n/a
-
- 2.1
-
-
- JSF
-
- n/a
-
- 1.2
-
-
-
- JSTL
-
- n/a
-
- 1.2
-
-
-
- JPA
-
- n/a
-
- 1.0
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/migration/versionModules.xml b/jonas_doc/core/src/docbook/doc-en/migration/versionModules.xml
deleted file mode 100644
index bd2eb851a34fd44fca03974983d056ed45bac354..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/migration/versionModules.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- Versions of embedded modules in JOnAS
-
-
- Versions of components embedded in each JOnAS version are available in
- $JONAS_ROOT/VERSIONS file for JOnAS 4.x and
- $JONAS_ROOT/versions.properties for JOnAS 5.
-
diff --git a/jonas_doc/core/src/docbook/doc-en/migration_guide.xml b/jonas_doc/core/src/docbook/doc-en/migration_guide.xml
deleted file mode 100644
index dbb4a775282e8cb15c206e9715a9b450ed89148f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/migration_guide.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- JOnAS Versions Migration Guide
-
-
-
- CoqPhilippe
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2008-2009
-
- OW2 Consortium
-
-
- March 2009
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/multitenant_guide.xml b/jonas_doc/core/src/docbook/doc-en/multitenant_guide.xml
deleted file mode 100644
index 835a671dfffc7162ecbcaaa4bf121bfce7d85ed2..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/multitenant_guide.xml
+++ /dev/null
@@ -1,644 +0,0 @@
-
-
-
- Multitenancy Guide
-
-
-
- JOnAS Team
-
-
-
-
- This work is licensed under the Creative Commons
- Attribution-ShareAlike License. To view a copy of this license,visit
- http://creativecommons.org/licenses/by-sa/2.0/deed.en
- or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
- California 94305, USA.
-
-
-
- 2012
-
- OW2 Consortium
-
-
- Jun 2012
-
-
-
-
- Introduction
-
-
-
-
- Multitenancy
-
-
- JOnAS hosts and deploys applications written in Java. However, an application can not be natively
- deployed more than once in an instance of JOnAS. If necessary, the application will be deployed on
- another server instance because there is a risk of collision. One solution of this problem is multitenancy.
- This new feature provides the ability to deploy the same application multiple times on a single instance
- of JOnAS without prior configuration.
-
-
-
-
- Shared application server
-
-
-
- Tenants will run on the same application server (JOnAS) each with an instance of the application.
- Thus, in one instance of JOnAS, there will be many instances of an application than tenants using it.
- This multitenancy level is not without impact on the JOnAS application server because it will make changes in
- order to deploy the same application multiple times for multiple tenants in ensuring customization
- of resources and security among tenants.
-
-
-
-
-
- According to JavaEE7 specifications, for each tenant, an instance of the application is deployed.
-
-
-
-
-
-
- Tenant context
-
-
- Each tenant is identified by a tenant identifier following the pattern T<id> when
- id is numeric. This identifier is defined in web descriptor, application descriptor or even
- addon descriptor with the hierarchy : Addon > EAR > WAR
- It was necessary to define a default identifier (defaultTenantId = T0) for applications
- that do not give a specific tenant-id. it is simply used to enforce the policy where each instance of an
- application is linked to an identifier of tenant, and will not be used for customizing data (no changes will
- be made).
-
-
-
- The identifier of the tenant must be present when deploying the application but also during its execution. In fact,
- during deployment, several services operate to save the settings and application data in the JOnAS environment.
- These services have a dependence on the multitenant service and will use it for customizing data. Therefore, it
- is necessary that the information "tenant-id" is constantly present throughout the duration of the deployment.
-
-
-
- The tenant context is composed of :
-
-
- TenantId : tenant identifier
-
-
- InstanceName
-
-
- To access the context of the current tenant, use :
- TenantCurrent.getCurrent().getTenantContext();
-
-
-
- Tenant-id is stored in a variable associated to the ThreadLocal. When running the application, an HTTP filter is
- set up, it sets all contexts associated with the thread, including the context of tenant, before the
- server responds to the client request.
-
-
-
-
-
-
-
-// Save the current context
-old = TenantCurrent.getCurrent().getTenantContext();
-TenantCurrent.getCurrent().setTenantContext(this.ctx);
-
- Next, execute the request. And finally, restore the old context :
-
-// Restore the old context
-TenantCurrent.getCurrent().setTenantContext(old);
-
-
-
- This filter is created by calling the multitenant service. The valve is set in Tomcat7Service as follows :
-
-
-// For the tenantId
-Filter tenantIdHttpFilter = null;
-String tenantId = null;
-if (getMultitenantService() != null){
- // get an instance of the filtre
- tenantId = super.getTenantId(war.getWarDeployable());
- tenantIdHttpFilter = getMultitenantService().getTenantIdFilter(tenantId);
- // needs to add this filter on the context
- jStdCtx.addValve(new FilterValveWrapper(tenantIdHttpFilter));
-}
-
-
-
-
-
-
-
-
-
-
- Customization
-
-
-
-
- Context root customization
-
-
-
- Context root is defined in the web descriptor of the application. This context must be unique for each tenant.
- However, because tenants are instances of the same application, context root is the same for all. During
- deployment, context root of each instance is prefixed by the instance name and the tenant-id.
-
-
-
-
-
-
-
- This customization is done during the deployment of the webapp.
-
-
-protected String updateContextRoot(String contextRoot, IDeployable deployable) {
- String tenantId = getTenantId(deployable);
- String instanceName = multitenantService.getInstanceNameFromContext();
-
- if (instanceName != null) {
- contextRoot = instanceName + "/" + contextRoot;
- }
-
- if (tenantId != null) {
- contextRoot = tenantId + "/" + contextRoot;
- }
- return contextRoot;
-}
-
-
-
-
-
- Data isolation in database
-
-
-
- Shared database and shared schema
-
-
-
-
-
-
-
-
-
-
-
-
- Propagation of the tenantId to eclipselink
-
-
- To persist the tenantId in database, we have to set the eclipselink.tenant-id property in
- persistence.xml file. To automatize the propagation of the tenantId to eclipselink we need to add this
- property automatically when the application is added. Then, we will use the method :
-
-
-// This property will propagate the tenantId to eclipselink
-// This value will be added to entities tables
-String tenantIdProperty = "eclipselink.tenant-id";
-String tenantIdValue = tenantId;
-persistenceUnitManager.setProperty(tenantIdProperty, tenantIdValue);
-
-
-
-
-
-
- EJB Entities configured as multitenant
-
-
- Entities must be configured as multitenant to enable adding tenant-id in the database. For that, we have to
- add @Multitenant annotation in each class but we need to do that automatically (when
- multitenant service is activated). A solution is to use a Session Customizer
- (cf
- http://wiki.eclipse.org/Customizing_the_EclipseLink_Application_(ELUG)). It is a simple class
- with only one method (customize) and take one parameter (Session session). In this method, we will set all
- entity classes as multitenant as follows :
-
-
-public void customize(Session session) throws Exception {
- Map<Class, ClassDescriptor> descs = session.getDescriptors();
- // For each entity class ...
- for(Map.Entry<Class, ClassDescriptor> desc : descs.entrySet()){
- // Create a multitenant policy (Single table)
- SingleTableMultitenantPolicy policy = new SingleTableMultitenantPolicy(desc.getValue());
- // Tell that column descriminator is TENANT_ID (it will be added in the database)
- policy.addTenantDiscriminatorField("eclipselink.tenant-id", new DatabaseField("TENANT_ID"));
- // Add this policy in class derscriptor
- desc.getValue().setMultitenantPolicy(policy);
- }
-}
-
-
-
-
- Then, during the deployment of the application, an eclipselink property is set to use this session customizer :
-
-// This property will configure entities as multitenant
-// It is the equivalent of @Multitenant
-String sessionCustomizerProperty = "eclipselink.session.customizer";
-String sessionCustomizerClass = "org.ow2.easybeans.persistence.eclipselink.MultitenantEntitiesSessionCustomizer";
-persistenceUnitManager.setProperty(sessionCustomizerProperty, sessionCustomizerClass);
-
-
-
-
- Because tenants share the same database and the same tables, it is important to ensure that a tenant does not
- drop an create tables. For that, verify if the drop-and-create-tables eclipselink property
- is not set. Otherwise, change this property to create-tables only :
-
-// If eclipselink was enabled to drop and create tables
-// change this property to only create tables
-String createTablesProperty = "eclipselink.ddl-generation";
-String dropAndCreateTablesValue = "drop-and-create-tables";
-String createTablesValue = "create-tables";
-Map<String, String> properties = persistenceUnitManager.getProperty(createTablesProperty);
-for (Map.Entry<String, String> property : properties.entrySet()){
- if (property.getValue().equals(dropAndCreateTablesValue)) {
- logger.warn("This tenant was enabled to drop and create tables. Eclipselink property is changed to only create tables");
- persistenceUnitManager.setProperty(createTablesProperty, createTablesValue, property.getKey());
- }
-}
-
-
-
-
-
-
-
- JNDI names customization
-
-
- When an application is deployed in multitenant mode, we take the risk of having a conflict between bound names
- of each tenant. A solution is to add a prefix before each name. This prefix is the tenantId of the tenant which
- names are related.
-
-
-
- Naming strategy
-
-
- During the deployment, a name is prefixed the syntax : T<id>/name when
- T<id> is the application's tenant-id. The naming strategy is set by:
-
-newNamingStrategies.add(ejb3Service.getNamingStrategy(prefix, oldNamingStrategy));
-
-
- Example: MyInitializerBean will be T1/MyInitializerBean.
- In addition, as for versioning service, a virtual JNDI binding is made. It will remove the prefix and rebind
- the old name to the same object. Then, we will have 2 names (MyInitializeBean and T1/MyInitializerBean)
- linked to the same object.
-
-
-
-
-
-
- JNDI interceptor
-
-
-
- To customize JNDI names bound by the application by adding the tenant-id as prefix, an interceptor is set.
-
-
-
-
-
-
-
- This interceptor (org.ow2.jonas.lib.tenant.interceptor.jndi.JNDITenantIdInterceptor) is an
- implementation of org.ow2.carol.jndi.intercept.ContextInterceptor and is registered in
- Carol Interceptor Manager when Multitenant service is activated. Then, all JNDI calls are intercepted.
-
-// Add tenantId JNDI interceptor
-jndiTenantIdInterceptor = new JNDITenantIdInterceptor(JNDI_SEPARATOR);
-SingletonInterceptorManager.getInterceptorManager().registerContextInterceptor(jndiTenantIdInterceptor);
-
-
- Two operations are made by this interceptor :
-
-
- Distinguish calls from multitenant application to JNDI
-
-
- Prefix these names by adding the tenant-id
-
-
-
-
-
-
-
- MBeans customization
-
-
-
- When we deploy a same application two times for two different tenants, the problem is that application's MBeans
- will have the same identifier which will create a case of conflict. To avoid it, a solution is to add an attribute
- in the MBean's ObjectName named tenantId :
-
- Domaine:name=MBeanName;tenantId=T1
-
- To do that, we need to intercept all MBeanServer methods call since majority of these methods use the ObjectName.
- A solution is to set a proxy of the principal MBeanServer (which is returned by
- ManagementFactory.getPlatformMBeanServer())
-
-
-
-
- JMX interceptor
-
-
- To customize MBeans, a JMX interceptor is set to add a tenant-id property to the MBean ObjectName.
-
-
-
-
-
- This interceptor (org.ow2.jonas.lib.tenant.interceptor.jmx.JMXTenantIdInterceptor) implements
- org.ow2.jonas.jmx.Interceptor and is added to the InvocationHandler (
- org.ow2.jonas.jmx.internal.interceptor.InvocationHandlerImpl) by multitenant service :
-
-// Add tenantId JMX interceptor
-jmxTenantIdInterceptor = new JMXTenantIdInterceptor(tenantIdAttributeName, allowToAccessPlatformMBeans);
-jmxService.addInterceptor(jmxTenantIdInterceptor);
-
- and will be called before querying the MBeanServer.
-
-
-
-
-
- Customized MBeanServerBuilder
-
-
-
- In order to create a "proxified" MBeanServer, a new class
- org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder which extends
- javax.management.MBeanServerBuilder is used and set as a system property :
-
-// MBeanServerBuilder
-System.setProperty("javax.management.builder.initial", "org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder");
-
- Then, the first MBeanServer created in the platform is a proxy with a default interceptor. This default interceptor
- is always the last called and will call the MBeanServer method originally invoked (before interception).
-
-// Create real MBeanServer with outerProxy
-MBeanServer origin = super.newMBeanServer(defaultDomain, outerProxy, delegate);
-
-// Create handler for MBeanServer proxy and add
-// the default interceptor
-InvocationHandlerImpl invocationHandler = new InvocationHandlerImpl();
-invocationHandler.addInterceptor(new MBeanServerDelegateInterceptor(origin));
-
-// Create the MBeanServer proxy
-MBeanServer proxy = (MBeanServer) Proxy.newProxyInstance(origin.getClass().getClassLoader(),
- new Class<?>[]{MBeanServer.class},
- invocationHandler);
-
- It is possible to add as many interceptors that it is desired and they will be called one by one.
-
-
-
-
-
- Using a customized MBeanServerBuilder can be problematic. In fact, as described in
- JONAS-867, if the system property
- com.sun.management.jmxremote is set before JOnAS startup, this has the effect of
- creating some MBeans and then initialize the MBeanServer. However, the system property
- javax.management.builder.initial which is set when JOnAS starts and define the class
- which is used to build the platform MBeanServer, this one is present in
- org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder
- and is not known by the classloader at this step.
- If the system property com.sun.management.jmxremote is not set, this error should not appear.
-
-
-
-
-
- Tenants administration isolation
-
-
-
- All administrators are defined in a special realm. Tenants administration isolation is done by defining two profiles :
-
-
-
-
- Tenant administrator profile
-
-
- This profile is define by the super-admin role :
- <role name="super-admin" description="Role allowing access to all tenants" />
- and will be assigned to a unique user in the platform :
- <user name="superAdmin" password="admin" roles="superAdmin"/>
-
-
- This user will have a full access to all MBeans when connecting on a administration tool such as JConsole.
-
-
-
-
-
- Super administrator profile
-
-
-
-
- For each tenant, a specific role is defined according to the pattern TenantId[T<id>] :
- <role name="TenantId[T1]" description="Role allowing access to tenant T1 information" />
- and will be assigned to a unique user in the group of user belonging to the tenant.
- <user name="admin@client" password="admin" roles="TenantId[T1]"/>
-
-
- This user will have access to MBeans which contain the property tenant-id=T1.
-
-
-
-
-
-
-
-
-
-
-
-
- This isolation is made when JMX Security is activated. For that, set JMX Security to true in jonas.properties :
- jonas.service.jmx.secured true
- Then, change authentication method and parameter to :
-
-jonas.service.jmx.authentication.method jmx.remote.x.login.config
-jonas.service.jmx.authentication.parameter jaas-jmx
-
- Next, activate TenantIdLoginModule for jaas-jmx in jaas.config :
-
-jaas-jmx {
- // Use LoginModule for JMX authentication
- org.ow2.jonas.security.auth.spi.JResourceLoginModule required
- resourceName="memrlm_1"
- ;
-
- // Use the login module to add tenantId in TenantContext
- org.ow2.jonas.lib.tenant.loginmodule.TenantIdLoginModule required;
-};
-
- During tenant administrator login, TenantIdLoginModule will propagate tenantContext in order to filter MBeans
- by the tenant-id property presents in the ObjectName. Only MBeans which their objectName
- contains the same tenant-id than the connected user will appear.
-
-
-
-
-
- Logs customization
-
-
-
- JOnAS use Monolog for logging. Monolog is a very static
- project and it was necessary to make it extensible for logging other information than those predefined (as
- date, classname, etc). One solution is to write an interface in monolog
- org.objectweb.util.monolog.api.LogInfo:
-
-package org.objectweb.util.monolog.api;
-
-/**
-* This interface allows to add an extension to Monolog
-* @author Mohammed Boukada
-*/
-public interface LogInfo {
-
- /**
- * Gets the info value
- * @return info value
- */
- String getValue ();
-}
-
- that will be implemented by JOnAS services.
-
-
- In this case, this interface is implemented by multitenant service and provides the tenant-id of the
- current tenant.
-
-
-
-
-
-
-
- An ipojo component is defined in modules/libraries/externals/monolog and is responsible of
- registration of monolog's extensions. When an implementation of this interface is registered in OSGi platform :
-
-<provides specifications="org.objectweb.util.monolog.api.LogInfo">
- <property field="pattern" name="pattern" type="java.lang.Character"/>
-</provides>
-
- This component will add the extension to monolog :
-
-<component classname="org.ow2.jonas.monolog.MonologExtension"
- immediate="false"
- name="MonologExtension">
-
- <requires optional="true"
- specification="org.objectweb.util.monolog.api.LogInfo"
- aggregate="true"
- proxy="false"
- nullable="false">
- <callback type="bind" method="addExtension" />
- <callback type="unbind" method="removeExtension" />
- </requires>
-
- <!-- LifeCycle Callbacks -->
- <callback method="start" transition="validate" />
- <callback method="stop" transition="invalidate" />
-
-</component>
-
- MonologExtension class contains method which are called as callback when a service implementing LogInfo interface
- is registered:
-
-/**
-* Add an extension to Monolog
-* @param logInfoProvider
-*/
-public void addExtension(final LogInfo logInfoProvider, ServiceReference ref) {
- Character pattern = (Character) ref.getProperty("pattern");
- Monolog.monologFactory.addLogInfo(pattern, logInfoProvider);
- logger.info("Extension ''{0}'' was added by ''{1}'' to Monolog", pattern, logInfoProvider.getClass().getName());
-}
-
-/**
-* Remove an extension from Monolog
-*/
-public void removeExtension(ServiceReference ref) {
- Character pattern = (Character) ref.getProperty("pattern");
- Monolog.monologFactory.removeLogInfo(pattern);
- logger.info("Extension ''{0}'' was removerd from Monolog.", pattern);
-}
-
-
- To use monolog extension, you need to make a dependency on :
-
- <dependency>
- <groupId>org.ow2.monolog</groupId>
- <artifactId>monolog</artifactId>
- <version>2.2.1-SNAPSHOT</version>
- </dependency>
-
- or any later version.
-
-
-
- For seeing tenant-id in log messages, add %T to the wanted handler (tty, logf, ...) in
- trace.properties. Example :
-
- handler.tty.pattern %T %d : %O{1}.%M : %m%n
- In this example, tenant-id will be added at the beginning of the log message. If tenant-id is not set in
- tenantContext or its value is T0 (which is default tenant-id) then nothing will be printed.
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/protocols/config.xml b/jonas_doc/core/src/docbook/doc-en/protocols/config.xml
deleted file mode 100644
index 49f9c055efa811b4c569aefbe89c3403fe96e56d..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/protocols/config.xml
+++ /dev/null
@@ -1,239 +0,0 @@
-
-
-
- Configuring the communication protocol and JNDI
-
-
- provides a
- multi-protocol support through the integration of the CAROL
- component.
-
- Supported communication protocols are the following:
-
-
-
- RMI/JRMP is the JRE implementation of RMI on the JRMP protocol.
- This is the default communication protocol.
-
-
-
- RMI/IIOP is the JacORB implementation of RMI
- over the IIOP protocol.
-
-
-
- IRMI is an RMI implementation that can be used with Open Source
- JDK that doesn't provide com.sun.*
- classes.
-
-
-
- For each of these protocols, the clustering of RMI objects can be
- enabled with the component CMI.
-
-
-
- Choosing the Protocol
-
-
- The choice of the protocol is made in the
- carol.protocols property of
- carol.properties file in JONAS_BASE/conf directory.
-
- carol.protocols=jrmp
-
-
-
- configuring jrmp protocol
-
-
- carol.protocols=jrmp
-carol.jrmp.url=rmi://localhost:1099
-carol.jvm.rmi.local.call=false
-carol.jvm.rmi.local.registry=false
-carol.jrmp.server.port=0
-carol.jrmp.interfaces.bind.single=false
-
-
- choice of the protocol or list of protocols
-
-
-
- connexion url to the RMI registry the hostname (localhost)
- and port number must be changed if needed. In a distributed
- configuration changing the hostname is mandatory.
-
-
-
- if true local calls are optimized: calls to methods of the
- remote interface are treated as call to local methods (it is not
- always possible depending on the packaging of the
- application).
-
-
-
- if true a local Naming context is used. This must be used
- only with a collocated registry and it is mandatory when the
- jonas.security.manager property of jonas.properties is set to
- true.
-
-
-
- exported objects will listen on this port for remote method
- invocations. 0 means random port. Specify a port may be useful
- when the server run behind a firewall.
-
-
-
- if true use only a single interface (choosen from the url)
- when creating the registry. False means use all interfaces
- available.
-
-
-
-
-
-
- configuring RMI/IIOP protocol
-
-
- The JacORB implementation of RMI over the IIOP is used. The
- configuration file of JacORB is the $JONAS_BASE/conf/jacorb.properties
- file.
-
- As for the other protocols RMI over IIOP is ready to used in the
- default distribution. It is only for tuning purpose that the $JONAS_BASE/conf/jacorb.properties file
- must be customized.
-
- By default the CORBA Naming service is run using the port 2001 (as
- it is set in the carol.properties file)
-
- So the only thing to do for working in RMI over IIOP is to set the
- property protocols in carol.properties:
-
- carol.protocols=iiop
-# RMI IIOP URL
-carol.iiop.url=iiop://localhost:2001
-carol.iiop.server.port=0
-carol.iiop.server.sslport=2003
-carol.iiop.PortableRemoteObjectClass=org.ow2.jonas.registry.carol.delegate.JacORBPRODelegate
-
-
-
- 0 means random port
-
-
-
- this port is used only if SSL mode is enabled (default
- configuration = not used).Is used to set the SSL port of the objects
- listener
-
-
-
- delegate used by JOnAS for rmi-iiop protocol.
-
-
-
-
-
-
- configuring irmi protocol
-
-
- carol.protocols=irmi
-carol.irmi.url=rmi://localhost:1098
-carol.irmi.server.port=0
-carol.irmi.interfaces.bind.single=false
-
-
- for irmi the default port is 1098
-
-
-
- exported objects will listen on this port for remote method
- invocations:0 means random port.
- if the port is set to n the port 'n + 1' will be used by
- the JMX server.So, for the firewall configuration, you have to
- open the port numbers 'n' and 'n+1'
-
-
-
-
- if true use only a single interface when creating the
- registry (specified in carol.irmi.url property). Default
- configuration = false(use all interfaces available)
-
-
-
-
-
-
- enabling clustering of RMI objects
-
-
- CMI is the component to use for clustering purpose. It is embedded
- in the component CAROL.
-
- CMI is just composed of wrappers and interceptors and is fully
- independant of the implementation of protocol. CMI relies on JGroups
- group-communication protocol for ensuring the replication of the cluster
- view. CMI provides jndi high availability, the load-balancing and
- fail-over at the EJB level.
-
- For using CMI with a protocol (in addition to the activation of
- service cmi), a property must be added in
- carol.properties:
-
- carol.jrmp.cmi=true
-carol.iiop.cmi=true
-carol.irmi.cmi=false
-
-
-
- Enable clustering with jrmp
-
-
-
- Disable clustering with imi
-
-
-
-
- By default, the property is set at true.
-
-
-
-
-
- multi protocol configuration
-
-
- JOnAS can be configured to use several protocols simultaneously.
- To do this, just specify a comma-separated list of protocols in the
- carol.protocols property of the carol.properties
- file. For example:
-
- carol.protocols=iiop,jrmp
-carol.jrmp.url=rmi://localhost:1099
-carol.iiop.url=iiop://localhost:2001
-
-
- When iiop is used in a multiprotocol configuration, it must
- appear at the first position in the protocol list.
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/ra/JDBCRA.xml b/jonas_doc/core/src/docbook/doc-en/ra/JDBCRA.xml
deleted file mode 100644
index 2de72884b9fc11e66f780518104c419fd25f3a4f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/ra/JDBCRA.xml
+++ /dev/null
@@ -1,1234 +0,0 @@
-
-
-
- Configuring JDBC Resource Adapters
-
-
- Connection of an J2EE application to databases is done through JDBC
- Resource Adapters (JDBC RA).
-
- Such Resource Adapters are deployed via the resource service as seen in .
-
- For both container-managed or bean-managed persistence, the JDBC
- Resource Adapter makes use of relational storage systems through the JDBC
- interface.
-
- JDBC connections are obtained from a JDBC RA.
-
- The JDBC RA implements the J2EE Connector Specification using the
- DataSource interface as defined in the JDBC
- standard extensions.
-
- An JDBC RA is configured to identify a database and a means to access
- it via a JDBC driver. Multiple JDBC RAs can be deployed either via the
- jonas.properties file or included in the autoload directory of the resource service.
-
- The following section explains how JDBC RARs can be defined and
- configured in the JOnAS server.
-
- To support distributed transactions, the JDBC RA requires the use of
- at least a JDBC2-XA-compliant driver. Such drivers implementing the
- XADataSource interface are not always available for all relational
- databases. The JDBC RA provides a generic driver-wrapper that emulates the
- XADataSource interface on a regular JDBC driver. It is important to note
- that this driver-wrapper does not ensure a real two-phase commit for
- distributed database transactions.
-
-
-
-
-
- Generic JDBC Resource Adapters
-
-
- The generic JDBC RAs of JOnAS provide implementations of the
- java.sql.Driver,
- javax.sql.DataSource,
- javax.sql.ConnectionPoolDataSource,
- and javax.sql.XADataSource interfaces. They are
- located in the $JONAS_ROOT/rars/autoload directory and thus
- are deployed automatically.They consist of base (or generic) RAs
- facilitating the build of the user JDBC RAs.
-
- Depending on the relational database management server and the
- available interface in the used JDBC-compliant driver, the user JDBC RA is
- linked (through the RAR link feature) to a generic RA (for example, the
- Driver's one). In this case, the user RA contains only a jonas-ra.xml file
- with some specific parameters, such as the connection url, the
- user/password, or the JDBC-Driver class.
-
-
-
-
-
- Resource adapter provided with
- JOnAS
-
- description
-
- jndi name
-
-
-
- rars/autoload/JOnAS_jdbcDS.rar
-
- Generic JDBC RA that implements the
- DataSource interface
-
- JOnASJDBC_DS
-
-
-
- rars/autoload/JOnAS_jdbcDM.rar
-
- Generic JDBC RA that implements the
- Driver interface
-
- JOnASJDBC_DM
-
-
-
- rars/autoload/JOnAS_jdbcCP.rar
-
- Generic JDBC RA that implements the
- ConnectionPoolDataSource
- interface
-
- JOnASJDBC_CP
-
-
-
- rars/autoload/JOnAS_jdbcXA.rar
-
- Generic resource adapter that implements the
- XADataSource interface
-
- JOnASJDBC_XA
-
-
-
-
-
-
-
-
- Specific JDBC Resource Adapter
-
-
- The remainder of this section, which describes how to define and
- configure JDBC RAs, is specific to JOnAS. However, the way to use these
- JDBC RAs in the Application Component methods is standard, i.e., via the
- resource manager connection factory references (refer to the example in
- the section Writing
- Database Access Operations.
-
- An RAR file must be deployed as explained in .
-
- Usually a resource Adapter contains in its rar file all the classes needed to access to
- the external resource. In the case of a specific JDBC RA it contains only
- a JOnAS specific deployment descriptor jonas-ra.xml
- that tell what sort of generic resource adapter to use and information
- related to the specific database used. The jar file of the actual JDBC driver mut be
- copied in the right place to be seen by the JOnAS classloader : $JONAS_BASE/lib/ext.
-
- Changing the configuration of the RA requires extracting and editing
- the deployment descriptor and updating the archive file. There are several
- possible ways to do this:
-
-
-
- With the RAConfig command (refer to the JOnAS Commands Reference Guide
- for a complete description of the command).
-
-
-
- Through the jonasAdmin console (refer to Administration guide
- for a complete description). In the jonasAdmin's tree, the Resource
- Adapter Module node (under the deployment node) contains a configure
- tab that allows editing of both the ra.xml file and the jonas-ra.xml
- file of the undeployed RA.
-
-
-
-
-
- Defining the JOnAS Connector Deployment Descriptor:
- jonas-ra.xml
-
-
- The jonas-ra.xml contains JOnAS specific
- information describing deployment information, logging, pooling, jdbc
- connections, and RAR config property values:
-
-
-
- Deployment Tags:
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- jndiname
-
- name the RAR will be registered as. This property is
- required. This value will be used in the
- resource-ref section of an
- composant.
-
-
-
- Anyname (for example jdbc_1)
-
-
-
-
-
- rarlink
-
- jndiname of a base RAR file. Useful for deploying
- multiple connection factories without having to deploy the
- complete RAR file again. When this is used, the only entry
- in RAR is a
- META-INF/jonas-ra.xml
-
-
-
- JONASJDBC_DM
-
-
-
- JONASJDBC_DS
-
-
-
- JONASJDBC_CP
-
-
-
- JONASJDBC_XA
-
-
-
-
-
- native-lib
-
- defines the path where native libraries can be
- found.
-
-
-
- Any string for a path
-
-
-
-
-
-
-
-
-
- Logging Tags:
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- log-enabled
-
- determines if logging should be enabled for the
- RAR.
-
-
-
- False (default value)
-
-
-
- True
-
-
-
-
-
- log-topic:
-
- defines the log topic that will be used to write log
- messages for this rar file.
-
-
-
- Any topic name
-
-
-
- Default value is
- org.objectweb.jonas.jca
-
-
-
-
-
-
-
-
-
- Pooling Tags
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- pool-init
-
- Initial size of the managed connection pool
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-min
-
- Minimum size of the managed connection pool.
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-max
-
- Maximum size of the managed connection pool.
-
-
-
- n
-
-
-
- -1 = unlimited (default value)
-
-
-
-
-
- pool-max-age-minutes
-
- Maximum number of minutes to keep the managed
- connection in the pool.
-
-
-
- 0 = an unlimited amount of time.
-
-
-
- n in minutes
-
-
-
-
-
- pstmt-max
-
- Maximum number of PreparedStatements per managed
- connection in the pool. Only needed with the JDBC RA of
- JOnAS or another database vendor's RAR. Value of 0 is
- unlimited and -1 disables the cache.
-
-
-
- 0 = unlimited
-
-
-
- n (default value = 10)
-
-
-
- -1 = cache disabled
-
-
-
-
-
- pstmt-cache-policy
-
- Prepared statement cache policy.
-
-
-
- List (default value) : array based implementation of the cache
-
-
-
- Map : map based implementation of the cache
-
-
-
-
-
-
- pool-max-opentime
-
- Identifies the maximum number of minutes that a
- managed connection can be left busy.
-
-
-
- 0 = an unlimited amount of time (default
- value).
-
-
-
- n in minutes
-
-
-
-
-
- pool-max-waiters:
-
- identifies the maximum number of waiters for a
- managed connection. Default value is 0.
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-max-waittime
-
- identifies the maximum number of seconds that a
- waiter will wait for a managed connection. Default value is
- 0.
-
-
-
- 0 (default value)
-
-
-
- n in seconds
-
-
-
-
-
- pool-sampling-period:
-
- identifies the number of seconds that will occur
- between statistics samplings of the pool. Default is 30
- seconds.
-
-
-
- n in seconds (default value = 30s)
-
-
-
-
-
-
-
-
-
- JDBC Connection Tags:
- Only valid for Connection implementation of
- java.sql.Connection.
-
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- jdbc-check-level
-
- Level of checking that will be done for the jdbc
- connection.
-
-
-
- 0 : no check (default value)
-
-
-
- 1: check connection still open
-
-
-
- 2 : send the test statement before reusing a
- connection from the pool
-
-
-
- 3: (keep-alive feature) send the test statement
- on each connection every pool-sampling-period
-
-
-
-
-
- jdbc-test-statement
-
- Test SQL statement sent on the connection if the
- jdbc-check-level is greater than 1.
-
-
-
- A SQL statement
-
-
-
-
-
-
-
-
-
- Config Property Value Tags:
-
- Each entry must correspond to the config-property specified in
- the ra.xml of the RAR file. The default values specified in the
- ra.xml will be loaded first and any values set in the jonas-ra.xml
- will override the specified defaults. These tags differs dependiing
- on the generic JDBC RA used
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- dsClass
-
- Name of the class implementing
- java.sql.Driver,
- javax.sql.DataSource,
- javax.sql.ConnectionPoolDataSource,
- or javax.sql.XADataSource interfaces
- in the JDBC driver.
-
-
-
- any classname representing a JDBC driver
- (example:org.postgresql.Driver)
-
-
-
-
-
- URL
-
- Database url of the form
- jdbc:<database_vendor_subprotocol>. This property may
- be used only for JDBC RA that implements the Driver
- (JDBC_DM)
-
-
-
- Any url valid for a database provider
- (example:jdbc:postgresql://localhost:5432/mydb)
-
-
-
-
-
- user
-
- Database user name
-
-
-
- any name
-
-
-
-
-
- password:
-
- Database password
-
-
-
- any string
-
-
-
-
-
- loginTimeout
-
- Maximum time in seconds that the driver will wait
- while attempting to connect to a database.
-
-
-
- no value = 0 (default value)
-
-
-
- n in seconds
-
-
-
-
-
- isolationLevel
-
- Level of transaction isolation
-
-
-
- none
-
-
-
- serializable
-
-
-
- read_committed
-
-
-
- read_uncommitted
-
-
-
- repeatable_read
-
-
-
-
-
- mapperName
-
- Name of the JORM mapper
-
- The possible values can be found in the List
- of available mappers in JORM documentation.
-
-
-
- databaseName
-
- Name of the database
-
-
-
- any name
-
-
-
-
-
- description:
-
- Informal description
-
-
-
- any String
-
-
-
-
-
- portNumber
-
- Port Number of the database server
-
-
-
- a number
-
-
-
-
-
- serverName
-
- Name of the database server.
-
-
-
- any name
-
-
-
-
-
- dbSpecificMethods
-
- allow flexibility to call setter methods on the
- dsClass as required by the database
- provider
-
- see below the particular syntax
-
-
-
-
-
-
-
- dbSpecificMethods a specific property:
-
- The JDBC Resource Adapter is built as a
- generic connector to any database provider. The limitation of this
- is that each database provider may have different requirements about
- the methods needed to configure the dataSource
- class. This dbSpecificMethods
- property was added to allow flexibility to call setter methods on
- the dsClass as required by the database
- provider. The specific information about what additional methods
- should be used is documented by the database provider. The format of
- the value specified is:
-
- [:<del_char>]<method>=<value>::<value_type>:<method>=<value>::<value_type>....with:
-
-
-
-
-
- :
-
- optional starting value that denotes using the next
- character as the delimiter instead of the default
- ':'
-
-
-
- <del_char>
-
- delimiter character to use
-
-
-
- <method>
-
- method to call followed by an = sign
-
-
-
- <value>
-
- the parameter value to pass to the method being
- called, followed by 2 delimiter characters.If a Properties
- object is being passed, then the format of this value must
- be (name=val, name=val, ...);
-
-
-
- <value_type>
-
- the parameter type used to construct the
- reflection call, followed by the delimiter character if
- additional methods are being called
-
- Boolean or bool
-
-
-
- Byte or byte
-
-
-
- Character or char
-
-
-
- Double or double
-
-
-
- Float or float
-
-
-
- Integer or int
-
-
-
- Long or long
-
-
-
- Properties or java.util.Properties
-
-
-
- Short or short
-
-
-
- String
-
-
-
-
-
-
-
-
-
-
-
-
- If this JDBC resource is used as a
- persistence unit, the persistence configuration defined in the
- persistence.xml file must be coherent to this
- jonas-ra.xml description, such as the datasource
- name and the dialect.
-
-
-
-
-
- Understanding pooling tags:
-
-
- At JDBC RA deployment time, if pool-init is not null pool-init JDBC connection are created.
-
- When a user requests a jdbc connection, the JDBC RA first checks
- to see if a connection is already open for its transaction. If not, it
- tries to get a free connection from the free list. If there are no more
- connections available, it creates a new jdbc connection (if pool-max is not reached).
-
- If it cannot create new connections, the user must wait (if
- pool-max-waiters is not reached) until
- a connection is released. After a limited time (pool-max-waittime), the getConnection
- returns an exception.
-
- When the user calls close() on its
- connection, it is put back in the free list.
-
- Many statistics are computed (every pool-sampling-period seconds) and can be viewed
- by JonasAdmin. This is useful for tuning these parameters and for seeing
- the server load at any time
-
- When a connection has been open for a time too long (pool-max-age), the pool will try to release it
- from the freelist. However, the JDBC RA always tries to keep open at
- least the number of connections specified in pool-min.
-
- When the user has forgotten to close a jdbc connection, the system
- can automatically close it, after pool-max-opentime minutes. Note that if the user
- tries to use this connection later, thinking it is still open, it will
- return an exception (socket closed).
-
- When a connection is reused from the freelist, it is possible to
- verify that it is still valid. This is configured in jdbc-check-level . For levels >1 it tries a
- dummy statement on the connection before returning it to the caller.
- This statement is configured in jdbc-test-statement.
-
-
- this previous description is not only true for JDBC RAs but also
- for all types of resource adapters, except jdbc-check-level and jdbc-test-statement which are specifics for
- JDBC.
-
-
-
-
-
-
- Examples of Specific JDBC Resource Adapter
-
-
-
-
-
-
- Oracle JDBC resource adapter (Driver)
-
-
- An RAR for Oracle named as jdbc_1 in JNDI and
- using the Oracle thin Driver JDBC driver, should be described in a file
- (called for example Oracle1_DM.rar), with the
- following properties configured in the jonas-ra.xml file:
-
-
-
- <?xml version = "1.0" encoding = "UTF-8"?>
-<jonas-connector xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.objectweb.org/jonas/ns/jonas-connector_4_2.xsd" >
- <jndi-name>jdbc_1</jndi-name>
- <rarlink>JOnASJDBC_DM</rarlink>
- <jonas-config-property>
- <jonas-config-property-name>user</jonas-config-property-name>
- <jonas-config-property-value>scott</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>password</jonas-config-property-name>
- <jonas-config-property-value>tiger</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>loginTimeout</jonas-config-property-name>
- <jonas-config-property-value></jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>URL</jonas-config-property-name>
- <jonas-config-property-value>jdbc:oracle:thin:@malte:1521:ORA1</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>dsClass</jonas-config-property-name>
- <jonas-config-property-value>oracle.jdbc.driver.OracleDriver</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>mapperName</jonas-config-property-name>
- <jonas-config-property-value>rdb.oracle</jonas-config-property-value>
- </jonas-config-property>
-</jonas-connector>
-
-
- In this example, "malte" is the hostname of the server running the
- database Oracle, 1521 is the SQL*Net V2 port number on this server, and
- ORA1 is the ORACLE_SID. This example makes use of the Oracle "Thin" JDBC
- driver. For an application server running on the same host as the Oracle
- DBMS, you can use the Oracle OCI JDBC driver.
-
-
-
-
- PostgreSQL JDBC resource adapter (Driver)
-
-
- To create a PostgreSQL RAR configured as jdbc_3 in JNDI, it should
- be described in a file (called for examplePostgreSQL3_DM.rar), with the
- following properties configured in the jonas-ra.xml file:
-
- <?xml version = "1.0" encoding = "UTF-8"?>
-<jonas-connector xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.objectweb.org/jonas/ns/jonas-connector_4_2.xsd" >
- <jndi-name>jdbc_3</jndi-name>
- <rarlink>JOnASJDBC_DM</rarlink>
-<jonas-config-property>
- <jonas-config-property-name>user</jonas-config-property-name>
- <jonas-config-property-value>jonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>password</jonas-config-property-name>
- <jonas-config-property-value>jonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>loginTimeout</jonas-config-property-name>
- <jonas-config-property-value></jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>URL</jonas-config-property-name>
- <jonas-config-property-value>jdbc:postgresql:/malte:5432/db_jonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>dsClass</jonas-config-property-name>
- <jonas-config-property-value>org.postgresql.Driver</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>mapperName</jonas-config-property-name>
- <jonas-config-property-value>rdb.postgres</jonas-config-property-value>
- </jonas-config-property>
-</jonas-connector>
-
-
-
-
-
-
-
-
- Oracle JDBC resource adapter (XADataSource)
-
-
- An RAR for Oracle configured as jdbc_4 in JNDI and using the
- Oracle XADataSource interface of the JDBC driver
- thin in order to use a JDBC2-XA-compliant driver.It may be described in
- a file (called for example Oracle1_XA.rar), with the following
- properties configured in the jonas-ra.xml file:
-
- <?xml version = "1.0" encoding = "UTF-8"?>
-<jonas-connector xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.objectweb.org/jonas/ns/jonas-connector_4_2.xsd" >
- <jndi-name>jdbc_4</jndi-name>
- <rarlink>JOnASJDBC_XA</rarlink>
- <jonas-config-property>
- <jonas-config-property-name>user</jonas-config-property-name>
- <jonas-config-property-value>jonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>password</jonas-config-property-name>
- <jonas-config-property-value>jonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>databaseName</jonas-config-property-name>
- <jonas-config-property-value>dbjonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>portNumber</jonas-config-property-name>
- <jonas-config-property-value>1521</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>serverName</jonas-config-property-name>
- <jonas-config-property-value>wallis</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>dbSpecificMethods</jonas-config-property-name>
- <jonas-config-property-value>:#setDriverType=thin##String</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>dsClass</jonas-config-property-name>
- <jonas-config-property-value>oracle.jdbc.xa.client.OracleXADataSource</jonas-config-property-value>
- </jonas-config-property>
-</jonas-connector>
-
-
-
-
-
- Tracing SQL Requests through P6Spy
-
-
- The P6Spy tool
- provides an easy way to trace the SQL requests sent to the
- database.
-
- To enable this tracing feature, perform the following configuration
- steps:
-
-
-
- Install the p6spy.jar
- The P6Spy
- tool was integrated into previous versions of but now it must be
- explicitly downloaded from
- here
- into $JONAS_BASE/lib/ext.
-
-
-
- Update the appropriate RAR file's
- jonas-ra.xml file by setting the
- dsClass property to
- com.p6spy.engine.spy.P6SpyDriver
-
-
-
- Set the realdriver property in the
- spy.properties file (located in $JONAS_BASE/conf) to the jdbc driver of
- your actual database.
-
-
-
- Verify that logger.org.objectweb.jonas.jdbc.sql.level is set to
- DEBUG in $JONAS_BASE/conf/trace.properties.
-
-
- Example jonas-ra.xml content:
-
- <?xml version = "1.0" encoding = "UTF-8"?>
-<jonas-connector xmlns="http://www.objectweb.org/jonas/ns"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.objectweb.org/jonas/ns
- http://www.objectweb.org/jonas/ns/jonas-connector_4_2.xsd" >
- <jndi-name>jdbc_3</jndi-name>
- <rarlink>JOnASJDBC_DM</rarlink>
- <native-lib></native-lib>
- <log-enabled>true</log-enabled>
- <log-topic>org.objectweb.jonas.jdbc.DMPostgres</log-topic>
- <pool-params>
- <pool-init>0</pool-init>
- <pool-min>0</pool-min>
- <pool-max>100</pool-max>
- <pool-max-age>0</pool-max-age>
- <pstmt-max>10</pstmt-max>
- </pool-params>
-
- <jdbc-conn-params>
- <jdbc-check-level>0</jdbc-check-level>
- <jdbc-test-statement></jdbc-test-statement>
- </jdbc-conn-params>
- <jonas-config-property>
- <jonas-config-property-name>user</jonas-config-property-name>
- <jonas-config-property-value>jonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>password</jonas-config-property-name>
- <jonas-config-property-value>jonas</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>loginTimeout</jonas-config-property-name>
- <jonas-config-property-value></jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>URL</jonas-config-property-name>
- <jonas-config-property-value>jdbc:postgresql://your_host:port/your_db</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>dsClass</jonas-config-property-name>
- <jonas-config-property-value>com.p6spy.engine.spy.P6SpyDriver</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>mapperName</jonas-config-property-name>
- <jonas-config-property-value>rdb.postgres</jonas-config-property-value>
- </jonas-config-property>
- <jonas-config-property>
- <jonas-config-property-name>logTopic</jonas-config-property-name>
- <jonas-config-property-value>org.objectweb.jonas.jdbc.DMPostgres</jonas-config-property-value>
- </jonas-config-property>
-</jonas-connector>
-
- In $JONAS_BASE/conf/spy.properties
- file:
-
- realdriver=org.postgresql.Driver
-
- In
- $JONAS_BASE/conf/trace.properties:
-
- logger.org.objectweb.jonas.jdbc.sql.level DEBUG
-
-
-
-
-
-
-
- Migration from dbm service to the JDBC RA
-
-
- The migration of a Database.properties file to
- a similar Resource Adapter can be accomplished through the execution of
- the following RAConfig tool command. Refer to the JOnAS Commands Reference
- Guide for a complete description of RAConfig command.
-
- RAConfig -dm -p MySQL1 $JONAS_ROOT/rars/autoload/JOnAS_jdbcDM MySQL_dm
-
- Generates a MySQL_dm.rar file linked to
- JOnAS_jdbcDM.rar, the jonas-ra.xml
- file inserted is created with values coming from the
- ra.xml file of the
- JOnAS_jdbcDM.rar and values from the
- MySQL1.properties file
-
- The jonas-ra.xml created by the previous
- command can be updated further, if desired. Once the additional properties
- have been configured, update the MySQL_dm.rar file
- using the following command:
-
- RAConfig -path . MySQL_dm.rar
-
-RAConfig -u jonas-ra.xml MySQL_dm.rar
-
- Extraction of jonas-ra.xml of
- MySQL_dm.rar in the working directory
-
-
-
- update MySQL_dm.rar with
- jonas-ra.xml
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/ra/JDBCXML.xml b/jonas_doc/core/src/docbook/doc-en/ra/JDBCXML.xml
deleted file mode 100644
index f943e42fdcd1f8ea752a08be01661c9ad987db8e..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/ra/JDBCXML.xml
+++ /dev/null
@@ -1,446 +0,0 @@
-
-
-
- Configuring JDBC XML datasources
-
-
- This section describes how to configure quickly JDBC datasources
- in a XML file.
-
-
- The database connections are obtained from a JDBC RA which is
- generated automatically from a
- XML definition. The temporary RAR file is generated under the
- work
- directory.
- Only the
- Driver
- interface is supported with the JDBC xml deployable. For more advanced uses,
- an explicit JDBC RA
- must be configured.
-
-
-
- The datasources are deployed by dropping the XML file into the
- deploy
- directory and are undeployed
- by removing it.
-
-
-
- The root element of the XML file is named
- datasources
- . It contains a list of
- datasource
- element, structured in two elements
- datasource-configuration
- and
- connectionManager-configuration
- . The namespace has to be set to
- xmlns="http://jonas.ow2.org/ns/datasource/1.1"
-
- . An example is given below with
- a datasource configuration for connecting the embedded HSQL database.
-
-
-
- <datasources xmlns="http://jonas.ow2.org/ns/datasource/1.1">
- <datasource>
- <datasource-configuration>
- <name>jdbc_1</name>
- <url>jdbc:hsqldb:hsql://localhost:9001/db_jonas</url>
- <classname>org.hsqldb.jdbcDriver</classname>
- <username>jonas</username>
- <password>jonas</password>
- <mapper>rdb.hsql</mapper>
- </datasource-configuration>
- <connectionManager-configuration>
- <connchecklevel>2</connchecklevel>
- <connteststmt>select count(1) from information_schema.system_tables</connteststmt>
- <connmaxage>1448</connmaxage>
- <maxopentime>60</maxopentime>
- <initconpool>1</initconpool>
- <minconpool>5</minconpool>
- <maxconpool>10</maxconpool>
- <pstmtmax>100</pstmtmax>
- <pstmtcachepolicy>Map</pstmtcachepolicy>
- <maxwaittime>30</maxwaittime>
- <maxwaiters>100</maxwaiters>
- <samplingperiod>20</samplingperiod>
- </connectionManager-configuration>
- </datasource>
- </datasources>
-
-
-
-
-
- The datasource-configuration element
- defines the required parameters to connect the database:
-
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- name
-
- JNDI name the datasource will be registered as. This
- property is
- required.
-
-
-
-
- Anyname (for example jdbc_1)
-
-
-
-
-
-
- url
-
- Database url of the form
- jdbc:<database_vendor_subprotocol>.
-
-
-
-
- Any url valid for a database provider
- (example:jdbc:postgresql://localhost:5432/mydb)
-
-
-
-
-
-
- classname
-
-
- Name of the class implementing
- java.sql.Driver
- interface in the JDBC driver.
-
-
-
-
-
- any classname representing a JDBC driver
- (example:org.postgresql.Driver)
-
-
-
-
-
-
- username
-
- Database user name
-
-
-
-
- any name
-
-
-
-
-
-
- password
-
- Database password
-
-
-
-
- any string
-
-
-
-
-
-
- mapperName
-
- Name of the JORM mapper
-
-
- The possible values can be found in the
- List
- of available mappers in JORM documentation
- .
-
-
-
-
-
-
-
-
-
-
- The connectionManager-configuration element
- defines the
- required parameters to manage the connection (pool configuration, JDBC
- connection checker, ...):
-
-
-
-
-
-
- connchecklevel
-
- Level of checking that will be done for the jdbc
- connection.
-
-
-
-
- 0 : no check (default value)
-
-
-
- 1: check connection still open
-
-
-
- 2 : send the test statement before reusing a
- connection from the pool
-
-
-
- 3: (keep-alive feature) send the test statement
- on each connection every pool-sampling-period
-
-
-
-
-
-
- connteststmt
-
- Test SQL statement sent on the connection if the
- jdbc-check-level is greater than 1.
-
-
-
-
- A SQL statement
-
-
-
-
-
-
- initconpool
-
- Initial size of the managed connection pool
-
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
-
- minconpool
-
- Minimum size of the managed connection pool.
-
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
-
- maxconpool
-
- Maximum size of the managed connection pool.
-
-
-
-
- n
-
-
-
- -1 = unlimited (default value)
-
-
-
-
-
-
- connmaxage
-
- Maximum number of minutes to keep the managed
- connection in the pool.
-
-
-
-
- 0 = an unlimited amount of time.
-
-
-
- n in minutes
-
-
-
-
-
-
- pstmtmax
-
- Maximum number of PreparedStatements per managed
- connection in the pool. Value of 0 is
- unlimited and -1 disables the cache.
-
-
-
-
- 0 = unlimited
-
-
-
- n (default value = 10)
-
-
-
- -1 = cache disabled
-
-
-
-
-
-
- pstmtcachepolicy
-
- Prepared statement cache policy to use.
-
-
-
-
- List (default value) = Array based implementation of the cache
-
-
-
- Map = Hashmap based implementation of the cache
-
-
-
-
-
-
-
- maxopentime
-
- Identifies the maximum number of minutes that a
- managed connection can be left busy.
-
-
-
-
- 0 = an unlimited amount of time (default
- value).
-
-
-
- n in minutes
-
-
-
-
-
-
- maxwaiters
-
- identifies the maximum number of waiters for a
- managed connection. Default value is 0.
-
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
-
- maxwaittime
-
- identifies the maximum number of seconds that a
- waiter will wait for a managed connection. Default value is
- 0.
-
-
-
-
- 0 (default value)
-
-
-
- n in seconds
-
-
-
-
-
-
- samplingperiod
-
- identifies the number of seconds that will occur
- between statistics samplings of the pool. Default is 30
- seconds.
-
-
-
-
- n in seconds (default value = 30s)
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/ra/JMSRA.xml b/jonas_doc/core/src/docbook/doc-en/ra/JMSRA.xml
deleted file mode 100644
index 312865a02640631ee1251e9458fb9ddfa1407f8b..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/ra/JMSRA.xml
+++ /dev/null
@@ -1,1118 +0,0 @@
-
-
-
- Configuring JMS Resource Adapters
-
-
- JMS Resource adapters can be deployed, either via the JOnAS administration console,
- or via the jonas admin -a command,
- or by dropping the file in the $JONAS_BASE/deploy directory.
-
- JMS connections are obtained from a JMS RA, which is configured to
- identify and access a JMS server.
-
- The JORAM resource adapter archive
- (joram_ra_for_jonas-{joram.version}.rar) is provided with the JOnAS
- distribution. It is located in the $JONAS_BASE/repositories/maven2-internal/org/objectweb/joram/joram_ra_for_jonas/{joram.version}/joram_ra_for_jonas-{joram.version}.rar
- directory. This file has to be changed if a particular configuration is
- needed for JORAM.
-
- By default, the joram.xml file, a deployment plan related to JORAM, is
- present in the $JONAS_BASE/deploy directory. This
- deployment plan is used to deploy JORAM. It declares among others the JORAM
- resource adapter archive to deploy.
-
-
-
- JORAM Resource Adapter configuration files
-
-
- The JORAM RA may be seen as the central authority to go through for
- connecting and using a JORAM platform. The RA is provided with a default
- deployment configuration which:
-
-
-
- Starts a collocated JORAM server in non-persistent mode, with id
- 0 and name s0, on host localhost and using port 16010; for doing so it
- relies on both an a3server.xml file located in
- the $JONAS_BASE/conf directory
- and the jonas-ra.xml file located within the RA.
-
-
-
- Creates managed JMS ConnectionFactory instances and binds them
- with the names CF, QCF, and TCF.
-
-
-
- Creates administered objects for this server (JMS destinations
- and non-managed factories) as described by the
- joramAdmin.xml, located in the $JONAS_BASE/conf directory; those objects
- are bound with the names sampleQueue,
- sampleTopic, JCF, JQCF, and
- JTCF.
-
-
-
- The default configuration may, of course, be modified.
-
- The JORAM integration into is composed of 3 different parts: server, RA, and
- administration. Each part contains its own configuration files:
-
-
-
- a3servers.xml is the JORAM
- platform configuration file, i.e. the server part. The file is located
- in the $JONAS_BASE/conf
- directory.
-
-
-
- ra.xml and jonas-ra.xml
- are the resource adapter configuration files. They are
- embedded in the resource adapter (META-INF directory).
-
-
-
- joramAdmin.xml contains the administration
- tasks to be performed by the JORAM server such as the JMS objects
- creation. It is located in the $JONAS_BASE/conf directory.
-
-
-
-
-
- JORAM server configuration : a3servers.xml
-
-
- The a3server.xml
- ($JONAS_BASE/conf/a3server.xml) file describes the
- JORAM platform, i.e., the network domain, the used transport protocol,
- and the reachable JORAM servers. It is used by a JORAM server at start
- time. By default, only one collocated JORAM server is defined (s0) based
- on the tcp/ip protocol. A distributed configuration example is provided
- in the how-to document and other examples are available in JORAM's user
- guide.
-
- <config>
- <property name="Transaction" value="fr.dyade.aaa.util.NullTransaction"/>
- <server id="0" name="S0" hostname="localhost">
- <service class="org.objectweb.joram.mom.proxies.ConnectionManager"
- args="root root"/>
- <service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
- args="16010"/>
-
- </server>
-</config>
-
- This property means that the non persistent mode for JMS is
- choosen. In order to use persistent mode, the value must be
- changed to "fr.dyade.aaa.util.NTransaction"
-
-
-
- Here can be set the server id and the host where the server
- run
-
-
-
- args specifies the port number the JORAM server is listening
- on
-
-
-
- The above configuration describes a JORAM platform made up of one
- unique JORAM server (id 0, name s0), running on localhost, listening on
- port 16010. Those values are taken into account by the JORAM server when
- starting. However, they should match the values
- set in the deployment descriptor of the RA, otherwise the
- adapter either will not connect to the JORAM server, or it will build
- improper connection factories.
-
- The joram_raconfig command allows to modify these parameters in
- all the configuration files.
-
- If used in non-collocated mode, joram can be started with the
- JmsServer command which loads the
- $JONAS_BASE/conf/a3server.xml configuration file.
-
-
-
-
- Resource Adapter configuration: ra.xml, jonas-ra.xml
-
-
- The ra.xml file is the standard deployment
- descriptor for the JORAM adapter and the jonas-ra.xml
- file is the JOnAS-specific deployment descriptor for the
- JORAM adapter. These files set the central configuration of the adapter,
- define and set managed connection factories for outbound communication,
- and define a listener for inbound communication. jonas-ra.xml
- contains specific parameters such as pool parameters or jndi
- names, but also may redefine the parameters of some ra.xml
- files and override their values. Globally, a good way to
- proceed is to keep the original ra.xml file with
- the default values and to customize the configuration only in the
- jonas-ra.xml file.
-
- Changing the configuration of the RA requires extracting and
- editing the deployment descriptor and updating the archive file. There
- are several possible ways to do this:
-
-
-
- With the RAConfig command to extract jonas-ra.xml, do the
- following:
-
- RAConfig -path . joram_for_jonas_ra.rar
-
- Then, to update the archive, do the following:
-
- RAConfig -u jonas-ra.xml joram_for_jonas_ra.rar
-
-
-
- Through the jonasAdmin console (refer to Administration guide
- for a complete description).
-
- In the jonasAdmin's tree, the Resource Adapter Module node
- (under the deployment node) contains a configure tab that allows
- editing of both the ra.xml file and the jonas-ra.xml file of the
- undeployed RA.
-
-
-
- Through the joram_raconfig utility (refer to joram_raconfig
- description for a complete description).
-
- This tool allows easy modification to the network parameters
- of the JORAM server in all the configuration files.
-
-
-
- The following properties are related to the central configuration
- of the adapter; they are set via some <jonas-config-property>
- elements:
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- CollocatedServer
-
- Running mode of the JORAM server to which the adapter
- gives access.
-
-
-
- True: when deploying, the adapter starts a
- collocated JORAM server.
-
-
-
- False: when deploying, the adapter connects to a
- remote JORAM server.
-
-
-
- Nothing (default True value is then set).
-
-
-
-
-
- PlatformConfigDir
-
- Directory where the a3servers.xml
- and joramAdmin.xml files are
- located.
-
-
-
- Any String describing an absolute path (ex:
- /myHome/myJonasRoot/conf).
-
-
-
- Empty String, files will be searched in
- $JONAS_BASE/conf
-
-
-
- Nothing (default empty string is then set).
-
-
-
-
-
- PersistentPlatform
-
- Persistence mode of the collocated JORAM server. - not
- taken into account if the JORAM server is set as non-collocated.
- - If true, set the property 'Transaction' to
- 'fr.dyade.aaa.util.NTransaction' before launching the JORAM
- server. - If false, set the property 'Transaction' to
- 'fr.dyade.aaa.util.NullTransaction' before launching the JORAM
- server. - Warning, if the 'Transaction' property is set in the
- a3server.xml file, this value is ignored.
-
-
-
- True: starts a persistent JORAM server.
-
-
-
- False: starts a non-persistent JORAM server.
-
-
-
- Nothing (default False value is then set).
-
-
-
-
-
- ServerId
-
- Identifier of the JORAM server to start (not taken into
- account if the JORAM server is set as non-collocated).
-
-
-
- Identifier corresponding to the server to start
- described in the a3servers.xml file (ex: 1).
-
-
-
- Nothing (default 0 value is then set).
-
-
-
-
-
- ServerName
-
- Logical name of the JORAM server to start.In the
- collocated case, this parameter specifies the storage path of
- the persistent mode (absolute or relative path). If the JORAM
- server is non-collocated, it must be set to the name of the
- already started JORAM server (this is necessary for management
- purpose).
-
-
-
- Storage path of the persistent mode for the
- collocated case (ex: /tmp/s0).
-
-
-
- Name of the started server as described in the
- a3servers.xml in the non collocated case (ex: s1)
-
-
-
- Nothing (default s0 name is then set and the current
- directory is used for storing the persistent data).
-
-
-
-
-
- AdminFileXML
-
- Name of the file describing the administration tasks to
- be performed by the JORAM server, i.e., JMS destinations to
- create, users to create, ... If the file does not exist, or is
- not found, no administration task is performed.
-
-
-
- Name of the file (ex: myAdminFile.xml).
-
-
-
- Nothing (default joramAdmin.xml name is then
- set).
-
-
-
-
-
- HostName
-
- Name of the host where the JORAM server runs, used for
- accessing a remote JORAM server (non-collocated mode), and for
- building appropriate connection factories.
-
-
-
- Any host name (ex: myHost).
-
-
-
- Nothing (default localhost name is then set).
-
-
-
-
-
- ServerPort
-
- Port the JORAM server is listening on, used for accessing
- a remote JORAM server (non-collocated mode), and for building
- appropriate connection factories.
-
-
-
- Any port value (ex: 16030).
-
-
-
- Nothing (default 16010 value is then set).
-
-
-
-
-
- ConnectingTimer
-
- Duration in seconds during which connecting is attempted
- (connecting might take time if the server is temporarily not
- reachable)
-
-
-
- 0 : set for connecting only once and aborting if
- connecting failed (default value)
-
-
-
- n : duration in seconds
-
-
-
-
-
- CnxPendingTimer
-
- Period in milliseconds between two ping requests sent by
- the client connection to the server;
-
-
-
- 0 means "notimer" (default value)
-
-
-
- n: duration in milliseconds
-
-
-
-
-
- TxPendingTimer
-
- Duration in seconds during which a JMS transacted (non
- XA) session might be pending; above that duration the session is
- rolled back and closed.
-
-
-
- 0 value means "no timer".
-
-
-
- n: duration in seconds
-
-
-
-
-
- DeleteDurableSubscription
-
- Indicates the durable Subscriptions must be deleted when
- the consumer is closed
-
-
-
- True (previous behaviour)
-
-
-
- False (default value)
-
-
-
-
-
-
-
- The <jonas-connection-definition>
- elements wrap properties related to the managed connection
- factories:
-
- There are three managed connection factories:
-
-
-
- A Queue managed connection factory registered in JNDI with the
- name QCF
-
-
-
- A Topic managed connection factory registered in JNDI with the
- name TCF
-
-
-
- A managed connection factory registered in JNDI with the name
- CF
-
-
-
- Here are the properties that can be configured for each managed
- connection factory:
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- jndi-name
-
- Name used for binding the constructed connection
- factory.
-
- Any name (ex: myQueueConnectionFactory). Default
- values are
-
- QCF for the Queue
- managed connection factory
-
-
-
- TCF for the Topic
- managed connection factory
-
-
-
- CF for the managed
- connection factory
-
-
-
-
-
- UserName
-
- Default user name that will be used for opening JMS
- connections.
-
-
-
- Any name (ex: myName).
-
-
-
- Nothing (default anonymous name
- will be set).
-
-
-
-
-
- Password
-
- Default user password that will be used for opening JMS
- connections.
-
-
-
- Any name (ex: myPass).
-
-
-
- Nothing (default anonymous
- password will be set).
-
-
-
-
-
- Collocated
-
- Specifies if the connections that will be created from
- the factory should be TCP or local-optimized connections
-
-
-
- True (for building local-optimized
- connections).
-
-
-
- False (for building TCP connections).
-
-
-
- Nothing (default TCP mode will be set).
-
-
-
-
-
-
-
-
-
- The <jonas-activationspec> element wraps a property related
- to inbound messaging:
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- jndi-name
-
- Binding name of a JORAM object to be used by 2.1
- MDBs.
-
-
-
- Any name (by default:joramActivationSpec).
-
-
-
-
-
-
-
-
-
- The Pooling Tags are the same than those
- for other RAs:
-
-
-
-
-
- property name
-
- description
-
- possible values
-
-
-
- pool-init
-
- Initial size of the managed connection pool
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-min
-
- Minimum size of the managed connection pool.
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-max
-
- Maximum size of the managed connection pool.
-
-
-
- n
-
-
-
- -1 = unlimited (default value)
-
-
-
-
-
- pool-max-age-minutes
-
- Maximum number of minutes to keep the managed
- connection in the pool.
-
-
-
- 0 = an unlimited amount of time.
-
-
-
- n in minutes
-
-
-
-
-
- pstmt-max
-
- Maximum number of PreparedStatements per managed
- connection in the pool. Only needed with the JDBC RA of JOnAS
- or another database vendor's RAR. Value of 0 is unlimited and
- -1 disables the cache.
-
-
-
- 0 = unlimited
-
-
-
- n (default value = 10)
-
-
-
- -1 = cache disabled
-
-
-
-
-
- pool-max-opentime
-
- Identifies the maximum number of minutes that a managed
- connection can be left busy.
-
-
-
- 0 = an unlimited amount of time (default
- value).
-
-
-
- n in minutes
-
-
-
-
-
- pool-max-waiters:
-
- identifies the maximum number of waiters for a managed
- connection. Default value is 0.
-
-
-
- 0 (default value)
-
-
-
- n
-
-
-
-
-
- pool-max-waittime
-
- identifies the maximum number of seconds that a waiter
- will wait for a managed connection. Default value is
- 0.
-
-
-
- 0 (default value)
-
-
-
- n in seconds
-
-
-
-
-
- pool-sampling-period:
-
- identifies the number of seconds that will occur
- between statistics samplings of the pool. Default is 30
- seconds.
-
-
-
- n in seconds (default value = 30s)
-
-
-
-
-
-
-
-
-
-
-
-
- JMS Applications Configuration
-
-
- joramAdmin.xml file describes the
- configuration related to the application. It describes the
- administration objects in the JORAM server such as the JMS objects, the
- users, or the non-managed factories. In other words, it defines the
- JORAM objects to be (optionally) created when deploying the
- adapter.
-
- In earlier version the joram-admin.cfg was
- used for this same purpose but it is now deprecated.
-
- The default file provided with creates a queue bound with the name
- sampleQueue, a topic bound with the name
- sampleTopic, sets the
- anonymous user, and creates and binds non-managed
- connection factories named JCF,
- JQCF and JTCF
-
-
-
-
- All administration tasks are performed by the server
- connected but may affect remote JORAM servers to which the
- adapter is connected through the ServerId
- attribute.
-
-
-
- If a queue, a topic or a user already exists on the
- JORAM server (for example, because the server is in persistent
- mode and has re-started after a crash, or because the adapter
- has been deployed, undeployed and is re-deployed giving access
- to a remote JORAM server), it will be retrieved instead of
- being re-created.
-
-
-
-
- The format of this file is XML. Here are some examples:
-
-
-
- simple example:
-
-
- <?xml version="1.0"?>
- <JoramAdmin>
- <AdminModule>
- <collocatedConnect name="root" password="root"/>
- </AdminModule>
- <ConnectionFactory className="org.objectweb.joram.client.jms.tcp.TcpConnectionFactory">
- <tcp host="localhost"
- port="16010"/>
- <jndi name="JCF"/>
- </ConnectionFactory>
- <ConnectionFactory className="org.objectweb.joram.client.jms.tcp.QueueTcpConnectionFactory">
- <tcp host="localhost"
- port="16010"/>
- <jndi name="JQCF"/>
- </ConnectionFactory>
- <ConnectionFactory className="org.objectweb.joram.client.jms.tcp.TopicTcpConnectionFactory">
- <tcp host="localhost"
- port="16010"/>
- <jndi name="JTCF"/>
- </ConnectionFactory>
- <User name="anonymous"
- password="anonymous"
- serverId="0"/>
- <Queue name="sampleQueue">
- <freeReader/>
- <freeWriter/>
- <jndi name="sampleQueue"/>
- </Queue>
- <Topic name="sampleTopic">
- <freeReader/>
- <freeWriter/>
- <jndi name="sampleTopic"/>
- </Topic>
- </JoramAdmin>
-
-
-
-
- For requesting the creation of a new object, simply add the
- element in the file. For example, to add a queue 'MyQueue', add the
- following XML element:
-
- <Queue name="myQueue">
- <freeReader/>
- <freeWriter/>
- <jndi name="myQueue"/>
- </Queue>
-
-
-
- When the JORAM is not collocated, the AdminModule must be
- defined as follows:
-
- <AdminModule>
- <connect host="localhost"
- port="16020"
- name="root"
- password="root"/>
- </AdminModule>
-
- The port number must be set with the server port number
- (defined in the a3servers.xml and in the
- JORAM's RAR configuration ra.xml and
- jonas-ra.xml files).
-
-
-
- Possible parameters for a queue definition:
-
- <Queue name=""
- serverId=""
- className=""
- dmq=""
- nbMaxMsg=""
- threshold="">
- <property name="" value=""/>
- <property name="" value=""/>
- <reader user=""/>
- <writer user=""/>
- <freeReader/>
- <freeWriter/>
- <jndi name=""/>
- </Queue>
-
-
-
- Possible parameters for a topic definition:
-
- <Topic name=""
- parent=""
- serverId=""
- className=""
- dmq="">
- <property name="" value=""/>
- <property name="" value=""/>
- <reader user=""/>
- <writer user=""/>
- <freeReader/>
- <freeWriter/>
- <jndi name=""/>
- </Topic>
-
-
-
- Example of a dead message queue definition:
-
- <DMQueue name="DMQ"
- serverId="0">
- <reader user="anonymous"/>
- <writer user="anonymous"/>
- <freeReader/>
- <freeWriter/>
- <jndi name="DMQ"/>
- </DMQueue>
-
-
-
- Example of a scheduler queue definition:
-
- <Destination type="queue"
- serverId="0"
- name="schedulerQueue"
- className="com.scalagent.joram.mom.dest.scheduler.SchedulerQueue">
- <freeReader/>
- <freeWriter/>
- <jndi name="schedulerQueue"/>
- </Destination>
-
-
-
- Example of a clustered queues destination:
-
- <Cluster>
- <Queue name="queue0"
- serverId="0"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <property name="period" value="10000"/>
- <property name="producThreshold" value="50"/>
- <property name="consumThreshold" value="2"/>
- <property name="autoEvalThreshold" value="false"/>
- <property name="waitAfterClusterReq" value="1000"/>
- <jndi name="queue0"/>
- </Queue>
- <Queue name="queue1"
- serverId="1"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <property name="period" value="10000"/>
- <property name="producThreshold" value="50"/>
- <property name="consumThreshold" value="2"/>
- <property name="autoEvalThreshold" value="false"/>
- <property name="waitAfterClusterReq" value="1000"/>
- <jndi name="queue1"/>
- </Queue>
- <Queue name="queue2"
- serverId="2"
- className="org.objectweb.joram.mom.dest.ClusterQueue">
- <freeReader/>
- <freeWriter/>
- <property name="period" value="10000"/>
- <property name="producThreshold" value="50"/>
- <property name="consumThreshold" value="2"/>
- <property name="autoEvalThreshold" value="false"/>
- <property name="waitAfterClusterReq" value="1000"/>
- <jndi name="queue2"/>
- </Queue>
- <freeReader/>
- <freeWriter/>
- <reader user="user0"/>
- <writer user="user0"/>
- <reader user="user1"/>
- <writer user="user1"/>
- <reader user="user2"/>
- <writer user="user2"/>
- </Cluster>
-
-
-
-
-
-
- joram_raconfig command
-
-
-
-
-
-
-
-
-
-
- JORAM's Resource Adapter tuning
-
-
-
-
-
-
- ManagedConnection Pool
-
-
- A pool of ManagedConnection is defined for each factory
- (connection definition) specified in the jonas-ra.xml file. See the pool
- parameters in the .
-
-
-
-
- Session/Thread pool in the JORAM RA
-
-
- The JORAM RA manages a pool of session/thread for each connection
- and, by default, the maximum number of parallel sessions is set to
- 10.
-
- When linked with an message-driven bean, this maximum number of
- entries in the pool corresponds to the maximum number of messages that
- can be processed in parallel per message-driven bean. A session is
- released to the pool just after the message processing (onMessage()).
- When the maximum is reached, the inquiries for a session creation are
- blocked until a session becomes available in the pool.
-
- The maxNumberOfWorks property can be set in
- the message-driven bean standard deployment descriptor. For example, the
- code below can be added to limit the number of parallel sessions to 100
- (default value is 10).
-
- <activation-config-property>
- <activation-config-property-name>maxNumberOfWorks</activation-config-property-name>
- <activation-config-property-value>100</activation-config-property-value>
- </activation-config-property>
-
- As this parameter set the max number of messages that can be
- treated simultaneously, the max-cache-size must be
- set accordingly in the specific deployment descriptor.
-
-
-
-
-
- Undeploying and Redeploying a JORAM Adapter
-
-
- Undeploying a JORAM adapter either stops the collocated JORAM server
- or disconnects from a remote JORAM server. It is then possible to deploy
- the same adapter again. If set for running a collocated server, it will
- re-start it. If the running mode is persistent, then the server will be
- retrieved in its pre-undeployment state (with the existing destinations,
- users, and possibly messages). If set for connecting to a remote server,
- the adapter will reconnect and access the destinations it previously
- created.
-
- In the collocated persistent case, if the intent is to start a brand
- new JORAM server, its persistence directory should be removed. This
- directory is located in JOnAS' running directory and has the same name as
- the JORAM server (for example, s0/ for server "s0").
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/security/configsecurity.xml b/jonas_doc/core/src/docbook/doc-en/security/configsecurity.xml
deleted file mode 100644
index 39cd11c55881b7cb11638a003ecd8962431813f9..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/security/configsecurity.xml
+++ /dev/null
@@ -1,974 +0,0 @@
-
-
-
- Configuring Security
-
-
- The security service is used by the
- ejb,
- web, ws services to provide
- security for
- components. The ejb service provides
- security in two forms: declarative security and programmatic security that
- is described in the EJB Programmer's
- Guide: Security Management .
-
- The security service exploits
- security roles and method permissions located in the deployment descriptors.
-
- A main concept in security is Authentication
- which is the mechanism telling the container the identity of the user making
- the current request.
-
- A caller is a client that may be a servlet client or a container
- client. Usually a client proves its identity by a couple user/password or a
- certificate (credential). Once the identification is
- correct
- must build a security context that will be propagated with requests and be
- used by the container to verify that the user exists and has permissions
- sufficient to make the request.
-
- JAAS is a standard framework for authenticating users. It defines
- configuration files (jaas.config) and interfaces like
- the LoginModule interface that may be used in
- to
- perform authentication tasks.
-
- Lightweight authentication mechanism using JACC may be used to
- authenticate servlet client.
-
- In the Tomcat documentation we can find this definition: A
- Realm is a "database" of usernames and passwords that identify valid users
- of a web application (or set of web applications), plus an enum eration of
- the list of roles associated with each valid user.
-
- In both authentication mechanisms the container use a realm
- to verify validity of users. In JOnAS the
- realm may be a database accessed via JDBC (Database
- realm), a LDAP directory (LDAP realm) or a flat file (Memory realm). The
- type of realm to use is specified in
- $JONAS_BASE/conf/jonas-realm.xml.
-
-
-
- jonas-realm.xml
-
-
- The file $JONAS_BASE/conf/jonas-realm.xml file
- describes:
-
-
-
- the content of flat file memory realm
-
-
-
- how to access a database realm
-
-
-
- how to access a LDAP realm
-
-
-
-
-
- Memory realm
-
-
- The memoryrealm must be named and defines
- users, groups and roles in the section <jonas-memoryrealm>
-
- <jonas-memoryrealm>
- <memoryrealm name="memrlm_1">
- <roles>
- <role name="jonas-admin" description="JonasAdmin role" />
- <role name="tomcat" description="Used in examples" />
- </roles>
- <groups>
- <group name="jonas"
- roles="jonas-admin,tomcat,jaas,ws-security" description="All authorization" />
- </groups>
- <users>
- <user name="tomcat" password="tomcat" roles="tomcat,jonas-admin,manager" />
- <user name="jetty" password="jetty" roles="jetty" />
- <!-- Example of a crypt password : password for jadmin is : jonas -->
- <user name="jadmin" password="{MD5}nF3dVBB3NPfRgzWlJFwoaw==" roles="jonas-admin" />
- <user name="jps_admin" password="admin" roles="administrator" />
- <user name="supplier" password="supplier" roles="administrator" />
- <!-- Another crypt example in another format : password is jonas -->
- <!-- JonasAdmin uses name="jonas" password="jonas" -->
- <user name="jonas" password="SHA:NaLG+uYfgHeqth+qQBlyKr8FCTw=" groups="jonas" />
- <user name="principal1" password="password1" roles="role1" />
- <user name="principal2" password="password2" roles="role2" />
- </users>
- </memoryrealm>
-</jonas-memoryrealm>
-
- memoryrealm must be named. This name will be used in the web
- container configuration file
-
-
-
- definition of a security role
-
-
-
- definition of a group of roles
-
-
-
- definition of a user with non encrypted password and a list
- of roles
-
-
-
- definition of a user with encrypted password (format
- MD5)
-
-
-
- definition of a user with encrypted password (format
- SHA)
-
- To get the correct encoded password, the MD5/SHA digest
- must be base64 encoded:
-
- $ echo -n jonas | openssl md5 -binary | base64
-$ nF3dVBB3NPfRgzWlJFwoaw==
-
- This command is available on Linux or Cygwin
-
- An alternate way to obtain a correct encoded password would be to
- to write a java class that uses sun.misc.BASE64Encoder
-
-
-
-
- database realm
-
-
- Users, groups, and roles information are stored in a database; the
- configuration for accessing the corresponding database is described in
- the section <jonas-dsrealm>
-
- The configuration requires the name of a datasource, the tables
- used, and the names of the columns.
-
- <jonas-dsrealm>
- <dsrealm name="dsrlm_1"
- dsName="jdbc_1"
- userTable="realm_users" userTableUsernameCol="user_name" userTablePasswordCol="user_pass"
- roleTable="realm_roles" roleTableUsernameCol="user_name" roleTableRolenameCol="role_name">
- </dsrealm>
-</jonas-dsrealm>
-
- dsrealm must be named
-
-
-
- JNDI name of the dataSource for
- accessing the database via JDBC
-
-
-
- defines the name of the user table and the name of the
- columns for username/password
-
-
-
- defines the name of the role table and the name of the
- columns for username/rolename
-
-
-
- to use this database a Datasource
- configuration with the right JNDI name for the dbm
- service must be set in the jonas.properties
- file.
-
-
-
-
- LDAP realm
-
-
- Users, groups, and roles information are stored in an LDAP
- directory. This is described in the section
- <jonas-ldaprealm>
-
- There are some optional parameters. If they are not specified,
- some of the parameters are set to a default value. For example if the
- providerUrl element is not set, the default value is
- ldap://localhost:389. The jonas-realm_1_0.dtd
- DTD file show the default values.
-
-
-
- minimal example:
-
- <jonas-ldaprealm>
-<ldaprealm name="ldaprlm_1"
- baseDN="dc=jonas,dc=ow2,dc=org" />
-</jonas-ldaprealm>
-
- ldaprealm must be named
-
-
-
- to access to LDAP server
-
- For this sample, it is assumed that the LDAP server is
- on the same computer and is on the default port
- (389).
-
-
-
-
-
-
-
-
-
- Servlet Authentication
-
-
- Depending on the servlet container used, configuration
- differs.
-
-
-
- Authentication with User/password and Tomcat 6
-
-
-
-
- Tomcat configuration:
-
- Tomcat embedded in the distribution is configured in
- $JONAS_BASE/conf/tomcat6-server.xml to use the
- memory realm named memrlm_1
-
- <Server>
-[...]
-<Realm className="org.ow2.jonas.web.tomcat6.security.Realm" resourceName="memrlm_1" />
-[...]
-</Server>
-
- The authentication mechanism implemented by the class
- org.ow2.jonas.web.tomcat6.security.Realm is
- able to work with database or LDAP realm configured in
- jonas-realm.xml. The value of resourceName
- attribute identifies the realm to be used in
- jonas-realm.xml.
-
-
-
- webapp configuration:
-
- In the web.xml of the web application a
- basic authentication or a Form based
- authentication may be used
-
- <web-app>
-<login-config>
- <auth-method>BASIC</auth-method>
- <realm-name>Example Basic Authentication Area</realm-name>
- </login-config>
-</web-app>
-
- or
-
- <web-app>
- <login-config>
- <auth-method>FORM</auth-method>
- <form-login-config>
- <form-login-page>login.jsp</form-login-page>
- <form-error-page>error.jsp</form-error-page>
- </form-login-config>
- </login-config>
-</web-app>
-
- Like basic authentication, form-based authentication is not
- secure, since the content of the user dialog is sent as plain text,
- and the target server is not authenticated.
-
- To overcome this vulnerability the authentication protocol may
- be run over a SSL session that ensures that all message contents are
- protected for confidentiality.
-
-
-
-
-
-
- Authentication with certificate and Tomcat 6
-
-
-
- In this case, users will not have to enter a login/password.
- They will just present their certificates and authentication is
- performed transparently by the browser (after the user has imported
- his certificate into it). Therefore, the identity presented to the
- server is not a login, but a Distinguished Name(DN).
-
-
- jonas-realm
- configuration:
-
- The name identifying the person to whom the certificate
- belongs looks like the following: CN=Someone Unknown,
- OU=ObjectWeb, O=JOnAS, C=ORG with:
-
- CN : Common Name
-
- OU : Organizational Unit
-
- O : Organization
-
- C : Country Name
-
- E : Email Address
-
- L : Locality
-
- ST :State or Province Name
-
- The Subject in a certificate contains the main attributes
- and may include additional ones, such as Title, Street Address,
- Postal Code, Phone Number.
-
- In the jonas-realm.xml a user with password looks
- like:<user name="jps_admin" password="admin" roles="administrator"/>A
- certificate-based user must have its DN preceded by the String:
- ##DN## example:<user name="##DN##CN=whale, OU=ObjectWeb, O=JOnAS, L=JOnAS, ST=JOnAS, C=ORG"
- password="" roles="jadmin" />
-
-
-
- Tomcat Realm configuration:
-
- The current Realm in $JONAS_BASE/conf/tomcat6-server.xml
- must be replaced by:
-
- <Server>
-[...]
-<Realm className="org.ow2.jonas.web.tomcat6.security.Realm" />
-[...]
-</Server>
-
- The class specified uses the JAAS model to authenticate the
- users. Thus, to choose the correct realm to be used for
- authentication, JAAS must be configured see in .
-
-
-
- Tomcat SSL configuration:
-
- The following example of <connector> element must be
- uncommented in $JONAS_BASE/conf/tomcat6-server.xml and customized
- (if necessary):
-
- <Server>
-[...]
-<!-- Define a SSL Coyote HTTP/1.1 Connector on port 9043 -->
- <!--
- <Connector port="9043" maxHttpHeaderSize="8192"
- maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
- enableLookups="false" disableUploadTimeout="true"
- acceptCount="100" scheme="https" secure="true"
- clientAuth="false" sslProtocol="TLS" />
- -->
-[...]
-</Server>
-
- A complete description of SSL configuration can be found in
- SSL
- Configuration HOW-TO
-
-
-
- Webapp configuration:
-
- In the web.xmlof the web application a
- Client Certificate Authentication Configuration
- must be set, a security-constraint may be used if
- needed; example:
-
- <web-app>
- <login-config>
- <auth-method>CLIENT-CERT</auth-method>
- <realm-name>Example Authentication Area</realm-name>
- </login-config>
-
- <security-constraint>
- ..
- <user-data-constraint>
- <transport-guarantee>CONFIDENTIAL</transport-guarantee>
- </user-data-constraint>
- </security-constraint>
-</web-app>
-
-
-
-
-
-
- Servlet Authentication with User/password and Jetty 6.x
-
-
-
-
- Jetty configuration
-
- A web-jetty.xml file must be provided in the WEB-INF directory in the .war file in which a security
- interceptor
- org.ow2.jonas.web.jetty6.security.Realm form
- is specified instead of the default one:
-
- <Configure class="org.mortbay.jetty.webapp.WebAppContext">
- <Call name="setRealmName">
- <Arg>Example Basic Authentication Area</Arg>
- </Call>
- <Call name="setRealm">
- <Arg>
- <New class="org.ow2.jonas.web.jetty6.security.Realm">
- <Arg>Example Basic Authentication Area</Arg>
- <Arg>memrlm_1</Arg>
- </New>
- </Arg>
- </Call>
-</Configure>
-
-
-
- webapp configuration:
-
- is similar to the webapp configuration with Tomcat see .
-
-
-
-
-
-
- Authentication with certificate and Jetty 6.x
-
-
-
-
-
-
- Jetty Realm configuration:
-
- Edit the web-jetty.xml file under WEB-INF directory in the
- .war file to declare a Realm name and a Realm:
-
- <Configure class="org.mortbay.jetty.webapp.WebAppContext">
-...
-!-- Set the same realm name as the one specified in <realm-name> in <login-config>
- in the web.xml file of your web application -->
-<Call name="setRealmName">
- <Arg>Example Authentication Area</Arg>
-</Call>
-<!-- Set the class Jetty has to use to authenticate the user and a title name for
- the pop-up window -->
-<Call name="setRealm">
- <Arg>
- <New class="org.ow2.jonas.web.jetty6.security.Realm">
- <Arg>JAAS on Jetty</Arg>
- </New>
- </Arg>
-</Call>
-...
-</Configure>
-
- The class specified uses the JAAS model to authenticate the
- users. Thus, to choose the correct realm to be
- used for authentication, JAAS must be configured, see in .
-
-
-
- Jetty SSL configuration:
-
- In the global deployment descriptor of Jetty (the jetty6.xml
- file), located in the $JONAS_BASE/conf directory, uncomment this
- part:
-
- <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
- <!-- Add a HTTPS SSL listener on port 9043 -->
- <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
- <!-- UNCOMMENT TO ACTIVATE
- <Call name="addListener">
- <Arg>
- <New class="org.mortbay.http.SunJsseListener">
- <Set name="Port">9043</Set>
- <Set name="MinThreads">5</Set>
- <Set name="MaxThreads">100</Set>
- <Set name="MaxIdleTimeMs">30000</Set>
- <Set name="LowResourcePersistTimeMs">2000</Set>
- <Set name="Keystore"><SystemProperty name="jetty.home" default="."/>/etc/demokeystore</Set>
- <Set name="Password">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
- <Set name="KeyPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
- </New>
- </Arg>
- </Call>
- -->
- A complete description of howto configure SSL for Jetty may be founf
- here
-
-
-
- webapp configuration
-
- is similar to the webapp
- configuration with Tomcat
-
-
-
- jonas-realm configuration
-
- is similar to the jonas-realm configuration with
- Tomcat
-
-
-
-
-
-
-
- Client container Authentication
-
-
- To enable authentication mechanism in a client container it is
- necessary to
-
-
-
- choose a callback handler
-
- Callback handlers are responsible to get the user identity and
- to store it.
-
- The choice of the callback handler is done
- in the application-xml file, for example:
-
- <application-client>
- <callback-handler>org.ow2.jonas.security.auth.callback.LoginCallbackHandler</callback-handler>
-</application-client>
-
- JOnAS provides several callback handlers
- all these handlers are defined in the package
- org.ow2.jonas.security.auth.callback
- :
-
-
-
- LoginCallbackHandler : it is a text
- based handler that gets the user and password via stdin
-
-
-
- DialogCallbackHandler: handler using
- a Swing dialog window to query user and password
-
-
-
- NoInputCallbackHandler: is
- responsible to store a user/password
-
-
-
- CertificateCallback: is responsible
- to store a certificate
-
-
-
-
-
- configure JASS for setting the LoginModules to be used to
- perform authentication see
-
-
-
- In the $JONAS_ROOT/examples/javaee5-earsample
- directory can be found examples of clients using JAAS authentication as
- well as one java client without container client that uses also
- JAAS.
-
-
-
-
- JAAS configuration
-
-
- The JAAS configuration is made via the JAAS Login
- Configuration File
-
- A login configuration file consists of one or more entries, each
- specifying which underlying authentication technology should be used for a
- particular application or applications.
-
- The contents of the JAAS configuration file has the structure
- below:
-
- Application_1 {
- LoginModuleClassA Flag Options;
- LoginModuleClassB Flag Options;
- LoginModuleClassC Flag Options;
-};
-
-Application_2 {
- LoginModuleClassB Flag Options;
- LoginModuleClassC Flag Options;
-};
-
-Other {
- LoginModuleClassC Flag Options;
- LoginModuleClassA Flag Options;
-};
-
-
- There is a flag associated with all the LoginModules to configure
- their behaviour in case of success or failure:
-
-
-
- required - The LoginModule is
- required to succeed. If it succeeds or fails, authentication still
- proceeds through the LoginModule list.
-
-
-
- requisite - The LoginModule is
- required to succeed. If it succeeds, authentication continues through
- the LoginModule list. If it fails, control immediately returns to the
- application (authentication does not proceed through the LoginModule
- list).
-
-
-
- sufficient - The LoginModule is
- not required to succeed. If it does succeed, control immediately
- returns to the application (authentication does not proceed through
- the LoginModule list). If it fails, authentication continues through
- the LoginModule list.
-
-
-
- optional - The LoginModule is
- not required to succeed. If it succeeds or fails, authentication still
- proceeds through the LoginModule list.
-
-
-
-
-
- Default JAAS configuration
-
-
- JOnAS provides in
- $JONAS_BASE/conf/jaas.config a JAAS Login
- Configuration File already configured with some login
- configuration.
-
- There are two requirements: the entry dedicated to Tomcat must be
- named tomcat, and the entry for Jetty,
- jetty. Note that everything in this
- file is case-sensitive.
-
- The predifined entries are:
-
-
-
- tomcat used for
- authentication with the web container Tomcat
-
-
-
- jetty used for authentication
- with the web container Jetty
-
-
-
- jaasclient may be used for
- autentication in a fat client
-
-
-
- The default configuration for the web container Tomcat is the
- following:
-
- tomcat {
- org.ow2.jonas.security.auth.spi.JResourceLoginModule required
- resourceName="memrlm_1"
- ;
-};
-
- this indicates that the
- JResourceLoginModule Login Module must be used on
- the memory realm named memrlm_1.
-
- The default configuration for the web container Jetty is the same
- than the previous:
-
- jetty {
- org.ow2.jonas.security.auth.spi.JResourceLoginModule required
- resourceName="memrlm_1"
- ;
-};
-
- the configuration for the container clients examples :
-
- jaasclient {
- // Login Module to use for the example jaasclient.
-
- org.ow2.jonas.security.auth.spi.JResourceLoginModule required
- resourceName="memrlm_1"
-
- org.ow2.jonas.security.auth.spi.ClientLoginModule required
- globalCtx="true"
- ;
-};
-
- Here two Login Modules are used, one for checking the identity in
- the memoty realm, the second for propagating a security context with the
- client request.
-
- To change the location and name of the
- jaas.config file, edit the
- $JONAS_BASE/bin/jonas script and modify the
- following line:-Djava.security.auth.login.config=$JONAS_BASE/conf/jaas.config
-
-
-
-
- JOnAS LoginModules
-
-
- JOnAS provides some predefined LoginModules:
-
-
-
- JResourceLoginModule
-
-
- This is the main LoginModule. It is highly recommended that
- this one be used in every authentication, as it checks the user
- authentication information in the specified realm database, LDAP
- or memory.
-
- This LoginModule delegates the authentication to the server
- . Here are the possible attributes to set:
-
-
-
-
-
- attribute name
-
- description
-
-
-
- resourceName
-
- name of the realm
-
-
-
- serverName
-
- name of JOnAS instance (default value=
- jonas)
-
-
-
- useUpperCaseUsername
-
- if true Convert the username into uppercase for the
- authentication (default value=false)
-
-
-
- certCallback
-
- if true use certificate callback
-
-
-
-
-
-
-
-
-
-
- CRLLoginModule
-
-
- This LoginModule contains authentication based on
- certificates. However, when enabled, it will also permit
- non-certificate based accesses. It verifies that the certificate
- presented by the user has not been revoked by the Certification
- Authority that signed it. To use it, the directory in which to
- store the revocation lists (CRLs) files or an
- LDAP repository must exist.
-
-
-
-
-
- attribute name
-
- description
-
-
-
- CRLsResourceName
-
- specifies how the CRLs are
- stored:Two possible values "Directory" or "LDAP"
-
-
-
- CRLsDirectoryName
-
- The directory containing the
- CRL files (the extension for these
- files must be
- .crl).
-
-
-
- address
-
- address of the server that hosts the LDAP
- repository
-
-
-
- port
-
- port used by the LDAP repository; CRLs
- are retrieved from an LDAP directory using the
- LDAP schema defined in RFC
- 2587
-
-
-
-
-
-
-
-
- SignLoginModule
-
-
- login module that signs the current Subject ,. Here are the
- possible attributes to set:
-
-
-
-
-
- attribute name
-
- description
-
-
-
- keystoreFile
-
- Name of the key store
-
-
-
- keystorePass
-
- password for the keystore
-
-
-
- keyPass
-
- password for the private key
-
-
-
- alias
-
- alias
-
-
-
-
-
-
-
-
- ClientLoginModule
-
-
- login module used for propagating the Principal and roles to
- the server, it doesn't make any authentication. This login module
- must be used when authentication for a client container. Here is
- the possible attribute to set:
-
-
-
-
-
- attribute name
-
- description
-
-
-
- globalCtx
-
- if true set the security context for all the
- threads of the client container instead of only on the
- current thread. Useful for swing client. (default value=
- false)
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/services/cmi/config.xml b/jonas_doc/core/src/docbook/doc-en/services/cmi/config.xml
deleted file mode 100644
index 60becc814c265255e85f3b4af647f48dcbf70895..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/cmi/config.xml
+++ /dev/null
@@ -1,212 +0,0 @@
-
-
-
- cmi service configuration
-
-
- The configuration of the cmi service
- is available through the file
- $JONAS_BASE/conf/cmi-config.xml.
-
- The CMI service can be configured in two modes:
-
- server mode with a cluster view manager
- created locally, i.e. with a local instance of a replicated CMI
- registry.
-
-
-
- client mode without a local cluster view
- manager, in this case a list of providers urls (i.e. a list of cluster
- view manager urls) is given for accessing to the remote CMI
- registries.
-
- The server mode is simpler to
- configure, the client mode requires to define
- statically a list of providers urls. The server mode
- starts a Group Communication Protocol instance (e.g. JGroups) and thus
- increases the resources consumption compare to the client
- mode.
-
-
- The CMI configuration file may contain two parts: a
- server element which corresponds to the server mode
- configuration and a client element for the client mode
- configuration. If the two are present, only the server
- element is loaded which means that the server mode is configured.
-
-
-
-
- Server mode configuration
-
-
- The server element contains the following elements:
-
-
-
- Configuring the cmi service in the server mode
-
-
-
-<cmi xmlns="http://org.ow2.cmi.controller.common"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:jgroups="http://org.ow2.cmi.controller.server.impl.jgroups">
- <server>
- <jndi>
- <protocol name="jrmp" noCmi="false" />
- </jndi>
- <viewManager
- class="org.ow2.cmi.controller.server.impl.jgroups.JGroupsClusterViewManager">
- <jgroups:config
- delayToRefresh="60000"
- loadFactor="100"
- confFileName="jgroups-cmi.xml"
- recoTimeout="30000"
- groupName="G1">
- <components>
- <event />
- </components>
- </jgroups:config>
- </viewManager>
- </server>
-</cmi>
-
-
-
-
-
-
- jndi element - optional. Enable to specify
- that a protocol must not be clustered with CMI (administration uses,
- ...). Here, the clustering of jrmp protocol can
- be disabled by setting true to the
- noCmi attribute.
-
-
-
- viewManager element - mandatory. Defines
- the view manager configuration (registry replication, refresh time,
- ...).
-
-
-
- class attribute - mandatory. Specifies the
- protocol implementation to use for replicating the view (CMI
- registry). Here the JGroups implementation is set.
-
-
-
- jgroups:config element - mandatory. Define
- the JGroups related parameters.
-
-
-
- delayToRefresh attribute - optional.
- Refresh period of the client view (in ms). For example, it expresses
- the maximum delay for taking into account a load-balancing parameter
- update.
-
-
-
- loadFactor attribute - optional. Specifies
- the initial load-factor of the current node used in the weigthed
- round robin policy.
-
-
-
- confFileName attribute - mandatory.
- Specifies the JGroups's stack configuration filename (found in the
- $JONAS_BASE/conf directory).
-
-
-
- recoTimeout attribute - optional. Specifies
- the reconnection timeout after a shunning or an error in the group
- communication protocol (in ms). If the timer expires, an exception
- is thrown.
-
-
-
- groupName attribute - mandatory. Specifies
- the JGroups channel name used by the CMI cluster view replication
- mechanism.
-
-
-
- components element - mandatory. Enable the
- events component into CMI. This element must not be modified.
-
-
-
-
-
- Refer to the
- clustering guide for issues related to JGroups.
-
-
-
-
-
- Client mode configuration
-
-
- The client element contains the following elements:
-
-
-
- Configuring the cmi service in the client mode
-
-
-
-<cmi xmlns="http://org.ow2.cmi.controller.common"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
- <client noCmi="false">
- <jndi>
- <protocol name="jrmp">
- <providerUrls>
- <providerUrl>rmi://localhost:1099</providerUrl>
- <providerUrl>rmi://localhost:2001</providerUrl>
- </providerUrls>
- </protocol>
- </jndi>
- </client>
-</cmi>
-
-
-
-
-
-
- noCmi attribute - optional. Enable to
- specify that CMI must be disabled.
-
-
-
- jndi element - mandatory. Specify a list of
- providers URLs for a given protocol. It is not necessary to set the
- whole list of cluster members, a subset is enough. However for
- ensuring high availability, at least two providers URLs must be
- mentionned.
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/services/db/config.xml b/jonas_doc/core/src/docbook/doc-en/services/db/config.xml
deleted file mode 100644
index 983def7f2d5ac1f9a90118d449d70d0677d491e6..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/db/config.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-db service configuration
-
-
- The db service is an optional service
- that can be used to start a java database server in the same JVM as
- .
-
- By default the database used is HSQLDB.
-
- Here is the part of jonas.properties related to
- db service:
-
- ###################### JOnAS DB service configuration
-#
-# Sets the name of the implementation class of the db service (hsql for example)
-jonas.service.db.class org.ow2.jonas.db.hsqldb.HsqlDBServiceImpl
-jonas.service.db.port 9001
-jonas.service.db.dbname db_jonas
-jonas.service.db.users jonas:jonas
-
-# Multiple users
-#jonas.service.db.users jonas:jonas,login:password
-
-
- Here it is possible to customize :
-
-
-
- the listening port
-
-
-
- the database name
-
-
-
- By default, the user is named jonas with the password jonas. In
- order to add new users, the property jonas.service.db.users needs to be
- updated by using a comma separated list as follow:
-
- jonas.service.db.users login:password,anotherlogin:password
-
-
-
- The database may be used by component via
- JDBC resource adapters or via the dbm
- service. For the former case the same information (listening
- port, database name, login,password) must appear in the connector deployment descriptor, in the latter they
- appear in the $JONAS_BASE/conf/HSQLDB1.properties. So, if
- these previous properties must be changed in jonas.properties, they must be
- also changed in these files.
-
- The db service has been provided in
- the jonas distribution mainly to run easily the exemple, without having to set a database
- first. For most usages, the
- users should remove it from the list of services and remove also HSQL1 from
- jonas.service.dbm.datasources property in
- $JONAS_BASE/conf/jonas.properties file.
-
- For users that choose HSQLDB as database it is highly recommended to
- refer to the Hsqldb
- User Guide. It is worth to note that the default configuration file
- used by HSQLDB server can be found in $JONAS_BASE/work/hsqldb/jonas/db_jonas.properties
- directory.
-
- In order to launch several HSQLDB instances, the configuration needs
- to be duplicated and the new configuration will be prefixed by
- jonas.service.<mynewdbservice>.
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/services/dbm/config.xml b/jonas_doc/core/src/docbook/doc-en/services/dbm/config.xml
deleted file mode 100644
index 69c18098a6a35ae31a5e769c11be7d719e820c91..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/dbm/config.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
- dbm service configuration
-
-
- The dbm service (database manager
- service) allow access to one or more relational databases. It will create
- and use DataSource objects. Such a DataSource object
- must be configured according to the database that will be used for the
- persistence of a bean.
-
-
- the recommended way to access to databases is to use the resource service deploying JDBC resource
- adapter
-
-
- The dbm service provides a generic
- driver-wrapper that emulates the XADataSource
- interface on a regular JDBC driver.It is important to note that this
- driver-wrapper does not ensure a real two-phase commit for distributed
- database transactions. When it is necessary to use a JDBC2-XA-compliant
- driver access to the databases must be done via a JDBC resource adapter XA
- compliant (more information can be found in
-
- Here is the part of jonas.properties related to
- dbm service:
-
- ###################### JOnAS DBM Database service configuration
-#
-# Set the name of the implementation class of the dbm service
-jonas.service.dbm.class org.ow2.jonas.dbm.internal.JOnASDataBaseManagerService
-
-# Set the jonas DataSources. This enables the JOnAS server to load
-# the data dources, to load related jdbc drivers, and to register the data
-# sources into JNDI.
-# This property is set with a coma-separated list of Datasource properties
-# file names (without the '.properties' suffix).
-# Ex: Oracle1,InstantDB1 (while the Datasources properties file names are
-# Oracle1.properties and InstantDB1.properties)
-jonas.service.dbm.datasources HSQL1
-
- For the dbm service it is possible
- to:
-
-
-
- set a list of datasource names via property
- jonas.service.dbm.datasources.
-
- for each name XX appearing in this list a
- XX.properties file must exist in $JONAS_BASE/conf
-
-
-
- Access to a particular database via dbm service is configured in datasource.properties
- files that must be located in $JONAS_BASE/conf.
-
-
-
- Datasource.properties files
-
-
- In the distribution several templates of
- datasource.properties files are provided one for
- Oracle, PostgreSQL,
- Sybase, DB2,
- MySQL, HSQLDB,
- InterBase, FirebirdSQL,
- Mckoi SQL,InstantDB )
- respectively in Oracle1.properties,
- PostgreSQL1.properties etc...
-
- A complete description of the datasource.properies file can be found
- in
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/services/dbm/jdbcdatasource.xml b/jonas_doc/core/src/docbook/doc-en/services/dbm/jdbcdatasource.xml
deleted file mode 100644
index 5279307a4fa2f6ccc57bd704aa01365b8de3707f..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/dbm/jdbcdatasource.xml
+++ /dev/null
@@ -1,424 +0,0 @@
-
-
-
- Configuring JDBC DataSources with 'dbm' service
-
-
- This section describes how to configure the Datasources for connecting
- application to databases when the dbm
- service is used.
-
-
-
- Configuring DataSources
-
-
- For both container-managed or bean-managed persistence, makes use of relational
- storage systems through the JDBC interface. JDBC connections are obtained
- from an object, the DataSource, provided at the
- application server level. The DataSource interface
- is defined in the JDBC standard extensions.
-
- A DataSource object identifies a database and
- a means to access it via JDBC (a JDBC driver). An application server may
- request access to several databases and thus provide the corresponding
- DataSource objects that will be registered in JNDI
- registry.
-
- This section explains how DataSource objects
- can be defined and configured in the server.
-
-
- provides a generic driver-wrapper that emulates the
- XADataSource interface on a regular JDBC driver. It
- is important to note that this driver-wrapper does not ensure a real
- two-phase commit for distributed database transactions.
-
- Neither the EJB specification nor the specification describe how
- to define DataSource objects so that they are
- available to a
- platform. Therefore, this document, which describes how to define and
- configure DataSource objects, is specific to . However, the way to
- use these DataSource objects in the Application
- Component methods is standard, that is, by using the resource manager
- connection factory references (refer to the example in the section Writing database access
- operations of the Developing Entity Bean
- Guide).
-
- A DataSource object should be defined in a
- file called <DataSource name>.properties (for example
- Oracle1.properties for an Oracle DataSource or Postgres.properties for an
- PostgreSQL DataSource.These files must be located in $JONAS_BASE/conf directory.
-
- In the jonas.properties file, to define a
- DataSource "Oracle1.properties" add the name "Oracle1" to the line
- onas.service.dbm.datasources, as follows:
-
- jonas.service.dbm.datasources Oracle1, Sybase, PostgreSQL
-
- The property file defining a DataSource may
- contain two types of information:
-
-
-
- connection properties
-
-
-
- JDBC Connection Pool properties
-
-
-
-
-
- connection properties
-
-
-
-
-
-
- property name
-
- Description
-
-
-
- datasource.name
-
- JNDI name of the DataSource
-
-
-
- datasource.url
-
- The JDBC database URL :
- jdbc:<database_vendor_subprotocol>:...
-
-
-
- datasource.classname
-
- Name of the class implementing the JDBC driver
-
-
-
- datasource.username
-
- Database user name
-
-
-
- datasource.password
-
- Database user password
-
-
-
- datasource.isolationLevel
-
- Database isolation level for transactions.
- Possible values are:
-
- none,
-
-
-
- serializable,
-
-
-
- read_committed,
-
-
-
- read_uncommitted,
-
-
-
- repeatable_read
-
- The default depends on the database
- used.
-
-
-
- datasource.mapper
-
- JORM database mapper (for possible values see here)
-
-
-
-
-
-
- If this datasource is used as a persistence unit, the
- persistence configuration defined in the
- persistence.xml file must be coherent to those
- properties, such as the datasource name and the dialect.
-
-
-
-
-
- Connection Pool properties
-
-
- Each Datasource is implemented as a
- connection manager and manages a pool of JDBC connections.
-
- The pool can be configured via some additional properties
- described in the following table.
-
- All these settings have default values and are not required. All
- these attributes can be reconfigured when is running, with the
- console JonasAdmin.
-
-
-
-
-
- property
-
- Description
-
- Default value
-
-
-
- jdbc.connchecklevel
-
- JDBC connection checking level:
-
-
- 0 : no check
-
-
-
- 1: check connection still open
-
-
-
- 2: call the test statement before reusing a
- connection from the pool
-
-
-
- 1
-
-
-
- jdbc.connteststmt
-
- test statement in case jdbc.connchecklevel = 2.
-
- select 1
-
-
-
- jdbc.connmaxage
-
- nb of minutes a connection can be kept in the pool. After
- this time, the connection will be closed, if minconpool limit
- has not been reached.
-
- 1440 mn (= 1 day)
-
-
-
- jdbc.maxopentime
-
- Maximum time (in mn) a connection can be left busy. If
- the caller has not issued a close() during this time, the
- connection will be closed automatically.
-
- 1440 mn (= 1 day)
-
-
-
- jdbc.minconpool
-
- Minimum number of connections in the pool. Setting a
- positive value here ensures that the pool size will not go below
- this limit during the datasource lifetime.
-
- 0
-
-
-
- jdbc.maxconpool
-
- Maximum number of connections in the pool. Limiting the
- max pool size avoids errors from the database.
-
- no limit
-
-
-
- jdbc.samplingperiod
-
- Sampling period for JDBC monitoring. nb of seconds
- between 2 measures.
-
- 60 sec
-
-
-
- jdbc.maxwaittime
-
- Maximum time (in seconds) to wait for a connection in
- case of shortage. This is valid only if maxconpool has been
- set.
-
- 10 sec
-
-
-
- jdbc.maxwaiters
-
- Maximum of concurrent waiters for a JDBC Connection. This
- is valid only if maxconpool has been set.
-
- 1000
-
-
-
- jdbc.pstmtmax
-
- Maximum number of prepared statements cached in a
- Connection. Setting this to a bigger value (120 for example)
- will lead to better performance, but will use more memory. The
- recommendation is to set this value to the number of different
- queries that are used the most often. This is to be tuned by
- administrators.
-
- 12
-
-
-
-
-
- When a user requests a jdbc connection, the dbm connection manager first checks to see if a
- connection is already open for its transaction. If not, it tries to get
- a free connection from the free list. If there are no more connections
- available, the dbm connection manager
- creates a new jdbc connection (if jdbc.maxconpool
- is not reached).
-
- If it cannot create new connections, the user must wait (if
- jdbc.maxwaiters is not reached) until a connection
- is released. After a limited time
- (jdbc.maxwaittime), the getConnection
- returns an exception.
-
- When the user calls close() on its
- connection, it is put back in the free list.
-
- Many statistics are computed (every
- jdbc.samplingperiod seconds) and can be viewed by
- JonasAdmin. This is useful for tuning these parameters and for seeing
- the server load at any time.
-
- When a connection has been open for too long a time
- (jdbc.connmaxage), the pool will try to release it
- from the freelist. However, the dbm
- connection manager always tries to keep open at least the number of
- connections specified in jdbc.minconpool.
-
- When the user has forgotten to close a jdbc connection, the system
- can automatically close it, after jdbc.maxopentime
- minutes. Note that if the user tries to use this connection later,
- thinking it is still open, it will return an exception (socket
- closed).
-
- When a connection is reused from the freelist, it is possible to
- verify that it is still valid. This is configured in
- jdbc.connchecklevel. The maximum level is to try a
- dummy statement on the connection before returning it to the caller.
- This statement is configured in
- jdbc.connteststmt
-
-
-
-
- DataSource example:
-
-
- Here is the template for an Oracle dataSource.properties file that
- can be found in $JONAS_ROOT/conf:
-
-
-###################### Oracle DataSource configuration example
-#
-
-
-#####
-# DataSource configuration
-#
-datasource.name jdbc_1
-datasource.url jdbc:oracle:thin:@<your-hostname>:1521:<your-db>
-datasource.classname oracle.jdbc.driver.OracleDriver
-datasource.username <your-username>
-datasource.password <user-password>
-datasource.mapper rdb.oracle
-
-
-#####
-# ConnectionManager configuration
-#
-
-# JDBC connection checking level.
-# 0 = no special checking
-# 1 = check physical connection is still open before reusing it
-# 2 = try every connection before reusing it
-jdbc.connchecklevel 0
-
-# Max age for jdbc connections
-# nb of minutes a connection can be kept in the pool
-jdbc.connmaxage 1440
-
-# Maximum time (in mn) a connection can be left busy.
-# If the caller has not issued a close() during this time, the connection
-# will be closed automatically.
-jdbc.maxopentime 60
-
-# Test statement
-jdbc.connteststmt select * from dual
-
-# JDBC Connection Pool size.
-# Limiting the max pool size avoids errors from database.
-jdbc.minconpool 10
-jdbc.maxconpool 30
-
-# Sampling period for JDBC monitoring :
-# nb of seconds between 2 measures.
-jdbc.samplingperiod 30
-
-# Maximum time (in seconds) to wait for a connection in case of shortage.
-# This may occur only when maxconpool is reached.
-jdbc.maxwaittime 5
-
-# Maximum of concurrent waiters for a JDBC Connection
-# This may occur only when maxconpool is reached.
-jdbc.maxwaiters 100
-
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/services/depmonitor/config.xml b/jonas_doc/core/src/docbook/doc-en/services/depmonitor/config.xml
deleted file mode 100644
index 65bba10a7972150c6596f52dfc696bf683af6ba9..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/depmonitor/config.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
- depmonitor service configuration
-
-
- The depmonitor service scans
- periodically some directories in the aim of deploying J2EE applications or
- OSGi bundles on a server. By default, you have to put the application
- files into the $JONAS_BASE/deploy directory in order to
- deploy them. It is possible to parse anothers directories by setting the
- directories property in the service configuration.
-
- The development attribute in the configuration allows to choose if the
- depmonitor service is in development mode
- or not :
-
-
-
- The deployment monitor can be configured to detect at runtime if
- an application is added, removed or changed to respectively deploy it,
- undeploy it or redeploy it. This functionnality can be useful during the
- development phase.
-
-
-
- For a prodution usage of the server, this
- functionnality can be disabled so that the application files will be
- deployed only at startup. In this configuration, the jonas admin
- command or the jonasAdmin user interface will be used to perform
- deployment actions.
-
-
-
- As the parsed directories may contain files that must not be deployed,
- a list of file exclusions can be defined.
-
- ###################### JOnAS Deployment Monitor
-#
-# Set the name of the implementation class of the depmonitor service
-#
-jonas.service.depmonitor.class org.ow2.jonas.deployablemonitor.DeployableMonitorService
-
-# Set the execution mode (three possible values):
-# - inherit: inherit of the value of the "jonas.development" property
-# - true : development mode
-# - false : production mode
-jonas.service.depmonitor.development inherit
-
-jonas.service.depmonitor.directories
-# List (comma separated) of exclusion patterns (based on names, not directories)
-jonas.service.depmonitor.exclusions README
-
-# Monitor interval in milliseconds
-jonas.service.depmonitor.monitorInterval 5000
-
-
-
- If the property value is true, the directories are parsed
- periodically to detect file addition, modification or deletion. Else,
- the directories are parsed only at startup
-
-
-
- A comma-separated list of directories which contain files to
- deploy
-
-
-
- A comma-separated list of file names to exclude
-
-
-
- Monitor interval in milliseconds between two scans
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/services/discovery/config.xml b/jonas_doc/core/src/docbook/doc-en/services/discovery/config.xml
deleted file mode 100644
index e6ae10285508d2c400cb40823bdbe27676167bfe..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/discovery/config.xml
+++ /dev/null
@@ -1,229 +0,0 @@
-
-
-
- discovery service configuration
-
-
- The role of the discovery service is
- to enable dynamic domain management. Recall
- that domain management means management of all the servers running in the
- domain, from the common administration point represented by a master
- server.
-
- The discovery service allows a master to detect servers starting and
- stopping in the domain. Moreover, a master can discover servers there were
- already running in the domain when it started.
-
- The discovery service implements a greeting
- mechanism to enforce servers' name unicity in the domain. This mechanism
- prevents starting a new server in the domain, if a server having the same
- name is already running in the domain.
-
- There are two available implementations for the discovery service: one
- based on IP multicast, the other based on JGroups. The former, introduced in
- JOnAS 4, is deprecated. The latter, has the advantage to allow for cluster
- daemons detection.
-
- All servers and in the domain must choose the same implementation. The
- choice is made upon the implementation class name:
-
- ###################### JOnAS Discovery service
-#
-# Set the name of the implementation class and initialization parameters
-# JGropus implementation
-jonas.service.discovery.class=org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImpl
-# Uncomment this to set Multicast implementation
-#jonas.service.discovery.class=org.ow2.jonas.discovery.internal.MulticastDiscoveryServiceImpl
-
-
-
- Configuration for IP multicast based implementation
-
-
- You have to provide initialization parameters in jonas.properties
- file for:
-
-
-
- Multicast address and port. These must be identical for all
- servers in the domain. Use properties:
-
-
-
- jonas.service.discovery.multicast.address
-
-
-
- jonas.service.discovery.multicast.port
-
-
-
- beware that multicast adresses must be consequently allocated
- through the network.
-
-
-
- The time-to-live for packets: use property:
-
-
-
- jonas.service.discovery.ttl
-
-
-
- this parameter indicates the number of gateway hops for
- packets.
-
-
-
- if ttl = 0 the discovery scope is the host (multicast packet
- aren't routed to network interfaces).
-
-
-
- if ttl =1 the discovery scope is limited to the subnetworks
- the host is attached to (multicast packets cross the network
- interfaces but will be discarded by the next gateway).
-
-
-
- if ttl =N>1 the discovery packets may cross N-1 gateways
- (provided that these gateways are configured to propagate
- multicast packets).
-
-
-
-
-
- In the case of a master server, the
- jonas.service.discovery.source.port property must
- be set with an available port number.
-
-
-
- The greeting mechanism. Use properties:
-
-
-
- jonas.service.discovery.greeting.port
-
-
-
- jonas.service.discovery.greeting.timeout
-
-
-
- Note that two servers on the same host must have different
- values in greeting.port property.
-
-
-
- Example:
-
- jonas.service.discovery.multicast.address=224.224.224.224
-jonas.service.discovery.multicast.port=9080
-jonas.service.discovery.ttl=1
-# For a master server, configure the client source port with this property
-jonas.service.discovery.source.port=9888
-
-# A multicast greeting message is sent out when discovery service is started.
-# The starting server listens at the port jonas.service.discovery.greeting.port
-# (default 9899) for a response for jonas.service.discovery.greeting.timeout miliseconds
-# (default 1000 ms). If a pre-existing server has the same server name as this one,
-# this server's discovery service will be terminated.
-jonas.service.discovery.greeting.port=9899
-jonas.service.discovery.greeting.timeout=1000
-
-
-
-
- Configuration for JGroups based implementation
-
-
- JGropups configuration being more complex, a specific configuration
- file have to be used. The name of this file is given by the
- jonas.service.discovery.jgroups.conf property. Two
- other properties have to be initialized:
-
-
-
- The name of the JGroups group used by the the discovery service
- to exchange messages.
-
-
-
- jonas.service.discovery.group.name
-
-
-
-
-
- The reconnection timeout for the JGroups channel.
-
-
-
- jonas.service.discovery.group.reconnection.timeout
-
-
-
-
-
- Example:
-
- jonas.service.discovery.jgroups.conf=jgroups-discovery.xml
-jonas.service.discovery.group.name=JGroupsDiscovery
-jonas.service.discovery.group.reconnection.timeout=5000
-
- You can find in JOnAS distribution, under
- JONAS_ROOT/conf, a jgroups-discovery.xml
- file. This file containes a JGroups stack configuration for the UDP
- protocol.
-
-
- Refer to the clustering
- guide for issues related to JGroups.
-
-
-
-
-
- Cluster deamon configuration for discovery
-
-
- In order to be detected by a master server, a cluster daemon has to
- be properly configured. This is achieved by using a
- discovery entry in the clusterd.xml
- configuration file. The configuration properies are:
-
-
-
- The JGroups group name
-
-
-
- The JGroups stack configuration file name
-
-
-
- A boolean allowing to activate (if
- true) the discovery.
-
-
-
- Example:
-
- <discovery>
- <group-name>JGroupsDiscovery</group-name>
- <stack-file>jgroups-discovery.xml</stack-file>
- <start-up>true</start-up>
- </discovery>
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/services/ear/config.xml b/jonas_doc/core/src/docbook/doc-en/services/ear/config.xml
deleted file mode 100644
index 2244606d05a5f7905367228085c3f3ff544c5f3a..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/ear/config.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
- ear service configuration
-
-
- The ear service allows deployment of
- complete
- applications (including ejb-jar,
- war and rar files packed in an
- ear file). This service is based on
- the web service for deploying the included
- wars, the ejb2 or ejb3 service
- for deploying the EJB containers for the included ejb-jars and the resource service for deploying the included rars.
-
- In development mode, as all other archives ear archives can be
- deployed automatically as soon as they are copied under
- $JONAS_BASE/deploy (or under another
- configuration-defined directory) and undeployed as soon as they has been
- removed from this location.
-
- Here is the part of jonas.properties concerning
- the ear service:
-
- ###################### JOnAS EAR service configuration
-#
-# Set the name of the implementation class of the ear service.
-jonas.service.ear.class org.ow2.jonas.ear.internal.JOnASEARService
-
-# Set the XML deployment descriptors parsing mode for the EAR service
-# (with or without validation).
-jonas.service.ear.parsingwithvalidation true
-
-# Generate stubs for all EJBs that may be accessed from the application
-# In almost all cases, this is not required to be enabled as stubs can be found.
-jonas.service.ear.genstub true
-
-# Create a child classloader when deploying EJB3 of the EAR
-jonas.service.ear.useEJB3ChildClassloader true
-
-
-
- Set or not the XML validation at the deployment descriptor parsing
- time
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/cmp2_usage.xml b/jonas_doc/core/src/docbook/doc-en/services/ejb2/cmp2_usage.xml
deleted file mode 100644
index fcf51c178f7171e8ab77e308eec47f2035e9210b..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/ejb2/cmp2_usage.xml
+++ /dev/null
@@ -1,2513 +0,0 @@
-
-
-
- Using the CMP 2 Persistence in Entity Beans
-
-
- This section highlights the main differences between CMP as defined in EJB 2.0 specification (called CMP2.0) and CMP as defined in EJB 1.1 specification (called CMP1.1). Major new features in the standard development and deployment of CMP2.0 entity beans are listed (comparing them to CMP1.1), along with JOnAS-specific information. Mapping CMP2.0 entity beans to the database is described in detail. Note that the database mapping can be created entirely by JOnAS, in which case the JOnAS-specific deployment descriptor for an entity bean should contain only the datasource and the element indicating how the database should be initialized.
-
-
- Standard CMP2.0 Aspects
-
-
- This section briefly describes the new features available in CMP2.0 as compared to CMP 1.1, and how these features change the development of entity beans.
-
-
- Entity Bean Implementation Class
-
-
- The EJB implementation class 1) implements the bean's business methods of the component interface, 2) implements the methods dedicated to the EJB environment (the interface of which is explicitly defined in the EJB specification), and 3) defines the abstract methods representing both the persistent fields (cmp-fields) and the relationship fields (cmr-fields). The class must implement the
-
- javax.ejb.EntityBean
-
- interface, be defined as public, and be abstract (which is not the case for CMP1.1, where it must not be abstract). The abstract methods are the get and set accessor methods of the bean cmp and cmr fields. Refer to the examples and details in the section "
-
- Developing Entity Beans
-
- " of the JOnAS documentation.
-
-
-
- Standard Deployment Descriptor
-
-
- The standard way to indicate to an EJB platform that an entity bean has container-managed persistence is to fill the
-
- <persistence-type>
-
- tag of the deployment descriptor with the value "container," and to fill the
-
- <cmp-field>
-
- tags of the deployment descriptor with the list of container-managed fields (the fields that the container will have in charge to make persistent) and the
-
- <cmr-field>
-
- tags identifying the relationships. The CMP version (1.x or 2.x) should also be specified in the <cmp-version> tag. This is represented by the following lines in the deployment descriptor:
-
-
- <persistence-type>container</persistence-type>
- <cmp-version>1.x</cmp-version>
- <cmp-field>
- <field-name>fieldOne</field-name>
- </cmp-field>
- <cmp-field>
- <field-name>fieldTwo</field-name>
- </cmp-field>
-
- Note that for running CMP1.1-defined entity beans on an EJB2.0 platform, such as JOnAS 3.x,
- you must introduce this
- <cmp-version>
- element in your deployment descriptors, since the default cmp-version value (if not specified) is 2.x
- .
-
-
- Note that for CMP 2.0, the information defining the behaviour of the implementation of a
- find<method>
- method is located in
- the standard deployment descriptor
- as an EJB-QL query (this is not a JOnAS-specific information). For CMP 1.1, this information is located in the JOnAS-specific deployment descriptor as an SQL WHERE clause specified in a <finder-method-jdbc-mapping> element.
-
-
- Finder method example in CMP 2.0: for a
-
- findLargeAccounts(double val)
-
- method defined on the Account entity bean of the JOnAS eb example.
-
-
- <query>
- <query-method>
- <method-name>findLargeAccounts</method-name>
- <method-params>
- <method-param>double</method-param>
- </method-params>
- </query-method>
- <ejb-ql>SELECT OBJECT(o) FROM accountsample o WHERE o.balance > ?1</ejb-ql>
- </query>
-
-
-
- JOnAS EJBQL extension
-
-
- LIMIT clause
-
-
- The
- LIMIT
- feature has been added to the standard EJBQL query language. This feature enables you to retrieve just a portion of the results generated by the rest of a query.
-
-
- The syntax of the
- LIMIT
- clause is:
-
-
-
- limit_clause ::= LIMIT limit_expression (, limit_expression )?
- limit_expression ::= integer_literal | input_parameter
-
-
- The first
- limit_expression
- corresponds to the
- start_at
- range and the second one to the
- size
- range.
-
-
- The
- limit_clause
- is the last clause of the query:
-
-
-
- ejbql ::= select_clause from_clause [where_clause] [orderby_clause] [limit_clause]
-
-
- Example:
-
-
-
- SELECT OBJECT(c) FROM jt2_Customer AS c ORDER BY c.id LIMIT ?1, 20
-
-
- Note that this feature is currently not implemented on all the database types supported by JORM/MEDOR.
-
-
-
-
- JOnAS Database mappers
-
-
- For implementing the EJB 2.0 persistence (CMP2.0), JOnAS relies on the
-
- JORM
-
- framework. JORM itself relies on JOnAS DataSources (specified in DataSource properties files) for connecting to the actual database. JORM must adapt its object-relational mapping to the underlying database, for which it makes use of adapters called "mappers." Thus, for each type of database (and more precisely for each JDBC driver), the corresponding mapper must be specified in the DataSource. This is the purpose of the
- datasource.mapper
- property of the DataSource properties file. Note that all JOnAS-provided DataSource properties files (in JOnAS_ROOT/conf) already contain this property with the correct mapper.
-
-
-
-
-
-
- property name
-
-
- description
-
-
- possible values
-
-
-
-
-
-
- datasource.mapper
-
-
- JORM database mapper
-
-
-
-
-
- rdb
-
-
- generic mapper (JDBC standard driver ...)
-
-
-
-
- rdb.cloudscape
-
-
- Cloudscape
-
-
-
-
- rdb.db2
-
-
- DB2
-
-
-
-
- rdb.firebird
-
-
- Firebird
-
-
-
-
- rdb.hsql
-
-
- HSQL
-
-
-
-
- rdb.mckoi
-
-
- McKoi Db
-
-
-
-
- rdb.mysql
-
-
- MySQL
-
-
-
-
- rdb.oracle8
-
-
- Oracle 8 and lesser versions
-
-
-
-
- rdb.oracle
-
-
- Oracle 9
-
-
-
-
- rdb.postgres
-
-
- PostgreSQL (>= 7.2)
-
-
-
-
- rdb.sapdb
-
-
- Sap DB
-
-
-
-
- rdb.sqlserver
-
-
- MS Sql Server
-
-
-
-
- rdb.sybase
-
-
- Sybase
-
-
-
-
-
-
-
-
-
- Contact the JOnAS team to obtain a mapper for other databases.
-
-
- The container code generated at deployment is now independent of the JORM mappers. Until JOnAS 4.1.4, the container code generated at deployment (GenIC or ejbjar ant task) was dependent on this mapper. It was possible to deploy (generate container code) a bean for several mappers in order to change the database (i.e. the DataSource file) without redeploying the bean. These mappers were specified as the
- mappernames
- argument of the GenIC command or as the
- mappernames
- attribute of the JOnAS ANT ejbjar task. The value was a comma-separated list of mapper names for which the container classes were generated. These mappernames options are now deprecated.
-
-
-
- JOnAS Database Mapping (Specific Deployment Descriptor)
-
-
- The mapping to the database of entity beans and their relationships may be specified in the JOnAS-specific deployment descriptor, in
-
- jonas-entity
-
- elements, and in
-
- jonas-ejb-relation
-
- elements. Since JOnAS is able to generate the database mapping, all the elements of the JOnAS-specific deployment descriptor defined in this section (which are sub-elements of
-
- jonas-entity
-
- or
-
- jonas-ejb-relation
-
- ) are optional, except those for specifying the datasource and the initialization mode (i.e. the
-
- jndi-name
-
- of
-
- jdbc-mapping
-
- and
-
- cleanup
-
- ). The default values of these mapping elements, provided in this section, define the JOnAS-generated database mapping.
-
-
- Specifying and Initializing the Database
-
-
- For specifying the database within which a CMP 2.0 entity bean is stored, the
-
- jndi-name
-
- element of the
-
- jdbc-mapping
-
- is necessary. This is the JNDI name of the DataSource representing the database storing the entity bean.
-
-
- <jdbc-mapping>
- <jndi-name>jdbc_1</jndi-name>
- </jdbc-mapping>
-
-
- For a CMP 2.0 entity bean, the JOnAS-specific deployment descriptor contains an additional element,
-
- cleanup
-
- , to be specified before the
-
- jdbc-mapping
-
- element, which can have one of the following values:
-
-
-
-
-
- removedata
-
-
-
- at bean loading time, the content of the tables storing the bean data is deleted
-
-
-
-
-
- removeall
-
-
-
- at bean loading time, the tables storing the bean data are dropped (if they exist) and created
-
-
-
-
-
- none
-
-
-
- do nothing
-
-
-
-
-
- create
-
-
-
- default value (if the element is not specified), at bean loading time, the tables for storing the bean data are created if they do not exist.
-
-
-
-
- It may be useful for testing purposes to delete the database data each time a bean is loaded. For this purpose, the part of the JOnAS-specific deployment descriptor related to the entity bean may look like the following:
-
-
- <cleanup>removedata</cleanup>
- <jdbc-mapping>
- <jndi-name>jdbc_1</jndi-name>
- </jdbc-mapping>
-
-
-
- CMP2 fields Mapping
-
-
- Mapping CMP fields in CMP2.0 is similar to that of CMP 1.1, but in CMP2.0 it is also possible to specify the SQL type of a column. Usually this SQL type is used if JOnAS creates the table (
-
- create
-
- value of the
-
- cleanup
-
- element), and if the JORM default chosen SQL type is not appropriate.
-
- Standard Deployment Descriptor
-
- .....
- <entity>
- <ejb-name>A</ejb-name>
- .....
- <cmp-field>
- <field-name>idA</field-name>
- </cmp-field>
- <cmp-field>
- <field-name>f</field-name>
- </cmp-field>
- .....
- </entity>
- .....
-
-
Defaults values for JOnAS deployment descriptor
-
-
-
-
-
- jndi-name
-
-
- Mandatory
-
-
-
-
- jdbc-table-name
-
-
- Optional.
- Default value is the
- upper-case
- CMP2 abstract-schema-name, or
- the CMP1 ejb-name,
- suffixed by
- _
- .
-
-
-
-
- cmp-field-jdbc-mapping
-
-
- Optional.
-
-
-
-
- jdbc-field-name
-
-
- Optional.
- Default value is the field-name suffixed by
- _
- .
- idA_
- and
- f_
- in the example.
-
-
-
-
- sql-type
-
-
- Optional.
- Default value defined by JORM.
-
-
-
-
-
-
-
- CMR fields Mapping to primary-key-fields (simple pk)
-
-
- 1-1 unidirectional relationships
-
-
- Standard Deployment Descriptor
-
-
- .....
- <entity>
- <ejb-name>A</ejb-name>
- .....
- <cmp-field>
- <field-name>idA</field-name>
- </cmp-field>
- <primkey-field>idA</primkey-field>
- .....
- </entity>
- .....
- <entity>
- <ejb-name>B</ejb-name>
- .....
- <cmp-field>
- <field-name>idB</field-name>
- </cmp-field>
- <primkey-field>idB</primkey-field>
- .....
- </entity>
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database Mapping for 1-1 relationship
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
-
-
- c_idA
-
-
-
-
- cfk_idB
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
- c_idB
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- There is a foreign key in the table of the bean that owns the CMR field.
-
-
- JOnAS Deployment Descriptor
-
-
- .....
- <jonas-entity>
- <ejb-name>A</ejb-name>
- .....
- <jdbc-mapping>
- <jndi-name>jdbc_1</jndi-name>
- <jdbc-table-name>t_A/jdbc-table-name>
- <cmp-field-jdbc-mapping>
- <field-name>idA</field-name>
- <jdbc-field-name>c_idA</jdbc-field-name>
- </cmp-field-jdbc-mapping>
- </jdbc-mapping>
- .....
- </jonas-entity>
- .....
- <jonas-entity>
- <ejb-name>B</ejb-name>
- .....
- <jdbc-mapping>
- <jndi-name>jdbc_1</jndi-name>
- <jdbc-table-name>t_B/jdbc-table-name>
- <cmp-field-jdbc-mapping>
- <field-name>idB</field-name>
- <jdbc-field-name>c_idB</jdbc-field-name>
- </cmp-field-jdbc-mapping>
- </jdbc-mapping>
- .....
- </jonas-entity>
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_idb</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- foreign-key-jdbc-name
- is the column name of the foreign key in the table of the source bean of the relationship-role.
- In this example, where the destination bean has a primary-key-field, it is possible to deduce that this foreign-key-jdbc-name column is to be associated with the column of this primary-key-field in the table of the destination bean.
-
-
- Default values:
-
-
-
-
-
-
- jonas-ejb-relation
-
-
- Optional
-
-
-
-
- foreign-key-jdbc-name
-
-
- Optional.
- Default value is the abstract-schema-name of the destination bean, suffixed by
- _
- , and by its primary-key-field.
- B_idb
- in the example.
-
-
-
-
-
-
-
-
- 1-1 bidirectional relationships
-
-
- Compared to 1-1 unidirectional relationships, there is a CMR field in both of the beans, thus making two types of mapping possible.
-
- Standard Deployment Descriptor
-
-
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>a</cmr-field-name>
- </cmr-field>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database Mapping
-
-
- Two mappings are possible. One of the tables may hold a foreign key.
-
-
- Case 1:
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
-
-
- c_idA
-
-
-
-
- cfk_idB
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
- c_idB
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- Case 2:
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
- c_idA
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
-
-
- c_idB
-
-
-
-
- cfk_idA
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- JOnAS Deployment Descriptor
-
-
- Case 1:
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_idb</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- Case 2:
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_ida</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- For the default mapping, the foreign key is in the table of the source bean of the first ejb-relationship-role of the ejb-relation. In the example, the default mapping corresponds to case 1, since the ejb-relationship-role
- a2b
- is the first defined in the ejb-relation
- a-b
- . Then, the default values are similar to those of the 1-1 unidirectional relationship.
-
-
-
-
- 1-N unidirectional relationships
-
- Standard Deployment Descriptor
-
-
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- <cmr-field-type>java.util.Collection</cmr-field-type>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database Mapping
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
- c_idA
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
-
-
- c_idB
-
-
-
-
- cfk_idA
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- In this case, the foreign key must be in the table of the bean which is on the "many" side of the relationship (i.e. in the table of the source bean of the relationship role with multiplicity many), t_B.
-
-
- JOnAS Deployment Descriptor
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_ida</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- Default values:
-
-
-
-
-
-
- jonas-ejb-relation
-
-
- Optional
-
-
-
-
- foreign-key-jdbc-name
-
-
- Optional.
- Default value is the abstract-schema-name of the destination bean of the "one" side of the relationship (i.e. the source bean of the relationship role with multiplicity one), suffixed by
- _
- , and by its primary-key-field.
- A_ida
- in the example.
-
-
-
-
-
-
-
-
- 1-N bidirectional relationships
-
-
- Similar to 1-N unidirectional relationships, but with a CMR field in each bean.
-
- Standard Deployment Descriptor
-
-
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- <cmr-field-type>java.util.Collection</cmr-field-type>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>a</cmr-field-name>
- </cmr-field>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database mapping
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
- c_idA
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
-
-
- c_idB
-
-
-
-
- cfk_idA
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- In this case, the foreign key must be in the table of the bean which is on the "many" side of the relationship (i.e. in the table of the source bean of the relationship role with multiplicity many), t_B.
-
-
- JOnAS Deployment Descriptor
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_ida</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- Default values:
-
-
-
-
-
-
- jonas-ejb-relation
-
-
- Optional
-
-
-
-
- foreign-key-jdbc-name
-
-
- Optional.
- Default value is the abstract-schema-name of the destination bean of the "one" side of the relationship (i.e. the source bean of the relationship role with multiplicity one), suffixed by
- _
- , and by its primary-key-field.
- A_ida
- in the example.
-
-
-
-
-
-
-
-
- N-1 unidirectional relationships
-
-
- Similar to 1-N unidirectional relationships, but the CMR field is defined on the "many" side of the relationship, i.e. on the (source bean of the) relationship role with multiplicity "many."
-
- Standard Deployment Descriptor
-
-
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database mapping
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
-
-
- c_idA
-
-
-
-
- cfk_idB
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
- c_idB
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- In this case, the foreign key must be in the table of the bean which is on the "many" side of the relationship (i.e. in table of the source bean of the relationship role with multiplicity many), t_A.
-
-
- JOnAS Deployment Descriptor
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_idb</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- Default values:
-
-
-
-
-
-
- jonas-ejb-relation
-
-
- Optional
-
-
-
-
- foreign-key-jdbc-name
-
-
- Optional.
- Default value is the abstract-schema-name of the destination bean of the "one" side of the relationship (i.e. the source bean of the relationship role with multiplicity one), suffixed by
- _
- , and by its primary-key-field.
- B_idb
- in the example.
-
-
-
-
-
-
-
-
- N-M unidirectional relationships
-
- Standard Deployment Descriptor
-
-
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- <cmr-field-type>java.util.Collection</cmr-field-type>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database mapping
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
- c_idA
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
- c_idB
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- tJoin_AB
-
-
-
-
-
-
-
-
- cfk_idA
-
-
-
-
- cfk_idB
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- In this case, there is a join table composed of the foreign keys of each entity bean table.
-
-
- JOnAS Deployment Descriptor
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jdbc-table-name>tJoin_AB</jdbc-table-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_idb</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_ida</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- Default values
-
-
-
-
-
-
- jonas-ejb-relation
-
-
- Optional
-
-
-
-
- jdbc-table-name
-
-
- Optional.
- Default value is built from the abstract-schema-names of the beans, separated by
- _
- .
- A_B
- in the example.
-
-
-
-
- foreign-key-jdbc-name
-
-
- Optional.
- Default value is the abstract-schema-name of the destination bean, suffixed by
- _
- , and by its primary-key-field.
- B_idb
- and
- A_ida
- in the example.
-
-
-
-
-
-
-
-
- N-M bidirectional relationships
-
-
- Similar to N-M unidirectional relationships, but a CMR field is defined for each bean.
-
- Standard deployment Descriptor
-
-
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- <cmr-field-type>java.util.Collection</cmr-field-type>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>a</cmr-field-name>
- <cmr-field-type>java.util.Collection</cmr-field-type>
- </cmr-field>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database mapping
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
- c_idA
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
- c_idB
-
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- tJoin_AB
-
-
-
-
-
-
-
-
- cfk_idA
-
-
-
-
- cfk_idB
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- In this case, there is a join table composed of the foreign keys of each entity bean table.
-
-
- JOnAS Deployment Descriptor
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jdbc-table-name>tJoin_AB</jdbc-table-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_idb</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_ida</foreign-key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- Default values:
-
-
-
-
-
-
- jonas-ejb-relation
-
-
- Optional
-
-
-
-
- jdbc-table-name
-
-
- Optional.
- Default value is built from the abstract-schema-names of the beans, separated by
- _
- .
- A_B
- in the example.
-
-
-
-
- foreign-key-jdbc-name
-
-
- Optional.
- Default value is the abstract-schema-name of the destination bean, suffixed by
- _
- , and by its primary-key-field.
- B_idb
- and
- A_ida
- in the example.
-
-
-
-
-
-
-
-
-
- CMR fields Mapping to composite primary-keys
-
-
- In the case of composite primary keys, the database mapping should provide the capability to specify which column of a foreign key corresponds to which column of the primary key. This is the only difference between relationships based on simple primary keys. For this reason, not all types of relationship are illustrated below.
-
- 1-1 bidirectional relationships
-
- Standard Deployment Descriptor
-
-
- .....
- <entity>
- <ejb-name>A</ejb-name>
- .....
- <prim-key-class>p.PkA</prim-key-class>
- .....
- <cmp-field>
- <field-name>id1A</field-name>
- </cmp-field>
- <cmp-field>
- <field-name>id2A</field-name>
- </cmp-field>
- .....
- </entity>
- .....
- <entity>
- <ejb-name>B</ejb-name>
- .....
- <prim-key-class>p.PkB</prim-key-class>
- .....
- <cmp-field>
- <field-name>id1B</field-name>
- </cmp-field>
- <cmp-field>
- <field-name>id2B</field-name>
- </cmp-field>
- .....
- </entity>
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>One</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>a</cmr-field-name>
- </cmr-field>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database mapping
-
-
- Two mappings are possible, one or another of the tables may hold the foreign key.
-
-
- Case 1:
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
-
-
-
-
-
-
- c_id1A
-
-
-
-
- c_id2A
-
-
-
-
- cfk_id1B
-
-
-
-
- cfk_id2B
-
-
-
-
-
- ...
-
-
- ...
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
-
-
- c_id1B
-
-
-
-
- c_id2B
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- Case 2:
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
-
-
- c_id1A
-
-
-
-
- c_id2A
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
-
-
-
-
-
-
- c_id1B
-
-
-
-
- c_id2B
-
-
-
-
- cfk_id1A
-
-
-
-
- cfk_id2A
-
-
-
-
-
- ...
-
-
- ...
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- JOnAS Deployment Descriptor
-
-
- Case 1:
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id1b</foreign-key-jdbc-name>
- <key-jdbc-name>c_id1b</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id2b</foreign-key-jdbc-name>
- <key-jdbc-name>c_id2b</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- Case 2:
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id1a</foreign-key-jdbc-name>
- <key-jdbc-name>c_id1a</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id2a</foreign-key-jdbc-name>
- <key-jdbc-name>c_id2a</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
- For the default mapping (values), the foreign key is in the table of the source bean of the first ejb-relationship-role of the ejb-relation. In the example, the default mapping corresponds to case 1, since the ejb-relationship-role a2b is the first defined in the ejb-relation a-b.
-
-
-
-
- N-M unidirectional relationships
-
- Standard Deployment Descriptor
-
-
- .....
- <entity>
- <ejb-name>A</ejb-name>
- .....
- <cmp-field>
- <field-name>id1A</field-name>
- </cmp-field>
- <cmp-field>
- <field-name>id2A</field-name>
- </cmp-field>
- .....
- </entity>
- .....
- <entity>
- <ejb-name>B</ejb-name>
- .....
- <cmp-field>
- <field-name>id1B</field-name>
- </cmp-field>
- <cmp-field>
- <field-name>id2B</field-name>
- </cmp-field>
- .....
- </entity>
- .....
- <relationships>
- <ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <ejb-relationship-role>
- <!-- A => B -->
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>A</ejb-name>
- </relationship-role-source>
- <cmr-field>
- <cmr-field-name>b</cmr-field-name>
- <cmr-field-type>java.util.Collection</cmr-field-type>
- </cmr-field>
- </ejb-relationship-role>
- <ejb-relationship-role>
- <!-- B => A -->
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <multiplicity>Many</multiplicity>
- <relationship-role-source>
- <ejb-name>B</ejb-name>
- </relationship-role-source>
- </ejb-relationship-role>
- </ejb-relation>
- </relationships>
- .....
-
-
- Database mapping
-
-
-
-
-
-
-
-
-
-
-
-
- t_A
-
-
-
-
-
-
-
-
- c_id1A
-
-
-
-
- c_id2A
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- t_B
-
-
-
-
-
-
-
-
- c_id1B
-
-
-
-
- c_id2B
-
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
- tJoin_AB
-
-
-
-
-
-
-
-
-
-
-
-
- cfk_id1A
-
-
-
-
- cfk_id2A
-
-
-
-
- cfk_id1B
-
-
-
-
- cfk_id2B
-
-
-
-
-
- ...
-
-
- ...
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
- In this case, there is a join table composed of the foreign keys of each entity bean table.
-
-
- JOnAS Deployment Descriptor
-
-
- .....
- <jonas-ejb-relation>
- <ejb-relation-name>a-b</ejb-relation-name>
- <jdbc-table-name>tJoin_AB</jdbc-table-name>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>a2b</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id1b</foreign-key-jdbc-name>
- <key-jdbc-name>c_id1b</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id2b</foreign-key-jdbc-name>
- <key-jdbc-name>c_id2b</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- <jonas-ejb-relationship-role>
- <ejb-relationship-role-name>b2a</ejb-relationship-role-name>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id1a</foreign-key-jdbc-name>
- <key-jdbc-name>c_id1a</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- <foreign-key-jdbc-mapping>
- <foreign-key-jdbc-name>cfk_id2a</foreign-key-jdbc-name>
- <key-jdbc-name>c_id2a</key-jdbc-name>
- </foreign-key-jdbc-mapping>
- </jonas-ejb-relationship-role>
- </jonas-ejb-relation>
- .....
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/config.xml b/jonas_doc/core/src/docbook/doc-en/services/ejb2/config.xml
deleted file mode 100644
index 97a567eb3d6d3bcc3a3e623532679e10b6e7fecb..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/ejb2/config.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
- ejb2 Service configuration
-
-
- This service provides containers for EJB2.1 components.
-
- An EJB container can be created from an ejb-jar file using one of the following
- possibilities:
-
-
-
- The ejb-jar file has been
- copied under $JONAS_BASE/deploy
-
-
-
- The ejb-jar file is
- packaged inside an ear file as a component of a application. The container
- will be created when the application will be deployed via the
- ear service.
-
-
-
- EJB containers may be dynamically created from ejb-jar files using
- the JonasAdmin tool.
-
-
-
- EJB containers may be dynamically created from ejb-jar files using
- the command jonas admin:
-
- jonas admin -a <some-dir>/sb.jar
-
-
-
- The ejb service can (and by default
- does) provide monitoring options. Monitoring provides the following values
- at a per-EJB basis for stateful and stateless beans:
-
-
-
- Number of calls done on all
- methods.
-
-
-
- Total business time, i.e. the
- time spent executing business (applicative) code.
-
-
-
- Total time, i.e. the total time
- spent executing code (business code + container code).
-
-
-
- The warningThreshold option can be
- used to generate a warning each time a method takes more than warningThreshold milliseconds to execute. By default,
- warningThreshold is set to 20
- seconds.
-
- Here is the part of jonas.properties concerning
- the ejb2 service:
-
- ###################### JOnAS EJB 2 Container service configuration
-#
-# Set the name of the implementation class of the ejb2 service
-jonas.service.ejb2.class org.ow2.jonas.ejb2.internal.JOnASEJBService
-
-# Set the XML deployment descriptors parsing mode (with or without validation)
-jonas.service.ejb2.parsingwithvalidation true
-
-# If enabled, the GenIC tool will be called if :
-# - JOnAS version of the ejb-jar is not the same version than the running JOnAS instance
-# - Stubs/Skels stored in the ejb-jar are not the same than the JOnAS current protocols.
-# By default, this is enabled
-jonas.service.ejb2.auto-genic true
-
-# Arguments for the auto GenIC (-invokecmd, -verbose, etc.)
-jonas.service.ejb2.auto-genic.args -invokecmd
-
-# Note: these two settings can be overriden by the EJB descriptor.
-#
-# If EJB monitoring is enabled, statistics about method call times will be
-# collected. This is a very lightweight measurement and should not have much
-# impact on performance.
-jonas.service.ejb2.monitoringEnabled true
-# If EJB monitoring is enabled, this value indicates after how many
-# milliseconds spent executing an EJB method a warning message should be
-# displayed. If 0, no warning will ever be displayed.
-jonas.service.ejb2.warningThreshold 20000
-
- For customizing the ejb2 service it
- is possible to:
-
-
-
- Set or not the XML validation at the deployment descriptor parsing
- time
-
-
-
- Set or not the automatic generation via the GenIC tool
-
-
-
- Specify the arguments to pass to the GenIC tool
-
-
-
diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_bmp.xml b/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_bmp.xml
deleted file mode 100644
index 6f9b24b70ccaedf08dbefeb491771ed78f9ae44c..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_bmp.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
- Writing Database Access Methods for Bean Managed Persistence
-
- For
- bean-managed persistence
- , data access operations are developed by the bean provider using the JDBC interface. However, getting database connections must be obtained through the
- javax.sql.DataSource
- interface on a datasource object provided by the EJB platform. This is mandatory since the EJB platform is responsible for managing the connection pool and for transaction management. Thus, to get a JDBC connection, in each method performing database operations, the bean provider must:
-
-
-
- call the
- getConnection(...)
- method of the DataSource object, to obtain a connection to perform the JDBC operations in the current transactional context (if there are JDBC operations),
-
-
- call the
- close()
- method on this connection after the database access operations, so that the connection can be returned to the connection pool (and be dissociated from the potential current transaction).
-
-
-
- A method that performs database access must always contain the getConnection and close statements, as follows:
-
-
-public void doSomethingInDB (...) {
- conn = dataSource.getConnection();
- ... // Database access operations
- conn.close();
-}
-
- A DataSource object associates a JDBC driver with a database (as an ODBC datasource). It is created and registered in JNDI by the EJB server at launch time (refer also to the section "
-
- JDBC DataSources configuration
-
- ").
-
-
- A DataSource object is a resource manager connection factory for
-
- java.sql.Connection
-
- objects, which implements connections to a database management system. The enterprise bean code refers to resource factories using logical names called "Resource manager connection factory references." The resource manager connection factory references are special entries in the enterprise bean environment. The bean provider must use resource manager connection factory references to obtain the datasource object as follow:
-
-
-
- Declare the resource reference in the standard deployment descriptor using a
-
- resource-ref
-
- element.
-
-
- Lookup the datasource in the enterprise bean environment using the JNDI interface (refer to the section
-
- Enterprise Bean's Environment
-
- ).
-
-
-
- The deployer binds the resource manager connection factory references to the actual resource factories that are configured in the server. This binding is done in the JOnAS-specific deployment descriptor using the jonas-resource element.
-
-
- Example
-
- The declaration of the resource reference in the standard deployment descriptor looks like the following:
-
-
-<resource-ref>
-<res-ref-name>jdbc/AccountExplDs</res-ref-name>
-<res-type>javax.sql.DataSource</res-type>
-<res-auth>Container</res-auth>
-</resource-ref>
-
- The <res-auth> element indicates which of the two resource manager authentication approaches is used:
-
-
-
- Container
- : the deployer sets up the sign-on information.
-
-
- Bean
- : the bean programmer should use the getConnection method with user and password parameters.
-
-
-
- The JOnAS-specific deployment descriptor must map the environment JNDI name of the resource to the actual JNDI name of the resource object managed by the EJB server. This is done in the <jonas-resource> element.
-
-
- <jonas-entity>
- <ejb-name>AccountExpl</ejb-name>
- <jndi-name>AccountExplHome</jndi-name>
- <jonas-resource>
- <res-ref-name>jdbc/AccountExplDs</res-ref-name>
- <jndi-name>jdbc_1</jndi-name>
- </jonas-resource>
- </jonas-entity>
-
- The ejbStore method of the same Account example with bean-managed persistence is shown in the following example. It performs JDBC operations to update the database record representing the state of the entity bean instance. The JDBC connection is obtained from the datasource associated with the bean. This datasource has been instantiated by the EJB server and is available for the bean through its resource reference name, which is defined in the standard deployment descriptor.
-
-
- In the bean, a reference to a datasource object of the EJB server is initialized:
-
-
-
- it = new InitialContext();
-
-
-
-
- ds = (DataSource)it.lookup("java:comp/env/jdbc/AccountExplDs");
-
-
-
- Then, this datasource object is used in the implementation of the methods performing JDBC operations, such as ejbStore, as illustrated in the following:
-
-
-public void ejbStore
- Connection conn = null;
- PreparedStatement stmt = null;
- try { // get a connection
- conn = ds.getConnection();
- // store Object state in DB
- stmt = conn.prepareStatement("update account set customer=?,balance=? where accno=?");
- stmt.setString(1, customer);
- stmt.setDouble(2, balance);
- Integer pk = (Integer)entityContext.getPrimaryKey();
- stmt.setInt(3, pk.accno);
- stmt.executeUpdate();
- } catch (SQLException e) {
- throw new javax.ejb.EJBException("Failed to store bean to database", e);
- } finally {
- try {
- if (stmt != null) stmt.close(); // close statement
- if (conn != null) conn.close(); // release connection
- } catch (Exception ignore) {}
- }
-}
-
- Note that the close statement instruction may be important if the server is intensively accessed by many clients performing entity bean access. If the statement is not closed in the finally block, since
- stmt
- is in the scope of the method, it will be deleted at the end of the method (and the close will be implicitly done). However, it may be some time before the Java garbage collector deletes the statement object. Therefore, if the number of clients performing entity bean access is important, the DBMS may raise a "too many opened cursors" exception (a JDBC statement corresponds to a DBMS cursor). Since connection pooling is performed by the platform, closing the connection will not result in a physical connection close, therefore opened cursors will not be closed. Thus, it is preferable to explicitly close the statement in the method.
-
-
- It is a good programming practice to put the JDBC connection and JDBC statement close operations in a finally bloc of the try statement.
-
-
-
\ No newline at end of file
diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_cmp.xml b/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_cmp.xml
deleted file mode 100644
index 5168dc6959740d26d6b4f5f8f5da0e14d7c0e0bd..0000000000000000000000000000000000000000
--- a/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_cmp.xml
+++ /dev/null
@@ -1,391 +0,0 @@
-
-
-
-Configuring Database Access for Container Managed Persistence
-
-
-
- The standard way to indicate to an EJB platform that an entity bean
- has container-managed persistence is to fill the <persistence-type>
- tag of the deployment descriptor with the value "container," and to fill the
- <cmp-field> tag of the deployment descriptor with the list of
- container-managed fields (the fields that the container will have in charge
- to make persistent). The CMP version (1.x or 2.x) should also be specified
- in the <cmp-version> tag. In the textual format of the deployment
- descriptor, this is represented by the following lines:
-
- <persistence-type>container</persistence-type>
- <cmp-version>2.x</cmp-version>
- <cmp-field>
- <field-name>fieldOne</field-name>
- </cmp-field>
- <cmp-field>
- <field-name>fieldTwo</field-name>
- </cmp-field>
-
- With container-managed persistence the programmer need not develop the
- code for accessing the data in the relational database; this code is
- included in the container itself (generated by the platform tools). However,
- for the EJB platform to know how to access the database and which data to
- read and write in the database, two types of information must be provided
- with the bean:
-
-
-
- First, the container must know which database to access and how to
- access it. To do this, the only required information is the name of the
- DataSource that will be used to get the JDBC connection. For
- container-managed persistence, only one DataSource per bean should be
- used.
-
-
-
- Then, it is necessary to know the mapping of the bean fields to
- the underlying database (which table, which column). For CMP 1.1 or CMP
- 2.0, this mapping is specified by the deployer in the JOnAS-specific
- deployment descriptor. Note that for CMP 2.0, this mapping may be
- entirely generated by JOnAS.
-
-
-
- The EJB specification does not specify how this information should be
- provided to the EJB platform by the bean deployer. Therefore, what is
- described in the remainder of this section is specific to JOnAS.
-
- CMP 1.x specifics
-
-
- For CMP 1.1, the bean deployer is responsible for defining the
- mapping of the bean fields to the database table columns. The name of the
- DataSource can be set at deployment time, since it depends on the EJB
- platform configuration. This database configuration information is defined
- in the JOnAS-specific deployment descriptor via the jdbc-mapping element.
- The following example defines the mapping for a CMP 1.1 entity
- bean:
-
- <jdbc-mapping>
- <jndi-name>jdbc_1</jndi-name>
- <jdbc-table-name>accountsample</jdbc-table-name>
- <cmp-field-jdbc-mapping>
- <field-name>mAccno</field-name>
- <jdbc-field-name>accno</jdbc-field-name>
- </cmp-field-jdbc-mapping>
- <cmp-field-jdbc-mapping>
- <field-name>mCustomer</field-name>
- <jdbc-field-name>customer</jdbc-field-name>
- </cmp-field-jdbc-mapping>
- <cmp-field-jdbc-mapping>
- <field-name>mBalance</field-name>
- <jdbc-field-name>balance</jdbc-field-name>
- </jdbc-mapping>
-
- jdbc_1 is the JNDI name of the DataSource object identifying the
- database. accountsample is the name of the table used to store the bean
- instances in the database. mAccno, mCustomer, and mBalance are the names
- of the container-managed fields of the bean to be stored in the accno,
- customer, and balance columns of the accountsample table. This example
- applies to container-managed persistence. For bean-managed persistence,
- the database mapping does not exist.
-
- For CMP 1.1, the jdbc-mapping element can also contain information
- defining the behaviour of the implementation of a find<method>
- method (i.e. the ejbFind<method> method, that will be generated by
- the platform tools). This information is represented by the
- finder-method-jdbc-mapping element.
-
- For each finder method, this element provides a way to define an SQL
- WHERE clause that will be used in the generated finder method
- implementation to query the relational table storing the bean entities.
- Note that the table column names should be used, not the bean field names.
- Example:
-
- <finder-method-jdbc-mapping>
- <jonas-method>
- <method-name>findLargeAccounts</method-name>
- </jonas-method>
- <jdbc-where-clause>where balance > ?</jdbc-where-clause>
- </finder-method-jdbc-mapping>
-
- The previous finder method description will cause the platform tools
- to generate an implementation of ejbFindLargeAccount(double arg) that
- returns the primary keys of the entity bean objects corresponding to the
- tuples returned by the "select ... from Account where balance > ?",
- where '?' will be replaced by the value of the first argument of the
- findLargeAccount method. If several '?' characters appear in the provided
- WHERE clause, this means that the finder method has several arguments and
- the '?' characters will correspond to these arguments, adhering to the
- order of the method signature.
-
- In the WHERE clause, the parameters can be followed by a number,
- which specifies the method parameter number that will be used by the query
- in this position. Example: The WHERE clause of the following finder method
- can be:
-
- Enumeration findByTextAndDateCondition(String text, java.sql.Date date)
-
- WHERE (description like ?1 OR summary like ?1) AND (?2 > date)
-
- Note that a <finder-method-jdbc-mapping> element for the
- findByPrimaryKey method is not necessary, since the meaning of this method
- is known.
-
- The datatypes supported for container-managed fields in CMP 1.1 are
- the following:
-
-
-
-
- Any attribute including in any attribute in any namespace.
-
-
-
-
-
- Any element from almost any namespace
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Designates the computer or chip architecture to which the element applies
-
-
-
-
- Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users.
-
-
-
-
- provides a standard place for application-specific effectivity
-
-
-
-
- Indicates standards conformance characteristics of the element
-
-
-
-
- Indicates the operating system to which the element is applicable
-
-
-
-
- Indicates the editorial revision to which the element belongs
-
-
-
-
- Indicates something about the security level associated with the element to which it applies
-
-
-
-
- Indicates the level of user experience for which the element applies
-
-
-
-
- Indicates the computer vendor to which the element applies.
-
-
-
-
- Indicates the word size (width in bits) of the computer architecture to which the element applies
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Points to the element whose content is to be used as the text of the link
-
-
-
-
-
- Points to an internal link target by identifying the value of its xml:id attribute
-
-
-
-
-
- Points to one or more internal link targets by identifying the value of their xml:id attributes
-
-
-
-
-
- Identifies a link target with a URI
-
-
-
-
-
- Identifies the XLink link type
- simple
- An XLink simple link
-
-
-
-
- Identifies the XLink role of the link
-
-
-
-
-
- Identifies the XLink arcrole of the link
-
-
-
-
-
-
- Identifies the XLink title of the link
-
-
-
-
-
- new
- An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context.
- replace
- An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded.
- embed
- An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource.
- other
- The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior.
- none
- The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
-
-
-
-
- Identifies the XLink show behavior of the link
-
-
-
-
-
- onLoad
- An application should traverse to the ending resource immediately on loading the starting resource.
- onRequest
- An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal.
- other
- The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior.
- none
- The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
-
-
-
-
- Identifies the XLink actuate behavior of the link
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the unique ID value of the element
-
-
-
-
-
- Specifies the DocBook version of the element and its descendants
-
-
-
-
- Specifies the natural language of the element and its descendants
-
-
-
-
- Specifies the base URI of the element and its descendants
-
-
-
-
-
- Provides the name or similar semantic identifier assigned to the content in some previous markup scheme
-
-
-
-
- Provides the text that is to be generated for a cross reference to the element
-
-
-
-
- Specifies a keyword or keywords identifying additional style information
-
-
-
-
- changed
- The element has been changed.
- added
- The element is new (has been added to the document).
- deleted
- The element has been deleted.
- off
- Explicitly turns off revision markup for this element.
-
-
-
-
- Identifies the revision status of the element
-
-
-
-
-
- ltr
- Left-to-right text
- rtl
- Right-to-left text
- lro
- Left-to-right override
- rlo
- Right-to-left override
-
-
-
-
- Identifies the direction of text in an element
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the format of the data
-
-
-
-
- Indentifies the location of the data by URI
-
-
-
- Identifies the location of the data by external identifier (entity name)
-
-
-
-
-
-
- continues
- Line numbering continues from the immediately preceding element with the same name.
- restarts
- Line numbering restarts (begins at 1, usually).
-
-
-
-
- Determines whether line numbering continues from the previous element or restarts.
-
-
-
-
-
- numbered
- Lines are numbered.
- unnumbered
- Lines are not numbered.
-
-
-
-
- Determines whether lines are numbered.
-
-
-
-
-
- Specifies the initial line number.
-
-
-
-
-
- Identifies the language (i.e. programming language) of the verbatim content.
-
-
-
-
- Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not.
- preserve
- Whitespace must be preserved.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies an identifying string for presentation purposes
-
-
-
-
- Specifies the width (in characters) of the element
-
-
-
-
-
- compact
- The spacing should be "compact".
- normal
- The spacing should be "normal".
-
-
-
-
- Specifies (a hint about) the spacing of the content
-
-
-
-
-
- 0
- The element should be rendered in the current text flow (with the flow column width).
- 1
- The element should be rendered across the full text page.
-
-
-
-
- Indicates if the element is rendered across the column or the page
-
-
-
-
-
- Identifies the language (i.e. programming language) of the content.
-
-
-
-
- optional
- The content describes an optional step or steps.
- required
- The content describes a required step or steps.
-
-
-
-
- Specifies if the content is required or optional.
-
-
-
-
-
- Specifies style information to be used when rendering the float
-
-
-
-
- Specifies the width of the element
-
-
-
-
- Specifies the depth of the element
-
-
-
-
- Specifies the width of the content rectangle
-
-
-
-
- Specifies the depth of the content rectangle
-
-
-
-
- 0
- False (do not scale-to-fit; anamorphic scaling may occur)
- 1
- True (scale-to-fit; anamorphic scaling is forbidden)
-
-
-
-
- Specifies the scaling factor
-
-
-
-
-
- center
- Centered horizontally
- char
- Aligned horizontally on the specified character
- justify
- Fully justified (left and right margins or edges)
- left
- Left aligned
- right
- Right aligned
-
-
-
-
- bottom
- Aligned on the bottom of the region
- middle
- Centered vertically
- top
- Aligned on the top of the region
-
-
-
-
- doi
- A document object identifier.
- isbn
- An international standard book number.
- isrn
- An international standard technical report number (ISO 10444).
- issn
- An international standard serial number.
- libraryofcongress
- A Library of Congress reference number.
- pubsnumber
- A publication number (an internal number or possibly organizational standard).
- uri
- A Uniform Resource Identifier
-
-
-
-
-
- Identifies the kind of bibliographic identifier
-
-
-
-
-
-
- Identifies the nature of the non-standard bibliographic identifier
-
-
-
-
-
-
- Identifies the kind of bibliographic identifier
- other
- Indicates that the identifier is some 'other' kind.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text of the title of a section of a document or of a formal block-level element
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The abbreviation of a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The subtitle of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block with a required title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block with only a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block with only a required title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block without a title
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the controlled vocabulary used by this set's terms
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of terms describing the subject matter of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies a ranking for this subject relative to other subjects in the same set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- One of a group of terms describing the subject matter of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A term in a group of terms describing the subject matter of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of keywords describing the content of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- One of a set of keywords describing the content of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list of operations to be performed in a well-defined sequence
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for steps that occur within steps in a procedure
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A portion of a document that is isolated from the main narrative flow
-
-
- sidebar must not occur in the descendants of sidebar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A short description or note about a person
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A quotation set off from the main text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The source of a block quote or epigraph
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sect1
- Render as a first-level section
- sect2
- Render as a second-level section
- sect3
- Render as a third-level section
- sect4
- Render as a fourth-level section
- sect5
- Render as a fifth-level section
-
-
-
-
-
- Indicates how the bridge head should be rendered
-
-
-
-
-
-
- Identifies the nature of the non-standard rendering
-
-
-
-
-
-
- Indicates how the bridge head should be rendered
- other
- Identifies a non-standard rendering
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A free-floating heading
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A remark (or comment) intended for presentation in a draft manuscript
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A short inscription at the beginning of a document or component
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the desired footnote mark
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A footnote
-
-
- footnote must not occur in the descendants of footnote
-
-
-
-
- example must not occur in the descendants of footnote
-
-
-
-
- figure must not occur in the descendants of footnote
-
-
-
-
- table must not occur in the descendants of footnote
-
-
-
-
- equation must not occur in the descendants of footnote
-
-
-
-
- indexterm must not occur in the descendants of footnote
-
-
-
-
- sidebar must not occur in the descendants of footnote
-
-
-
-
- task must not occur in the descendants of footnote
-
-
-
-
- epigraph must not occur in the descendants of footnote
-
-
-
-
- caution must not occur in the descendants of footnote
-
-
-
-
- important must not occur in the descendants of footnote
-
-
-
-
- note must not occur in the descendants of footnote
-
-
-
-
- tip must not occur in the descendants of footnote
-
-
-
-
- warning must not occur in the descendants of footnote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A paragraph with a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A paragraph
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A paragraph that contains only text and inline markup, no block elements
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the type of mark to be used on items in this list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list in which each entry is marked with a bullet or other dingbat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- continues
- Specifies that numbering should begin where the preceding list left off
- restarts
- Specifies that numbering should begin again at 1
-
-
-
-
- Indicates how list numbering should begin relative to the immediately preceding list
-
-
-
-
-
- Specifies the initial line number.
-
-
-
-
-
- ignore
- Specifies that numbering should ignore list nesting
- inherit
- Specifies that numbering should inherit from outer-level lists
-
-
-
-
- Indicates whether or not item numbering should be influenced by list nesting
-
-
-
-
-
- arabic
- Specifies Arabic numeration (1, 2, 3, …)
- upperalpha
- Specifies upper-case alphabetic numeration (A, B, C, …)
- loweralpha
- Specifies lower-case alphabetic numeration (a, b, c, …)
- upperroman
- Specifies upper-case Roman numeration (I, II, III, …)
- lowerroman
- Specifies lower-case Roman numeration (i, ii, iii …)
-
-
-
-
- Indicates the desired numeration
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list in which each entry is marked with a sequentially incremented label
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the keyword for the type of mark that should be used on this
- item, instead of the mark that would be used by default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the elements of a list item
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A segmented list, a list of sets of elements
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of an element of a list item in a segmented list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list item in a segmented list
-
-
- The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An element of a list item in a segmented list
-
-
-
-
-
-
-
-
-
-
-
-
-
- horiz
- A tabular presentation in row-major order.
- vert
- A tabular presentation in column-major order.
- inline
- An inline presentation, usually a comma-delimited list.
-
-
-
-
- Specifies the type of list presentation.
-
-
-
-
-
- Specifies the number of columns for horizontal or vertical presentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An undecorated list of single words or short phrases
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An element of a simple list
-
-
-
-
-
-
-
-
-
-
-
-
-
- Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list in which each entry is composed of a set of one or more terms and an associated description
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a set of terms and the associated description in a variable list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The word or phrase being defined or described in a variable list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal example, with a title
-
-
- example must not occur in the descendants of example
-
-
-
-
- figure must not occur in the descendants of example
-
-
-
-
- table must not occur in the descendants of example
-
-
-
-
- equation must not occur in the descendants of example
-
-
-
-
- caution must not occur in the descendants of example
-
-
-
-
- important must not occur in the descendants of example
-
-
-
-
- note must not occur in the descendants of example
-
-
-
-
- tip must not occur in the descendants of example
-
-
-
-
- warning must not occur in the descendants of example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A displayed example without a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- monospaced
- The literal layout should be formatted with a monospaced font
- normal
- The literal layout should be formatted with the current font
-
-
-
-
- Specifies the class of literal layout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A block of text in which line breaks and white space are to be reproduced faithfully
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Text that a user sees or might see on a computer screen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A representation of what the user sees or might see on a computer screen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal figure, generally an illustration, with a title
-
-
- example must not occur in the descendants of figure
-
-
-
-
- figure must not occur in the descendants of figure
-
-
-
-
- table must not occur in the descendants of figure
-
-
-
-
- equation must not occur in the descendants of figure
-
-
-
-
- caution must not occur in the descendants of figure
-
-
-
-
- important must not occur in the descendants of figure
-
-
-
-
- note must not occur in the descendants of figure
-
-
-
-
- tip must not occur in the descendants of figure
-
-
-
-
- warning must not occur in the descendants of figure
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the (horizontal) alignment of the image data
-
-
-
-
-
-
-
-
- Specifies the vertical alignment of the image data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Determines if anamorphic scaling is forbidden
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pointer to external image data
-
-
-
-
-
-
-
-
-
-
-
- Identifies the encoding of the text in the external file
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pointer to external text data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A caption
-
-
- example must not occur in the descendants of caption
-
-
-
-
- figure must not occur in the descendants of caption
-
-
-
-
- table must not occur in the descendants of caption
-
-
-
-
- equation must not occur in the descendants of caption
-
-
-
-
- sidebar must not occur in the descendants of caption
-
-
-
-
- task must not occur in the descendants of caption
-
-
-
-
- caution must not occur in the descendants of caption
-
-
-
-
- important must not occur in the descendants of caption
-
-
-
-
- note must not occur in the descendants of caption
-
-
-
-
- tip must not occur in the descendants of caption
-
-
-
-
- warning must not occur in the descendants of caption
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for document meta-information about a conference
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The dates of a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An identifier, frequently numerical, associated with a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The sponsor of a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The contract number of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The sponsor of a contract
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright information about a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The year of publication of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of the individual or organization that holds a copyright
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Additional content for the cover of a publication
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The date of publication or revision of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name or number of an edition of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of the editor of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An identifier for a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A citation of a bibliographic identifier
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The source of a document
-
-
-
-
-
-
-
-
- hasformat
- The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
- haspart
- The described resource includes the referenced resource either physically or logically
- hasversion
- The described resource has a version, edition, or adaptation, namely, the referenced resource
- isformatof
- The described resource is the same intellectual content of the referenced resource, but presented in another format
- ispartof
- The described resource is a physical or logical part of the referenced resource
- isreferencedby
- The described resource is referenced, cited, or otherwise pointed to by the referenced resource
- isreplacedby
- The described resource is supplanted, displaced, or superceded by the referenced resource
- isrequiredby
- The described resource is required by the referenced resource, either physically or logically
- isversionof
- The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
- references
- The described resource references, cites, or otherwise points to the referenced resource
- replaces
- The described resource supplants, displaces, or supersedes the referenced resource
- requires
- The described resource requires the referenced resource to support its function, delivery, or coherence of content
-
-
-
-
-
- Identifies the type of relationship
-
-
-
-
-
-
-
- Identifies the type of relationship
- othertype
- The described resource has a non-standard relationship with the referenced resource
-
-
-
- A keyword that identififes the type of the non-standard relationship
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The relationship of a document to another
-
-
-
-
-
-
-
-
- dcmipoint
- The DCMI Point identifies a point in space using its geographic coordinates
- iso3166
- ISO 3166 Codes for the representation of names of countries
- dcmibox
- The DCMI Box identifies a region of space using its geographic limits
- tgn
- The Getty Thesaurus of Geographic Names
-
-
-
-
-
- Specifies the type of spatial coverage
-
-
-
-
-
-
-
- Specifies the type of spatial coverage
- otherspatial
- Identifies a non-standard type of coverage
-
-
-
- A keyword that identifies the type of non-standard coverage
-
-
-
-
-
-
-
-
-
-
-
- dcmiperiod
- A specification of the limits of a time interval
- w3c-dtf
- W3C Encoding rules for dates and times—a profile based on ISO 8601
-
-
-
-
-
- Specifies the type of temporal coverage
-
-
-
-
-
-
-
- Specifies the type of temporal coverage
- othertemporal
- Specifies a non-standard type of coverage
-
-
-
- A keyword that identifies the type of non-standard coverage
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The spatial or temporal coverage of a document
-
-
-
-
-
-
-
- copyeditor
- A copy editor
- graphicdesigner
- A graphic designer
- other
- Some other contributor
- productioneditor
- A production editor
- technicaleditor
- A technical editor
- translator
- A translator
-
-
-
-
-
- Identifies the nature of the contributor
-
-
-
-
-
-
- Identifies the nature of the non-standard contribution
-
-
-
-
-
-
- Identifies the nature of the contributor
- other
- Identifies a non-standard contribution
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A person or entity, other than an author or editor, credited in a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The numbers of the pages in a book, for use in a bibliographic entry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A summary of the contributions made to a document by a credited source
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a person
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The first name of a person
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A family name; in western cultures the last name
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The portion of a person's name indicating a relationship to ancestors
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A component of a persons name that is not a first name, surname, or lineage
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The printing history of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The date of publication of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The publisher of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of the publisher of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information about a particular release of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A history of the revisions to a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An entry describing a single revision in the history of the revisions to a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A comment on a line in a verbatim listing
-
-
-
-
-
-
-
-
- command
- A command
- function
- A function
- option
- An option
-
-
-
-
- Identifies the class of parameter
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A value or a symbolic reference to a value
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- command
- A command
- function
- A function
- option
- An option
- parameter
- A parameter
-
-
-
-
- Identifies the nature of the replaceable text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Content that may or must be replaced by the user
-
-
-
-
-
-
-
-
-
-
-
- Identifies the type of URI specified
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A Uniform Resource Identifier
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An abbreviation, especially one followed by a period
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An often pronounceable word made from the initial (or selected) letters of a name or phrase
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An inline bibliographic reference to another published work
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A citation to a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a reference page
-
-
-
-
-
-
-
-
-
- article
- An article
- bbs
- A bulletin board system
- book
- A book
- cdrom
- A CD-ROM
- chapter
- A chapter (as of a book)
- dvd
- A DVD
- emailmessage
- An email message
- gopher
- A gopher page
- journal
- A journal
- manuscript
- A manuscript
- newsposting
- A posting to a newsgroup
- part
- A part (as of a book)
- refentry
- A reference entry
- section
- A section (as of a book or article)
- series
- A series
- set
- A set (as of books)
- webpage
- A web page
- wiki
- A wiki page
-
-
-
-
- Identifies the nature of the publication being cited
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a cited work
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Holds additional information that may be used by the applicatoin when resolving the link
-
-
-
-
- Specifies the URI of the document in which the link target appears
-
-
-
-
-
- Specifies the location of the link target in the document
-
-
-
-
- Identifies application-specific customization of the link behavior
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A link that addresses its target indirectly
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A spot in the document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A text-only annotation, often used for accessibility
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A collection of books
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The dedication of a book or other component
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Acknowledgements of a book or other component
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Text at the back of a book describing facts about its production
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An appendix in a Book or Article
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A chapter, as of a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A division in a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Introductory matter preceding the first chapter of a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An introduction to the contents of a part
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A recursive section
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A section of a document with no subdivisions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- faq
- A collection of frequently asked questions.
- journalarticle
- An article in a journal or other periodical.
- productsheet
- A description of a product.
- specification
- A specification.
- techreport
- A technical report.
- whitepaper
- A white paper.
-
-
-
-
- Identifies the nature of the article
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An article
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies one or more annotations that apply to this element
-
-
-
-
-
-
-
-
- Identifies one ore more elements to which this annotation applies
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An annotation
-
-
- annotation must not occur in the descendants of annotation
-
-
-
-
-
-
-
-
-
-
-
-
- source
- The name of the software product or component to which this topic applies
- version
- The version of the software product or component to which this topic applies
- manual
- The section title of the reference page (e.g., User Commands)
- sectdesc
- The section title of the reference page (believed synonymous with "manual" but in wide use)
- software
- The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use)
-
-
-
-
-
- Identifies the kind of miscellaneous information
-
-
-
-
-
-
- Identifies the nature of non-standard miscellaneous information
-
-
-
-
-
- Identifies the kind of miscellaneious information
- other
- Indicates that the information is some 'other' kind.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Meta-information for a reference entry other than the title and volume number
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name, purpose, and classification of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A description of the topic of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of (one of) the subject(s) of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A short (one sentence) synopsis of the topic of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The scope or other indication of applicability of a reference entry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A syntactic synopsis of the subject of the reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A recursive section in a refentry
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A major subsection of a reference entry
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subsection of a refsect1
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subsection of a refsect2
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a list of glossary entries
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the string by which the element's content is to be sorted; if unspecified, the content is used
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An entry in a Glossary or GlossList
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies a list of keywords for the definition
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A definition in a GlossEntry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the other term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference from one glossentry
- to another
-
-
- @otherterm on glosssee must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the other term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference from one GlossEntry to another
-
-
- @otherterm on glossseealso must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The first occurrence of a term
-
-
- @linkend on firstterm must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A glossary term
-
-
- @linkend on glossterm must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A glossary
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a list of bibliography entries
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The units (for example, pages) used to identify the beginning and ending of a reference.
-
-
-
-
-
- Identifies the beginning of a reference; the location within the work that is being referenced.
-
-
-
-
-
- Identifies the end of a reference.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference to a bibliographic entry
-
-
-
-
-
-
-
- normal
- Normal
- preferred
- Preferred
-
-
-
-
- Specifies the significance of the term
-
-
-
-
-
- Specifies the IDs of the elements to which this term applies
-
-
-
-
-
- Indicates the page on which this index term occurs in some version of the printed document
-
-
-
-
- all
- All indexes
- global
- The global index (as for a combined index of a set of box)
- local
- The local index (the index for this document only)
-
-
-
-
- Specifies the scope of the index term
-
-
-
-
-
- Specifies the string by which the term is to be sorted; if unspecified, the term content is used
-
-
-
-
- Specifies the target index for this term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of index terms in the meta-information of a document
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of index term
- singular
- A singular index term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an indexed term
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of index term
- startofrange
- The start of a range
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an indexed term that covers a range
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of index term
- endofrange
- The end of a range
-
-
-
-
- Points to the start of the range
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the end of a range associated with an indexed term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The primary word or phrase under which an index term should be sorted
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A secondary word or phrase in an index term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A tertiary word or phrase in an index term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Part of an index term directing the reader instead to another entry in the index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Part of an index term directing the reader also to another entry in the index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An index to a book or part of a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An index to a set of books
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information related to a task
-
-
-
-
-
-
-
-
-
-
- calspair
- Coordinates expressed as a pair of CALS graphic coordinates.
- linecolumn
- Coordinates expressed as a line and column.
- linecolumnpair
- Coordinates expressed as a pair of lines and columns.
- linerange
- Coordinates expressed as a line range.
-
-
-
-
-
- Identifies the units used in the coords attribute The default units vary according to the type of callout specified: calspair
- for graphics and linecolumn
- for line-oriented elements.
-
-
-
-
-
-
-
- Indicates that non-standard units are used for this area
-. In this case otherunits
- must be specified.
- other
- Coordinates expressed in some non-standard units.
-
-
-
- Identifies the units used in the coords
- attribute when the units
- attribute is other
-. This attribute is forbidden otherwise.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the areas described by this callout.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A called out
- description of a marked Area
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A program listing with associated areas used in callouts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A collection of regions in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Point to the callout
-s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.)
-
-
-
-
-
- Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute.
-
-
-
-
- Provides the coordinates of the area. The coordinates must be interpreted using the units
- specified.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A region defined for a Callout in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A region defined for a Callout in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of related areas in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A screen with associated areas used in callouts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an image object with callouts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The location of a callout embedded in text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross reference to a co
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A production in a set of EBNF productions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The left-hand side of an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The right-hand side of an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies a URI that points to a production
-where the nonterminal
- is defined
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A non-terminal in an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A constraint in an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference to an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The definition of a constraint in an EBNF production
-
-
-
-
-
-
-
-
-
-
- Specifies the alignment character when align
- is set to char
-.
-
-
-
-
- Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char
- when align
- is set to char
-.
-
- 0
- 100
-
-
-
-
-
- Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table.
-
- all
- Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders.
- bottom
- Frame only the bottom of the table.
- none
- Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well.
- sides
- Frame the left and right sides of the table.
- top
- Frame the top of the table.
- topbot
- Frame the top and bottom of the table.
-
-
-
-
-
- Specifies the presence or absence of the column separator
-
- 0
- No column separator rule.
- 1
- Provide a column separator rule on the right
-
-
-
-
-
- Specifies the presence or absence of the row separator
-
- 0
- No row separator rule.
- 1
- Provide a row separator rule below
-
-
-
-
-
- Specifies the orientation of the table
-
- land
- 90 degrees counter-clockwise from the rest of the text flow.
- port
- The same orientation as the rest of the text flow.
-
-
-
-
-
- Specifies the table style
-
-
-
-
- Indicates whether or not the entries in the first column should be considered row headers
-
- firstcol
- Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers).
- norowheader
- Indicates that entries in the first column have no special significance with respect to column headers.
-
-
-
-
-
- Specifies the horizontal alignment of text in an entry.
-
- center
- Centered.
- char
- Aligned on a particular character.
- justify
- Left and right justified.
- left
- Left justified.
- right
- Right justified.
-
-
-
-
-
- Specifies the vertical alignment of text in an entry.
-
- bottom
- Aligned on the bottom of the entry.
- middle
- Aligned in the middle.
- top
- Aligned at the top of the entry.
-
-
-
-
-
- Specifies a column specification by name.
-
-
-
-
- Specifies a starting column by name.
-
-
-
-
- Specifies a span by name.
-
-
-
-
-
- Specifies a starting column by name.
-
-
- Specifies an ending column by name.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Provides a name for a column specification.
-
-
-
-
- Provides a name for a span specification.
-
-
-
-
-
-
-
-
- Additional style information for downstream processing; typically the name of a style.
-
-
-
-
- The number of columns in the table. Must be an integer greater than zero.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the main content of a table, or part of a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one.
-
-
-
-
-
- Specifies the width of the column.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifications for a column in a table
-
-
-
-
-
-
-
-
-
-
-
- Specifies a starting column by name.
-
-
-
-
- Specifies an ending column by name.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Formatting information for a spanned column in a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header consisting of one or more rows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table footer consisting of one or more rows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the rows of a table or informal table
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the number of additional rows which this entry occupies. Defaults to zero.
-
-
-
-
-
- Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated.
-
- 0
- Do not rotate the cell.
- 1
- Rotate the cell 90 degrees counter-clockwise.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cell in a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Additional style information for downstream processing; typically the name of a style.
-
-
-
-
- The number of columns in the entry table. Must be an integer greater than zero.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subtable appearing in place of an Entry in a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header consisting of one or more rows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the rows of a table or informal table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Indicates if the short or long title should be used in a List of Tables
-
- 0
- Indicates that the full title should be used.
- 1
- Indicates that the short short title (titleabbrev) should be used.
-
-
-
-
-
- Indicates if the table should appear in a List of Tables
-
- 0
- Indicates that the table should not occur in the List of Tables.
- 1
- Indicates that the table should appear in the List of Tables.
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal table in a document
-
-
- example must not occur in the descendants of table
-
-
-
-
- figure must not occur in the descendants of table
-
-
-
-
- equation must not occur in the descendants of table
-
-
-
-
- informaltable must not occur in the descendants of table
-
-
-
-
- caution must not occur in the descendants of table
-
-
-
-
- important must not occur in the descendants of table
-
-
-
-
- note must not occur in the descendants of table
-
-
-
-
- tip must not occur in the descendants of table
-
-
-
-
- warning must not occur in the descendants of table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters.
-
-
-
-
- This attribute specifies style information for the current element.
-
-
-
-
- This attribute offers advisory information about the element for which it is set.
-
-
-
-
-
-
-
- This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown.
-
-
-
-
-
-
-
- Occurs when the pointing device button is clicked over an element.
-
-
-
-
- Occurs when the pointing device button is double clicked over an element.
-
-
-
-
- Occurs when the pointing device button is pressed over an element.
-
-
-
-
- Occurs when the pointing device button is released over an element.
-
-
-
-
- Occurs when the pointing device is moved onto an element.
-
-
-
-
- Occurs when the pointing device is moved while it is over an element.
-
-
-
-
- Occurs when the pointing device is moved away from an element.
-
-
-
-
- Occurs when a key is pressed and released over an element.
-
-
-
-
- Occurs when a key is pressed down over an element.
-
-
-
-
- Occurs when a key is released over an element.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the alignment of data and the justification of text in a cell.
-
- left
- Left-flush data/Left-justify text. This is the default value for table data.
- center
- Center data/Center-justify text. This is the default value for table headers.
- right
- Right-flush data/Right-justify text.
- justify
- Double-justify text.
- char
- Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified.
-
-
-
-
-
- This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute.
-
-
-
-
- When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute.
-
-
-
- [0-9]+%
-
-
-
-
-
-
-
-
-
- Specifies the vertical position of data within a cell.
-
- top
- Cell data is flush with the top of the cell.
- middle
- Cell data is centered vertically within the cell. This is the default value.
- bottom
- Cell data is flush with the bottom of the cell.
- baseline
- All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells.
-
-
-
-
-
-
-
-
- Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille.
-
-
-
-
- Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent.
-
-
-
- [0-9]+%
-
-
-
-
-
-
- Specifies the width (in pixels only) of the frame around a table.
-
-
-
-
-
- Specifies which sides of the frame surrounding a table will be visible.
-
- void
- No sides. This is the default value.
- above
- The top side only.
- below
- The bottom side only.
- hsides
- The top and bottom sides only.
- lhs
- The left-hand side only.
- rhs
- The right-hand side only.
- vsides
- The right and left sides only.
- box
- All four sides.
- border
- All four sides.
-
-
-
-
-
- Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent.
-
- none
- No rules. This is the default value.
- groups
- Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only.
- rows
- Rules will appear between rows only.
- cols
- Rules will appear between columns only.
- all
- Rules will appear between all rows and columns.
-
-
-
-
-
- Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells.
-
-
-
- [0-9]+%
-
-
-
-
-
-
- Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space.
-
-
-
- [0-9]+%
-
-
-
-
-
-
-
-
-
-
- Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content.
-
-
-
-
- This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details.
-
-
-
-
- Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets.
-
-
-
-
- Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables.
-
- row
- The current cell provides header information for the rest of the row that contains it
- col
- The current cell provides header information for the rest of the column that contains it.
- rowgroup
- The header cell provides header information for the rest of the row group that contains it.
- colgroup
- The header cell provides header information for the rest of the column group that contains it.
-
-
-
-
-
- Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1
-). The value zero (0
-) means that the cell spans all rows from the current row to the last row of the table section (thead
-, tbody
-, or tfoot
-) in which the cell is defined.
-
-
-
-
-
- Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1
-). The value zero (0
-) means that the cell spans all columns from the current column to the last column of the column group (colgroup
-) in which the cell is defined.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal (captioned) HTML table in a document
-
-
- example must not occur in the descendants of table
-
-
-
-
- figure must not occur in the descendants of table
-
-
-
-
- equation must not occur in the descendants of table
-
-
-
-
- informaltable must not occur in the descendants of table
-
-
-
-
- caution must not occur in the descendants of table
-
-
-
-
- important must not occur in the descendants of table
-
-
-
-
- note must not occur in the descendants of table
-
-
-
-
- tip must not occur in the descendants of table
-
-
-
-
- warning must not occur in the descendants of table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An HTML table without a title
-
-
-
-
-
-
-
-
-
-
-
- An HTML table caption
-
-
- example must not occur in the descendants of caption
-
-
-
-
- figure must not occur in the descendants of caption
-
-
-
-
- table must not occur in the descendants of caption
-
-
-
-
- equation must not occur in the descendants of caption
-
-
-
-
- sidebar must not occur in the descendants of caption
-
-
-
-
- task must not occur in the descendants of caption
-
-
-
-
- caution must not occur in the descendants of caption
-
-
-
-
- important must not occur in the descendants of caption
-
-
-
-
- note must not occur in the descendants of caption
-
-
-
-
- tip must not occur in the descendants of caption
-
-
-
-
- warning must not occur in the descendants of caption
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This attribute, whose value must be an integer > 0, specifies the number of columns spanned
- by the col
- element; the col
- element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col
- element shares its attributes with the next N-1 columns.
-
-
-
-
-
- Specifies a default width for each column spanned by the current col
- element. It has the same meaning as the width
- attribute for the colgroup
- element and overrides it.
-
-
-
-
-
-
-
-
- Specifications for a column in an HTML table
-
-
-
-
-
-
-
-
-
-
-
- This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup
- defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup
- element defines a column group containing N columns. User agents must ignore this attribute if the colgroup
- element contains one or more col
- elements.
-
-
-
-
-
- This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0*
- (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0*
- will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col
- element.
-
-
-
-
-
-
-
-
- A group of columns in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header consisting of one or more rows in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table footer consisting of one or more rows in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the rows of an HTML table or informal HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A row in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header entry in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table entry in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A detailed set of messages, usually error messages
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an entry in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The audience to which the message relevant
-
-
-
-
- The origin of the message
-
-
-
-
- The level of importance or severity of a message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a simpler entry in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The primary component of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subcomponent of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A related component of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The actual text of a message component in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information about a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The level of importance or severity of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The origin of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The audience to which a message in a message set is relevant
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Explanatory material relating to a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A displayed mathematical equation
-
-
- example must not occur in the descendants of equation
-
-
-
-
- figure must not occur in the descendants of equation
-
-
-
-
- table must not occur in the descendants of equation
-
-
-
-
- equation must not occur in the descendants of equation
-
-
-
-
- caution must not occur in the descendants of equation
-
-
-
-
- important must not occur in the descendants of equation
-
-
-
-
- note must not occur in the descendants of equation
-
-
-
-
- tip must not occur in the descendants of equation
-
-
-
-
- warning must not occur in the descendants of equation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A displayed mathematical equation without a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A mathematical phrase, an expression that can be represented with ordinary text and a small amount of markup
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies that the format of the data is MathML
- mathml
- Specifies MathML.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A MathML expression in a media object
-
-
-
-
-
-
-
-
-
-
-
- Any element from the MathML namespace
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies that the format of the data is SVG
- svg
- Specifies SVG.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An SVG drawing in a media object
-
-
-
-
-
-
-
-
-
-
-
- Any element from the SVG namespace
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A string of formatting markup in text that is to be represented literally
-
-
-
-
-
-
-
-
-
-
-
- attribute
- An attribute
- attvalue
- An attribute value
- element
- An element
- emptytag
- An empty element tag
- endtag
- An end tag
- genentity
- A general entity
- localname
- The local name part of a qualified name
- namespace
- A namespace
- numcharref
- A numeric character reference
- paramentity
- A parameter entity
- pi
- A processing instruction
- prefix
- The prefix part of a qualified name
- comment
- An SGML comment
- starttag
- A start tag
- xmlpi
- An XML processing instruction
-
-
-
-
- Identifies the nature of the tag content
-
-
-
-
-
- Identifies the namespace of the tag content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A component of XML (or SGML) markup
-
-
-
-
-
-
-
-
- Identifies the class of symbol
- limit
- The value is a limit of some kind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A name that is replaced by a value before processing
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A unit of information
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Inline text that is some literal value
-
-
-
-
-
-
-
-
- Identifies the (computer) language of the code fragment
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An inline code fragment
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of constant
- limit
- The value is a limit of some kind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A programming or system constant
-
-
-
-
-
-
-
-
-
-
-
- copyright
- A name with a copyright
- registered
- A name with a registered copyright
- service
- A name of a service
- trade
- A name which is trademarked
-
-
-
-
- Specifies the class of product name
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The formal name of a product
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A number assigned to a product
-
-
-
-
-
-
-
-
- altkey
- An alternate or secondary key
- constraint
- A constraint
- datatype
- A data type
- field
- A field
- foreignkey
- A foreign key
- group
- A group
- index
- An index
- key1
- The first or primary key
- key2
- An alternate or secondary key
- name
- A name
- primarykey
- The primary key
- procedure
- A (stored) procedure
- record
- A record
- rule
- A rule
- secondarykey
- The secondary key
- table
- A table
- user
- A user
- view
- A view
-
-
-
-
- Identifies the class of database artifact
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a database, or part of a database
-
-
-
-
-
-
-
-
- hardware
- A hardware application
- software
- A software application
-
-
-
-
- Identifies the class of application
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a software program
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A physical part of a computer system
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text on a button in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Graphic and/or text appearing as a icon in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text of a label in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a menu in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a terminal menu item in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a submenu in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A selection or series of selections from a menu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The conventional name of a mouse button
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- alt
- The "Alt" key
- backspace
- The "Backspace" key
- command
- The "Command" key
- control
- The "Control" key
- delete
- The "Delete" key
- down
- The down arrow
- end
- The "End" key
- enter
- The "Enter" or "Return" key
- escape
- The "Escape" key
- home
- The "Home" key
- insert
- The "Insert" key
- left
- The left arrow
- meta
- The "Meta" key
- option
- The "Option" key
- pagedown
- The page down key
- pageup
- The page up key
- right
- The right arrow
- shift
- The "Shift" key
- space
- The spacebar
- tab
- The "Tab" key
- up
- The up arrow
-
-
-
-
-
- Identifies the function key
-
-
-
-
-
-
-
- Identifies the function key
- other
- Indicates a non-standard function key
-
-
-
- Specifies a keyword that identifies the non-standard key
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text printed on a key on a keyboard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The internal, frequently numeric, identifier for a key on a keyboard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- click
- A (single) mouse click.
- double-click
- A double mouse click.
- press
- A mouse or key press.
- seq
- Sequential clicks or presses.
- simul
- Simultaneous clicks or presses.
-
-
-
-
-
- Identifies the nature of the action taken. If keycombo
- contains more than one element, simul
- is the default, otherwise there is no default.
-
-
-
-
-
-
-
- Identifies the nature of the action taken
- other
- Indicates a non-standard action
-
-
-
- Identifies the non-standard action in some unspecified way.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A combination of input actions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The symbolic name of a key on a keyboard
-
-
-
-
-
-
-
- devicefile
- A device
- directory
- A directory
- extension
- A filename extension
- headerfile
- A header file (as for a programming language)
- libraryfile
- A library file
- partition
- A partition (as of a hard disk)
- symlink
- A symbolic link
-
-
-
-
- Identifies the class of filename
-
-
-
-
-
- Specifies the path of the filename
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a file
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of an executable program or other software command
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data, generally text, displayed or presented by a computer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data entered by the user
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the character that should separate the command and its top-level arguments
-
-
-
-
- Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A syntax summary for a software command
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- norepeat
- Can not be repeated.
- repeat
- Can be repeated.
-
-
-
-
- Indicates whether or not repetition is possible.
-
-
-
-
-
- opt
- Formatted to indicate that it is optional.
- plain
- Formatted without indication.
- req
- Formatted to indicate that it is required.
-
-
-
-
- Indicates optionality.
-
-
-
-
-
- Indicates optionality.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A group of elements in a CmdSynopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An explicit line break in a command synopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A portion of a CmdSynopsis broken out from the main body of the synopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A reference to a fragment of a command synopsis
-
-
- @linkend on synopfragmentref must point to a synopfragment.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A function (subroutine) name and its return type
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a function or subroutine, as in a programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An empty element in a function synopsis indicating that the function in question takes no arguments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An empty element in a function synopsis indicating a variable number of arguments
-
-
-
-
-
-
-
-
-
-
-
- opt
- Formatted to indicate that it is optional.
- req
- Formatted to indicate that it is required.
-
-
-
-
- Indicates optionality.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information about a function parameter in a programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Parameters for a function referenced through a function pointer in a synopsis
-
-
-
-
-
-
-
-
-
-
-
- class
- This is the synopsis of a class
- interface
- This is the synopsis of an interface
-
-
-
-
- Specifies the nature of the synopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The syntax summary for a class definition
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information supplementing the contents of a ClassSynopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A class in an object-oriented programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An interface in an object-oriented programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An exception in an object-oriented programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
- Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example).
- preserve
- Extra whitespace and line breaks must be preserved.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a variable
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The value returned by a function
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The classification of a value
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a class, in the object-oriented programming sense
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A literal listing of all or part of a program
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A note of caution
-
-
- caution must not occur in the descendants of caution
-
-
-
-
- important must not occur in the descendants of caution
-
-
-
-
- note must not occur in the descendants of caution
-
-
-
-
- tip must not occur in the descendants of caution
-
-
-
-
- warning must not occur in the descendants of caution
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An admonition set off from the text
-
-
- caution must not occur in the descendants of important
-
-
-
-
- important must not occur in the descendants of important
-
-
-
-
- note must not occur in the descendants of important
-
-
-
-
- tip must not occur in the descendants of important
-
-
-
-
- warning must not occur in the descendants of important
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A message set off from the text
-
-
- caution must not occur in the descendants of note
-
-
-
-
- important must not occur in the descendants of note
-
-
-
-
- note must not occur in the descendants of note
-
-
-
-
- tip must not occur in the descendants of note
-
-
-
-
- warning must not occur in the descendants of note
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A suggestion to the user, set off from the text
-
-
- caution must not occur in the descendants of tip
-
-
-
-
- important must not occur in the descendants of tip
-
-
-
-
- note must not occur in the descendants of tip
-
-
-
-
- tip must not occur in the descendants of tip
-
-
-
-
- warning must not occur in the descendants of tip
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An admonition set off from the text
-
-
- caution must not occur in the descendants of warning
-
-
-
-
- important must not occur in the descendants of warning
-
-
-
-
- note must not occur in the descendants of warning
-
-
-
-
- tip must not occur in the descendants of warning
-
-
-
-
- warning must not occur in the descendants of warning
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The classification of an error message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- daemon
- A daemon or other system process (syslogd)
- domainname
- A domain name (example.com)
- etheraddress
- An ethernet address (00:05:4E:49:FD:8E)
- event
- An event of some sort (SIGHUP)
- eventhandler
- An event handler of some sort (hangup)
- filesystem
- A filesystem (ext3)
- fqdomainname
- A fully qualified domain name (my.example.com)
- groupname
- A group name (wheel)
- ipaddress
- An IP address (127.0.0.1)
- library
- A library (libncurses)
- macro
- A macro
- netmask
- A netmask (255.255.255.192)
- newsgroup
- A newsgroup (comp.text.xml)
- osname
- An operating system name (Hurd)
- process
- A process (gnome-cups-icon)
- protocol
- A protocol (ftp)
- resource
- A resource
- server
- A server (mail.example.com)
- service
- A service (ppp)
- systemname
- A system name (hephaistos)
- username
- A user name (ndw)
-
-
-
-
- Identifies the nature of the system item
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A system-related item or term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An option for a software command
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A unit of data associated with some part of a computer system
-
-
-
-
-
-
diff --git a/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rnc b/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rnc
deleted file mode 100644
index 02c5fd947a494f2f99a20a182574f1a0f1461360..0000000000000000000000000000000000000000
--- a/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rnc
+++ /dev/null
@@ -1,10666 +0,0 @@
-namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
-namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
-default namespace db = "http://docbook.org/ns/docbook"
-namespace html = "http://www.w3.org/1999/xhtml"
-namespace mml = "http://www.w3.org/1998/Math/MathML"
-namespace rng = "http://relaxng.org/ns/structure/1.0"
-namespace s = "http://www.ascc.net/xml/schematron"
-namespace svg = "http://www.w3.org/2000/svg"
-namespace xi = "http://www.w3.org/2001/XInclude"
-namespace xlink = "http://www.w3.org/1999/xlink"
-
-s:ns [
- prefix = "a"
- uri = "http://relaxng.org/ns/compatibility/annotations/1.0"
-]
-s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ]
-s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ]
-s:ns [
- prefix = "dbx"
- uri =
- "http://sourceforge.net/projects/docbook/defguide/schema/extra-markup"
-]
-s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ]
-s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ]
-s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ]
-s:ns [ prefix = "s" uri = "http://www.ascc.net/xml/schematron" ]
-s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ]
-s:ns [ prefix = "xi" uri = "http://www.w3.org/2001/XInclude" ]
-s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ]
-# DocBook V5.0CR5
-
-# See http://docbook.org/ns/docbook
-start =
- (db.set
- | db.book
- | db.divisions
- | db.components
- | db.navigation.components
- | db.section
- | db.para)
- | (db.sect1 | db.sect2 | db.sect3 | db.sect4 | db.sect5)
- | (db.refentry | db.refsection)
- | (db.refsect1 | db.refsect2 | db.refsect3)
- | db.setindex
-div {
- db._any.attribute =
-
- ## Any attribute including in any attribute in any namespace.
- attribute * { text }
- db._any =
-
- ## Any element from almost any namespace
- element * - (db:* | html:*) {
- (db._any.attribute | text | db._any)*
- }
-}
-db.arch.attribute =
-
- ## Designates the computer or chip architecture to which the element applies
- attribute arch { text }
-db.audience.attribute =
-
- ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users.
- attribute audience { text }
-db.condition.attribute =
-
- ## provides a standard place for application-specific effectivity
- attribute condition { text }
-db.conformance.attribute =
-
- ## Indicates standards conformance characteristics of the element
- attribute conformance { text }
-db.os.attribute =
-
- ## Indicates the operating system to which the element is applicable
- attribute os { text }
-db.revision.attribute =
-
- ## Indicates the editorial revision to which the element belongs
- attribute revision { text }
-db.security.attribute =
-
- ## Indicates something about the security level associated with the element to which it applies
- attribute security { text }
-db.userlevel.attribute =
-
- ## Indicates the level of user experience for which the element applies
- attribute userlevel { text }
-db.vendor.attribute =
-
- ## Indicates the computer vendor to which the element applies.
- attribute vendor { text }
-db.wordsize.attribute =
-
- ## Indicates the word size (width in bits) of the computer architecture to which the element applies
- attribute wordsize { text }
-db.effectivity.attributes =
- db.arch.attribute?
- & db.audience.attribute?
- & db.condition.attribute?
- & db.conformance.attribute?
- & db.os.attribute?
- & db.revision.attribute?
- & db.security.attribute?
- & db.userlevel.attribute?
- & db.vendor.attribute?
- & db.wordsize.attribute?
-db.endterm.attribute =
-
- ## Points to the element whose content is to be used as the text of the link
- attribute endterm { xsd:IDREF }
-db.linkend.attribute =
-
- ## Points to an internal link target by identifying the value of its xml:id attribute
- attribute linkend { xsd:IDREF }
-db.linkends.attribute =
-
- ## Points to one or more internal link targets by identifying the value of their xml:id attributes
- attribute linkends { xsd:IDREFS }
-db.xlink.href.attribute =
-
- ## Identifies a link target with a URI
- attribute xlink:href { xsd:anyURI }
-db.xlink.type.attribute =
-
- ## Identifies the XLink link type
- attribute xlink:type {
-
- ## An XLink simple link
- "simple"
- }
-db.xlink.role.attribute =
-
- ## Identifies the XLink role of the link
- attribute xlink:role { xsd:anyURI }
-db.xlink.arcrole.attribute =
-
- ## Identifies the XLink arcrole of the link
- attribute xlink:arcrole { xsd:anyURI }
-db.xlink.title.attribute =
-
- ## Identifies the XLink title of the link
- attribute xlink:title { text }?
-db.xlink.show.enumeration =
-
- ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context.
- "new"
- |
- ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded.
- "replace"
- |
- ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource.
- "embed"
- |
- ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior.
- "other"
- |
- ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
- "none"
-db.xlink.show.attribute =
-
- ## Identifies the XLink show behavior of the link
- attribute xlink:show { db.xlink.show.enumeration }
-db.xlink.actuate.enumeration =
-
- ## An application should traverse to the ending resource immediately on loading the starting resource.
- "onLoad"
- |
- ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal.
- "onRequest"
- |
- ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior.
- "other"
- |
- ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
- "none"
-db.xlink.actuate.attribute =
-
- ## Identifies the XLink actuate behavior of the link
- attribute xlink:actuate { db.xlink.actuate.enumeration }
-db.href.attributes =
- db.xlink.href.attribute
- & db.xlink.type.attribute?
- & db.xlink.role.attribute?
- & db.xlink.arcrole.attribute?
- & db.xlink.title.attribute?
- & db.xlink.show.attribute?
- & db.xlink.actuate.attribute?
-db.xml.id.attribute =
-
- ## Identifies the unique ID value of the element
- attribute xml:id { xsd:ID }
-db.version.attribute =
-
- ## Specifies the DocBook version of the element and its descendants
- attribute version { text }
-db.xml.lang.attribute =
-
- ## Specifies the natural language of the element and its descendants
- attribute xml:lang { text }
-db.xml.base.attribute =
-
- ## Specifies the base URI of the element and its descendants
- attribute xml:base { xsd:anyURI }
-db.remap.attribute =
-
- ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme
- attribute remap { text }
-db.xreflabel.attribute =
-
- ## Provides the text that is to be generated for a cross reference to the element
- attribute xreflabel { text }
-db.xrefstyle.attribute =
-
- ## Specifies a keyword or keywords identifying additional style information
- attribute xrefstyle { text }
-db.revisionflag.enumeration =
-
- ## The element has been changed.
- "changed"
- |
- ## The element is new (has been added to the document).
- "added"
- |
- ## The element has been deleted.
- "deleted"
- |
- ## Explicitly turns off revision markup for this element.
- "off"
-db.revisionflag.attribute =
-
- ## Identifies the revision status of the element
- attribute revisionflag { db.revisionflag.enumeration }
-db.dir.enumeration =
-
- ## Left-to-right text
- "ltr"
- |
- ## Right-to-left text
- "rtl"
- |
- ## Left-to-right override
- "lro"
- |
- ## Right-to-left override
- "rlo"
-db.dir.attribute =
-
- ## Identifies the direction of text in an element
- attribute dir { db.dir.enumeration }
-db.common.base.attributes =
- db.version.attribute?
- & db.xml.lang.attribute?
- & db.xml.base.attribute?
- & db.remap.attribute?
- & db.xreflabel.attribute?
- & db.revisionflag.attribute?
- & db.dir.attribute?
- & db.effectivity.attributes
-db.common.attributes =
- db.xml.id.attribute?
- & db.common.base.attributes
- & db.annotations.attribute?
-db.common.idreq.attributes =
- db.xml.id.attribute
- & db.common.base.attributes
- & db.annotations.attribute?
-db.common.linking.attributes =
- (db.linkend.attribute | db.href.attributes)?
-db.common.req.linking.attributes =
- db.linkend.attribute | db.href.attributes
-db.common.data.attributes =
-
- ## Specifies the format of the data
- attribute format { text }?,
- (
- ## Indentifies the location of the data by URI
- attribute fileref { xsd:anyURI }
- |
- ## Identifies the location of the data by external identifier (entity name)
- attribute entityref { xsd:ENTITY })
-db.verbatim.continuation.enumeration =
-
- ## Line numbering continues from the immediately preceding element with the same name.
- "continues"
- |
- ## Line numbering restarts (begins at 1, usually).
- "restarts"
-db.verbatim.continuation.attribute =
-
- ## Determines whether line numbering continues from the previous element or restarts.
- attribute continuation { db.verbatim.continuation.enumeration }
-db.verbatim.linenumbering.enumeration =
-
- ## Lines are numbered.
- "numbered"
- |
- ## Lines are not numbered.
- "unnumbered"
-db.verbatim.linenumbering.attribute =
-
- ## Determines whether lines are numbered.
- attribute linenumbering { db.verbatim.linenumbering.enumeration }
-db.verbatim.startinglinenumber.attribute =
-
- ## Specifies the initial line number.
- attribute startinglinenumber { xsd:integer }
-db.verbatim.language.attribute =
-
- ## Identifies the language (i.e. programming language) of the verbatim content.
- attribute language { text }
-db.verbatim.xml.space.attribute =
-
- ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not.
- attribute xml:space {
-
- ## Whitespace must be preserved.
- "preserve"
- }
-db.verbatim.attributes =
- db.verbatim.continuation.attribute?
- & db.verbatim.linenumbering.attribute?
- & db.verbatim.startinglinenumber.attribute?
- & db.verbatim.language.attribute?
- & db.verbatim.xml.space.attribute?
-db.label.attribute =
-
- ## Specifies an identifying string for presentation purposes
- attribute label { text }
-db.width.characters.attribute =
-
- ## Specifies the width (in characters) of the element
- attribute width { xsd:nonNegativeInteger }
-db.spacing.enumeration =
-
- ## The spacing should be "compact".
- "compact"
- |
- ## The spacing should be "normal".
- "normal"
-db.spacing.attribute =
-
- ## Specifies (a hint about) the spacing of the content
- attribute spacing { db.spacing.enumeration }
-db.pgwide.enumeration =
-
- ## The element should be rendered in the current text flow (with the flow column width).
- "0"
- |
- ## The element should be rendered across the full text page.
- "1"
-db.pgwide.attribute =
-
- ## Indicates if the element is rendered across the column or the page
- attribute pgwide { db.pgwide.enumeration }
-db.language.attribute =
-
- ## Identifies the language (i.e. programming language) of the content.
- attribute language { text }
-db.performance.enumeration =
-
- ## The content describes an optional step or steps.
- "optional"
- |
- ## The content describes a required step or steps.
- "required"
-db.performance.attribute =
-
- ## Specifies if the content is required or optional.
- attribute performance { db.performance.enumeration }
-db.floatstyle.attribute =
-
- ## Specifies style information to be used when rendering the float
- attribute floatstyle { text }
-db.width.attribute =
-
- ## Specifies the width of the element
- attribute width { text }
-db.depth.attribute =
-
- ## Specifies the depth of the element
- attribute depth { text }
-db.contentwidth.attribute =
-
- ## Specifies the width of the content rectangle
- attribute contentwidth { text }
-db.contentdepth.attribute =
-
- ## Specifies the depth of the content rectangle
- attribute contentdepth { text }
-db.scalefit.enumeration =
-
- ## False (do not scale-to-fit; anamorphic scaling may occur)
- "0"
- |
- ## True (scale-to-fit; anamorphic scaling is forbidden)
- "1"
-db.scale.attribute =
-
- ## Specifies the scaling factor
- attribute scale { xsd:positiveInteger }
-db.halign.enumeration =
-
- ## Centered horizontally
- "center"
- |
- ## Aligned horizontally on the specified character
- "char"
- |
- ## Fully justified (left and right margins or edges)
- "justify"
- |
- ## Left aligned
- "left"
- |
- ## Right aligned
- "right"
-db.valign.enumeration =
-
- ## Aligned on the bottom of the region
- "bottom"
- |
- ## Centered vertically
- "middle"
- |
- ## Aligned on the top of the region
- "top"
-db.biblio.class.enumeration =
-
- ## A document object identifier.
- "doi"
- |
- ## An international standard book number.
- "isbn"
- |
- ## An international standard technical report number (ISO 10444).
- "isrn"
- |
- ## An international standard serial number.
- "issn"
- |
- ## A Library of Congress reference number.
- "libraryofcongress"
- |
- ## A publication number (an internal number or possibly organizational standard).
- "pubsnumber"
- |
- ## A Uniform Resource Identifier
- "uri"
-db.biblio.class-enum.attribute =
-
- ## Identifies the kind of bibliographic identifier
- attribute class { db.biblio.class.enumeration }?
-db.biblio.class-other.attribute =
-
- ## Identifies the nature of the non-standard bibliographic identifier
- attribute otherclass { xsd:NMTOKEN }
-db.biblio.class-other.attributes =
-
- ## Identifies the kind of bibliographic identifier
- attribute class {
-
- ## Indicates that the identifier is some 'other' kind.
- "other"
- }
- & db.biblio.class-other.attribute
-db.biblio.class.attribute =
- db.biblio.class-enum.attribute | db.biblio.class-other.attributes
-db.ubiq.inlines =
- (db.inlinemediaobject
- | db.remark
- | db.superscript
- | db.subscript
- | db.link.inlines
- | db.alt)
- | db.annotation
- | db.indexterm
-db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)*
-db._title = db.title? & db.titleabbrev? & db.subtitle?
-db._title.req = db.title & db.titleabbrev? & db.subtitle?
-db._title.only = db.title? & db.titleabbrev?
-db._title.onlyreq = db.title & db.titleabbrev?
-db._info = (db._title, db.titleforbidden.info?) | db.info?
-db._info.title.req =
- (db._title.req, db.titleforbidden.info?) | db.titlereq.info
-db._info.title.only =
- (db._title.only, db.titleforbidden.info?) | db.titleonly.info
-db._info.title.onlyreq =
- (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info
-db._info.title.forbidden = db.titleforbidden.info?
-db.all.inlines =
- (text
- | db.ubiq.inlines
- | db.general.inlines
- | db.domain.inlines
- | db.extension.inlines)
- | db.xi.include
-db.general.inlines =
- db.publishing.inlines
- | db.product.inlines
- | db.bibliography.inlines
- | db.graphic.inlines
- | db.indexing.inlines
- | db.link.inlines
-db.domain.inlines =
- db.technical.inlines
- | db.math.inlines
- | db.markup.inlines
- | db.gui.inlines
- | db.keyboard.inlines
- | db.os.inlines
- | db.programming.inlines
- | db.error.inlines
-db.technical.inlines =
- (db.replaceable | db.package | db.parameter)
- | db.termdef
- | db.nonterminal
- | (db.systemitem | db.option | db.optional | db.property)
-db.product.inlines =
- db.trademark
- | (db.productnumber
- | db.productname
- | db.database
- | db.application
- | db.hardware)
-db.bibliography.inlines =
- db.citation
- | db.citerefentry
- | db.citetitle
- | db.citebiblioid
- | db.author
- | db.person
- | db.personname
- | db.org
- | db.orgname
- | db.editor
- | db.jobtitle
-db.publishing.inlines =
- (db.abbrev
- | db.acronym
- | db.date
- | db.emphasis
- | db.footnote
- | db.footnoteref
- | db.foreignphrase
- | db.phrase
- | db.quote
- | db.subscript
- | db.superscript
- | db.wordasword)
- | db.glossary.inlines
- | db.coref
-db.graphic.inlines = db.inlinemediaobject
-db.indexing.inlines = notAllowed | db.indexterm
-db.link.inlines =
- (db.xref | db.link | db.olink | db.anchor) | db.biblioref
-db.extension.inlines = notAllowed
-db.nopara.blocks =
- (db.list.blocks
- | db.formal.blocks
- | db.informal.blocks
- | db.publishing.blocks
- | db.graphic.blocks
- | db.technical.blocks
- | db.verbatim.blocks
- | db.bridgehead
- | db.remark
- | db.revhistory)
- | db.indexterm
- | db.synopsis.blocks
- | db.admonition.blocks
-db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara
-db.all.blocks =
- (db.nopara.blocks | db.para.blocks | db.extension.blocks)
- | db.annotation
- | db.xi.include
-db.formal.blocks = (db.example | db.figure | db.table) | db.equation
-db.informal.blocks =
- (db.informalexample | db.informalfigure | db.informaltable)
- | db.informalequation
-db.publishing.blocks =
- db.sidebar | db.blockquote | db.address | db.epigraph
-db.graphic.blocks = db.mediaobject | db.screenshot
-db.technical.blocks =
- db.procedure
- | db.task
- | (db.productionset | db.constraintdef)
- | db.msgset
-db.list.blocks =
- (db.itemizedlist
- | db.orderedlist
- | db.procedure
- | db.simplelist
- | db.variablelist
- | db.segmentedlist)
- | db.glosslist
- | db.bibliolist
- | db.calloutlist
- | db.qandaset
-db.verbatim.blocks =
- (db.screen | db.literallayout)
- | (db.programlistingco | db.screenco)
- | (db.programlisting | db.synopsis)
-db.extension.blocks = notAllowed
-db.info.extension = db._any
-db.info.elements =
- (db.abstract
- | db.address
- | db.artpagenums
- | db.author
- | db.authorgroup
- | db.authorinitials
- | db.bibliocoverage
- | db.biblioid
- | db.bibliosource
- | db.collab
- | db.confgroup
- | db.contractsponsor
- | db.contractnum
- | db.copyright
- | db.cover
- | db.date
- | db.edition
- | db.editor
- | db.issuenum
- | db.keywordset
- | db.legalnotice
- | db.mediaobject
- | db.org
- | db.orgname
- | db.othercredit
- | db.pagenums
- | db.printhistory
- | db.pubdate
- | db.publisher
- | db.publishername
- | db.releaseinfo
- | db.revhistory
- | db.seriesvolnums
- | db.subjectset
- | db.volumenum
- | db.info.extension)
- | db.annotation
- | db.extendedlink
- | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset)
- | db.itermset
- | (db.productname | db.productnumber)
- | db.xi.include
-db.bibliographic.elements =
- db.info.elements
- | db.publishing.inlines
- | db.citerefentry
- | db.citetitle
- | db.citebiblioid
- | db.person
- | db.personblurb
- | db.personname
- | db.subtitle
- | db.title
- | db.titleabbrev
-div {
- db.title.role.attribute = attribute role { text }
- db.title.attlist =
- db.title.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.title =
-
- ## The text of the title of a section of a document or of a formal block-level element
- element title { db.title.attlist, db.all.inlines* }
-}
-div {
- db.titleabbrev.role.attribute = attribute role { text }
- db.titleabbrev.attlist =
- db.titleabbrev.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.titleabbrev =
-
- ## The abbreviation of a title
- element titleabbrev { db.titleabbrev.attlist, db.all.inlines* }
-}
-div {
- db.subtitle.role.attribute = attribute role { text }
- db.subtitle.attlist =
- db.subtitle.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.subtitle =
-
- ## The subtitle of a document
- element subtitle { db.subtitle.attlist, db.all.inlines* }
-}
-div {
- db.info.role.attribute = attribute role { text }
- db.info.attlist = db.info.role.attribute? & db.common.attributes
- db.info =
-
- ## A wrapper for information about a component or other block
- element info { db.info.attlist, (db._title & db.info.elements*) }
-}
-div {
- db.titlereq.info.role.attribute = attribute role { text }
- db.titlereq.info.attlist =
- db.titlereq.info.role.attribute? & db.common.attributes
- db.titlereq.info =
-
- ## A wrapper for information about a component or other block with a required title
- element info {
- db.titlereq.info.attlist, (db._title.req & db.info.elements*)
- }
-}
-div {
- db.titleonly.info.role.attribute = attribute role { text }
- db.titleonly.info.attlist =
- db.titleonly.info.role.attribute? & db.common.attributes
- db.titleonly.info =
-
- ## A wrapper for information about a component or other block with only a title
- element info {
- db.titleonly.info.attlist, (db._title.only & db.info.elements*)
- }
-}
-div {
- db.titleonlyreq.info.role.attribute = attribute role { text }
- db.titleonlyreq.info.attlist =
- db.titleonlyreq.info.role.attribute? & db.common.attributes
- db.titleonlyreq.info =
-
- ## A wrapper for information about a component or other block with only a required title
- element info {
- db.titleonlyreq.info.attlist,
- (db._title.onlyreq & db.info.elements*)
- }
-}
-div {
- db.titleforbidden.info.role.attribute = attribute role { text }
- db.titleforbidden.info.attlist =
- db.titleforbidden.info.role.attribute? & db.common.attributes
- db.titleforbidden.info =
-
- ## A wrapper for information about a component or other block without a title
- element info { db.titleforbidden.info.attlist, db.info.elements* }
-}
-div {
- db.subjectset.role.attribute = attribute role { text }
- db.subjectset.scheme.attribute =
-
- ## Identifies the controlled vocabulary used by this set's terms
- attribute scheme { xsd:NMTOKEN }
- db.subjectset.attlist =
- db.subjectset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.subjectset.scheme.attribute?
- db.subjectset =
-
- ## A set of terms describing the subject matter of a document
- element subjectset { db.subjectset.attlist, db.subject+ }
-}
-div {
- db.subject.role.attribute = attribute role { text }
- db.subject.weight.attribute =
-
- ## Specifies a ranking for this subject relative to other subjects in the same set
- attribute weight { text }
- db.subject.attlist =
- db.subject.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.subject.weight.attribute?
- db.subject =
-
- ## One of a group of terms describing the subject matter of a document
- element subject { db.subject.attlist, db.subjectterm+ }
-}
-div {
- db.subjectterm.role.attribute = attribute role { text }
- db.subjectterm.attlist =
- db.subjectterm.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.subjectterm =
-
- ## A term in a group of terms describing the subject matter of a document
- element subjectterm { db.subjectterm.attlist, text }
-}
-div {
- db.keywordset.role.attribute = attribute role { text }
- db.keywordset.attlist =
- db.keywordset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.keywordset =
-
- ## A set of keywords describing the content of a document
- element keywordset { db.keywordset.attlist, db.keyword+ }
-}
-div {
- db.keyword.role.attribute = attribute role { text }
- db.keyword.attlist =
- db.keyword.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.keyword =
-
- ## One of a set of keywords describing the content of a document
- element keyword { db.keyword.attlist, text }
-}
-db.table.choice = notAllowed | db.cals.table | db.html.table
-db.informaltable.choice =
- notAllowed | db.cals.informaltable | db.html.informaltable
-db.table = db.table.choice
-db.informaltable = db.informaltable.choice
-div {
- db.procedure.role.attribute = attribute role { text }
- db.procedure.attlist =
- db.procedure.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.procedure.info = db._info.title.only
- db.procedure =
-
- ## A list of operations to be performed in a well-defined sequence
- element procedure {
- db.procedure.attlist, db.procedure.info, db.all.blocks*, db.step+
- }
-}
-div {
- db.step.role.attribute = attribute role { text }
- db.step.attlist =
- db.step.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.performance.attribute?
- db.step.info = db._info.title.only
- #
- # This content model is blocks*, step|stepalternatives, blocks* but
- # expressed this way it avoids UPA issues in XSD and DTD versions
- db.step =
-
- ## A unit of action in a procedure
- element step {
- db.step.attlist,
- db.step.info,
- ((db.all.blocks+,
- ((db.substeps | db.stepalternatives), db.all.blocks*)?)
- | ((db.substeps | db.stepalternatives), db.all.blocks*))
- }
-}
-div {
- db.stepalternatives.role.attribute = attribute role { text }
- db.stepalternatives.attlist =
- db.stepalternatives.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.performance.attribute?
- db.stepalternatives.info = db._info.title.forbidden
- db.stepalternatives =
-
- ## Alternative steps in a procedure
- element stepalternatives {
- db.stepalternatives.attlist, db.stepalternatives.info, db.step+
- }
-}
-div {
- db.substeps.role.attribute = attribute role { text }
- db.substeps.attlist =
- db.substeps.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.performance.attribute?
- db.substeps =
-
- ## A wrapper for steps that occur within steps in a procedure
- element substeps { db.substeps.attlist, db.step+ }
-}
-div {
- db.sidebar.role.attribute = attribute role { text }
- db.sidebar.attlist =
- db.sidebar.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.sidebar.info = db._info.title.only
- db.sidebar =
-
- ## A portion of a document that is isolated from the main narrative flow
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:sidebar"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:sidebar)"
- "sidebar must not occur in the descendants of sidebar"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element sidebar {
- db.sidebar.attlist, db.sidebar.info, db.all.blocks+
- }
-}
-div {
- db.abstract.role.attribute = attribute role { text }
- db.abstract.attlist =
- db.abstract.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.abstract.info = db._info.title.only
- db.abstract =
-
- ## A summary
- element abstract {
- db.abstract.attlist, db.abstract.info, db.para.blocks+
- }
-}
-div {
- db.personblurb.role.attribute = attribute role { text }
- db.personblurb.attlist =
- db.personblurb.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.personblurb.info = db._info.title.only
- db.personblurb =
-
- ## A short description or note about a person
- element personblurb {
- db.personblurb.attlist, db.personblurb.info, db.para.blocks+
- }
-}
-div {
- db.blockquote.role.attribute = attribute role { text }
- db.blockquote.attlist =
- db.blockquote.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.blockquote.info = db._info.title.only
- db.blockquote =
-
- ## A quotation set off from the main text
- element blockquote {
- db.blockquote.attlist,
- db.blockquote.info,
- db.attribution?,
- db.all.blocks+
- }
-}
-div {
- db.attribution.role.attribute = attribute role { text }
- db.attribution.attlist =
- db.attribution.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.attribution =
-
- ## The source of a block quote or epigraph
- element attribution {
- db.attribution.attlist,
- (db._text
- | db.person
- | db.personname
- | db.citetitle
- | db.citation)*
- }
-}
-div {
- db.bridgehead.renderas.enumeration =
-
- ## Render as a first-level section
- "sect1"
- |
- ## Render as a second-level section
- "sect2"
- |
- ## Render as a third-level section
- "sect3"
- |
- ## Render as a fourth-level section
- "sect4"
- |
- ## Render as a fifth-level section
- "sect5"
- db.bridgehead.renderas-enum.attribute =
-
- ## Indicates how the bridge head should be rendered
- attribute renderas { db.bridgehead.renderas.enumeration }?
- db.bridgehead.renderas-other.attribute =
-
- ## Identifies the nature of the non-standard rendering
- attribute otherrenderas { xsd:NMTOKEN }
- db.bridgehead.renderas-other.attributes =
-
- ## Indicates how the bridge head should be rendered
- attribute renderas {
-
- ## Identifies a non-standard rendering
- "other"
- }
- & db.bridgehead.renderas-other.attribute
- db.bridgehead.renderas.attribute =
- db.bridgehead.renderas-enum.attribute
- | db.bridgehead.renderas-other.attributes
- db.bridgehead.role.attribute = attribute role { text }
- db.bridgehead.attlist =
- db.bridgehead.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.bridgehead.renderas.attribute?
- db.bridgehead =
-
- ## A free-floating heading
- element bridgehead { db.bridgehead.attlist, db.all.inlines* }
-}
-div {
- db.remark.role.attribute = attribute role { text }
- db.remark.attlist =
- db.remark.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.remark =
-
- ## A remark (or comment) intended for presentation in a draft manuscript
- element remark { db.remark.attlist, db._text }
-}
-div {
- db.epigraph.role.attribute = attribute role { text }
- db.epigraph.attlist =
- db.epigraph.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.epigraph.info = db._info.title.forbidden
- db.epigraph =
-
- ## A short inscription at the beginning of a document or component
- element epigraph {
- db.epigraph.attlist,
- db.epigraph.info,
- db.attribution?,
- (db.para.blocks | db.literallayout)+
- }
-}
-div {
- db.footnote.role.attribute = attribute role { text }
- db.footnote.label.attribute =
-
- ## Identifies the desired footnote mark
- attribute label { xsd:NMTOKEN }
- db.footnote.attlist =
- db.footnote.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.footnote.label.attribute?
- db.footnote =
-
- ## A footnote
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:footnote)"
- "footnote must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:table)"
- "table must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:indexterm)"
- "indexterm must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:sidebar)"
- "sidebar must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:task)"
- "task must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:epigraph)"
- "epigraph must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnote"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of footnote"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element footnote { db.footnote.attlist, db.all.blocks+ }
-}
-div {
- db.formalpara.role.attribute = attribute role { text }
- db.formalpara.attlist =
- db.formalpara.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.formalpara.info = db._info.title.onlyreq
- db.formalpara =
-
- ## A paragraph with a title
- element formalpara {
- db.formalpara.attlist,
- db.formalpara.info,
- db.indexing.inlines*,
- db.para
- }
-}
-div {
- db.para.role.attribute = attribute role { text }
- db.para.attlist =
- db.para.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.para.info = db._info.title.forbidden
- db.para =
-
- ## A paragraph
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:para"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element para {
- db.para.attlist,
- db.para.info,
- (db.all.inlines | db.nopara.blocks)*
- }
-}
-div {
- db.simpara.role.attribute = attribute role { text }
- db.simpara.attlist =
- db.simpara.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.simpara.info = db._info.title.forbidden
- db.simpara =
-
- ## A paragraph that contains only text and inline markup, no block elements
- element simpara {
- db.simpara.attlist, db.simpara.info, db.all.inlines*
- }
-}
-div {
- db.itemizedlist.role.attribute = attribute role { text }
- db.itemizedlist.mark.attribute =
-
- ## Identifies the type of mark to be used on items in this list
- attribute mark { xsd:NMTOKEN }
- db.itemizedlist.attlist =
- db.itemizedlist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.spacing.attribute?
- & db.itemizedlist.mark.attribute?
- db.itemizedlist.info = db._info.title.only
- db.itemizedlist =
-
- ## A list in which each entry is marked with a bullet or other dingbat
- element itemizedlist {
- db.itemizedlist.attlist,
- db.itemizedlist.info,
- db.all.blocks*,
- db.listitem+
- }
-}
-div {
- db.orderedlist.role.attribute = attribute role { text }
- db.orderedlist.continuation.enumeration =
-
- ## Specifies that numbering should begin where the preceding list left off
- "continues"
- |
- ## Specifies that numbering should begin again at 1
- "restarts"
- db.orderedlist.continuation.attribute =
-
- ## Indicates how list numbering should begin relative to the immediately preceding list
- attribute continuation { db.orderedlist.continuation.enumeration }
- db.orderedlist.startingnumber.attribute =
-
- ## Specifies the initial line number.
- attribute startingnumber { xsd:integer }
- db.orderedlist.inheritnum.enumeration =
-
- ## Specifies that numbering should ignore list nesting
- "ignore"
- |
- ## Specifies that numbering should inherit from outer-level lists
- "inherit"
- db.orderedlist.inheritnum.attribute =
-
- ## Indicates whether or not item numbering should be influenced by list nesting
- attribute inheritnum { db.orderedlist.inheritnum.enumeration }
- db.orderedlist.numeration.enumeration =
-
- ## Specifies Arabic numeration (1, 2, 3, …)
- "arabic"
- |
- ## Specifies upper-case alphabetic numeration (A, B, C, …)
- "upperalpha"
- |
- ## Specifies lower-case alphabetic numeration (a, b, c, …)
- "loweralpha"
- |
- ## Specifies upper-case Roman numeration (I, II, III, …)
- "upperroman"
- |
- ## Specifies lower-case Roman numeration (i, ii, iii …)
- "lowerroman"
- db.orderedlist.numeration.attribute =
-
- ## Indicates the desired numeration
- attribute numeration { db.orderedlist.numeration.enumeration }
- db.orderedlist.attlist =
- db.orderedlist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.spacing.attribute?
- & (db.orderedlist.continuation.attribute
- | db.orderedlist.startingnumber.attribute)?
- & db.orderedlist.inheritnum.attribute?
- & db.orderedlist.numeration.attribute?
- db.orderedlist.info = db._info.title.only
- db.orderedlist =
-
- ## A list in which each entry is marked with a sequentially incremented label
- element orderedlist {
- db.orderedlist.attlist,
- db.orderedlist.info,
- db.all.blocks*,
- db.listitem+
- }
-}
-div {
- db.listitem.role.attribute = attribute role { text }
- db.listitem.override.attribute =
-
- ## Specifies the keyword for the type of mark that should be used on this
- ## item, instead of the mark that would be used by default
- attribute override { xsd:NMTOKEN }
- db.listitem.attlist =
- db.listitem.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.listitem.override.attribute?
- db.listitem =
-
- ## A wrapper for the elements of a list item
- element listitem { db.listitem.attlist, db.all.blocks+ }
-}
-div {
- db.segmentedlist.role.attribute = attribute role { text }
- db.segmentedlist.attlist =
- db.segmentedlist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.segmentedlist.info = db._info.title.only
- db.segmentedlist =
-
- ## A segmented list, a list of sets of elements
- element segmentedlist {
- db.segmentedlist.attlist,
- db.segmentedlist.info,
- db.segtitle+,
- db.seglistitem+
- }
-}
-div {
- db.segtitle.role.attribute = attribute role { text }
- db.segtitle.attlist =
- db.segtitle.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.segtitle =
-
- ## The title of an element of a list item in a segmented list
- element segtitle { db.segtitle.attlist, db.all.inlines* }
-}
-div {
- db.seglistitem.role.attribute = attribute role { text }
- db.seglistitem.attlist =
- db.seglistitem.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.seglistitem =
-
- ## A list item in a segmented list
- [
- s:pattern [
- name = "Cardinality of segments and titles"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:seglistitem"
- "\x{a}" ~
- " "
- s:assert [
- test = "count(db:seg) = count(../db:segtitle)"
- "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element seglistitem { db.seglistitem.attlist, db.seg+ }
-}
-div {
- db.seg.role.attribute = attribute role { text }
- db.seg.attlist =
- db.seg.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.seg =
-
- ## An element of a list item in a segmented list
- element seg { db.seg.attlist, db.all.inlines* }
-}
-div {
- db.simplelist.role.attribute = attribute role { text }
- db.simplelist.type.enumeration =
-
- ## A tabular presentation in row-major order.
- "horiz"
- |
- ## A tabular presentation in column-major order.
- "vert"
- |
- ## An inline presentation, usually a comma-delimited list.
- "inline"
- db.simplelist.type.attribute =
-
- ## Specifies the type of list presentation.
- [ a:defaultValue = "vert" ]
- attribute type { db.simplelist.type.enumeration }
- db.simplelist.columns.attribute =
-
- ## Specifies the number of columns for horizontal or vertical presentation
- attribute columns { xsd:integer }
- db.simplelist.attlist =
- db.simplelist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.simplelist.type.attribute?
- & db.simplelist.columns.attribute?
- db.simplelist =
-
- ## An undecorated list of single words or short phrases
- element simplelist { db.simplelist.attlist, db.member+ }
-}
-div {
- db.member.role.attribute = attribute role { text }
- db.member.attlist =
- db.member.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.member =
-
- ## An element of a simple list
- element member { db.member.attlist, db.all.inlines* }
-}
-div {
- db.variablelist.role.attribute = attribute role { text }
- db.variablelist.termlength.attribute =
-
- ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list
- attribute termlength { text }
- db.variablelist.attlist =
- db.variablelist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.spacing.attribute?
- & db.variablelist.termlength.attribute?
- db.variablelist.info = db._info.title.only
- db.variablelist =
-
- ## A list in which each entry is composed of a set of one or more terms and an associated description
- element variablelist {
- db.variablelist.attlist,
- db.variablelist.info,
- db.all.blocks*,
- db.varlistentry+
- }
-}
-div {
- db.varlistentry.role.attribute = attribute role { text }
- db.varlistentry.attlist =
- db.varlistentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.varlistentry =
-
- ## A wrapper for a set of terms and the associated description in a variable list
- element varlistentry {
- db.varlistentry.attlist, db.term+, db.listitem
- }
-}
-div {
- db.term.role.attribute = attribute role { text }
- db.term.attlist =
- db.term.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.term =
-
- ## The word or phrase being defined or described in a variable list
- element term { db.term.attlist, db.all.inlines* }
-}
-div {
- db.example.role.attribute = attribute role { text }
- db.example.label.attribute = db.label.attribute
- db.example.width.attribute = db.width.characters.attribute
- db.example.pgwide.attribute = db.pgwide.attribute
- db.example.floatstyle.attribute = db.floatstyle.attribute
- db.example.attlist =
- db.example.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.example.label.attribute?
- & db.example.floatstyle.attribute?
- & (db.example.width.attribute | db.example.pgwide.attribute)?
- db.example.info = db._info.title.onlyreq
- db.example =
-
- ## A formal example, with a title
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:table)"
- "table must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:example"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of example"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element example {
- db.example.attlist, db.example.info, db.all.blocks+, db.caption?
- }
-}
-div {
- db.informalexample.role.attribute = attribute role { text }
- db.informalexample.width.attribute = db.width.characters.attribute
- db.informalexample.floatstyle.attribute = db.floatstyle.attribute
- db.informalexample.attlist =
- db.informalexample.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.informalexample.floatstyle.attribute?
- & db.informalexample.width.attribute?
- db.informalexample.info = db._info.title.forbidden
- db.informalexample =
-
- ## A displayed example without a title
- element informalexample {
- db.informalexample.attlist,
- db.informalexample.info,
- db.all.blocks+,
- db.caption?
- }
-}
-db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co
-db.verbatim.contentmodel =
- db._info.title.forbidden, (db.textobject | db.verbatim.inlines*)
-div {
- db.literallayout.role.attribute = attribute role { text }
- db.literallayout.class.enumeration =
-
- ## The literal layout should be formatted with a monospaced font
- "monospaced"
- |
- ## The literal layout should be formatted with the current font
- "normal"
- db.literallayout.class.attribute =
-
- ## Specifies the class of literal layout
- attribute class { db.literallayout.class.enumeration }
- db.literallayout.attlist =
- db.literallayout.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.verbatim.attributes
- & db.literallayout.class.attribute?
- db.literallayout =
-
- ## A block of text in which line breaks and white space are to be reproduced faithfully
- element literallayout {
- db.literallayout.attlist, db.verbatim.contentmodel
- }
-}
-div {
- db.screen.role.attribute = attribute role { text }
- db.screen.width.attribute = db.width.characters.attribute
- db.screen.attlist =
- db.screen.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.verbatim.attributes
- & db.screen.width.attribute?
- db.screen =
-
- ## Text that a user sees or might see on a computer screen
- element screen { db.screen.attlist, db.verbatim.contentmodel }
-}
-div {
- db.screenshot.role.attribute = attribute role { text }
- db.screenshot.attlist =
- db.screenshot.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.screenshot.info = db._info
- db.screenshot =
-
- ## A representation of what the user sees or might see on a computer screen
- element screenshot {
- db.screenshot.attlist, db.screenshot.info, db.mediaobject
- }
-}
-div {
- db.figure.role.attribute = attribute role { text }
- db.figure.label.attribute = db.label.attribute
- db.figure.pgwide.attribute = db.pgwide.attribute
- db.figure.floatstyle.attribute = db.floatstyle.attribute
- db.figure.attlist =
- db.figure.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.figure.label.attribute?
- & db.figure.pgwide.attribute?
- & db.figure.floatstyle.attribute?
- db.figure.info = db._info.title.onlyreq
- db.figure =
-
- ## A formal figure, generally an illustration, with a title
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:table)"
- "table must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:figure"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of figure"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element figure {
- db.figure.attlist, db.figure.info, db.all.blocks+, db.caption?
- }
-}
-div {
- db.informalfigure.role.attribute = attribute role { text }
- db.informalfigure.label.attribute = db.label.attribute
- db.informalfigure.pgwide.attribute = db.pgwide.attribute
- db.informalfigure.floatstyle.attribute = db.floatstyle.attribute
- db.informalfigure.attlist =
- db.informalfigure.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.informalfigure.label.attribute?
- & db.informalfigure.pgwide.attribute?
- & db.informalfigure.floatstyle.attribute?
- db.informalfigure.info = db._info.title.forbidden
- db.informalfigure =
-
- ## A untitled figure
- element informalfigure {
- db.informalfigure.attlist,
- db.informalfigure.info,
- db.all.blocks+,
- db.caption?
- }
-}
-db.mediaobject.content =
- (db.videoobject | db.audioobject | db.imageobject | db.textobject)
- | db.imageobjectco
-div {
- db.mediaobject.role.attribute = attribute role { text }
- db.mediaobject.attlist =
- db.mediaobject.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.mediaobject.info = db._info.title.forbidden
- db.mediaobject =
-
- ## A displayed media object (video, audio, image, etc.)
- element mediaobject {
- db.mediaobject.attlist,
- db.mediaobject.info,
- db.alt?,
- db.mediaobject.content+,
- db.caption?
- }
-}
-div {
- db.inlinemediaobject.role.attribute = attribute role { text }
- db.inlinemediaobject.attlist =
- db.inlinemediaobject.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.inlinemediaobject.info = db._info.title.forbidden
- db.inlinemediaobject =
-
- ## An inline media object (video, audio, image, and so on)
- element inlinemediaobject {
- db.inlinemediaobject.attlist,
- db.inlinemediaobject.info,
- db.alt?,
- db.mediaobject.content+
- }
-}
-div {
- db.videoobject.role.attribute = attribute role { text }
- db.videoobject.attlist =
- db.videoobject.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.videoobject.info = db._info.title.forbidden
- db.videoobject =
-
- ## A wrapper for video data and its associated meta-information
- element videoobject {
- db.videoobject.attlist, db.videoobject.info, db.videodata
- }
-}
-div {
- db.audioobject.role.attribute = attribute role { text }
- db.audioobject.attlist =
- db.audioobject.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.audioobject.info = db._info.title.forbidden
- db.audioobject =
-
- ## A wrapper for audio data and its associated meta-information
- element audioobject {
- db.audioobject.attlist, db.audioobject.info, db.audiodata
- }
-}
-db.imageobject.content =
- db.imagedata | db.imagedata.mathml | db.imagedata.svg
-div {
- db.imageobject.role.attribute = attribute role { text }
- db.imageobject.attlist =
- db.imageobject.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.imageobject.info = db._info.title.forbidden
- db.imageobject =
-
- ## A wrapper for image data and its associated meta-information
- element imageobject {
- db.imageobject.attlist,
- db.imageobject.info,
- db.imageobject.content
- }
-}
-div {
- db.textobject.role.attribute = attribute role { text }
- db.textobject.attlist =
- db.textobject.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.textobject.info = db._info.title.forbidden
- db.textobject =
-
- ## A wrapper for a text description of an object and its associated meta-information
- element textobject {
- db.textobject.attlist,
- db.textobject.info,
- (db.phrase | db.textdata | db.all.blocks+)
- }
-}
-div {
- db.videodata.role.attribute = attribute role { text }
- db.videodata.align.enumeration = db.halign.enumeration
- db.videodata.align.attribute =
-
- ## Specifies the (horizontal) alignment of the video data
- attribute align { db.videodata.align.enumeration }
- db.videodata.valign.enumeration = db.valign.enumeration
- db.videodata.valign.attribute =
-
- ## Specifies the vertical alignment of the video data
- attribute valign { db.videodata.valign.enumeration }
- db.videodata.width.attribute = db.width.attribute
- db.videodata.depth.attribute = db.depth.attribute
- db.videodata.contentwidth.attribute = db.contentwidth.attribute
- db.videodata.contentdepth.attribute = db.contentdepth.attribute
- db.videodata.scalefit.enumeration = db.scalefit.enumeration
- db.videodata.scalefit.attribute =
-
- ## Determines if anamorphic scaling is forbidden
- attribute scalefit { db.videodata.scalefit.enumeration }
- db.videodata.scale.attribute = db.scale.attribute
- db.videodata.attlist =
- db.videodata.role.attribute?
- & db.common.attributes
- & db.common.data.attributes
- & db.videodata.align.attribute?
- & db.videodata.valign.attribute?
- & db.videodata.width.attribute?
- & db.videodata.contentwidth.attribute?
- & db.videodata.scalefit.attribute?
- & db.videodata.scale.attribute?
- & db.videodata.depth.attribute?
- & db.videodata.contentdepth.attribute?
- db.videodata.info = db._info.title.forbidden
- db.videodata =
-
- ## Pointer to external video data
- element videodata { db.videodata.attlist, db.videodata.info }
-}
-div {
- db.audiodata.role.attribute = attribute role { text }
- db.audiodata.attlist =
- db.audiodata.role.attribute?
- & db.common.attributes
- & db.common.data.attributes
- db.audiodata.info = db._info.title.forbidden
- db.audiodata =
-
- ## Pointer to external audio data
- element audiodata { db.audiodata.attlist, db.audiodata.info }
-}
-div {
- db.imagedata.role.attribute = attribute role { text }
- db.imagedata.align.enumeration = db.halign.enumeration
- db.imagedata.align.attribute =
-
- ## Specifies the (horizontal) alignment of the image data
- attribute align { db.imagedata.align.enumeration }
- db.imagedata.valign.enumeration = db.valign.enumeration
- db.imagedata.valign.attribute =
-
- ## Specifies the vertical alignment of the image data
- attribute valign { db.imagedata.valign.enumeration }
- db.imagedata.width.attribute = db.width.attribute
- db.imagedata.depth.attribute = db.depth.attribute
- db.imagedata.contentwidth.attribute = db.contentwidth.attribute
- db.imagedata.contentdepth.attribute = db.contentdepth.attribute
- db.imagedata.scalefit.enumeration = db.scalefit.enumeration
- db.imagedata.scalefit.attribute =
-
- ## Determines if anamorphic scaling is forbidden
- attribute scalefit { db.imagedata.scalefit.enumeration }
- db.imagedata.scale.attribute = db.scale.attribute
- db.imagedata.attlist =
- db.imagedata.role.attribute?
- & db.common.attributes
- & db.common.data.attributes
- & db.imagedata.align.attribute?
- & db.imagedata.valign.attribute?
- & db.imagedata.width.attribute?
- & db.imagedata.contentwidth.attribute?
- & db.imagedata.scalefit.attribute?
- & db.imagedata.scale.attribute?
- & db.imagedata.depth.attribute?
- & db.imagedata.contentdepth.attribute?
- db.imagedata.info = db._info.title.forbidden
- db.imagedata =
-
- ## Pointer to external image data
- element imagedata { db.imagedata.attlist, db.imagedata.info }
-}
-div {
- db.textdata.role.attribute = attribute role { text }
- db.textdata.encoding.attribute =
-
- ## Identifies the encoding of the text in the external file
- attribute encoding { text }
- db.textdata.attlist =
- db.textdata.role.attribute?
- & db.common.attributes
- & db.common.data.attributes
- & db.textdata.encoding.attribute?
- db.textdata.info = db._info.title.forbidden
- db.textdata =
-
- ## Pointer to external text data
- element textdata { db.textdata.attlist, db.textdata.info }
-}
-div {
- db.caption.role.attribute = attribute role { text }
- db.caption.attlist =
- db.caption.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.caption.info = db._info.title.forbidden
- db.caption =
-
- ## A caption
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:table)"
- "table must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:sidebar)"
- "sidebar must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:task)"
- "task must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element caption {
- db.caption.attlist, db.caption.info, db.all.blocks+
- }
-}
-div {
- db.address.role.attribute = attribute role { text }
- db.address.attlist =
- db.address.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.verbatim.attributes
- db.address =
-
- ## A real-world address, generally a postal address
- element address {
- db.address.attlist,
- (db._text
- | db.personname
- | db.pob
- | db.street
- | db.city
- | db.state
- | db.postcode
- | db.country
- | db.phone
- | db.fax
- | db.email
- | db.uri
- | db.otheraddr)*
- }
-}
-div {
- db.street.role.attribute = attribute role { text }
- db.street.attlist =
- db.street.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.street =
-
- ## A street address in an address
- element street { db.street.attlist, db._text }
-}
-div {
- db.pob.role.attribute = attribute role { text }
- db.pob.attlist =
- db.pob.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.pob =
-
- ## A post office box in an address
- element pob { db.pob.attlist, db._text }
-}
-div {
- db.postcode.role.attribute = attribute role { text }
- db.postcode.attlist =
- db.postcode.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.postcode =
-
- ## A postal code in an address
- element postcode { db.postcode.attlist, db._text }
-}
-div {
- db.city.role.attribute = attribute role { text }
- db.city.attlist =
- db.city.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.city =
-
- ## The name of a city in an address
- element city { db.city.attlist, db._text }
-}
-div {
- db.state.role.attribute = attribute role { text }
- db.state.attlist =
- db.state.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.state =
-
- ## A state or province in an address
- element state { db.state.attlist, db._text }
-}
-div {
- db.country.role.attribute = attribute role { text }
- db.country.attlist =
- db.country.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.country =
-
- ## The name of a country
- element country { db.country.attlist, db._text }
-}
-div {
- db.phone.role.attribute = attribute role { text }
- db.phone.attlist =
- db.phone.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.phone =
-
- ## A telephone number
- element phone { db.phone.attlist, db._text }
-}
-div {
- db.fax.role.attribute = attribute role { text }
- db.fax.attlist =
- db.fax.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.fax =
-
- ## A fax number
- element fax { db.fax.attlist, db._text }
-}
-div {
- db.otheraddr.role.attribute = attribute role { text }
- db.otheraddr.attlist =
- db.otheraddr.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.otheraddr =
-
- ## Uncategorized information in address
- element otheraddr { db.otheraddr.attlist, db._text }
-}
-div {
- db.affiliation.role.attribute = attribute role { text }
- db.affiliation.attlist =
- db.affiliation.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.affiliation =
-
- ## The institutional affiliation of an individual
- element affiliation {
- db.affiliation.attlist,
- db.shortaffil?,
- db.jobtitle*,
- (db.org? | (db.orgname?, db.orgdiv*, db.address*))
- }
-}
-div {
- db.shortaffil.role.attribute = attribute role { text }
- db.shortaffil.attlist =
- db.shortaffil.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.shortaffil =
-
- ## A brief description of an affiliation
- element shortaffil { db.shortaffil.attlist, db._text }
-}
-div {
- db.jobtitle.role.attribute = attribute role { text }
- db.jobtitle.attlist =
- db.jobtitle.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.jobtitle =
-
- ## The title of an individual in an organization
- element jobtitle { db.jobtitle.attlist, db._text }
-}
-div {
- db.orgname.class.enumeration =
-
- ## A consortium
- "consortium"
- |
- ## A corporation
- "corporation"
- |
- ## An informal organization
- "informal"
- |
- ## A non-profit organization
- "nonprofit"
- db.orgname.class-enum.attribute =
-
- ## Specifies the nature of the organization
- attribute class { db.orgname.class.enumeration }
- db.orgname.class-other.attributes =
-
- ## Specifies the nature of the organization
- attribute class {
-
- ## Indicates a non-standard organization class
- "other"
- },
-
- ## Identifies the non-standard nature of the organization
- attribute otherclass { text }
- db.orgname.class.attribute =
- db.orgname.class-enum.attribute | db.orgname.class-other.attributes
- db.orgname.role.attribute = attribute role { text }
- db.orgname.attlist =
- db.orgname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.orgname.class.attribute?
- db.orgname =
-
- ## The name of an organization
- element orgname { db.orgname.attlist, db._text }
-}
-div {
- db.orgdiv.role.attribute = attribute role { text }
- db.orgdiv.attlist =
- db.orgdiv.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.orgdiv =
-
- ## A division of an organization
- element orgdiv { db.orgdiv.attlist, db.all.inlines* }
-}
-div {
- db.artpagenums.role.attribute = attribute role { text }
- db.artpagenums.attlist =
- db.artpagenums.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.artpagenums =
-
- ## The page numbers of an article as published
- element artpagenums { db.artpagenums.attlist, db._text }
-}
-div {
- db.personname.role.attribute = attribute role { text }
- db.personname.attlist =
- db.personname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.personname =
-
- ## The personal name of an individual
- element personname {
- db.personname.attlist,
- (db._text
- | (db.honorific
- | db.firstname
- | db.surname
- | db.lineage
- | db.othername)+)
- }
-}
-db.person.author.contentmodel =
- db.personname,
- (db.personblurb
- | db.affiliation
- | db.email
- | db.uri
- | db.address
- | db.contrib)*
-db.org.author.contentmodel =
- db.orgname,
- (db.orgdiv
- | db.affiliation
- | db.email
- | db.uri
- | db.address
- | db.contrib)*
-db.credit.contentmodel =
- db.person.author.contentmodel | db.org.author.contentmodel
-div {
- db.author.role.attribute = attribute role { text }
- db.author.attlist =
- db.author.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.author =
-
- ## The name of an individual author
- element author { db.author.attlist, db.credit.contentmodel }
-}
-div {
- db.authorgroup.role.attribute = attribute role { text }
- db.authorgroup.attlist =
- db.authorgroup.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.authorgroup =
-
- ## Wrapper for author information when a document has multiple authors or collabarators
- element authorgroup {
- db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+
- }
-}
-div {
- db.collab.role.attribute = attribute role { text }
- db.collab.attlist =
- db.collab.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.collab =
-
- ## Identifies a collaborator
- element collab {
- db.collab.attlist,
- (db.person | db.personname | db.org | db.orgname)+,
- db.affiliation*
- }
-}
-div {
- db.authorinitials.role.attribute = attribute role { text }
- db.authorinitials.attlist =
- db.authorinitials.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.authorinitials =
-
- ## The initials or other short identifier for an author
- element authorinitials { db.authorinitials.attlist, db._text }
-}
-div {
- db.person.role.attribute = attribute role { text }
- db.person.attlist =
- db.person.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.person =
-
- ## A person and associated metadata
- element person {
- db.person.attlist,
- db.personname,
- (db.address
- | db.affiliation
- | db.email
- | db.uri
- | db.personblurb)*
- }
-}
-div {
- db.org.role.attribute = attribute role { text }
- db.org.attlist =
- db.org.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.org =
-
- ## An organization and associated metadata
- element org {
- db.org.attlist,
- db.orgname,
- (db.address | db.affiliation | db.email | db.uri | db.orgdiv)*
- }
-}
-div {
- db.confgroup.role.attribute = attribute role { text }
- db.confgroup.attlist =
- db.confgroup.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.confgroup =
-
- ## A wrapper for document meta-information about a conference
- element confgroup {
- db.confgroup.attlist,
- (db.confdates
- | db.conftitle
- | db.confnum
- | db.confsponsor
- | db.address)*
- }
-}
-div {
- db.confdates.role.attribute = attribute role { text }
- db.confdates.attlist =
- db.confdates.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.confdates =
-
- ## The dates of a conference for which a document was written
- element confdates { db.confdates.attlist, db._text }
-}
-div {
- db.conftitle.role.attribute = attribute role { text }
- db.conftitle.attlist =
- db.conftitle.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.conftitle =
-
- ## The title of a conference for which a document was written
- element conftitle { db.conftitle.attlist, db._text }
-}
-div {
- db.confnum.role.attribute = attribute role { text }
- db.confnum.attlist =
- db.confnum.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.confnum =
-
- ## An identifier, frequently numerical, associated with a conference for which a document was written
- element confnum { db.confnum.attlist, db._text }
-}
-div {
- db.confsponsor.role.attribute = attribute role { text }
- db.confsponsor.attlist =
- db.confsponsor.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.confsponsor =
-
- ## The sponsor of a conference for which a document was written
- element confsponsor { db.confsponsor.attlist, db._text }
-}
-div {
- db.contractnum.role.attribute = attribute role { text }
- db.contractnum.attlist =
- db.contractnum.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.contractnum =
-
- ## The contract number of a document
- element contractnum { db.contractnum.attlist, db._text }
-}
-div {
- db.contractsponsor.role.attribute = attribute role { text }
- db.contractsponsor.attlist =
- db.contractsponsor.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.contractsponsor =
-
- ## The sponsor of a contract
- element contractsponsor { db.contractsponsor.attlist, db._text }
-}
-div {
- db.copyright.role.attribute = attribute role { text }
- db.copyright.attlist =
- db.copyright.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.copyright =
-
- ## Copyright information about a document
- element copyright { db.copyright.attlist, db.year+, db.holder* }
-}
-div {
- db.year.role.attribute = attribute role { text }
- db.year.attlist =
- db.year.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.year =
-
- ## The year of publication of a document
- element year { db.year.attlist, db._text }
-}
-div {
- db.holder.role.attribute = attribute role { text }
- db.holder.attlist =
- db.holder.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.holder =
-
- ## The name of the individual or organization that holds a copyright
- element holder { db.holder.attlist, db._text }
-}
-db.cover.contentmodel =
- (db.para.blocks
- | db.extension.blocks
- | db.list.blocks
- | db.informal.blocks
- | db.publishing.blocks
- | db.graphic.blocks
- | db.technical.blocks
- | db.verbatim.blocks
- | db.bridgehead
- | db.remark
- | db.revhistory)
- | db.synopsis.blocks
-div {
- db.cover.role.attribute = attribute role { text }
- db.cover.attlist =
- db.cover.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.cover =
-
- ## Additional content for the cover of a publication
- element cover { db.cover.attlist, db.cover.contentmodel+ }
-}
-db.date.contentmodel =
- xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text
-div {
- db.date.role.attribute = attribute role { text }
- db.date.attlist =
- db.date.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.date =
-
- ## The date of publication or revision of a document
- element date { db.date.attlist, db.date.contentmodel }
-}
-div {
- db.edition.role.attribute = attribute role { text }
- db.edition.attlist =
- db.edition.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.edition =
-
- ## The name or number of an edition of a document
- element edition { db.edition.attlist, db._text }
-}
-div {
- db.editor.role.attribute = attribute role { text }
- db.editor.attlist =
- db.editor.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.editor =
-
- ## The name of the editor of a document
- element editor { db.editor.attlist, db.credit.contentmodel }
-}
-div {
- db.biblioid.role.attribute = attribute role { text }
- db.biblioid.attlist =
- db.biblioid.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.biblio.class.attribute
- db.biblioid =
-
- ## An identifier for a document
- element biblioid { db.biblioid.attlist, db._text }
-}
-div {
- db.citebiblioid.role.attribute = attribute role { text }
- db.citebiblioid.attlist =
- db.citebiblioid.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.biblio.class.attribute
- db.citebiblioid =
-
- ## A citation of a bibliographic identifier
- element citebiblioid { db.citebiblioid.attlist, db._text }
-}
-div {
- db.bibliosource.role.attribute = attribute role { text }
- db.bibliosource.attlist =
- db.bibliosource.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.biblio.class.attribute
- db.bibliosource =
-
- ## The source of a document
- element bibliosource { db.bibliosource.attlist, db._text }
-}
-div {
- db.bibliorelation.type.enumeration =
-
- ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
- "hasformat"
- |
- ## The described resource includes the referenced resource either physically or logically
- "haspart"
- |
- ## The described resource has a version, edition, or adaptation, namely, the referenced resource
- "hasversion"
- |
- ## The described resource is the same intellectual content of the referenced resource, but presented in another format
- "isformatof"
- |
- ## The described resource is a physical or logical part of the referenced resource
- "ispartof"
- |
- ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource
- "isreferencedby"
- |
- ## The described resource is supplanted, displaced, or superceded by the referenced resource
- "isreplacedby"
- |
- ## The described resource is required by the referenced resource, either physically or logically
- "isrequiredby"
- |
- ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
- "isversionof"
- |
- ## The described resource references, cites, or otherwise points to the referenced resource
- "references"
- |
- ## The described resource supplants, displaces, or supersedes the referenced resource
- "replaces"
- |
- ## The described resource requires the referenced resource to support its function, delivery, or coherence of content
- "requires"
- db.bibliorelation.type-enum.attribute =
-
- ## Identifies the type of relationship
- attribute type { db.bibliorelation.type.enumeration }?
- db.bibliorelation.type-other.attributes =
-
- ## Identifies the type of relationship
- attribute type {
-
- ## The described resource has a non-standard relationship with the referenced resource
- "othertype"
- }?,
-
- ## A keyword that identififes the type of the non-standard relationship
- attribute othertype { xsd:NMTOKEN }
- db.bibliorelation.type.attribute =
- db.bibliorelation.type-enum.attribute
- | db.bibliorelation.type-other.attributes
- db.bibliorelation.role.attribute = attribute role { text }
- db.bibliorelation.attlist =
- db.bibliorelation.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.biblio.class.attribute
- & db.bibliorelation.type.attribute
- db.bibliorelation =
-
- ## The relationship of a document to another
- element bibliorelation { db.bibliorelation.attlist, db._text }
-}
-div {
- db.bibliocoverage.spacial.enumeration =
-
- ## The DCMI Point identifies a point in space using its geographic coordinates
- "dcmipoint"
- |
- ## ISO 3166 Codes for the representation of names of countries
- "iso3166"
- |
- ## The DCMI Box identifies a region of space using its geographic limits
- "dcmibox"
- |
- ## The Getty Thesaurus of Geographic Names
- "tgn"
- db.bibliocoverage.spatial-enum.attribute =
-
- ## Specifies the type of spatial coverage
- attribute spatial { db.bibliocoverage.spacial.enumeration }?
- db.bibliocoverage.spatial-other.attributes =
-
- ## Specifies the type of spatial coverage
- attribute spatial {
-
- ## Identifies a non-standard type of coverage
- "otherspatial"
- }?,
-
- ## A keyword that identifies the type of non-standard coverage
- attribute otherspatial { xsd:NMTOKEN }
- db.bibliocoverage.spatial.attribute =
- db.bibliocoverage.spatial-enum.attribute
- | db.bibliocoverage.spatial-other.attributes
- db.bibliocoverage.temporal.enumeration =
-
- ## A specification of the limits of a time interval
- "dcmiperiod"
- |
- ## W3C Encoding rules for dates and times—a profile based on ISO 8601
- "w3c-dtf"
- db.bibliocoverage.temporal-enum.attribute =
-
- ## Specifies the type of temporal coverage
- attribute temporal { db.bibliocoverage.temporal.enumeration }?
- db.bibliocoverage.temporal-other.attributes =
-
- ## Specifies the type of temporal coverage
- attribute temporal {
-
- ## Specifies a non-standard type of coverage
- "othertemporal"
- }?,
-
- ## A keyword that identifies the type of non-standard coverage
- attribute othertemporal { xsd:NMTOKEN }
- db.bibliocoverage.temporal.attribute =
- db.bibliocoverage.temporal-enum.attribute
- | db.bibliocoverage.temporal-other.attributes
- db.bibliocoverage.coverage.attrib =
- db.bibliocoverage.spatial.attribute
- & db.bibliocoverage.temporal.attribute
- db.bibliocoverage.role.attribute = attribute role { text }
- db.bibliocoverage.attlist =
- db.bibliocoverage.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.bibliocoverage.coverage.attrib
- db.bibliocoverage =
-
- ## The spatial or temporal coverage of a document
- element bibliocoverage { db.bibliocoverage.attlist, db._text }
-}
-div {
- db.legalnotice.role.attribute = attribute role { text }
- db.legalnotice.attlist =
- db.legalnotice.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.legalnotice.info = db._info.title.only
- db.legalnotice =
-
- ## A statement of legal obligations or requirements
- element legalnotice {
- db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+
- }
-}
-div {
- db.othercredit.class.enumeration =
-
- ## A copy editor
- "copyeditor"
- |
- ## A graphic designer
- "graphicdesigner"
- |
- ## Some other contributor
- "other"
- |
- ## A production editor
- "productioneditor"
- |
- ## A technical editor
- "technicaleditor"
- |
- ## A translator
- "translator"
- db.othercredit.class-enum.attribute =
-
- ## Identifies the nature of the contributor
- attribute class { db.othercredit.class.enumeration }?
- db.othercredit.class-other.attribute =
-
- ## Identifies the nature of the non-standard contribution
- attribute otherclass { xsd:NMTOKEN }
- db.othercredit.class-other.attributes =
-
- ## Identifies the nature of the contributor
- attribute class {
-
- ## Identifies a non-standard contribution
- "other"
- }
- & db.othercredit.class-other.attribute
- db.othercredit.class.attribute =
- db.othercredit.class-enum.attribute
- | db.othercredit.class-other.attributes
- db.othercredit.role.attribute = attribute role { text }
- db.othercredit.attlist =
- db.othercredit.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.othercredit.class.attribute
- db.othercredit =
-
- ## A person or entity, other than an author or editor, credited in a document
- element othercredit {
- db.othercredit.attlist, db.credit.contentmodel
- }
-}
-div {
- db.pagenums.role.attribute = attribute role { text }
- db.pagenums.attlist =
- db.pagenums.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.pagenums =
-
- ## The numbers of the pages in a book, for use in a bibliographic entry
- element pagenums { db.pagenums.attlist, db._text }
-}
-div {
- db.contrib.role.attribute = attribute role { text }
- db.contrib.attlist =
- db.contrib.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.contrib =
-
- ## A summary of the contributions made to a document by a credited source
- element contrib { db.contrib.attlist, db._text }
-}
-div {
- db.honorific.role.attribute = attribute role { text }
- db.honorific.attlist =
- db.honorific.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.honorific =
-
- ## The title of a person
- element honorific { db.honorific.attlist, db._text }
-}
-div {
- db.firstname.role.attribute = attribute role { text }
- db.firstname.attlist =
- db.firstname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.firstname =
-
- ## The first name of a person
- element firstname { db.firstname.attlist, db._text }
-}
-div {
- db.surname.role.attribute = attribute role { text }
- db.surname.attlist =
- db.surname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.surname =
-
- ## A family name; in western cultures the last name
- element surname { db.surname.attlist, db._text }
-}
-div {
- db.lineage.role.attribute = attribute role { text }
- db.lineage.attlist =
- db.lineage.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.lineage =
-
- ## The portion of a person's name indicating a relationship to ancestors
- element lineage { db.lineage.attlist, db._text }
-}
-div {
- db.othername.role.attribute = attribute role { text }
- db.othername.attlist =
- db.othername.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.othername =
-
- ## A component of a persons name that is not a first name, surname, or lineage
- element othername { db.othername.attlist, db._text }
-}
-div {
- db.printhistory.role.attribute = attribute role { text }
- db.printhistory.attlist =
- db.printhistory.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.printhistory =
-
- ## The printing history of a document
- element printhistory { db.printhistory.attlist, db.para.blocks+ }
-}
-div {
- db.pubdate.role.attribute = attribute role { text }
- db.pubdate.attlist =
- db.pubdate.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.pubdate =
-
- ## The date of publication of a document
- element pubdate { db.pubdate.attlist, db.date.contentmodel }
-}
-div {
- db.publisher.role.attribute = attribute role { text }
- db.publisher.attlist =
- db.publisher.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.publisher =
-
- ## The publisher of a document
- element publisher {
- db.publisher.attlist, db.publishername, db.address*
- }
-}
-div {
- db.publishername.role.attribute = attribute role { text }
- db.publishername.attlist =
- db.publishername.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.publishername =
-
- ## The name of the publisher of a document
- element publishername { db.publishername.attlist, db._text }
-}
-div {
- db.releaseinfo.role.attribute = attribute role { text }
- db.releaseinfo.attlist =
- db.releaseinfo.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.releaseinfo =
-
- ## Information about a particular release of a document
- element releaseinfo { db.releaseinfo.attlist, db._text }
-}
-div {
- db.revhistory.role.attribute = attribute role { text }
- db.revhistory.attlist =
- db.revhistory.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.revhistory.info = db._info.title.only
- db.revhistory =
-
- ## A history of the revisions to a document
- element revhistory {
- db.revhistory.attlist, db.revhistory.info, db.revision+
- }
-}
-div {
- db.revision.role.attribute = attribute role { text }
- db.revision.attlist =
- db.revision.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.revision =
-
- ## An entry describing a single revision in the history of the revisions to a document
- element revision {
- db.revision.attlist,
- db.revnumber?,
- db.date,
- (db.authorinitials | db.author)*,
- (db.revremark | db.revdescription)?
- }
-}
-div {
- db.revnumber.role.attribute = attribute role { text }
- db.revnumber.attlist =
- db.revnumber.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.revnumber =
-
- ## A document revision number
- element revnumber { db.revnumber.attlist, db._text }
-}
-div {
- db.revremark.role.attribute = attribute role { text }
- db.revremark.attlist =
- db.revremark.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.revremark =
-
- ## A description of a revision to a document
- element revremark { db.revremark.attlist, db._text }
-}
-div {
- db.revdescription.role.attribute = attribute role { text }
- db.revdescription.attlist =
- db.revdescription.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.revdescription =
-
- ## A extended description of a revision to a document
- element revdescription { db.revdescription.attlist, db.all.blocks* }
-}
-div {
- db.seriesvolnums.role.attribute = attribute role { text }
- db.seriesvolnums.attlist =
- db.seriesvolnums.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.seriesvolnums =
-
- ## Numbers of the volumes in a series of books
- element seriesvolnums { db.seriesvolnums.attlist, db._text }
-}
-div {
- db.volumenum.role.attribute = attribute role { text }
- db.volumenum.attlist =
- db.volumenum.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.volumenum =
-
- ## The volume number of a document in a set (as of books in a set or articles in a journal)
- element volumenum { db.volumenum.attlist, db._text }
-}
-div {
- db.issuenum.role.attribute = attribute role { text }
- db.issuenum.attlist =
- db.issuenum.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.issuenum =
-
- ## The number of an issue of a journal
- element issuenum { db.issuenum.attlist, db._text }
-}
-div {
- db.package.role.attribute = attribute role { text }
- db.package.attlist =
- db.package.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.package =
-
- ## A software or application package
- element package { db.package.attlist, db._text }
-}
-div {
- db.email.role.attribute = attribute role { text }
- db.email.attlist =
- db.email.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.email =
-
- ## An email address
- element email { db.email.attlist, db._text }
-}
-div {
- db.lineannotation.role.attribute = attribute role { text }
- db.lineannotation.attlist =
- db.lineannotation.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.lineannotation =
-
- ## A comment on a line in a verbatim listing
- element lineannotation { db.lineannotation.attlist, db._text }
-}
-div {
- db.parameter.class.enumeration =
-
- ## A command
- "command"
- |
- ## A function
- "function"
- |
- ## An option
- "option"
- db.parameter.class.attribute =
-
- ## Identifies the class of parameter
- attribute class { db.parameter.class.enumeration }
- db.parameter.role.attribute = attribute role { text }
- db.parameter.attlist =
- db.parameter.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.parameter.class.attribute?
- db.parameter =
-
- ## A value or a symbolic reference to a value
- element parameter { db.parameter.attlist, db._text }
-}
-db.replaceable.inlines = db._text | db.co
-div {
- db.replaceable.class.enumeration =
-
- ## A command
- "command"
- |
- ## A function
- "function"
- |
- ## An option
- "option"
- |
- ## A parameter
- "parameter"
- db.replaceable.class.attribute =
-
- ## Identifies the nature of the replaceable text
- attribute class { db.replaceable.class.enumeration }
- db.replaceable.role.attribute = attribute role { text }
- db.replaceable.attlist =
- db.replaceable.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.replaceable.class.attribute?
- db.replaceable =
-
- ## Content that may or must be replaced by the user
- element replaceable {
- db.replaceable.attlist, db.replaceable.inlines*
- }
-}
-div {
- db.uri.type.attribute =
-
- ## Identifies the type of URI specified
- attribute type { text }?
- db.uri.role.attribute = attribute role { text }
- db.uri.attlist =
- db.uri.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.uri.type.attribute
- db.uri =
-
- ## A Uniform Resource Identifier
- element uri { db.uri.attlist, db._text }
-}
-div {
- db.abbrev.role.attribute = attribute role { text }
- db.abbrev.attlist =
- db.abbrev.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.abbrev =
-
- ## An abbreviation, especially one followed by a period
- element abbrev {
- db.abbrev.attlist,
- (db._text | db.superscript | db.subscript | db.trademark)*
- }
-}
-div {
- db.acronym.role.attribute = attribute role { text }
- db.acronym.attlist =
- db.acronym.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.acronym =
-
- ## An often pronounceable word made from the initial (or selected) letters of a name or phrase
- element acronym {
- db.acronym.attlist,
- (db._text | db.superscript | db.subscript | db.trademark)*
- }
-}
-div {
- db.citation.role.attribute = attribute role { text }
- db.citation.attlist =
- db.citation.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.citation =
-
- ## An inline bibliographic reference to another published work
- element citation { db.citation.attlist, db.all.inlines* }
-}
-div {
- db.citerefentry.role.attribute = attribute role { text }
- db.citerefentry.attlist =
- db.citerefentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.citerefentry =
-
- ## A citation to a reference page
- element citerefentry {
- db.citerefentry.attlist, db.refentrytitle, db.manvolnum?
- }
-}
-div {
- db.refentrytitle.role.attribute = attribute role { text }
- db.refentrytitle.attlist =
- db.refentrytitle.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refentrytitle =
-
- ## The title of a reference page
- element refentrytitle { db.refentrytitle.attlist, db.all.inlines* }
-}
-div {
- db.manvolnum.role.attribute = attribute role { text }
- db.manvolnum.attlist =
- db.manvolnum.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.manvolnum =
-
- ## A reference volume number
- element manvolnum { db.manvolnum.attlist, db._text }
-}
-div {
- db.citetitle.pubwork.enumeration =
-
- ## An article
- "article"
- |
- ## A bulletin board system
- "bbs"
- |
- ## A book
- "book"
- |
- ## A CD-ROM
- "cdrom"
- |
- ## A chapter (as of a book)
- "chapter"
- |
- ## A DVD
- "dvd"
- |
- ## An email message
- "emailmessage"
- |
- ## A gopher page
- "gopher"
- |
- ## A journal
- "journal"
- |
- ## A manuscript
- "manuscript"
- |
- ## A posting to a newsgroup
- "newsposting"
- |
- ## A part (as of a book)
- "part"
- |
- ## A reference entry
- "refentry"
- |
- ## A section (as of a book or article)
- "section"
- |
- ## A series
- "series"
- |
- ## A set (as of books)
- "set"
- |
- ## A web page
- "webpage"
- |
- ## A wiki page
- "wiki"
- db.citetitle.pubwork.attribute =
-
- ## Identifies the nature of the publication being cited
- attribute pubwork { db.citetitle.pubwork.enumeration }
- db.citetitle.role.attribute = attribute role { text }
- db.citetitle.attlist =
- db.citetitle.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.citetitle.pubwork.attribute?
- db.citetitle =
-
- ## The title of a cited work
- element citetitle { db.citetitle.attlist, db.all.inlines* }
-}
-div {
- db.emphasis.role.attribute = attribute role { text }
- db.emphasis.attlist =
- db.emphasis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.emphasis =
-
- ## Emphasized text
- element emphasis { db.emphasis.attlist, db.all.inlines* }
-}
-div {
- db._emphasis =
-
- ## A limited span of emphasized text
- element emphasis { db.emphasis.attlist, (db._text | db._emphasis)* }
-}
-div {
- db.foreignphrase.role.attribute = attribute role { text }
- db.foreignphrase.attlist =
- db.foreignphrase.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.foreignphrase =
-
- ## A word or phrase in a language other than the primary language of the document
- element foreignphrase {
- db.foreignphrase.attlist, (text | db.general.inlines)*
- }
-}
-div {
- db.phrase.role.attribute = attribute role { text }
- db.phrase.attlist =
- db.phrase.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.phrase =
-
- ## A span of text
- element phrase { db.phrase.attlist, db.all.inlines* }
-}
-div {
- db._phrase =
-
- ## A limited span of text
- element phrase { db.phrase.attlist, db._text }
-}
-div {
- db.quote.role.attribute = attribute role { text }
- db.quote.attlist =
- db.quote.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.quote =
-
- ## An inline quotation
- element quote { db.quote.attlist, db.all.inlines* }
-}
-div {
- db.subscript.role.attribute = attribute role { text }
- db.subscript.attlist =
- db.subscript.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.subscript =
-
- ## A subscript (as in H2
- ## O, the molecular formula for water)
- element subscript { db.subscript.attlist, db._text }
-}
-div {
- db.superscript.role.attribute = attribute role { text }
- db.superscript.attlist =
- db.superscript.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.superscript =
-
- ## A superscript (as in x^2, the mathematical notation for x multiplied by itself)
- element superscript { db.superscript.attlist, db._text }
-}
-div {
- db.trademark.class.enumeration =
-
- ## A copyright
- "copyright"
- |
- ## A registered copyright
- "registered"
- |
- ## A service
- "service"
- |
- ## A trademark
- "trade"
- db.trademark.class.attribute =
-
- ## Identifies the class of trade mark
- attribute class { db.trademark.class.enumeration }
- db.trademark.role.attribute = attribute role { text }
- db.trademark.attlist =
- db.trademark.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.trademark.class.attribute?
- db.trademark =
-
- ## A trademark
- element trademark { db.trademark.attlist, db._text }
-}
-div {
- db.wordasword.role.attribute = attribute role { text }
- db.wordasword.attlist =
- db.wordasword.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.wordasword =
-
- ## A word meant specifically as a word and not representing anything else
- element wordasword { db.wordasword.attlist, db._text }
-}
-div {
- db.footnoteref.role.attribute = attribute role { text }
- db.footnoteref.label.attribute = db.label.attribute
- db.footnoteref.attlist =
- db.footnoteref.role.attribute?
- & db.common.attributes
- & db.linkend.attribute
- & db.footnoteref.label.attribute?
- db.footnoteref =
-
- ## A cross reference to a footnote (a footnote mark)
- [
- s:pattern [
- name = "Footnote reference type constraint"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:footnoteref"
- "\x{a}" ~
- " "
- s:assert [
- test =
- "local-name(//*[@xml:id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
- "@linkend on footnoteref must point to a footnote."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element footnoteref { db.footnoteref.attlist, empty }
-}
-div {
- db.xref.role.attribute = attribute role { text }
- db.xref.xrefstyle.attribute = db.xrefstyle.attribute
- db.xref.endterm.attribute = db.endterm.attribute
- db.xref.attlist =
- db.xref.role.attribute?
- & db.common.attributes
- & db.common.req.linking.attributes
- & db.xref.xrefstyle.attribute?
- & db.xref.endterm.attribute?
- db.xref =
-
- ## A cross reference to another part of the document
- element xref { db.xref.attlist, empty }
-}
-div {
- db.link.role.attribute = attribute role { text }
- db.link.xrefstyle.attribute = db.xrefstyle.attribute
- db.link.endterm.attribute = db.endterm.attribute
- db.link.attlist =
- db.link.role.attribute?
- & db.common.attributes
- & db.common.req.linking.attributes
- & db.link.xrefstyle.attribute?
- & db.link.endterm.attribute?
- db.link =
-
- ## A hypertext link
- element link { db.link.attlist, db.all.inlines* }
-}
-div {
- db.olink.role.attribute = attribute role { text }
- db.olink.xrefstyle.attribute = db.xrefstyle.attribute
- db.olink.localinfo.attribute =
-
- ## Holds additional information that may be used by the applicatoin when resolving the link
- attribute localinfo { text }
- db.olink.targetdoc.attribute =
-
- ## Specifies the URI of the document in which the link target appears
- attribute targetdoc { xsd:anyURI }
- db.olink.targetptr.attribute =
-
- ## Specifies the location of the link target in the document
- attribute targetptr { text }
- db.olink.type.attribute =
-
- ## Identifies application-specific customization of the link behavior
- attribute type { text }
- db.olink.attlist =
- db.common.attributes
- & db.olink.targetdoc.attribute?
- & db.olink.role.attribute?
- & db.olink.xrefstyle.attribute?
- & db.olink.localinfo.attribute?
- & db.olink.targetptr.attribute?
- & db.olink.type.attribute?
- db.olink =
-
- ## A link that addresses its target indirectly
- element olink { db.olink.attlist, db.all.inlines* }
-}
-div {
- db.anchor.role.attribute = attribute role { text }
- db.anchor.attlist =
- db.anchor.role.attribute? & db.common.idreq.attributes
- db.anchor =
-
- ## A spot in the document
- element anchor { db.anchor.attlist, empty }
-}
-div {
- db.alt.role.attribute = attribute role { text }
- db.alt.attlist = db.alt.role.attribute? & db.common.attributes
- db.alt =
-
- ## A text-only annotation, often used for accessibility
- element alt { db.alt.attlist, (text | db.inlinemediaobject)* }
-}
-db.status.attribute =
-
- ## Identifies the editorial or publication status of the element on which it occurs
- attribute status { text }
-db.toplevel.sections =
- ((db.section+, db.simplesect*) | db.simplesect+)
- | (db.sect1+, db.simplesect*)
- | db.refentry+
- | ((db.section | db.xi.include)+ | (db.simplesect | db.xi.include)+)
- | (db.refentry | db.xi.include)+
- | (db.refsect1 | db.xi.include)+
- | (db.sect1 | db.xi.include)+
-db.toplevel.blocks.or.sections =
- (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections
-db.recursive.sections =
- ((db.section+, db.simplesect*) | db.simplesect+)
- | db.refentry+
- | ((db.section | db.xi.include)+ | (db.simplesect | db.xi.include)+)
- | (db.refentry | db.xi.include)+
- | (db.refsect1 | db.xi.include)+
-db.recursive.blocks.or.sections =
- (db.all.blocks+, db.recursive.sections?) | db.recursive.sections
-db.divisions = db.part | db.reference | db.xi.include
-db.components =
- (db.dedication
- | db.acknowledgements
- | db.preface
- | db.chapter
- | db.appendix
- | db.article
- | db.colophon)
- | db.xi.include
-db.navigation.components =
- notAllowed | db.glossary | db.bibliography | db.index | db.toc
-db.component.contentmodel =
- db.navigation.components*,
- db.toplevel.blocks.or.sections,
- db.navigation.components*
-db.setindex.components = notAllowed | db.setindex
-db.toc.components = notAllowed | db.toc
-db.set.components = db.set | db.book
-div {
- db.set.status.attribute = db.status.attribute
- db.set.role.attribute = attribute role { text }
- db.set.attlist =
- db.set.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.set.status.attribute?
- db.set.info = db._info.title.req
- db.set =
-
- ## A collection of books
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:set"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element set {
- db.set.attlist,
- db.set.info,
- db.toc.components?,
- db.set.components+,
- db.setindex.components?
- }
-}
-div {
- db.book.status.attribute = db.status.attribute
- db.book.role.attribute = attribute role { text }
- db.book.attlist =
- db.book.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.book.status.attribute?
- db.book.info = db._info
- db.book =
-
- ## A book
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:book"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element book {
- db.book.attlist,
- db.book.info,
- (db.navigation.components | db.components | db.divisions)*
- }
-}
-div {
- db.dedication.status.attribute = db.status.attribute
- db.dedication.role.attribute = attribute role { text }
- db.dedication.attlist =
- db.dedication.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.dedication.status.attribute?
- db.dedication.info = db._info
- db.dedication =
-
- ## The dedication of a book or other component
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:dedication"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element dedication {
- db.dedication.attlist, db.dedication.info, db.all.blocks+
- }
-}
-div {
- db.acknowledgements.status.attribute = db.status.attribute
- db.acknowledgements.role.attribute = attribute role { text }
- db.acknowledgements.attlist =
- db.acknowledgements.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.acknowledgements.status.attribute?
- db.acknowledgements.info = db._info
- db.acknowledgements =
-
- ## Acknowledgements of a book or other component
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:acknowledgements"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element acknowledgements {
- db.acknowledgements.attlist,
- db.acknowledgements.info,
- db.all.blocks+
- }
-}
-div {
- db.colophon.status.attribute = db.status.attribute
- db.colophon.role.attribute = attribute role { text }
- db.colophon.attlist =
- db.colophon.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.colophon.status.attribute?
- db.colophon.info = db._info
- db.colophon =
-
- ## Text at the back of a book describing facts about its production
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:colophon"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element colophon {
- db.colophon.attlist, db.colophon.info, db.all.blocks+
- }
-}
-div {
- db.appendix.status.attribute = db.status.attribute
- db.appendix.role.attribute = attribute role { text }
- db.appendix.attlist =
- db.appendix.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.appendix.status.attribute?
- db.appendix.info = db._info.title.req
- db.appendix =
-
- ## An appendix in a Book or Article
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:appendix"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element appendix {
- db.appendix.attlist, db.appendix.info, db.component.contentmodel
- }
-}
-div {
- db.chapter.status.attribute = db.status.attribute
- db.chapter.role.attribute = attribute role { text }
- db.chapter.attlist =
- db.chapter.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.chapter.status.attribute?
- db.chapter.info = db._info.title.req
- db.chapter =
-
- ## A chapter, as of a book
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:chapter"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element chapter {
- db.chapter.attlist, db.chapter.info, db.component.contentmodel
- }
-}
-db.part.components =
- (db.navigation.components | db.components)
- | (db.refentry | db.reference)
- | db.xi.include
-div {
- db.part.status.attribute = db.status.attribute
- db.part.role.attribute = attribute role { text }
- db.part.attlist =
- db.part.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.part.status.attribute?
- db.part.info = db._info.title.req
- db.part =
-
- ## A division in a book
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:part"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element part {
- db.part.attlist, db.part.info, db.partintro?, db.part.components+
- }
-}
-div {
- db.preface.status.attribute = db.status.attribute
- db.preface.role.attribute = attribute role { text }
- db.preface.attlist =
- db.preface.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.preface.status.attribute?
- db.preface.info = db._info.title.req
- db.preface =
-
- ## Introductory matter preceding the first chapter of a book
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:preface"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element preface {
- db.preface.attlist, db.preface.info, db.component.contentmodel
- }
-}
-div {
- db.partintro.status.attribute = db.status.attribute
- db.partintro.role.attribute = attribute role { text }
- db.partintro.attlist =
- db.partintro.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.partintro.status.attribute?
- db.partintro.info = db._info
- db.partintro =
-
- ## An introduction to the contents of a part
- element partintro {
- db.partintro.attlist,
- db.partintro.info,
- db.toplevel.blocks.or.sections
- }
-}
-div {
- db.section.status.attribute = db.status.attribute
- db.section.role.attribute = attribute role { text }
- db.section.attlist =
- db.section.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.section.status.attribute?
- db.section.info = db._info.title.req
- db.section =
-
- ## A recursive section
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:section"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element section {
- db.section.attlist,
- db.section.info,
- db.recursive.blocks.or.sections,
- db.navigation.components*
- }
-}
-div {
- db.simplesect.status.attribute = db.status.attribute
- db.simplesect.role.attribute = attribute role { text }
- db.simplesect.attlist =
- db.simplesect.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.simplesect.status.attribute?
- db.simplesect.info = db._info.title.req
- db.simplesect =
-
- ## A section of a document with no subdivisions
- element simplesect {
- db.simplesect.attlist, db.simplesect.info, db.all.blocks+
- }
-}
-db.article.components = db.toplevel.sections
-div {
- db.article.status.attribute = db.status.attribute
- db.article.class.enumeration =
-
- ## A collection of frequently asked questions.
- "faq"
- |
- ## An article in a journal or other periodical.
- "journalarticle"
- |
- ## A description of a product.
- "productsheet"
- |
- ## A specification.
- "specification"
- |
- ## A technical report.
- "techreport"
- |
- ## A white paper.
- "whitepaper"
- db.article.class.attribute =
-
- ## Identifies the nature of the article
- attribute class { db.article.class.enumeration }
- db.article.role.attribute = attribute role { text }
- db.article.attlist =
- db.article.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.article.status.attribute?
- & db.article.class.attribute?
- db.article.info = db._info.title.req
- db.article =
-
- ## An article
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:article"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element article {
- db.article.attlist,
- db.article.info,
- (db.navigation.components
- | db.appendix
- | db.acknowledgements
- | db.colophon)*,
- ((db.all.blocks+, db.article.components?)
- | db.article.components),
- (db.navigation.components
- | db.appendix
- | db.acknowledgements
- | db.colophon)*
- }
-}
-db.annotations.attribute =
-
- ## Identifies one or more annotations that apply to this element
- attribute annotations { text }
-div {
- db.annotation.role.attribute = attribute role { text }
- db.annotation.annotates.attribute =
-
- ## Identifies one ore more elements to which this annotation applies
- attribute annotates { text }
- db.annotation.attlist =
- db.annotation.role.attribute?
- & db.annotation.annotates.attribute?
- & db.common.attributes
- db.annotation.info = db._info.title.only
- db.annotation =
-
- ## An annotation
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:annotation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:annotation)"
- "annotation must not occur in the descendants of annotation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element annotation {
- db.annotation.attlist, db.annotation.info, db.all.blocks+
- }
-}
-db.xlink.from.attribute =
-
- ## Specifies the XLink traversal-from
- attribute xlink:from { xsd:NMTOKEN }?
-db.xlink.label.attribute =
-
- ## Specifies the XLink label
- attribute xlink:label { xsd:NMTOKEN }?
-db.xlink.to.attribute =
-
- ## Specifies the XLink traversal-to
- attribute xlink:to { xsd:NMTOKEN }?
-div {
- db.extendedlink.role.attribute = attribute role { text }
- db.extendedlink.attlist =
- db.extendedlink.role.attribute?
- & db.common.attributes
- &
- ## Identifies the XLink link type
- [ a:defaultValue = "extended" ]
- attribute xlink:type {
-
- ## An XLink extended link
- "extended"
- }?
- & db.xlink.role.attribute?
- & db.xlink.title.attribute?
- db.extendedlink =
-
- ## An XLink extended link
- element extendedlink {
- db.extendedlink.attlist, (db.locator | db.arc)+
- }
-}
-div {
- db.locator.role.attribute = attribute role { text }
- db.locator.attlist =
- db.locator.role.attribute?
- & db.common.attributes
- &
- ## Identifies the XLink link type
- [ a:defaultValue = "locator" ]
- attribute xlink:type {
-
- ## An XLink locator link
- "locator"
- }?
- & db.xlink.href.attribute
- & db.xlink.role.attribute?
- & db.xlink.title.attribute?
- & db.xlink.label.attribute?
- db.locator =
-
- ## An XLink locator in an extendedlink
- element locator { db.locator.attlist, empty }
-}
-div {
- db.arc.role.attribute = attribute role { text }
- db.arc.attlist =
- db.arc.role.attribute?
- & db.common.attributes
- &
- ## Identifies the XLink link type
- [ a:defaultValue = "arc" ]
- attribute xlink:type {
-
- ## An XLink arc link
- "arc"
- }?
- & db.xlink.arcrole.attribute?
- & db.xlink.title.attribute?
- & db.xlink.show.attribute?
- & db.xlink.actuate.attribute?
- & db.xlink.from.attribute?
- & db.xlink.to.attribute?
- db.arc =
-
- ## An XLink arc in an extendedlink
- element arc { db.arc.attlist, empty }
-}
-db.sect1.sections =
- ((db.sect2+, db.simplesect*) | db.simplesect+)
- | (db.sect2 | db.xi.include)+
-div {
- db.sect1.status.attribute = db.status.attribute
- db.sect1.role.attribute = attribute role { text }
- db.sect1.attlist =
- db.sect1.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.sect1.status.attribute?
- db.sect1.info = db._info.title.req
- db.sect1 =
-
- ## A top-level section of document
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:sect1"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element sect1 {
- db.sect1.attlist,
- db.sect1.info,
- ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections),
- db.navigation.components*
- }
-}
-db.sect2.sections =
- ((db.sect3+, db.simplesect*) | db.simplesect+)
- | (db.sect3 | db.xi.include)+
-div {
- db.sect2.status.attribute = db.status.attribute
- db.sect2.role.attribute = attribute role { text }
- db.sect2.attlist =
- db.sect2.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.sect2.status.attribute?
- db.sect2.info = db._info.title.req
- db.sect2 =
-
- ## A subsection within a Sect1
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:sect2"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element sect2 {
- db.sect2.attlist,
- db.sect2.info,
- ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections),
- db.navigation.components*
- }
-}
-db.sect3.sections =
- ((db.sect4+, db.simplesect*) | db.simplesect+)
- | (db.sect4 | db.xi.include)+
-div {
- db.sect3.status.attribute = db.status.attribute
- db.sect3.role.attribute = attribute role { text }
- db.sect3.attlist =
- db.sect3.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.sect3.status.attribute?
- db.sect3.info = db._info.title.req
- db.sect3 =
-
- ## A subsection within a Sect2
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:sect3"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element sect3 {
- db.sect3.attlist,
- db.sect3.info,
- ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections),
- db.navigation.components*
- }
-}
-db.sect4.sections =
- ((db.sect5+, db.simplesect*) | db.simplesect+)
- | (db.sect5 | db.xi.include)+
-div {
- db.sect4.status.attribute = db.status.attribute
- db.sect4.role.attribute = attribute role { text }
- db.sect4.attlist =
- db.sect4.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.sect4.status.attribute?
- db.sect4.info = db._info.title.req
- db.sect4 =
-
- ## A subsection within a Sect3
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:sect4"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element sect4 {
- db.sect4.attlist,
- db.sect4.info,
- ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections),
- db.navigation.components*
- }
-}
-db.sect5.sections = db.simplesect+ | (db.simplesect | db.xi.include)+
-div {
- db.sect5.status.attribute = db.status.attribute
- db.sect5.role.attribute = attribute role { text }
- db.sect5.attlist =
- db.sect5.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.sect5.status.attribute?
- db.sect5.info = db._info.title.req
- db.sect5 =
-
- ## A subsection within a Sect4
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:sect5"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element sect5 {
- db.sect5.attlist,
- db.sect5.info,
- ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections),
- db.navigation.components*
- }
-}
-db.toplevel.refsection =
- db.refsection+
- | db.refsect1+
- | (db.refentry | db.xi.include)+
- | (db.refsect1 | db.xi.include)+
-db.secondlevel.refsection =
- db.refsection+
- | db.refsect2+
- | (db.refentry | db.xi.include)+
- | (db.refsect2 | db.xi.include)+
-db.reference.components = db.refentry | db.xi.include
-div {
- db.reference.role.attribute = attribute role { text }
- db.reference.attlist =
- db.reference.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.status.attribute?
- & db.label.attribute?
- db.reference.info = db._info.title.req
- db.reference =
-
- ## A collection of reference entries
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:reference"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element reference {
- db.reference.attlist,
- db.reference.info,
- db.partintro?,
- db.reference.components+
- }
-}
-div {
- db.refentry.role.attribute = attribute role { text }
- db.refentry.attlist =
- db.refentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.status.attribute?
- & db.label.attribute?
- db.refentry.info = db._info.title.forbidden
- db.refentry =
-
- ## A reference page (originally a UNIX man-style reference page)
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:refentry"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element refentry {
- db.refentry.attlist,
- db.indexterm*,
- db.refentry.info,
- db.refmeta?,
- db.refnamediv+,
- db.refsynopsisdiv?,
- db.toplevel.refsection
- }
-}
-div {
- db.refmeta.role.attribute = attribute role { text }
- db.refmeta.attlist =
- db.refmeta.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refmeta =
-
- ## Meta-information for a reference entry
- element refmeta {
- db.refmeta.attlist,
- db.indexterm*,
- db.refentrytitle,
- db.manvolnum?,
- db.refmiscinfo*,
- db.indexterm*
- }
-}
-db.refmiscinfo.class.enumeration =
-
- ## The name of the software product or component to which this topic applies
- "source"
- |
- ## The version of the software product or component to which this topic applies
- "version"
- |
- ## The section title of the reference page (e.g., User Commands)
- "manual"
- |
- ## The section title of the reference page (believed synonymous with "manual" but in wide use)
- "sectdesc"
- |
- ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use)
- "software"
-db.refmiscinfo.class-enum.attribute =
-
- ## Identifies the kind of miscellaneous information
- attribute class { db.refmiscinfo.class.enumeration }?
-db.refmiscinfo.class-other.attribute =
-
- ## Identifies the nature of non-standard miscellaneous information
- attribute otherclass { text }
-db.refmiscinfo.class-other.attributes =
-
- ## Identifies the kind of miscellaneious information
- attribute class {
-
- ## Indicates that the information is some 'other' kind.
- "other"
- }
- & db.refmiscinfo.class-other.attribute
-db.refmiscinfo.class.attribute =
- db.refmiscinfo.class-enum.attribute
- | db.refmiscinfo.class-other.attributes
-div {
- db.refmiscinfo.role.attribute = attribute role { text }
- db.refmiscinfo.attlist =
- db.refmiscinfo.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.refmiscinfo.class.attribute?
- db.refmiscinfo =
-
- ## Meta-information for a reference entry other than the title and volume number
- element refmiscinfo { db.refmiscinfo.attlist, db._text }
-}
-div {
- db.refnamediv.role.attribute = attribute role { text }
- db.refnamediv.attlist =
- db.refnamediv.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refnamediv =
-
- ## The name, purpose, and classification of a reference page
- element refnamediv {
- db.refnamediv.attlist,
- db.refdescriptor?,
- db.refname+,
- db.refpurpose,
- db.refclass*
- }
-}
-div {
- db.refdescriptor.role.attribute = attribute role { text }
- db.refdescriptor.attlist =
- db.refdescriptor.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refdescriptor =
-
- ## A description of the topic of a reference page
- element refdescriptor { db.refdescriptor.attlist, db.all.inlines* }
-}
-div {
- db.refname.role.attribute = attribute role { text }
- db.refname.attlist =
- db.refname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refname =
-
- ## The name of (one of) the subject(s) of a reference page
- element refname { db.refname.attlist, db.all.inlines* }
-}
-div {
- db.refpurpose.role.attribute = attribute role { text }
- db.refpurpose.attlist =
- db.refpurpose.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refpurpose =
-
- ## A short (one sentence) synopsis of the topic of a reference page
- element refpurpose { db.refpurpose.attlist, db.all.inlines* }
-}
-div {
- db.refclass.role.attribute = attribute role { text }
- db.refclass.attlist =
- db.refclass.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refclass =
-
- ## The scope or other indication of applicability of a reference entry
- element refclass { db.refclass.attlist, (text | db.application)* }
-}
-div {
- db.refsynopsisdiv.role.attribute = attribute role { text }
- db.refsynopsisdiv.attlist =
- db.refsynopsisdiv.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.refsynopsisdiv.info = db._info
- db.refsynopsisdiv =
-
- ## A syntactic synopsis of the subject of the reference page
- element refsynopsisdiv {
- db.refsynopsisdiv.attlist,
- db.refsynopsisdiv.info,
- ((db.all.blocks+, db.secondlevel.refsection?)
- | db.secondlevel.refsection)
- }
-}
-div {
- db.refsection.role.attribute = attribute role { text }
- db.refsection.attlist =
- db.refsection.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.status.attribute?
- & db.label.attribute?
- db.refsection.info = db._info.title.req
- db.refsection =
-
- ## A recursive section in a refentry
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:refsection"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element refsection {
- db.refsection.attlist,
- db.refsection.info,
- ((db.all.blocks+, db.refsection*) | db.refsection+)
- }
-}
-db.refsect1.sections = db.refsect2+
-div {
- db.refsect1.status.attribute = db.status.attribute
- db.refsect1.role.attribute = attribute role { text }
- db.refsect1.attlist =
- db.refsect1.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.refsect1.status.attribute?
- db.refsect1.info = db._info.title.req
- db.refsect1 =
-
- ## A major subsection of a reference entry
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:refsect1"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element refsect1 {
- db.refsect1.attlist,
- db.refsect1.info,
- ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections)
- }
-}
-db.refsect2.sections = db.refsect3+
-div {
- db.refsect2.status.attribute = db.status.attribute
- db.refsect2.role.attribute = attribute role { text }
- db.refsect2.attlist =
- db.refsect2.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.refsect2.status.attribute?
- db.refsect2.info = db._info.title.req
- db.refsect2 =
-
- ## A subsection of a refsect1
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:refsect2"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element refsect2 {
- db.refsect2.attlist,
- db.refsect2.info,
- ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections)
- }
-}
-div {
- db.refsect3.status.attribute = db.status.attribute
- db.refsect3.role.attribute = attribute role { text }
- db.refsect3.attlist =
- db.refsect3.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.refsect3.status.attribute?
- db.refsect3.info = db._info.title.req
- db.refsect3 =
-
- ## A subsection of a refsect2
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:refsect3"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element refsect3 {
- db.refsect3.attlist, db.refsect3.info, db.all.blocks+
- }
-}
-db.glossary.inlines = db.firstterm | db.glossterm
-db.baseform.attribute =
-
- ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form.
- attribute baseform { text }?
-div {
- db.glosslist.role.attribute = attribute role { text }
- db.glosslist.attlist =
- db.glosslist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.glosslist.info = db._info.title.only
- db.glosslist =
-
- ## A wrapper for a list of glossary entries
- element glosslist {
- db.glosslist.attlist,
- db.glosslist.info?,
- db.all.blocks*,
- db.glossentry+
- }
-}
-div {
- db.glossentry.role.attribute = attribute role { text }
- db.glossentry.sortas.attribute =
-
- ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used
- attribute sortas { text }
- db.glossentry.attlist =
- db.glossentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.glossentry.sortas.attribute?
- db.glossentry =
-
- ## An entry in a Glossary or GlossList
- element glossentry {
- db.glossentry.attlist,
- db.glossterm,
- db.acronym?,
- db.abbrev?,
- db.indexterm*,
- (db.glosssee | db.glossdef+)
- }
-}
-div {
- db.glossdef.role.attribute = attribute role { text }
- db.glossdef.subject.attribute =
-
- ## Specifies a list of keywords for the definition
- attribute subject { text }
- db.glossdef.attlist =
- db.glossdef.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.glossdef.subject.attribute?
- db.glossdef =
-
- ## A definition in a GlossEntry
- element glossdef {
- db.glossdef.attlist, db.all.blocks+, db.glossseealso*
- }
-}
-div {
- db.glosssee.role.attribute = attribute role { text }
- db.glosssee.otherterm.attribute =
-
- ## Identifies the other term
- attribute otherterm { xsd:IDREF }
- db.glosssee.attlist =
- db.glosssee.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.glosssee.otherterm.attribute?
- db.glosssee =
-
- ## A cross-reference from one glossentry
- ## to another
- [
- s:pattern [
- name = "Glosssary 'see' type constraint"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:glosssee[@otherterm]"
- "\x{a}" ~
- " "
- s:assert [
- test =
- "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'"
- "@otherterm on glosssee must point to a glossentry."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element glosssee { db.glosssee.attlist, db.all.inlines* }
-}
-div {
- db.glossseealso.role.attribute = attribute role { text }
- db.glossseealso.otherterm.attribute =
-
- ## Identifies the other term
- attribute otherterm { xsd:IDREF }
- db.glossseealso.attlist =
- db.glossseealso.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.glossseealso.otherterm.attribute?
- db.glossseealso =
-
- ## A cross-reference from one GlossEntry to another
- [
- s:pattern [
- name = "Glossary 'seealso' type constraint"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:glossseealso[@otherterm]"
- "\x{a}" ~
- " "
- s:assert [
- test =
- "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'"
- "@otherterm on glossseealso must point to a glossentry."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element glossseealso { db.glossseealso.attlist, db.all.inlines* }
-}
-div {
- db.firstterm.role.attribute = attribute role { text }
- db.firstterm.attlist =
- db.firstterm.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.baseform.attribute
- db.firstterm =
-
- ## The first occurrence of a term
- [
- s:pattern [
- name = "Glossary 'firstterm' type constraint"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:firstterm[@linkend]"
- "\x{a}" ~
- " "
- s:assert [
- test =
- "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
- "@linkend on firstterm must point to a glossentry."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element firstterm { db.firstterm.attlist, db.all.inlines* }
-}
-div {
- db.glossterm.role.attribute = attribute role { text }
- db.glossterm.attlist =
- db.glossterm.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.baseform.attribute
- db.glossterm =
-
- ## A glossary term
- [
- s:pattern [
- name = "Glossary 'glossterm' type constraint"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:glossterm[@linkend]"
- "\x{a}" ~
- " "
- s:assert [
- test =
- "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
- "@linkend on glossterm must point to a glossentry."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element glossterm { db.glossterm.attlist, db.all.inlines* }
-}
-div {
- db.glossary.status.attribute = db.status.attribute
- db.glossary.role.attribute = attribute role { text }
- db.glossary.attlist =
- db.glossary.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.glossary.status.attribute?
- db.glossary.info = db._info
- db.glossary =
-
- ## A glossary
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:glossary"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element glossary {
- db.glossary.attlist,
- db.glossary.info,
- db.all.blocks*,
- (db.glossdiv* | db.glossentry*),
- db.bibliography?
- }
-}
-div {
- db.glossdiv.status.attribute = db.status.attribute
- db.glossdiv.role.attribute = attribute role { text }
- db.glossdiv.attlist =
- db.glossdiv.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.glossdiv.status.attribute?
- db.glossdiv.info = db._info.title.req
- db.glossdiv =
-
- ## A division in a Glossary
- element glossdiv {
- db.glossdiv.attlist,
- db.glossdiv.info,
- db.all.blocks*,
- db.glossentry+
- }
-}
-div {
- db.termdef.role.attribute = attribute role { text }
- db.termdef.attlist =
- db.termdef.role.attribute?
- & db.glossentry.sortas.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.baseform.attribute
- db.termdef =
-
- ## An inline definition of a term
- [
- s:pattern [
- name = "Glossary term definition constraint"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:termdef"
- "\x{a}" ~
- " "
- s:assert [
- test = "count(db:firstterm) = 1"
- "A termdef must contain exactly one firstterm"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element termdef { db.termdef.attlist, db.all.inlines* }
-}
-db.relation.attribute =
-
- ## Identifies the relationship between the bibliographic elemnts
- attribute relation { text }
-div {
- db.biblioentry.role.attribute = attribute role { text }
- db.biblioentry.attlist =
- db.biblioentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.biblioentry =
-
- ## An entry in a Bibliography
- element biblioentry {
- db.biblioentry.attlist, db.bibliographic.elements+
- }
-}
-div {
- db.bibliomixed.role.attribute = attribute role { text }
- db.bibliomixed.attlist =
- db.bibliomixed.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.bibliomixed =
-
- ## An entry in a Bibliography
- element bibliomixed {
- db.bibliomixed.attlist, (text | db.bibliographic.elements)*
- }
-}
-div {
- db.biblioset.relation.attribute = db.relation.attribute
- db.biblioset.role.attribute = attribute role { text }
- db.biblioset.attlist =
- db.biblioset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.biblioset.relation.attribute?
- db.biblioset =
-
- ## A raw container for related bibliographic information
- element biblioset {
- db.biblioset.attlist, db.bibliographic.elements+
- }
-}
-div {
- db.bibliomset.relation.attribute = db.relation.attribute
- db.bibliomset.role.attribute = attribute role { text }
- db.bibliomset.attlist =
- db.bibliomset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.bibliomset.relation.attribute?
- db.bibliomset =
-
- ## A cooked container for related bibliographic information
- element bibliomset {
- db.bibliomset.attlist, (db._text | db.bibliographic.elements)*
- }
-}
-div {
- db.bibliomisc.role.attribute = attribute role { text }
- db.bibliomisc.attlist =
- db.bibliomisc.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.bibliomisc =
-
- ## Untyped bibliographic information
- element bibliomisc { db.bibliomisc.attlist, db._text }
-}
-div {
- db.bibliography.status.attrib = db.status.attribute
- db.bibliography.role.attribute = attribute role { text }
- db.bibliography.attlist =
- db.bibliography.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.bibliography.status.attrib?
- db.bibliography.info = db._info
- db.bibliography =
-
- ## A bibliography
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:bibliography"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element bibliography {
- db.bibliography.attlist,
- db.bibliography.info,
- db.all.blocks*,
- (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+)
- }
-}
-div {
- db.bibliodiv.status.attrib = db.status.attribute
- db.bibliodiv.role.attribute = attribute role { text }
- db.bibliodiv.attlist =
- db.bibliodiv.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.bibliodiv.status.attrib?
- db.bibliodiv.info = db._info.title.req
- db.bibliodiv =
-
- ## A section of a Bibliography
- element bibliodiv {
- db.bibliodiv.attlist,
- db.bibliodiv.info,
- db.all.blocks*,
- (db.biblioentry | db.bibliomixed)+
- }
-}
-div {
- db.bibliolist.role.attribute = attribute role { text }
- db.bibliolist.attlist =
- db.bibliolist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.bibliolist.info = db._info.title.only
- db.bibliolist =
-
- ## A wrapper for a list of bibliography entries
- element bibliolist {
- db.bibliolist.attlist,
- db.bibliolist.info?,
- db.all.blocks*,
- (db.biblioentry | db.bibliomixed)+
- }
-}
-div {
- db.biblioref.role.attribute = attribute role { text }
- db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute
- db.biblioref.endterm.attribute = db.endterm.attribute
- db.biblioref.units.attribute =
-
- ## The units (for example, pages) used to identify the beginning and ending of a reference.
- attribute units { xsd:token }
- db.biblioref.begin.attribute =
-
- ## Identifies the beginning of a reference; the location within the work that is being referenced.
- attribute begin { xsd:token }
- db.biblioref.end.attribute =
-
- ## Identifies the end of a reference.
- attribute end { xsd:token }
- db.biblioref.attlist =
- db.biblioref.role.attribute?
- & db.common.attributes
- & db.common.req.linking.attributes
- & db.biblioref.xrefstyle.attribute?
- & db.biblioref.endterm.attribute?
- & db.biblioref.units.attribute?
- & db.biblioref.begin.attribute?
- & db.biblioref.end.attribute?
- db.biblioref =
-
- ## A cross-reference to a bibliographic entry
- element biblioref { db.biblioref.attlist, empty }
-}
-db.significance.enumeration =
-
- ## Normal
- "normal"
- |
- ## Preferred
- "preferred"
-db.significance.attribute =
-
- ## Specifies the significance of the term
- attribute significance { db.significance.enumeration }
-db.zone.attribute =
-
- ## Specifies the IDs of the elements to which this term applies
- attribute zone { xsd:IDREFS }
-db.indexterm.pagenum.attribute =
-
- ## Indicates the page on which this index term occurs in some version of the printed document
- attribute pagenum { text }
-db.scope.enumeration =
-
- ## All indexes
- "all"
- |
- ## The global index (as for a combined index of a set of box)
- "global"
- |
- ## The local index (the index for this document only)
- "local"
-db.scope.attribute =
-
- ## Specifies the scope of the index term
- attribute scope { db.scope.enumeration }
-db.sortas.attribute =
-
- ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used
- attribute sortas { text }
-db.index.type.attribute =
-
- ## Specifies the target index for this term
- attribute type { text }
-div {
- db.itermset.role.attribute = attribute role { text }
- db.itermset.attlist =
- db.itermset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.itermset =
-
- ## A set of index terms in the meta-information of a document
- element itermset { db.itermset.attlist, db.indexterm.singular+ }
-}
-db.indexterm.contentmodel =
- db.primary?,
- ((db.secondary,
- ((db.tertiary, (db.see | db.seealso+)?)
- | db.see
- | db.seealso+)?)
- | db.see
- | db.seealso+)?
-div {
- db.indexterm.singular.role.attribute = attribute role { text }
- db.indexterm.singular.class.attribute =
-
- ## Identifies the class of index term
- attribute class {
-
- ## A singular index term
- "singular"
- }
- db.indexterm.singular.attlist =
- db.indexterm.singular.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.significance.attribute?
- & db.zone.attribute?
- & db.indexterm.pagenum.attribute?
- & db.scope.attribute?
- & db.index.type.attribute?
- & db.indexterm.singular.class.attribute?
- db.indexterm.singular =
-
- ## A wrapper for an indexed term
- element indexterm {
- db.indexterm.singular.attlist, db.indexterm.contentmodel
- }
-}
-div {
- db.indexterm.startofrange.role.attribute = attribute role { text }
- db.indexterm.startofrange.class.attribute =
-
- ## Identifies the class of index term
- attribute class {
-
- ## The start of a range
- "startofrange"
- }
- db.indexterm.startofrange.attlist =
- db.indexterm.startofrange.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.significance.attribute?
- & db.zone.attribute?
- & db.indexterm.pagenum.attribute?
- & db.scope.attribute?
- & db.index.type.attribute?
- & db.indexterm.startofrange.class.attribute
- db.indexterm.startofrange =
-
- ## A wrapper for an indexed term that covers a range
- element indexterm {
- db.indexterm.startofrange.attlist, db.indexterm.contentmodel
- }
-}
-div {
- db.indexterm.endofrange.role.attribute = attribute role { text }
- db.indexterm.endofrange.class.attribute =
-
- ## Identifies the class of index term
- attribute class {
-
- ## The end of a range
- "endofrange"
- }
- db.indexterm.endofrange.startref.attribute =
-
- ## Points to the start of the range
- attribute startref { xsd:IDREF }
- db.indexterm.endofrange.attlist =
- db.indexterm.endofrange.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.indexterm.endofrange.class.attribute
- & db.indexterm.endofrange.startref.attribute
- db.indexterm.endofrange =
-
- ## Identifies the end of a range associated with an indexed term
- element indexterm { db.indexterm.endofrange.attlist, empty }
-}
-div {
- db.indexterm =
- db.indexterm.singular
- | db.indexterm.startofrange
- | db.indexterm.endofrange
-}
-div {
- db.primary.role.attribute = attribute role { text }
- db.primary.attlist =
- db.primary.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.sortas.attribute?
- db.primary =
-
- ## The primary word or phrase under which an index term should be sorted
- element primary { db.primary.attlist, db.all.inlines* }
-}
-div {
- db.secondary.role.attribute = attribute role { text }
- db.secondary.attlist =
- db.secondary.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.sortas.attribute?
- db.secondary =
-
- ## A secondary word or phrase in an index term
- element secondary { db.secondary.attlist, db.all.inlines* }
-}
-div {
- db.tertiary.role.attribute = attribute role { text }
- db.tertiary.attlist =
- db.tertiary.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.sortas.attribute?
- db.tertiary =
-
- ## A tertiary word or phrase in an index term
- element tertiary { db.tertiary.attlist, db.all.inlines* }
-}
-div {
- db.see.role.attribute = attribute role { text }
- db.see.attlist =
- db.see.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.see =
-
- ## Part of an index term directing the reader instead to another entry in the index
- element see { db.see.attlist, db.all.inlines* }
-}
-div {
- db.seealso.role.attribute = attribute role { text }
- db.seealso.attlist =
- db.seealso.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.seealso =
-
- ## Part of an index term directing the reader also to another entry in the index
- element seealso { db.seealso.attlist, db.all.inlines* }
-}
-div {
- db.index.status.attribute = db.status.attribute
- db.index.role.attribute = attribute role { text }
- db.index.attlist =
- db.index.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.index.status.attribute?
- & db.index.type.attribute?
- db.index.info = db._info
- #
- # Yes, db.indexdiv* and db.indexentry*; that way an is valid.
- # Authors can use an empty index to indicate where a generated index should
- # appear.
- db.index =
-
- ## An index to a book or part of a book
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:index"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element index {
- db.index.attlist,
- db.index.info,
- db.all.blocks*,
- (db.indexdiv* | db.indexentry* | db.segmentedlist)
- }
-}
-div {
- db.setindex.status.attribute = db.status.attribute
- db.setindex.role.attribute = attribute role { text }
- db.setindex.attlist =
- db.setindex.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.setindex.status.attribute?
- & db.index.type.attribute?
- db.setindex.info = db._info
- db.setindex =
-
- ## An index to a set of books
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:setindex"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element setindex {
- db.setindex.attlist,
- db.setindex.info,
- db.all.blocks*,
- (db.indexdiv* | db.indexentry*)
- }
-}
-div {
- db.indexdiv.status.attribute = db.status.attribute
- db.indexdiv.role.attribute = attribute role { text }
- db.indexdiv.attlist =
- db.indexdiv.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.label.attribute?
- & db.indexdiv.status.attribute?
- db.indexdiv.info = db._info.title.req
- db.indexdiv =
-
- ## A division in an index
- element indexdiv {
- db.indexdiv.attlist,
- db.indexdiv.info,
- db.all.blocks*,
- (db.indexentry+ | db.segmentedlist)
- }
-}
-div {
- db.indexentry.role.attribute = attribute role { text }
- db.indexentry.attlist =
- db.indexentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.indexentry =
-
- ## An entry in an index
- element indexentry {
- db.indexentry.attlist,
- db.primaryie,
- (db.seeie | db.seealsoie)*,
- (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)*
- }
-}
-div {
- db.primaryie.role.attribute = attribute role { text }
- db.primaryie.attlist =
- db.primaryie.role.attribute?
- & db.common.attributes
- & db.linkends.attribute?
- db.primaryie =
-
- ## A primary term in an index entry, not in the text
- element primaryie { db.primaryie.attlist, db.all.inlines* }
-}
-div {
- db.secondaryie.role.attribute = attribute role { text }
- db.secondaryie.attlist =
- db.secondaryie.role.attribute?
- & db.common.attributes
- & db.linkends.attribute?
- db.secondaryie =
-
- ## A secondary term in an index entry, rather than in the text
- element secondaryie { db.secondaryie.attlist, db.all.inlines* }
-}
-div {
- db.tertiaryie.role.attribute = attribute role { text }
- db.tertiaryie.attlist =
- db.tertiaryie.role.attribute?
- & db.common.attributes
- & db.linkends.attribute?
- db.tertiaryie =
-
- ## A tertiary term in an index entry, rather than in the text
- element tertiaryie { db.tertiaryie.attlist, db.all.inlines* }
-}
-div {
- db.seeie.role.attribute = attribute role { text }
- db.seeie.attlist =
- db.seeie.role.attribute?
- & db.common.attributes
- & db.linkend.attribute?
- db.seeie =
-
- ## A See
- ## entry in an index, rather than in the text
- element seeie { db.seeie.attlist, db.all.inlines* }
-}
-div {
- db.seealsoie.role.attribute = attribute role { text }
- db.seealsoie.attlist =
- db.seealsoie.role.attribute?
- & db.common.attributes
- & db.linkends.attribute?
- db.seealsoie =
-
- ## A See also
- ## entry in an index, rather than in the text
- element seealsoie { db.seealsoie.attlist, db.all.inlines* }
-}
-db.toc.pagenum.attribute =
-
- ## Indicates the page on which this element occurs in some version of the printed document
- attribute pagenum { text }
-div {
- db.toc.role.attribute = attribute role { text }
- db.toc.attlist =
- db.toc.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.toc.info = db._info.title.only
- db.toc =
-
- ## A table of contents
- [
- s:pattern [
- name = "Root must have version"
- "\x{a}" ~
- " "
- s:rule [
- context = "/db:toc"
- "\x{a}" ~
- " "
- s:assert [
- test = "@version"
- "The root element must have a version attribute."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element toc {
- db.toc.attlist,
- db.toc.info,
- db.all.blocks*,
- (db.tocdiv | db.tocentry)*
- }
-}
-div {
- db.tocdiv.role.attribute = attribute role { text }
- db.tocdiv.pagenum.attribute = db.toc.pagenum.attribute
- db.tocdiv.attlist =
- db.tocdiv.role.attribute?
- & db.common.attributes
- & db.tocdiv.pagenum.attribute?
- & db.linkend.attribute?
- db.tocdiv.info = db._info
- db.tocdiv =
-
- ## A division in a table of contents
- element tocdiv {
- db.tocdiv.attlist,
- db.tocdiv.info,
- db.all.blocks*,
- (db.tocdiv | db.tocentry)+
- }
-}
-div {
- db.tocentry.role.attribute = attribute role { text }
- db.tocentry.pagenum.attribute = db.toc.pagenum.attribute
- db.tocentry.attlist =
- db.tocentry.role.attribute?
- & db.common.attributes
- & db.tocentry.pagenum.attribute?
- & db.linkend.attribute?
- db.tocentry =
-
- ## A component title in a table of contents
- element tocentry { db.tocentry.attlist, db.all.inlines* }
-}
-db.task.info = db._info.title.req
-div {
- db.task.role.attribute = attribute role { text }
- db.task.attlist =
- db.task.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.task =
-
- ## A task to be completed
- element task {
- db.task.attlist,
- db.task.info,
- db.tasksummary?,
- db.taskprerequisites?,
- db.procedure,
- db.example*,
- db.taskrelated?
- }
-}
-div {
- db.tasksummary.role.attribute = attribute role { text }
- db.tasksummary.attlist =
- db.tasksummary.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.tasksummary.info = db._info.title.only
- db.tasksummary =
-
- ## A summary of a task
- element tasksummary {
- db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+
- }
-}
-div {
- db.taskprerequisites.role.attribute = attribute role { text }
- db.taskprerequisites.attlist =
- db.taskprerequisites.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.taskprerequisites.info = db._info.title.only
- db.taskprerequisites =
-
- ## The prerequisites for a task
- element taskprerequisites {
- db.taskprerequisites.attlist,
- db.taskprerequisites.info,
- db.all.blocks+
- }
-}
-div {
- db.taskrelated.role.attribute = attribute role { text }
- db.taskrelated.attlist =
- db.taskrelated.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.taskrelated.info = db._info.title.only
- db.taskrelated =
-
- ## Information related to a task
- element taskrelated {
- db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+
- }
-}
-db.area.units.enumeration =
-
- ## Coordinates expressed as a pair of CALS graphic coordinates.
- "calspair"
- |
- ## Coordinates expressed as a line and column.
- "linecolumn"
- |
- ## Coordinates expressed as a pair of lines and columns.
- "linecolumnpair"
- |
- ## Coordinates expressed as a line range.
- "linerange"
-db.area.units-enum.attribute =
-
- ## Identifies the units used in the coords attribute The default units vary according to the type of callout specified: calspair
- ## for graphics and linecolumn
- ## for line-oriented elements.
- attribute units { db.area.units.enumeration }?
-db.area.units-other.attributes =
-
- ## Indicates that non-standard units are used for this area
- ## . In this case otherunits
- ## must be specified.
- attribute units {
-
- ## Coordinates expressed in some non-standard units.
- "other"
- }?,
-
- ## Identifies the units used in the coords
- ## attribute when the units
- ## attribute is other
- ## . This attribute is forbidden otherwise.
- attribute otherunits { xsd:NMTOKEN }
-db.area.units.attribute =
- db.area.units-enum.attribute | db.area.units-other.attributes
-div {
- db.calloutlist.role.attribute = attribute role { text }
- db.calloutlist.attlist =
- db.calloutlist.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.calloutlist.info = db._info.title.only
- db.calloutlist =
-
- ## A list of callout
- ## s
- element calloutlist {
- db.calloutlist.attlist,
- db.calloutlist.info,
- db.all.blocks*,
- db.callout+
- }
-}
-div {
- db.callout.role.attribute = attribute role { text }
- db.callout.arearefs.attribute =
-
- ## Identifies the areas described by this callout.
- attribute arearefs { xsd:IDREFS }
- db.callout.attlist =
- db.callout.role.attribute?
- & db.common.attributes
- & db.callout.arearefs.attribute
- db.callout =
-
- ## A called out
- ## description of a marked Area
- element callout { db.callout.attlist, db.all.blocks+ }
-}
-div {
- db.programlistingco.role.attribute = attribute role { text }
- db.programlistingco.attlist =
- db.programlistingco.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.programlistingco.info = db._info.title.forbidden
- db.programlistingco =
-
- ## A program listing with associated areas used in callouts
- element programlistingco {
- db.programlistingco.attlist,
- db.programlistingco.info,
- db.areaspec,
- db.programlisting,
- db.calloutlist*
- }
-}
-div {
- db.areaspec.role.attribute = attribute role { text }
- db.areaspec.attlist =
- db.areaspec.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.area.units.attribute
- db.areaspec =
-
- ## A collection of regions in a graphic or code example
- element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ }
-}
-div {
- db.area.role.attribute = attribute role { text }
- db.area.linkends.attribute =
-
- ## Point to the callout
- ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.)
- attribute linkends { xsd:IDREFS }
- db.area.label.attribute =
-
- ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute.
- attribute label { text }
- db.area.coords.attribute =
-
- ## Provides the coordinates of the area. The coordinates must be interpreted using the units
- ## specified.
- attribute coords { text }
- db.area.attlist =
- db.area.role.attribute?
- & db.common.idreq.attributes
- & db.area.units.attribute
- & (db.area.linkends.attribute | db.href.attributes)?
- & db.area.label.attribute?
- & db.area.coords.attribute
- db.area =
-
- ## A region defined for a Callout in a graphic or code example
- element area { db.area.attlist, db.alt? }
-}
-div {
- # The only difference is that xml:id is optional
- db.area.inareaset.attlist =
- db.area.role.attribute?
- & db.common.attributes
- & db.area.units.attribute
- & (db.area.linkends.attribute | db.href.attributes)?
- & db.area.label.attribute?
- & db.area.coords.attribute
- db.area.inareaset =
-
- ## A region defined for a Callout in a graphic or code example
- element area { db.area.inareaset.attlist, db.alt? }
-}
-div {
- db.areaset.role.attribute = attribute role { text }
- db.areaset.linkends.attribute = db.linkends.attribute
- db.areaset.label.attribute = db.label.attribute
- db.areaset.attlist =
- db.areaset.role.attribute?
- & db.common.idreq.attributes
- & db.area.units.attribute
- & (db.areaset.linkends.attribute | db.href.attributes)?
- & db.areaset.label.attribute?
- db.areaset =
-
- ## A set of related areas in a graphic or code example
- element areaset { db.areaset.attlist, db.area.inareaset+ }
-}
-div {
- db.screenco.role.attribute = attribute role { text }
- db.screenco.attlist =
- db.screenco.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.screenco.info = db._info.title.forbidden
- db.screenco =
-
- ## A screen with associated areas used in callouts
- element screenco {
- db.screenco.attlist,
- db.screenco.info,
- db.areaspec,
- db.screen,
- db.calloutlist*
- }
-}
-div {
- db.imageobjectco.role.attribute = attribute role { text }
- db.imageobjectco.attlist =
- db.imageobjectco.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.imageobjectco.info = db._info.title.forbidden
- db.imageobjectco =
-
- ## A wrapper for an image object with callouts
- element imageobjectco {
- db.imageobjectco.attlist,
- db.imageobjectco.info,
- db.areaspec,
- db.imageobject+,
- db.calloutlist*
- }
-}
-div {
- db.co.role.attribute = attribute role { text }
- db.co.linkends.attribute = db.linkends.attribute
- db.co.label.attribute = db.label.attribute
- db.co.attlist =
- db.co.role.attribute?
- & db.common.idreq.attributes
- & db.co.linkends.attribute?
- & db.co.label.attribute?
- db.co =
-
- ## The location of a callout embedded in text
- element co { db.co.attlist, empty }
-}
-div {
- db.coref.role.attribute = attribute role { text }
- db.coref.label.attribute = db.label.attribute
- db.coref.attlist =
- db.coref.role.attribute?
- & db.common.attributes
- & db.linkend.attribute
- & db.coref.label.attribute?
- db.coref =
-
- ## A cross reference to a co
- element coref { db.coref.attlist, empty }
-}
-div {
- db.productionset.role.attribute = attribute role { text }
- db.productionset.attlist =
- db.productionset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.productionset.info = db._info.title.only
- db.productionset =
-
- ## A set of EBNF productions
- element productionset {
- db.productionset.attlist,
- db.productionset.info,
- (db.production | db.productionrecap)+
- }
-}
-div {
- db.production.role.attribute = attribute role { text }
- db.production.attlist =
- db.production.role.attribute?
- & db.common.idreq.attributes
- & db.common.linking.attributes
- db.production =
-
- ## A production in a set of EBNF productions
- element production {
- db.production.attlist, db.lhs, db.rhs, db.constraint*
- }
-}
-div {
- db.lhs.role.attribute = attribute role { text }
- db.lhs.attlist =
- db.lhs.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.lhs =
-
- ## The left-hand side of an EBNF production
- element lhs { db.lhs.attlist, text }
-}
-div {
- db.rhs.role.attribute = attribute role { text }
- db.rhs.attlist =
- db.rhs.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.rhs =
-
- ## The right-hand side of an EBNF production
- element rhs {
- db.rhs.attlist,
- (text | db.nonterminal | db.lineannotation | db.sbr)*
- }
-}
-div {
- db.nonterminal.role.attribute = attribute role { text }
- db.nonterminal.def.attribute =
-
- ## Specifies a URI that points to a production
- ## where the nonterminal
- ## is defined
- attribute def { xsd:anyURI }
- db.nonterminal.attlist =
- db.nonterminal.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.nonterminal.def.attribute
- db.nonterminal =
-
- ## A non-terminal in an EBNF production
- element nonterminal { db.nonterminal.attlist, text }
-}
-div {
- db.constraint.role.attribute = attribute role { text }
- db.constraint.attlist =
- db.constraint.role.attribute?
- & db.common.attributes
- & db.common.req.linking.attributes
- db.constraint =
-
- ## A constraint in an EBNF production
- element constraint { db.constraint.attlist, empty }
-}
-div {
- db.productionrecap.role.attribute = attribute role { text }
- db.productionrecap.attlist =
- db.productionrecap.role.attribute?
- & db.common.attributes
- & db.common.req.linking.attributes
- db.productionrecap =
-
- ## A cross-reference to an EBNF production
- element productionrecap { db.productionrecap.attlist, empty }
-}
-div {
- db.constraintdef.role.attribute = attribute role { text }
- db.constraintdef.attlist =
- db.constraintdef.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.constraintdef.info = db._info.title.only
- db.constraintdef =
-
- ## The definition of a constraint in an EBNF production
- element constraintdef {
- db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+
- }
-}
-db.char.attribute =
-
- ## Specifies the alignment character when align
- ## is set to char
- ## .
- attribute char { text }
-db.charoff.attribute =
-
- ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char
- ## when align
- ## is set to char
- ## .
- attribute charoff {
- xsd:decimal { minExclusive = "0" maxExclusive = "100" }
- }
-db.frame.attribute =
-
- ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table.
- attribute frame {
-
- ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders.
- "all"
- |
- ## Frame only the bottom of the table.
- "bottom"
- |
- ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well.
- "none"
- |
- ## Frame the left and right sides of the table.
- "sides"
- |
- ## Frame the top of the table.
- "top"
- |
- ## Frame the top and bottom of the table.
- "topbot"
- }
-db.colsep.attribute =
-
- ## Specifies the presence or absence of the column separator
- attribute colsep {
-
- ## No column separator rule.
- "0"
- |
- ## Provide a column separator rule on the right
- "1"
- }
-db.rowsep.attribute =
-
- ## Specifies the presence or absence of the row separator
- attribute rowsep {
-
- ## No row separator rule.
- "0"
- |
- ## Provide a row separator rule below
- "1"
- }
-db.orient.attribute =
-
- ## Specifies the orientation of the table
- attribute orient {
-
- ## 90 degrees counter-clockwise from the rest of the text flow.
- "land"
- |
- ## The same orientation as the rest of the text flow.
- "port"
- }
-db.tabstyle.attribute =
-
- ## Specifies the table style
- attribute tabstyle { text }
-db.rowheader.attribute =
-
- ## Indicates whether or not the entries in the first column should be considered row headers
- attribute rowheader {
-
- ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers).
- "firstcol"
- |
- ## Indicates that entries in the first column have no special significance with respect to column headers.
- "norowheader"
- }
-db.align.attribute =
-
- ## Specifies the horizontal alignment of text in an entry.
- attribute align {
-
- ## Centered.
- "center"
- |
- ## Aligned on a particular character.
- "char"
- |
- ## Left and right justified.
- "justify"
- |
- ## Left justified.
- "left"
- |
- ## Right justified.
- "right"
- }
-db.valign.attribute =
-
- ## Specifies the vertical alignment of text in an entry.
- attribute valign {
-
- ## Aligned on the bottom of the entry.
- "bottom"
- |
- ## Aligned in the middle.
- "middle"
- |
- ## Aligned at the top of the entry.
- "top"
- }
-db.specify-col-by-colname.attributes =
-
- ## Specifies a column specification by name.
- attribute colname { text }
-db.specify-col-by-namest.attributes =
-
- ## Specifies a starting column by name.
- attribute namest { text }
-db.specify-span-by-spanspec.attributes =
-
- ## Specifies a span by name.
- attribute spanname { text }
-db.specify-span-directly.attributes =
-
- ## Specifies a starting column by name.
- attribute namest { text }
- &
- ## Specifies an ending column by name.
- attribute nameend { text }
-db.column-spec.attributes =
- db.specify-col-by-colname.attributes
- | db.specify-col-by-namest.attributes
- | db.specify-span-by-spanspec.attributes
- | db.specify-span-directly.attributes
-db.colname.attribute =
-
- ## Provides a name for a column specification.
- attribute colname { text }
-db.spanname.attribute =
-
- ## Provides a name for a span specification.
- attribute spanname { text }
-div {
- db.tgroup.role.attribute = attribute role { text }
- db.tgroup.tgroupstyle.attribute =
-
- ## Additional style information for downstream processing; typically the name of a style.
- attribute tgroupstyle { text }
- db.tgroup.cols.attribute =
-
- ## The number of columns in the table. Must be an integer greater than zero.
- attribute cols { xsd:positiveInteger }
- db.tgroup.attlist =
- db.tgroup.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.char.attribute?
- & db.charoff.attribute?
- & db.tgroup.tgroupstyle.attribute?
- & db.tgroup.cols.attribute
- & db.colsep.attribute?
- & db.rowsep.attribute?
- & db.align.attribute?
- db.tgroup =
-
- ## A wrapper for the main content of a table, or part of a table
- element tgroup {
- db.tgroup.attlist,
- db.colspec*,
- db.spanspec*,
- db.cals.thead?,
- db.cals.tfoot?,
- db.cals.tbody
- }
-}
-div {
- db.colspec.role.attribute = attribute role { text }
- db.colspec.colnum.attribute =
-
- ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one.
- attribute colnum { xsd:positiveInteger }
- db.colspec.colwidth.attribute =
-
- ## Specifies the width of the column.
- attribute colwidth { text }
- db.colspec.attlist =
- db.colspec.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.colspec.colnum.attribute?
- & db.char.attribute?
- & db.colsep.attribute?
- & db.colspec.colwidth.attribute?
- & db.charoff.attribute?
- & db.colname.attribute?
- & db.rowsep.attribute?
- & db.align.attribute?
- db.colspec =
-
- ## Specifications for a column in a table
- element colspec { db.colspec.attlist, empty }
-}
-div {
- db.spanspec.role.attribute = attribute role { text }
- db.spanspec.namest.attribute =
-
- ## Specifies a starting column by name.
- attribute namest { text }
- db.spanspec.nameend.attribute =
-
- ## Specifies an ending column by name.
- attribute nameend { text }
- db.spanspec.attlist =
- db.spanspec.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.spanname.attribute
- & db.spanspec.namest.attribute
- & db.spanspec.nameend.attribute
- & db.char.attribute?
- & db.colsep.attribute?
- & db.charoff.attribute?
- & db.rowsep.attribute?
- & db.align.attribute?
- db.spanspec =
-
- ## Formatting information for a spanned column in a table
- element spanspec { db.spanspec.attlist, empty }
-}
-div {
- db.cals.thead.role.attribute = attribute role { text }
- db.cals.thead.attlist =
- db.cals.thead.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.valign.attribute?
- db.cals.thead =
-
- ## A table header consisting of one or more rows
- element thead { db.cals.thead.attlist, db.colspec*, db.row+ }
-}
-div {
- db.cals.tfoot.role.attribute = attribute role { text }
- db.cals.tfoot.attlist =
- db.cals.tfoot.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.valign.attribute?
- db.cals.tfoot =
-
- ## A table footer consisting of one or more rows
- element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ }
-}
-div {
- db.cals.tbody.role.attribute = attribute role { text }
- db.cals.tbody.attlist =
- db.cals.tbody.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.valign.attribute?
- db.cals.tbody =
-
- ## A wrapper for the rows of a table or informal table
- element tbody { db.cals.tbody.attlist, db.row+ }
-}
-div {
- db.row.role.attribute = attribute role { text }
- db.row.attlist =
- db.row.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.rowsep.attribute?
- & db.valign.attribute?
- db.row =
-
- ## A row in a table
- element row { db.row.attlist, (db.entry | db.entrytbl)+ }
-}
-div {
- db.entry.role.attribute = attribute role { text }
- db.entry.morerows.attribute =
-
- ## Specifies the number of additional rows which this entry occupies. Defaults to zero.
- attribute morerows { xsd:integer }
- db.entry.rotate.attribute =
-
- ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated.
- attribute rotate {
-
- ## Do not rotate the cell.
- "0"
- |
- ## Rotate the cell 90 degrees counter-clockwise.
- "1"
- }
- db.entry.attlist =
- db.entry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.valign.attribute?
- & db.char.attribute?
- & db.colsep.attribute?
- & db.charoff.attribute?
- & db.entry.morerows.attribute?
- & db.column-spec.attributes?
- & db.rowsep.attribute?
- & db.entry.rotate.attribute?
- & db.align.attribute?
- db.entry =
-
- ## A cell in a table
- element entry {
- db.entry.attlist, (db.all.inlines* | db.all.blocks*)
- }
-}
-div {
- db.entrytbl.role.attribute = attribute role { text }
- db.entrytbl.tgroupstyle.attribute =
-
- ## Additional style information for downstream processing; typically the name of a style.
- attribute tgroupstyle { text }
- db.entrytbl.cols.attribute =
-
- ## The number of columns in the entry table. Must be an integer greater than zero.
- attribute cols { xsd:positiveInteger }
- db.entrytbl.attlist =
- db.entrytbl.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.char.attribute?
- & db.charoff.attribute?
- & db.column-spec.attributes?
- & db.entrytbl.tgroupstyle.attribute?
- & db.entrytbl.cols.attribute?
- & db.colsep.attribute?
- & db.rowsep.attribute?
- & db.align.attribute?
- db.entrytbl =
-
- ## A subtable appearing in place of an Entry in a table
- element entrytbl {
- db.entrytbl.attlist,
- db.colspec*,
- db.spanspec*,
- db.cals.entrytbl.thead?,
- db.cals.entrytbl.tbody
- }
-}
-div {
- db.cals.entrytbl.thead.role.attribute = attribute role { text }
- db.cals.entrytbl.thead.attlist =
- db.cals.entrytbl.thead.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.valign.attribute?
- db.cals.entrytbl.thead =
-
- ## A table header consisting of one or more rows
- element thead {
- db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+
- }
-}
-div {
- db.cals.entrytbl.tbody.role.attribute = attribute role { text }
- db.cals.entrytbl.tbody.attlist =
- db.cals.entrytbl.tbody.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.valign.attribute?
- db.cals.entrytbl.tbody =
-
- ## A wrapper for the rows of a table or informal table
- element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ }
-}
-div {
- db.entrytbl.row.role.attribute = attribute role { text }
- db.entrytbl.row.attlist =
- db.entrytbl.row.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.rowsep.attribute?
- & db.valign.attribute?
- db.entrytbl.row =
-
- ## A row in a table
- element row { db.entrytbl.row.attlist, db.entry+ }
-}
-div {
- db.cals.table.role.attribute = attribute role { text }
- db.cals.table.label.attribute = db.label.attribute
- db.cals.table.attlist =
- db.cals.table.role.attribute?
- & db.cals.table.label.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.tabstyle.attribute?
- & db.floatstyle.attribute?
- & db.orient.attribute?
- & db.colsep.attribute?
- & db.rowsep.attribute?
- & db.frame.attribute?
- & db.pgwide.attribute?
- &
- ## Indicates if the short or long title should be used in a List of Tables
- attribute shortentry {
-
- ## Indicates that the full title should be used.
- "0"
- |
- ## Indicates that the short short title (titleabbrev) should be used.
- "1"
- }?
- &
- ## Indicates if the table should appear in a List of Tables
- attribute tocentry {
-
- ## Indicates that the table should not occur in the List of Tables.
- "0"
- |
- ## Indicates that the table should appear in the List of Tables.
- "1"
- }?
- & db.rowheader.attribute?
- db.cals.table.info = db._info.title.onlyreq
- db.cals.table =
-
- ## A formal table in a document
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:informaltable)"
- "informaltable must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element table {
- db.cals.table.attlist,
- db.cals.table.info,
- (db.alt? & db.indexing.inlines* & db.textobject*),
- (db.mediaobject+ | db.tgroup+),
- db.caption?
- }
-}
-div {
- db.cals.informaltable.role.attribute = attribute role { text }
- db.cals.informaltable.attlist =
- db.cals.informaltable.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.tabstyle.attribute?
- & db.floatstyle.attribute?
- & db.orient.attribute?
- & db.colsep.attribute?
- & db.rowsep.attribute?
- & db.frame.attribute?
- & db.pgwide.attribute?
- & db.rowheader.attribute?
- db.cals.informaltable.info = db._info.title.forbidden
- db.cals.informaltable =
-
- ## A table without a title
- element informaltable {
- db.cals.informaltable.attlist,
- db.cals.informaltable.info,
- (db.alt? & db.indexing.inlines* & db.textobject*),
- (db.mediaobject+ | db.tgroup+),
- db.caption?
- }
-}
-db.html.coreattrs =
-
- ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters.
- attribute class { text }?
- &
- ## This attribute specifies style information for the current element.
- attribute style { text }?
- &
- ## This attribute offers advisory information about the element for which it is set.
- attribute title { text }?
-db.html.i18n =
-
- ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown.
- attribute lang { text }?
-db.html.events =
-
- ## Occurs when the pointing device button is clicked over an element.
- attribute onclick { text }?
- &
- ## Occurs when the pointing device button is double clicked over an element.
- attribute ondblclick { text }?
- &
- ## Occurs when the pointing device button is pressed over an element.
- attribute onmousedown { text }?
- &
- ## Occurs when the pointing device button is released over an element.
- attribute onmouseup { text }?
- &
- ## Occurs when the pointing device is moved onto an element.
- attribute onmouseover { text }?
- &
- ## Occurs when the pointing device is moved while it is over an element.
- attribute onmousemove { text }?
- &
- ## Occurs when the pointing device is moved away from an element.
- attribute onmouseout { text }?
- &
- ## Occurs when a key is pressed and released over an element.
- attribute onkeypress { text }?
- &
- ## Occurs when a key is pressed down over an element.
- attribute onkeydown { text }?
- &
- ## Occurs when a key is released over an element.
- attribute onkeyup { text }?
-db.html.attrs =
- db.common.attributes
- & db.html.coreattrs
- & db.html.i18n
- & db.html.events
-db.html.cellhalign =
-
- ## Specifies the alignment of data and the justification of text in a cell.
- attribute align {
-
- ## Left-flush data/Left-justify text. This is the default value for table data.
- "left"
- |
- ## Center data/Center-justify text. This is the default value for table headers.
- "center"
- |
- ## Right-flush data/Right-justify text.
- "right"
- |
- ## Double-justify text.
- "justify"
- |
- ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified.
- "char"
- }?
- &
- ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute.
- attribute char { text }?
- &
- ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute.
- attribute charoff {
- xsd:integer
- | xsd:string { pattern = "[0-9]+%" }
- }?
-db.html.cellvalign =
-
- ## Specifies the vertical position of data within a cell.
- attribute valign {
-
- ## Cell data is flush with the top of the cell.
- "top"
- |
- ## Cell data is centered vertically within the cell. This is the default value.
- "middle"
- |
- ## Cell data is flush with the bottom of the cell.
- "bottom"
- |
- ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells.
- "baseline"
- }?
-db.html.table.attributes =
-
- ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille.
- attribute summary { text }?
- &
- ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent.
- attribute width {
- xsd:integer
- | xsd:string { pattern = "[0-9]+%" }
- }?
- &
- ## Specifies the width (in pixels only) of the frame around a table.
- attribute border { xsd:nonNegativeInteger }?
- &
- ## Specifies which sides of the frame surrounding a table will be visible.
- attribute frame {
-
- ## No sides. This is the default value.
- "void"
- |
- ## The top side only.
- "above"
- |
- ## The bottom side only.
- "below"
- |
- ## The top and bottom sides only.
- "hsides"
- |
- ## The left-hand side only.
- "lhs"
- |
- ## The right-hand side only.
- "rhs"
- |
- ## The right and left sides only.
- "vsides"
- |
- ## All four sides.
- "box"
- |
- ## All four sides.
- "border"
- }?
- &
- ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent.
- attribute rules {
-
- ## No rules. This is the default value.
- "none"
- |
- ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only.
- "groups"
- |
- ## Rules will appear between rows only.
- "rows"
- |
- ## Rules will appear between columns only.
- "cols"
- |
- ## Rules will appear between all rows and columns.
- "all"
- }?
- &
- ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells.
- attribute cellspacing {
- xsd:integer
- | xsd:string { pattern = "[0-9]+%" }
- }?
- &
- ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space.
- attribute cellpadding {
- xsd:integer
- | xsd:string { pattern = "[0-9]+%" }
- }?
-db.html.tablecell.attributes =
-
- ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content.
- attribute abbr { text }?
- &
- ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details.
- attribute axis { text }?
- &
- ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets.
- attribute headers { text }?
- &
- ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables.
- attribute scope {
-
- ## The current cell provides header information for the rest of the row that contains it
- "row"
- |
- ## The current cell provides header information for the rest of the column that contains it.
- "col"
- |
- ## The header cell provides header information for the rest of the row group that contains it.
- "rowgroup"
- |
- ## The header cell provides header information for the rest of the column group that contains it.
- "colgroup"
- }?
- &
- ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1
- ## ). The value zero (0
- ## ) means that the cell spans all rows from the current row to the last row of the table section (thead
- ## , tbody
- ## , or tfoot
- ## ) in which the cell is defined.
- attribute rowspan { xsd:nonNegativeInteger }?
- &
- ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1
- ## ). The value zero (0
- ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup
- ## ) in which the cell is defined.
- attribute colspan { xsd:nonNegativeInteger }?
-db.html.table.info = db._info.title.forbidden
-db.html.table.model =
- db.html.table.info?,
- db.html.caption,
- (db.html.col* | db.html.colgroup*),
- db.html.thead?,
- db.html.tfoot?,
- (db.html.tbody+ | db.html.tr+)
-db.html.informaltable.info = db._info.title.forbidden
-db.html.informaltable.model =
- db.html.informaltable.info?,
- (db.html.col* | db.html.colgroup*),
- db.html.thead?,
- db.html.tfoot?,
- (db.html.tbody+ | db.html.tr+)
-div {
- db.html.table.role.attribute = attribute role { text }
- db.html.table.label.attribute = db.label.attribute
- db.html.table.attlist =
- db.html.attrs
- & db.html.table.attributes
- & db.html.table.role.attribute?
- & db.html.table.label.attribute?
- & db.orient.attribute?
- & db.pgwide.attribute?
- & db.tabstyle.attribute?
- & db.floatstyle.attribute?
- db.html.table =
-
- ## A formal (captioned) HTML table in a document
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:informaltable)"
- "informaltable must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:table"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of table"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element table { db.html.table.attlist, db.html.table.model }
-}
-div {
- db.html.informaltable.attlist =
- db.html.attrs & db.html.table.attributes
- db.html.informaltable =
-
- ## An HTML table without a title
- element informaltable {
- db.html.informaltable.attlist, db.html.informaltable.model
- }
-}
-div {
- db.html.caption.attlist = db.html.attrs
- db.html.caption =
-
- ## An HTML table caption
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:table)"
- "table must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:sidebar)"
- "sidebar must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:task)"
- "task must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caption"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of caption"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element caption { db.html.caption.attlist, db.all.inlines* }
-}
-div {
- db.html.col.attlist =
- db.html.attrs
- &
- ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned
- ## by the col
- ## element; the col
- ## element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col
- ## element shares its attributes with the next N-1 columns.
- attribute span { xsd:nonNegativeInteger }?
- &
- ## Specifies a default width for each column spanned by the current col
- ## element. It has the same meaning as the width
- ## attribute for the colgroup
- ## element and overrides it.
- attribute width { text }?
- & db.html.cellhalign
- & db.html.cellvalign
- db.html.col =
-
- ## Specifications for a column in an HTML table
- element col { db.html.col.attlist, empty }
-}
-div {
- db.html.colgroup.attlist =
- db.html.attrs
- &
- ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup
- ## defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup
- ## element defines a column group containing N columns. User agents must ignore this attribute if the colgroup
- ## element contains one or more col
- ## elements.
- attribute span { xsd:nonNegativeInteger }?
- &
- ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0*
- ## (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0*
- ## will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col
- ## element.
- attribute width { text }?
- & db.html.cellhalign
- & db.html.cellvalign
- db.html.colgroup =
-
- ## A group of columns in an HTML table
- element colgroup { db.html.colgroup.attlist, db.html.col* }
-}
-div {
- db.html.thead.attlist =
- db.html.attrs & db.html.cellhalign & db.html.cellvalign
- db.html.thead =
-
- ## A table header consisting of one or more rows in an HTML table
- element thead { db.html.thead.attlist, db.html.tr+ }
-}
-div {
- db.html.tfoot.attlist =
- db.html.attrs & db.html.cellhalign & db.html.cellvalign
- db.html.tfoot =
-
- ## A table footer consisting of one or more rows in an HTML table
- element tfoot { db.html.tfoot.attlist, db.html.tr+ }
-}
-div {
- db.html.tbody.attlist =
- db.html.attrs & db.html.cellhalign & db.html.cellvalign
- db.html.tbody =
-
- ## A wrapper for the rows of an HTML table or informal HTML table
- element tbody { db.html.tbody.attlist, db.html.tr+ }
-}
-div {
- db.html.tr.attlist =
- db.html.attrs & db.html.cellhalign & db.html.cellvalign
- db.html.tr =
-
- ## A row in an HTML table
- element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ }
-}
-div {
- db.html.th.attlist =
- db.html.attrs
- & db.html.tablecell.attributes
- & db.html.cellhalign
- & db.html.cellvalign
- db.html.th =
-
- ## A table header entry in an HTML table
- element th {
- db.html.th.attlist, (db.all.inlines* | db.all.blocks*)
- }
-}
-div {
- db.html.td.attlist =
- db.html.attrs
- & db.html.tablecell.attributes
- & db.html.cellhalign
- & db.html.cellvalign
- db.html.td =
-
- ## A table entry in an HTML table
- element td {
- db.html.td.attlist, (db.all.inlines* | db.all.blocks*)
- }
-}
-div {
- db.msgset.role.attribute = attribute role { text }
- db.msgset.attlist =
- db.msgset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgset.info = db._info.title.only
- db.msgset =
-
- ## A detailed set of messages, usually error messages
- element msgset {
- db.msgset.attlist,
- db.msgset.info,
- (db.msgentry+ | db.simplemsgentry+)
- }
-}
-div {
- db.msgentry.role.attribute = attribute role { text }
- db.msgentry.attlist =
- db.msgentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgentry =
-
- ## A wrapper for an entry in a message set
- element msgentry {
- db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan*
- }
-}
-div {
- db.simplemsgentry.role.attribute = attribute role { text }
- db.simplemsgentry.msgaud.attribute =
-
- ## The audience to which the message relevant
- attribute msgaud { text }
- db.simplemsgentry.msgorig.attribute =
-
- ## The origin of the message
- attribute msgorig { text }
- db.simplemsgentry.msglevel.attribute =
-
- ## The level of importance or severity of a message
- attribute msglevel { text }
- db.simplemsgentry.attlist =
- db.simplemsgentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.simplemsgentry.msgaud.attribute?
- & db.simplemsgentry.msgorig.attribute?
- & db.simplemsgentry.msglevel.attribute?
- db.simplemsgentry =
-
- ## A wrapper for a simpler entry in a message set
- element simplemsgentry {
- db.simplemsgentry.attlist, db.msgtext, db.msgexplan+
- }
-}
-div {
- db.msg.role.attribute = attribute role { text }
- db.msg.attlist =
- db.msg.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msg.info = db._info.title.only
- db.msg =
-
- ## A message in a message set
- element msg {
- db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)*
- }
-}
-div {
- db.msgmain.role.attribute = attribute role { text }
- db.msgmain.attlist =
- db.msgmain.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgmain.info = db._info.title.only
- db.msgmain =
-
- ## The primary component of a message in a message set
- element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext }
-}
-div {
- db.msgsub.role.attribute = attribute role { text }
- db.msgsub.attlist =
- db.msgsub.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgsub.info = db._info.title.only
- db.msgsub =
-
- ## A subcomponent of a message in a message set
- element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext }
-}
-div {
- db.msgrel.role.attribute = attribute role { text }
- db.msgrel.attlist =
- db.msgrel.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgrel.info = db._info.title.only
- db.msgrel =
-
- ## A related component of a message in a message set
- element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext }
-}
-div {
- db.msgtext.role.attribute = attribute role { text }
- db.msgtext.attlist =
- db.msgtext.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgtext =
-
- ## The actual text of a message component in a message set
- element msgtext { db.msgtext.attlist, db.all.blocks+ }
-}
-div {
- db.msginfo.role.attribute = attribute role { text }
- db.msginfo.attlist =
- db.msginfo.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msginfo =
-
- ## Information about a message in a message set
- element msginfo {
- db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)*
- }
-}
-div {
- db.msglevel.role.attribute = attribute role { text }
- db.msglevel.attlist =
- db.msglevel.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msglevel =
-
- ## The level of importance or severity of a message in a message set
- element msglevel { db.msglevel.attlist, db._text }
-}
-div {
- db.msgorig.role.attribute = attribute role { text }
- db.msgorig.attlist =
- db.msgorig.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgorig =
-
- ## The origin of a message in a message set
- element msgorig { db.msgorig.attlist, db._text }
-}
-div {
- db.msgaud.role.attribute = attribute role { text }
- db.msgaud.attlist =
- db.msgaud.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgaud =
-
- ## The audience to which a message in a message set is relevant
- element msgaud { db.msgaud.attlist, db._text }
-}
-div {
- db.msgexplan.role.attribute = attribute role { text }
- db.msgexplan.attlist =
- db.msgexplan.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.msgexplan.info = db._info.title.only
- db.msgexplan =
-
- ## Explanatory material relating to a message in a message set
- element msgexplan {
- db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+
- }
-}
-div {
- db.qandaset.role.attribute = attribute role { text }
- db.qandaset.defaultlabel.enumeration =
-
- ## No labels
- "none"
- |
- ## Numeric labels
- "number"
- |
- ## "Q:" and "A:" labels
- "qanda"
- db.qandaset.defaultlabel.attribute =
-
- ## Specifies the default labelling
- attribute defaultlabel { db.qandaset.defaultlabel.enumeration }
- db.qandaset.attlist =
- db.qandaset.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.qandaset.defaultlabel.attribute?
- db.qandaset.info = db._info.title.only
- db.qandaset =
-
- ## A question-and-answer set
- element qandaset {
- db.qandaset.attlist,
- db.qandaset.info,
- db.all.blocks*,
- (db.qandadiv+ | db.qandaentry+)
- }
-}
-div {
- db.qandadiv.role.attribute = attribute role { text }
- db.qandadiv.attlist =
- db.qandadiv.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.qandadiv.info = db._info.title.only
- db.qandadiv =
-
- ## A titled division in a QandASet
- element qandadiv {
- db.qandadiv.attlist,
- db.qandadiv.info,
- db.all.blocks*,
- (db.qandadiv+ | db.qandaentry+)
- }
-}
-div {
- db.qandaentry.role.attribute = attribute role { text }
- db.qandaentry.attlist =
- db.qandaentry.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.qandaentry.info = db._info.title.only
- db.qandaentry =
-
- ## A question/answer set within a QandASet
- element qandaentry {
- db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer*
- }
-}
-div {
- db.question.role.attribute = attribute role { text }
- db.question.attlist =
- db.question.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.question =
-
- ## A question in a QandASet
- element question { db.question.attlist, db.label?, db.all.blocks+ }
-}
-div {
- db.answer.role.attribute = attribute role { text }
- db.answer.attlist =
- db.answer.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.answer =
-
- ## An answer to a question posed in a QandASet
- element answer { db.answer.attlist, db.label?, db.all.blocks+ }
-}
-div {
- db.label.role.attribute = attribute role { text }
- db.label.attlist =
- db.label.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.label =
-
- ## A label on a Question or Answer
- element label { db.label.attlist, db._text }
-}
-db.math.inlines = db.inlineequation
-db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+
-db.inlineequation.content =
- (db.inlinemediaobject+ | db.mathphrase+) | db._any.mml+
-div {
- db.equation.role.attribute = attribute role { text }
- db.equation.label.attribute = db.label.attribute
- db.equation.attlist =
- db.equation.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.equation.label.attribute?
- & db.pgwide.attribute?
- & db.floatstyle.attribute?
- db.equation.info = db._info.title.only
- db.equation =
-
- ## A displayed mathematical equation
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:example)"
- "example must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:figure)"
- "figure must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:table)"
- "table must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:equation)"
- "equation must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:equation"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of equation"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element equation {
- db.equation.attlist,
- db.equation.info,
- db.alt?,
- db.equation.content,
- db.caption?
- }
-}
-div {
- db.informalequation.role.attribute = attribute role { text }
- db.informalequation.attlist =
- db.informalequation.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.informalequation.info = db._info.title.forbidden
- db.informalequation =
-
- ## A displayed mathematical equation without a title
- element informalequation {
- db.informalequation.attlist,
- db.informalequation.info,
- db.alt?,
- db.equation.content,
- db.caption?
- }
-}
-div {
- db.inlineequation.role.attribute = attribute role { text }
- db.inlineequation.attlist =
- db.inlineequation.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.inlineequation =
-
- ## A mathematical equation or expression occurring inline
- element inlineequation {
- db.inlineequation.attlist, db.alt?, db.inlineequation.content
- }
-}
-div {
- db.mathphrase.role.attribute = attribute role { text }
- db.mathphrase.attlist =
- db.mathphrase.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.mathphrase =
-
- ## A mathematical phrase, an expression that can be represented with ordinary text and a small amount of markup
- element mathphrase {
- db.mathphrase.attlist,
- (db._text | db.ubiq.inlines | db._emphasis)*
- }
-}
-div {
- db.imagedata.mathml.role.attribute = attribute role { text }
- db.imagedata.mathml.attlist =
- db.imagedata.mathml.role.attribute?
- & db.common.attributes
- &
- ## Specifies that the format of the data is MathML
- attribute format {
-
- ## Specifies MathML.
- "mathml"
- }?
- & db.imagedata.align.attribute?
- & db.imagedata.valign.attribute?
- & db.imagedata.width.attribute?
- & db.imagedata.contentwidth.attribute?
- & db.imagedata.scalefit.attribute?
- & db.imagedata.scale.attribute?
- & db.imagedata.depth.attribute?
- & db.imagedata.contentdepth.attribute?
- db.imagedata.mathml.info = db._info.title.forbidden
- db.imagedata.mathml =
-
- ## A MathML expression in a media object
- element imagedata {
- db.imagedata.mathml.attlist,
- db.imagedata.mathml.info,
- db._any.mml+
- }
-}
-div {
- db._any.mml =
-
- ## Any element from the MathML namespace
- element mml:* { (db._any.attribute | text | db._any)* }
-}
-div {
- db.imagedata.svg.role.attribute = attribute role { text }
- db.imagedata.svg.attlist =
- db.imagedata.svg.role.attribute?
- & db.common.attributes
- &
- ## Specifies that the format of the data is SVG
- attribute format {
-
- ## Specifies SVG.
- "svg"
- }?
- & db.imagedata.align.attribute?
- & db.imagedata.valign.attribute?
- & db.imagedata.width.attribute?
- & db.imagedata.contentwidth.attribute?
- & db.imagedata.scalefit.attribute?
- & db.imagedata.scale.attribute?
- & db.imagedata.depth.attribute?
- & db.imagedata.contentdepth.attribute?
- db.imagedata.svg.info = db._info.title.forbidden
- db.imagedata.svg =
-
- ## An SVG drawing in a media object
- element imagedata {
- db.imagedata.svg.attlist, db.imagedata.svg.info, db._any.svg+
- }
-}
-div {
- db._any.svg =
-
- ## Any element from the SVG namespace
- element svg:* { (db._any.attribute | text | db._any)* }
-}
-db.markup.inlines =
- db.tag
- | db.markup
- | db.token
- | db.symbol
- | db.literal
- | db.code
- | db.constant
- | db.email
- | db.uri
-div {
- db.markup.role.attribute = attribute role { text }
- db.markup.attlist =
- db.markup.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.markup =
-
- ## A string of formatting markup in text that is to be represented literally
- element markup { db.markup.attlist, db._text }
-}
-div {
- db.tag.role.attribute = attribute role { text }
- db.tag.class.enumeration =
-
- ## An attribute
- "attribute"
- |
- ## An attribute value
- "attvalue"
- |
- ## An element
- "element"
- |
- ## An empty element tag
- "emptytag"
- |
- ## An end tag
- "endtag"
- |
- ## A general entity
- "genentity"
- |
- ## The local name part of a qualified name
- "localname"
- |
- ## A namespace
- "namespace"
- |
- ## A numeric character reference
- "numcharref"
- |
- ## A parameter entity
- "paramentity"
- |
- ## A processing instruction
- "pi"
- |
- ## The prefix part of a qualified name
- "prefix"
- |
- ## An SGML comment
- "comment"
- |
- ## A start tag
- "starttag"
- |
- ## An XML processing instruction
- "xmlpi"
- db.tag.class.attribute =
-
- ## Identifies the nature of the tag content
- attribute class { db.tag.class.enumeration }
- db.tag.namespace.attribute =
-
- ## Identifies the namespace of the tag content
- attribute namespace { xsd:anyURI }
- db.tag.attlist =
- db.tag.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.tag.class.attribute?
- & db.tag.namespace.attribute?
- db.tag =
-
- ## A component of XML (or SGML) markup
- element tag { db.tag.attlist, db._text }
-}
-div {
- db.symbol.class.attribute =
-
- ## Identifies the class of symbol
- attribute class {
-
- ## The value is a limit of some kind
- "limit"
- }
- db.symbol.role.attribute = attribute role { text }
- db.symbol.attlist =
- db.symbol.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.symbol.class.attribute?
- db.symbol =
-
- ## A name that is replaced by a value before processing
- element symbol { db.symbol.attlist, db._text }
-}
-div {
- db.token.role.attribute = attribute role { text }
- db.token.attlist =
- db.token.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.token =
-
- ## A unit of information
- element token { db.token.attlist, db._text }
-}
-div {
- db.literal.role.attribute = attribute role { text }
- db.literal.attlist =
- db.literal.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.literal =
-
- ## Inline text that is some literal value
- element literal { db.literal.attlist, db._text }
-}
-div {
- code.language.attribute =
-
- ## Identifies the (computer) language of the code fragment
- attribute language { text }
- db.code.role.attribute = attribute role { text }
- db.code.attlist =
- db.code.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & code.language.attribute?
- db.code =
-
- ## An inline code fragment
- element code {
- db.code.attlist, (db.programming.inlines | db._text)*
- }
-}
-div {
- db.constant.class.attribute =
-
- ## Identifies the class of constant
- attribute class {
-
- ## The value is a limit of some kind
- "limit"
- }
- db.constant.role.attribute = attribute role { text }
- db.constant.attlist =
- db.constant.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.constant.class.attribute?
- db.constant =
-
- ## A programming or system constant
- element constant { db.constant.attlist, db._text }
-}
-div {
- db.productname.role.attribute = attribute role { text }
- db.productname.class.enumeration =
-
- ## A name with a copyright
- "copyright"
- |
- ## A name with a registered copyright
- "registered"
- |
- ## A name of a service
- "service"
- |
- ## A name which is trademarked
- "trade"
- db.productname.class.attribute =
-
- ## Specifies the class of product name
- attribute class { db.productname.class.enumeration }
- db.productname.attlist =
- db.productname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.productname.class.attribute?
- db.productname =
-
- ## The formal name of a product
- element productname { db.productname.attlist, db._text }
-}
-div {
- db.productnumber.role.attribute = attribute role { text }
- db.productnumber.attlist =
- db.productnumber.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.productnumber =
-
- ## A number assigned to a product
- element productnumber { db.productnumber.attlist, db._text }
-}
-div {
- db.database.class.enumeration =
-
- ## An alternate or secondary key
- "altkey"
- |
- ## A constraint
- "constraint"
- |
- ## A data type
- "datatype"
- |
- ## A field
- "field"
- |
- ## A foreign key
- "foreignkey"
- |
- ## A group
- "group"
- |
- ## An index
- "index"
- |
- ## The first or primary key
- "key1"
- |
- ## An alternate or secondary key
- "key2"
- |
- ## A name
- "name"
- |
- ## The primary key
- "primarykey"
- |
- ## A (stored) procedure
- "procedure"
- |
- ## A record
- "record"
- |
- ## A rule
- "rule"
- |
- ## The secondary key
- "secondarykey"
- |
- ## A table
- "table"
- |
- ## A user
- "user"
- |
- ## A view
- "view"
- db.database.class.attribute =
-
- ## Identifies the class of database artifact
- attribute class { db.database.class.enumeration }
- db.database.role.attribute = attribute role { text }
- db.database.attlist =
- db.database.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.database.class.attribute?
- db.database =
-
- ## The name of a database, or part of a database
- element database { db.database.attlist, db._text }
-}
-div {
- db.application.class.enumeration =
-
- ## A hardware application
- "hardware"
- |
- ## A software application
- "software"
- db.application.class.attribute =
-
- ## Identifies the class of application
- attribute class { db.application.class.enumeration }
- db.application.role.attribute = attribute role { text }
- db.application.attlist =
- db.application.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.application.class.attribute?
- db.application =
-
- ## The name of a software program
- element application { db.application.attlist, db._text }
-}
-div {
- db.hardware.role.attribute = attribute role { text }
- db.hardware.attlist =
- db.hardware.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.hardware =
-
- ## A physical part of a computer system
- element hardware { db.hardware.attlist, db._text }
-}
-db.gui.inlines =
- db.guiicon
- | db.guibutton
- | db.guimenuitem
- | db.guimenu
- | db.guisubmenu
- | db.guilabel
- | db.menuchoice
- | db.mousebutton
-div {
- db.guibutton.role.attribute = attribute role { text }
- db.guibutton.attlist =
- db.guibutton.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.guibutton =
-
- ## The text on a button in a GUI
- element guibutton {
- db.guibutton.attlist,
- (db._text | db.accel | db.superscript | db.subscript)*
- }
-}
-div {
- db.guiicon.role.attribute = attribute role { text }
- db.guiicon.attlist =
- db.guiicon.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.guiicon =
-
- ## Graphic and/or text appearing as a icon in a GUI
- element guiicon {
- db.guiicon.attlist,
- (db._text | db.accel | db.superscript | db.subscript)*
- }
-}
-div {
- db.guilabel.role.attribute = attribute role { text }
- db.guilabel.attlist =
- db.guilabel.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.guilabel =
-
- ## The text of a label in a GUI
- element guilabel {
- db.guilabel.attlist,
- (db._text | db.accel | db.superscript | db.subscript)*
- }
-}
-div {
- db.guimenu.role.attribute = attribute role { text }
- db.guimenu.attlist =
- db.guimenu.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.guimenu =
-
- ## The name of a menu in a GUI
- element guimenu {
- db.guimenu.attlist,
- (db._text | db.accel | db.superscript | db.subscript)*
- }
-}
-div {
- db.guimenuitem.role.attribute = attribute role { text }
- db.guimenuitem.attlist =
- db.guimenuitem.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.guimenuitem =
-
- ## The name of a terminal menu item in a GUI
- element guimenuitem {
- db.guimenuitem.attlist,
- (db._text | db.accel | db.superscript | db.subscript)*
- }
-}
-div {
- db.guisubmenu.role.attribute = attribute role { text }
- db.guisubmenu.attlist =
- db.guisubmenu.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.guisubmenu =
-
- ## The name of a submenu in a GUI
- element guisubmenu {
- db.guisubmenu.attlist,
- (db._text | db.accel | db.superscript | db.subscript)*
- }
-}
-div {
- db.menuchoice.role.attribute = attribute role { text }
- db.menuchoice.attlist =
- db.menuchoice.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.menuchoice =
-
- ## A selection or series of selections from a menu
- element menuchoice {
- db.menuchoice.attlist,
- db.shortcut?,
- (db.guibutton
- | db.guiicon
- | db.guilabel
- | db.guimenu
- | db.guimenuitem
- | db.guisubmenu)+
- }
-}
-div {
- db.mousebutton.role.attribute = attribute role { text }
- db.mousebutton.attlist =
- db.mousebutton.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.mousebutton =
-
- ## The conventional name of a mouse button
- element mousebutton { db.mousebutton.attlist, db._text }
-}
-db.keyboard.inlines =
- db.keycombo
- | db.keycap
- | db.keycode
- | db.keysym
- | db.shortcut
- | db.accel
-div {
- db.keycap.function.enumeration =
-
- ## The "Alt" key
- "alt"
- |
- ## The "Backspace" key
- "backspace"
- |
- ## The "Command" key
- "command"
- |
- ## The "Control" key
- "control"
- |
- ## The "Delete" key
- "delete"
- |
- ## The down arrow
- "down"
- |
- ## The "End" key
- "end"
- |
- ## The "Enter" or "Return" key
- "enter"
- |
- ## The "Escape" key
- "escape"
- |
- ## The "Home" key
- "home"
- |
- ## The "Insert" key
- "insert"
- |
- ## The left arrow
- "left"
- |
- ## The "Meta" key
- "meta"
- |
- ## The "Option" key
- "option"
- |
- ## The page down key
- "pagedown"
- |
- ## The page up key
- "pageup"
- |
- ## The right arrow
- "right"
- |
- ## The "Shift" key
- "shift"
- |
- ## The spacebar
- "space"
- |
- ## The "Tab" key
- "tab"
- |
- ## The up arrow
- "up"
- db.keycap.function-enum.attribute =
-
- ## Identifies the function key
- attribute function { db.keycap.function.enumeration }?
- db.keycap.function-other.attributes =
-
- ## Identifies the function key
- attribute function {
-
- ## Indicates a non-standard function key
- "other"
- }?,
-
- ## Specifies a keyword that identifies the non-standard key
- attribute otherfunction { text }
- db.keycap.function.attrib =
- db.keycap.function-enum.attribute
- | db.keycap.function-other.attributes
- db.keycap.role.attribute = attribute role { text }
- db.keycap.attlist =
- db.keycap.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.keycap.function.attrib
- db.keycap =
-
- ## The text printed on a key on a keyboard
- element keycap { db.keycap.attlist, db._text }
-}
-div {
- db.keycode.role.attribute = attribute role { text }
- db.keycode.attlist =
- db.keycode.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.keycode =
-
- ## The internal, frequently numeric, identifier for a key on a keyboard
- element keycode { db.keycode.attlist, db._text }
-}
-db.keycombination.contentmodel =
- (db.keycap | db.keycombo | db.keysym) | db.mousebutton
-div {
- db.keycombo.action.enumeration =
-
- ## A (single) mouse click.
- "click"
- |
- ## A double mouse click.
- "double-click"
- |
- ## A mouse or key press.
- "press"
- |
- ## Sequential clicks or presses.
- "seq"
- |
- ## Simultaneous clicks or presses.
- "simul"
- db.keycombo.action-enum.attribute =
-
- ## Identifies the nature of the action taken. If keycombo
- ## contains more than one element, simul
- ## is the default, otherwise there is no default.
- attribute action { db.keycombo.action.enumeration }?
- db.keycombo.action-other.attributes =
-
- ## Identifies the nature of the action taken
- attribute action {
-
- ## Indicates a non-standard action
- "other"
- }?,
-
- ## Identifies the non-standard action in some unspecified way.
- attribute otheraction { text }
- db.keycombo.action.attrib =
- db.keycombo.action-enum.attribute
- | db.keycombo.action-other.attributes
- db.keycombo.role.attribute = attribute role { text }
- db.keycombo.attlist =
- db.keycombo.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.keycombo.action.attrib
- db.keycombo =
-
- ## A combination of input actions
- element keycombo {
- db.keycombo.attlist, db.keycombination.contentmodel+
- }
-}
-div {
- db.keysym.role.attribute = attribute role { text }
- db.keysym.attlist =
- db.keysym.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.keysym =
-
- ## The symbolic name of a key on a keyboard
- element keysym { db.keysym.attlist, db._text }
-}
-div {
- db.accel.role.attribute = attribute role { text }
- db.accel.attlist =
- db.accel.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.accel =
-
- ## A graphical user interface (GUI) keyboard shortcut
- element accel { db.accel.attlist, db._text }
-}
-div {
- db.shortcut.action.attrib = db.keycombo.action.attrib
- db.shortcut.role.attribute = attribute role { text }
- db.shortcut.attlist =
- db.shortcut.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.shortcut.action.attrib
- db.shortcut =
-
- ## A key combination for an action that is also accessible through a menu
- element shortcut {
- db.shortcut.attlist, db.keycombination.contentmodel+
- }
-}
-db.os.inlines =
- db.prompt
- | db.envar
- | db.filename
- | db.command
- | db.computeroutput
- | db.userinput
-db.computeroutput.inlines =
- (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines)
- | db.co
- | db.markup.inlines
-db.userinput.inlines =
- (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines)
- | db.co
- | db.markup.inlines
- | db.gui.inlines
- | db.keyboard.inlines
-db.prompt.inlines = db._text | db.co
-div {
- db.prompt.role.attribute = attribute role { text }
- db.prompt.attlist =
- db.prompt.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.prompt =
-
- ## A character or string indicating the start of an input field in a computer display
- element prompt { db.prompt.attlist, db.prompt.inlines* }
-}
-div {
- db.envar.role.attribute = attribute role { text }
- db.envar.attlist =
- db.envar.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.envar =
-
- ## A software environment variable
- element envar { db.envar.attlist, db._text }
-}
-div {
- db.filename.class.enumeration =
-
- ## A device
- "devicefile"
- |
- ## A directory
- "directory"
- |
- ## A filename extension
- "extension"
- |
- ## A header file (as for a programming language)
- "headerfile"
- |
- ## A library file
- "libraryfile"
- |
- ## A partition (as of a hard disk)
- "partition"
- |
- ## A symbolic link
- "symlink"
- db.filename.class.attribute =
-
- ## Identifies the class of filename
- attribute class { db.filename.class.enumeration }
- db.filename.path.attribute =
-
- ## Specifies the path of the filename
- attribute path { text }
- db.filename.role.attribute = attribute role { text }
- db.filename.attlist =
- db.filename.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.filename.path.attribute?
- & db.filename.class.attribute?
- db.filename =
-
- ## The name of a file
- element filename { db.filename.attlist, db._text }
-}
-div {
- db.command.role.attribute = attribute role { text }
- db.command.attlist =
- db.command.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.command =
-
- ## The name of an executable program or other software command
- element command { db.command.attlist, db._text }
-}
-div {
- db.computeroutput.role.attribute = attribute role { text }
- db.computeroutput.attlist =
- db.computeroutput.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.computeroutput =
-
- ## Data, generally text, displayed or presented by a computer
- element computeroutput {
- db.computeroutput.attlist, db.computeroutput.inlines*
- }
-}
-div {
- db.userinput.role.attribute = attribute role { text }
- db.userinput.attlist =
- db.userinput.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.userinput =
-
- ## Data entered by the user
- element userinput { db.userinput.attlist, db.userinput.inlines* }
-}
-div {
- db.cmdsynopsis.role.attribute = attribute role { text }
- db.cmdsynopsis.sepchar.attribute =
-
- ## Specifies the character that should separate the command and its top-level arguments
- attribute sepchar { text }
- db.cmdsynopsis.cmdlength.attribute =
-
- ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line
- attribute cmdlength { text }
- db.cmdsynopsis.label.attribute = db.label.attribute
- db.cmdsynopsis.attlist =
- db.cmdsynopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.cmdsynopsis.sepchar.attribute?
- & db.cmdsynopsis.cmdlength.attribute?
- & db.cmdsynopsis.label.attribute?
- db.cmdsynopsis.info = db._info.title.forbidden
- db.cmdsynopsis =
-
- ## A syntax summary for a software command
- element cmdsynopsis {
- db.cmdsynopsis.attlist,
- db.cmdsynopsis.info,
- (db.command | db.arg | db.group | db.sbr)+,
- db.synopfragment*
- }
-}
-db.rep.enumeration =
-
- ## Can not be repeated.
- "norepeat"
- |
- ## Can be repeated.
- "repeat"
-db.rep.attribute =
-
- ## Indicates whether or not repetition is possible.
- [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration }
-db.choice.enumeration =
-
- ## Formatted to indicate that it is optional.
- "opt"
- |
- ## Formatted without indication.
- "plain"
- |
- ## Formatted to indicate that it is required.
- "req"
-db.choice.opt.attribute =
-
- ## Indicates optionality.
- [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration }
-db.choice.req.attribute =
-
- ## Indicates optionality.
- [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration }
-div {
- db.arg.role.attribute = attribute role { text }
- db.arg.rep.attribute = db.rep.attribute
- db.arg.choice.attribute = db.choice.opt.attribute
- db.arg.attlist =
- db.arg.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.arg.rep.attribute?
- & db.arg.choice.attribute?
- db.arg =
-
- ## An argument in a CmdSynopsis
- element arg {
- db.arg.attlist,
- (db._text
- | db.arg
- | db.group
- | db.option
- | db.synopfragmentref
- | db.sbr)*
- }
-}
-div {
- db.group.role.attribute = attribute role { text }
- db.group.rep.attribute = db.rep.attribute
- db.group.choice.attribute = db.choice.opt.attribute
- db.group.attlist =
- db.group.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.group.rep.attribute?
- & db.group.choice.attribute?
- db.group =
-
- ## A group of elements in a CmdSynopsis
- element group {
- db.group.attlist,
- (db.arg
- | db.group
- | db.option
- | db.synopfragmentref
- | db.replaceable
- | db.sbr)+
- }
-}
-div {
- db.sbr.role.attribute = attribute role { text }
- db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes
- db.sbr =
-
- ## An explicit line break in a command synopsis
- element sbr { db.sbr.attlist, empty }
-}
-div {
- db.synopfragment.role.attribute = attribute role { text }
- db.synopfragment.attlist =
- db.synopfragment.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.synopfragment =
-
- ## A portion of a CmdSynopsis broken out from the main body of the synopsis
- element synopfragment {
- db.synopfragment.attlist, (db.arg | db.group)+
- }
-}
-div {
- db.synopfragmentref.role.attribute = attribute role { text }
- db.synopfragmentref.attlist =
- db.synopfragmentref.role.attribute?
- & db.common.attributes
- & db.linkend.attribute
- db.synopfragmentref =
-
- ## A reference to a fragment of a command synopsis
- [
- s:pattern [
- name = "Synopsis fragment type constraint"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:synopfragmentref"
- "\x{a}" ~
- " "
- s:assert [
- test =
- "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
- "@linkend on synopfragmentref must point to a synopfragment."
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element synopfragmentref { db.synopfragmentref.attlist, text }
-}
-db.programming.inlines =
- db.function
- | db.parameter
- | db.varname
- | db.returnvalue
- | db.type
- | db.classname
- | db.exceptionname
- | db.interfacename
- | db.methodname
- | db.modifier
- | db.initializer
- | db.oo.inlines
-db.oo.inlines = db.ooclass | db.ooexception | db.oointerface
-db.synopsis.blocks =
- (db.funcsynopsis
- | db.classsynopsis
- | db.methodsynopsis
- | db.constructorsynopsis
- | db.destructorsynopsis
- | db.fieldsynopsis)
- | db.cmdsynopsis
-div {
- db.synopsis.role.attribute = attribute role { text }
- db.synopsis.label.attribute = db.label.attribute
- db.synopsis.attlist =
- db.synopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.verbatim.attributes
- & db.synopsis.label.attribute?
- db.synopsis =
-
- ## A general-purpose element for representing the syntax of commands or functions
- element synopsis { db.synopsis.attlist, db.verbatim.contentmodel }
-}
-div {
- db.funcsynopsis.role.attribute = attribute role { text }
- db.funcsynopsis.attlist =
- db.funcsynopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.language.attribute?
- db.funcsynopsis.info = db._info.title.forbidden
- db.funcsynopsis =
-
- ## The syntax summary for a function definition
- element funcsynopsis {
- db.funcsynopsis.attlist,
- db.funcsynopsis.info,
- (db.funcsynopsisinfo | db.funcprototype)+
- }
-}
-div {
- db.funcsynopsisinfo.role.attribute = attribute role { text }
- db.funcsynopsisinfo.attlist =
- db.funcsynopsisinfo.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.verbatim.attributes
- db.funcsynopsisinfo =
-
- ## Information supplementing the FuncDefs of a FuncSynopsis
- element funcsynopsisinfo {
- db.funcsynopsisinfo.attlist, db.verbatim.contentmodel
- }
-}
-div {
- db.funcprototype.role.attribute = attribute role { text }
- db.funcprototype.attlist =
- db.funcprototype.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.funcprototype =
-
- ## The prototype of a function
- element funcprototype {
- db.funcprototype.attlist,
- db.modifier*,
- db.funcdef,
- (db.void | db.varargs | (db.paramdef+, db.varargs?)),
- db.modifier*
- }
-}
-div {
- db.funcdef.role.attribute = attribute role { text }
- db.funcdef.attlist =
- db.funcdef.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.funcdef =
-
- ## A function (subroutine) name and its return type
- element funcdef {
- db.funcdef.attlist, (db._text | db.type | db.function)*
- }
-}
-div {
- db.function.role.attribute = attribute role { text }
- db.function.attlist =
- db.function.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.function =
-
- ## The name of a function or subroutine, as in a programming language
- element function { db.function.attlist, db._text }
-}
-div {
- db.void.role.attribute = attribute role { text }
- db.void.attlist =
- db.void.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.void =
-
- ## An empty element in a function synopsis indicating that the function in question takes no arguments
- element void { db.void.attlist, empty }
-}
-div {
- db.varargs.role.attribute = attribute role { text }
- db.varargs.attlist =
- db.varargs.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.varargs =
-
- ## An empty element in a function synopsis indicating a variable number of arguments
- element varargs { db.varargs.attlist, empty }
-}
-div {
- db.paramdef.role.attribute = attribute role { text }
- db.paramdef.choice.enumeration =
-
- ## Formatted to indicate that it is optional.
- "opt"
- |
- ## Formatted to indicate that it is required.
- "req"
- db.paramdef.choice.attribute =
-
- ## Indicates optionality.
- [ a:defaultValue = "opt" ]
- attribute choice { db.paramdef.choice.enumeration }
- db.paramdef.attlist =
- db.paramdef.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.paramdef.choice.attribute?
- db.paramdef =
-
- ## Information about a function parameter in a programming language
- element paramdef {
- db.paramdef.attlist,
- (db._text
- | db.initializer
- | db.type
- | db.parameter
- | db.funcparams)*
- }
-}
-div {
- db.funcparams.role.attribute = attribute role { text }
- db.funcparams.attlist =
- db.funcparams.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.funcparams =
-
- ## Parameters for a function referenced through a function pointer in a synopsis
- element funcparams { db.funcparams.attlist, db._text }
-}
-div {
- db.classsynopsis.role.attribute = attribute role { text }
- db.classsynopsis.class.enumeration =
-
- ## This is the synopsis of a class
- "class"
- |
- ## This is the synopsis of an interface
- "interface"
- db.classsynopsis.class.attribute =
-
- ## Specifies the nature of the synopsis
- attribute class { db.classsynopsis.class.enumeration }
- db.classsynopsis.attlist =
- db.classsynopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.language.attribute?
- & db.classsynopsis.class.attribute?
- db.classsynopsis =
-
- ## The syntax summary for a class definition
- element classsynopsis {
- db.classsynopsis.attlist,
- db.oo.inlines+,
- (db.classsynopsisinfo
- | db.methodsynopsis
- | db.constructorsynopsis
- | db.destructorsynopsis
- | db.fieldsynopsis)*
- }
-}
-div {
- db.classsynopsisinfo.role.attribute = attribute role { text }
- db.classsynopsisinfo.attlist =
- db.classsynopsisinfo.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.verbatim.attributes
- db.classsynopsisinfo =
-
- ## Information supplementing the contents of a ClassSynopsis
- element classsynopsisinfo {
- db.classsynopsisinfo.attlist, db.verbatim.contentmodel
- }
-}
-div {
- db.ooclass.role.attribute = attribute role { text }
- db.ooclass.attlist =
- db.ooclass.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.ooclass =
-
- ## A class in an object-oriented programming language
- element ooclass {
- db.ooclass.attlist, (db.package | db.modifier)*, db.classname
- }
-}
-div {
- db.oointerface.role.attribute = attribute role { text }
- db.oointerface.attlist =
- db.oointerface.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.oointerface =
-
- ## An interface in an object-oriented programming language
- element oointerface {
- db.oointerface.attlist,
- (db.package | db.modifier)*,
- db.interfacename
- }
-}
-div {
- db.ooexception.role.attribute = attribute role { text }
- db.ooexception.attlist =
- db.ooexception.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.ooexception =
-
- ## An exception in an object-oriented programming language
- element ooexception {
- db.ooexception.attlist,
- (db.package | db.modifier)*,
- db.exceptionname
- }
-}
-db.modifier.xml.space.attribute =
-
- ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example).
- attribute xml:space {
-
- ## Extra whitespace and line breaks must be preserved.
- [
- # Ideally the definition of xml:space used on modifier would be
- # different from the definition used on the verbatim elements. The
- # verbatim elements forbid the use of xml:space="default" which
- # wouldn't be a problem on modifier. But doing that causes the
- # generated XSD schemas to be broken so I'm just reusing the existing
- # definition for now. It won't be backwards incompatible to fix this
- # problem in the future.
- # | ## Extra whitespace and line breaks are not preserved.
- # "default"
-
- ]
- "preserve"
- }
-div {
- db.modifier.role.attribute = attribute role { text }
- db.modifier.attlist =
- db.modifier.xml.space.attribute?
- & db.modifier.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.modifier =
-
- ## Modifiers in a synopsis
- element modifier { db.modifier.attlist, db._text }
-}
-div {
- db.interfacename.role.attribute = attribute role { text }
- db.interfacename.attlist =
- db.interfacename.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.interfacename =
-
- ## The name of an interface
- element interfacename { db.interfacename.attlist, db._text }
-}
-div {
- db.exceptionname.role.attribute = attribute role { text }
- db.exceptionname.attlist =
- db.exceptionname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.exceptionname =
-
- ## The name of an exception
- element exceptionname { db.exceptionname.attlist, db._text }
-}
-div {
- db.fieldsynopsis.role.attribute = attribute role { text }
- db.fieldsynopsis.attlist =
- db.fieldsynopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.language.attribute?
- db.fieldsynopsis =
-
- ## The name of a field in a class definition
- element fieldsynopsis {
- db.fieldsynopsis.attlist,
- db.modifier*,
- db.type?,
- db.varname,
- db.initializer?
- }
-}
-div {
- db.initializer.role.attribute = attribute role { text }
- db.initializer.attlist =
- db.initializer.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.initializer =
-
- ## The initializer for a FieldSynopsis
- element initializer { db.initializer.attlist, db._text }
-}
-div {
- db.constructorsynopsis.role.attribute = attribute role { text }
- db.constructorsynopsis.attlist =
- db.constructorsynopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.language.attribute?
- db.constructorsynopsis =
-
- ## A syntax summary for a constructor
- element constructorsynopsis {
- db.constructorsynopsis.attlist,
- db.modifier*,
- db.methodname?,
- (db.methodparam+ | db.void?),
- db.exceptionname*
- }
-}
-div {
- db.destructorsynopsis.role.attribute = attribute role { text }
- db.destructorsynopsis.attlist =
- db.destructorsynopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.language.attribute?
- db.destructorsynopsis =
-
- ## A syntax summary for a destructor
- element destructorsynopsis {
- db.destructorsynopsis.attlist,
- db.modifier*,
- db.methodname?,
- (db.methodparam+ | db.void?),
- db.exceptionname*
- }
-}
-div {
- db.methodsynopsis.role.attribute = attribute role { text }
- db.methodsynopsis.attlist =
- db.methodsynopsis.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.language.attribute?
- db.methodsynopsis =
-
- ## A syntax summary for a method
- element methodsynopsis {
- db.methodsynopsis.attlist,
- db.modifier*,
- (db.type | db.void)?,
- db.methodname,
- (db.methodparam+ | db.void),
- db.exceptionname*,
- db.modifier*
- }
-}
-div {
- db.methodname.role.attribute = attribute role { text }
- db.methodname.attlist =
- db.methodname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.methodname =
-
- ## The name of a method
- element methodname { db.methodname.attlist, db._text }
-}
-div {
- db.methodparam.role.attribute = attribute role { text }
- db.methodparam.rep.attribute = db.rep.attribute
- db.methodparam.choice.attribute = db.choice.req.attribute
- db.methodparam.attlist =
- db.methodparam.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.methodparam.rep.attribute?
- & db.methodparam.choice.attribute?
- db.methodparam =
-
- ## Parameters to a method
- element methodparam {
- db.methodparam.attlist,
- db.modifier*,
- db.type?,
- ((db.modifier*, db.parameter, db.initializer?) | db.funcparams),
- db.modifier*
- }
-}
-div {
- db.varname.role.attribute = attribute role { text }
- db.varname.attlist =
- db.varname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.varname =
-
- ## The name of a variable
- element varname { db.varname.attlist, db._text }
-}
-div {
- db.returnvalue.role.attribute = attribute role { text }
- db.returnvalue.attlist =
- db.returnvalue.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.returnvalue =
-
- ## The value returned by a function
- element returnvalue { db.returnvalue.attlist, db._text }
-}
-div {
- db.type.role.attribute = attribute role { text }
- db.type.attlist =
- db.type.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.type =
-
- ## The classification of a value
- element type { db.type.attlist, db._text }
-}
-div {
- db.classname.role.attribute = attribute role { text }
- db.classname.attlist =
- db.classname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.classname =
-
- ## The name of a class, in the object-oriented programming sense
- element classname { db.classname.attlist, db._text }
-}
-div {
- db.programlisting.role.attribute = attribute role { text }
- db.programlisting.width.attribute = db.width.characters.attribute
- db.programlisting.attlist =
- db.programlisting.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.verbatim.attributes
- & db.programlisting.width.attribute?
- db.programlisting =
-
- ## A literal listing of all or part of a program
- element programlisting {
- db.programlisting.attlist, db.verbatim.contentmodel
- }
-}
-db.admonition.blocks =
- db.caution | db.important | db.note | db.tip | db.warning
-db.admonition.contentmodel = db._info.title.only, db.all.blocks+
-div {
- db.caution.role.attribute = attribute role { text }
- db.caution.attlist =
- db.caution.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.caution =
-
- ## A note of caution
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caution"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of caution"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caution"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of caution"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caution"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of caution"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caution"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of caution"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:caution"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of caution"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element caution { db.caution.attlist, db.admonition.contentmodel }
-}
-div {
- db.important.role.attribute = attribute role { text }
- db.important.attlist =
- db.important.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.important =
-
- ## An admonition set off from the text
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:important"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of important"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:important"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of important"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:important"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of important"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:important"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of important"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:important"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of important"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element important {
- db.important.attlist, db.admonition.contentmodel
- }
-}
-div {
- db.note.role.attribute = attribute role { text }
- db.note.attlist =
- db.note.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.note =
-
- ## A message set off from the text
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:note"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of note"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:note"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of note"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:note"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of note"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:note"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of note"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:note"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of note"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element note { db.note.attlist, db.admonition.contentmodel }
-}
-div {
- db.tip.role.attribute = attribute role { text }
- db.tip.attlist =
- db.tip.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.tip =
-
- ## A suggestion to the user, set off from the text
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:tip"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of tip"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:tip"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of tip"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:tip"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of tip"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:tip"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of tip"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:tip"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of tip"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element tip { db.tip.attlist, db.admonition.contentmodel }
-}
-div {
- db.warning.role.attribute = attribute role { text }
- db.warning.attlist =
- db.warning.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.warning =
-
- ## An admonition set off from the text
- [
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:warning"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:caution)"
- "caution must not occur in the descendants of warning"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:warning"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:important)"
- "important must not occur in the descendants of warning"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:warning"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:note)"
- "note must not occur in the descendants of warning"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:warning"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:tip)"
- "tip must not occur in the descendants of warning"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- s:pattern [
- name = "Element exclusion"
- "\x{a}" ~
- " "
- s:rule [
- context = "db:warning"
- "\x{a}" ~
- " "
- s:assert [
- test = "not(.//db:warning)"
- "warning must not occur in the descendants of warning"
- ]
- "\x{a}" ~
- " "
- ]
- "\x{a}" ~
- " "
- ]
- ]
- element warning { db.warning.attlist, db.admonition.contentmodel }
-}
-db.error.inlines =
- db.errorcode | db.errortext | db.errorname | db.errortype
-div {
- db.errorcode.role.attribute = attribute role { text }
- db.errorcode.attlist =
- db.errorcode.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.errorcode =
-
- ## An error code
- element errorcode { db.errorcode.attlist, db._text }
-}
-div {
- db.errorname.role.attribute = attribute role { text }
- db.errorname.attlist =
- db.errorname.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.errorname =
-
- ## An error name
- element errorname { db.errorname.attlist, db._text }
-}
-div {
- db.errortext.role.attribute = attribute role { text }
- db.errortext.attlist =
- db.errortext.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.errortext =
-
- ## An error message.
- element errortext { db.errortext.attlist, db._text }
-}
-div {
- db.errortype.role.attribute = attribute role { text }
- db.errortype.attlist =
- db.errortype.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.errortype =
-
- ## The classification of an error message
- element errortype { db.errortype.attlist, db._text }
-}
-db.systemitem.inlines = db._text | db.co
-div {
- db.systemitem.class.enumeration =
-
- ## A daemon or other system process (syslogd)
- "daemon"
- |
- ## A domain name (example.com)
- "domainname"
- |
- ## An ethernet address (00:05:4E:49:FD:8E)
- "etheraddress"
- |
- ## An event of some sort (SIGHUP)
- "event"
- |
- ## An event handler of some sort (hangup)
- "eventhandler"
- |
- ## A filesystem (ext3)
- "filesystem"
- |
- ## A fully qualified domain name (my.example.com)
- "fqdomainname"
- |
- ## A group name (wheel)
- "groupname"
- |
- ## An IP address (127.0.0.1)
- "ipaddress"
- |
- ## A library (libncurses)
- "library"
- |
- ## A macro
- "macro"
- |
- ## A netmask (255.255.255.192)
- "netmask"
- |
- ## A newsgroup (comp.text.xml)
- "newsgroup"
- |
- ## An operating system name (Hurd)
- "osname"
- |
- ## A process (gnome-cups-icon)
- "process"
- |
- ## A protocol (ftp)
- "protocol"
- |
- ## A resource
- "resource"
- |
- ## A server (mail.example.com)
- "server"
- |
- ## A service (ppp)
- "service"
- |
- ## A system name (hephaistos)
- "systemname"
- |
- ## A user name (ndw)
- "username"
- db.systemitem.class.attribute =
-
- ## Identifies the nature of the system item
- attribute class { db.systemitem.class.enumeration }
- db.systemitem.role.attribute = attribute role { text }
- db.systemitem.attlist =
- db.systemitem.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- & db.systemitem.class.attribute?
- db.systemitem =
-
- ## A system-related item or term
- element systemitem { db.systemitem.attlist, db.systemitem.inlines* }
-}
-div {
- db.option.role.attribute = attribute role { text }
- db.option.attlist =
- db.option.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.option =
-
- ## An option for a software command
- element option { db.option.attlist, db._text }
-}
-div {
- db.optional.role.attribute = attribute role { text }
- db.optional.attlist =
- db.optional.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.optional =
-
- ## Optional information
- element optional { db.optional.attlist, db._text }
-}
-div {
- db.property.role.attribute = attribute role { text }
- db.property.attlist =
- db.property.role.attribute?
- & db.common.attributes
- & db.common.linking.attributes
- db.property =
-
- ## A unit of data associated with some part of a computer system
- element property { db.property.attlist, db._text }
-}
-div {
- db.xi.include.attlist =
- attribute href {
- xsd:anyURI { pattern = "[^#]+" }
- }?,
- [ a:defaultValue = "xml" ] attribute parse { "xml" | "text" }?,
- attribute xpointer { text }?,
- attribute encoding { text }?,
- attribute accept { text }?,
- attribute accept-language { text }?
- db.xi.include =
-
- ## An XInclude
- element xi:include { db.xi.include.attlist, db.xi.fallback? }
-}
-div {
- # The fallback element has no attributes
- db.xi.fallback =
-
- ## An XInclude fallback
- element xi:fallback { db.all.blocks+ | db.all.inlines+ | db._any* }
-}
diff --git a/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rng b/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rng
deleted file mode 100644
index 4450a3c07b8f98074121399308cd30124eefaa20..0000000000000000000000000000000000000000
--- a/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rng
+++ /dev/null
@@ -1,15457 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Any attribute including in any attribute in any namespace.
-
-
-
-
-
- Any element from almost any namespace
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Designates the computer or chip architecture to which the element applies
-
-
-
-
- Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users.
-
-
-
-
- provides a standard place for application-specific effectivity
-
-
-
-
- Indicates standards conformance characteristics of the element
-
-
-
-
- Indicates the operating system to which the element is applicable
-
-
-
-
- Indicates the editorial revision to which the element belongs
-
-
-
-
- Indicates something about the security level associated with the element to which it applies
-
-
-
-
- Indicates the level of user experience for which the element applies
-
-
-
-
- Indicates the computer vendor to which the element applies.
-
-
-
-
- Indicates the word size (width in bits) of the computer architecture to which the element applies
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Points to the element whose content is to be used as the text of the link
-
-
-
-
-
- Points to an internal link target by identifying the value of its xml:id attribute
-
-
-
-
-
- Points to one or more internal link targets by identifying the value of their xml:id attributes
-
-
-
-
-
- Identifies a link target with a URI
-
-
-
-
-
- Identifies the XLink link type
- simple
- An XLink simple link
-
-
-
-
- Identifies the XLink role of the link
-
-
-
-
-
- Identifies the XLink arcrole of the link
-
-
-
-
-
-
- Identifies the XLink title of the link
-
-
-
-
-
- new
- An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context.
- replace
- An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded.
- embed
- An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource.
- other
- The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior.
- none
- The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
-
-
-
-
- Identifies the XLink show behavior of the link
-
-
-
-
-
- onLoad
- An application should traverse to the ending resource immediately on loading the starting resource.
- onRequest
- An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal.
- other
- The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior.
- none
- The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
-
-
-
-
- Identifies the XLink actuate behavior of the link
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the unique ID value of the element
-
-
-
-
-
- Specifies the DocBook version of the element and its descendants
-
-
-
-
- Specifies the natural language of the element and its descendants
-
-
-
-
- Specifies the base URI of the element and its descendants
-
-
-
-
-
- Provides the name or similar semantic identifier assigned to the content in some previous markup scheme
-
-
-
-
- Provides the text that is to be generated for a cross reference to the element
-
-
-
-
- Specifies a keyword or keywords identifying additional style information
-
-
-
-
- changed
- The element has been changed.
- added
- The element is new (has been added to the document).
- deleted
- The element has been deleted.
- off
- Explicitly turns off revision markup for this element.
-
-
-
-
- Identifies the revision status of the element
-
-
-
-
-
- ltr
- Left-to-right text
- rtl
- Right-to-left text
- lro
- Left-to-right override
- rlo
- Right-to-left override
-
-
-
-
- Identifies the direction of text in an element
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the format of the data
-
-
-
-
- Indentifies the location of the data by URI
-
-
-
- Identifies the location of the data by external identifier (entity name)
-
-
-
-
-
-
- continues
- Line numbering continues from the immediately preceding element with the same name.
- restarts
- Line numbering restarts (begins at 1, usually).
-
-
-
-
- Determines whether line numbering continues from the previous element or restarts.
-
-
-
-
-
- numbered
- Lines are numbered.
- unnumbered
- Lines are not numbered.
-
-
-
-
- Determines whether lines are numbered.
-
-
-
-
-
- Specifies the initial line number.
-
-
-
-
-
- Identifies the language (i.e. programming language) of the verbatim content.
-
-
-
-
- Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not.
- preserve
- Whitespace must be preserved.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies an identifying string for presentation purposes
-
-
-
-
- Specifies the width (in characters) of the element
-
-
-
-
-
- compact
- The spacing should be "compact".
- normal
- The spacing should be "normal".
-
-
-
-
- Specifies (a hint about) the spacing of the content
-
-
-
-
-
- 0
- The element should be rendered in the current text flow (with the flow column width).
- 1
- The element should be rendered across the full text page.
-
-
-
-
- Indicates if the element is rendered across the column or the page
-
-
-
-
-
- Identifies the language (i.e. programming language) of the content.
-
-
-
-
- optional
- The content describes an optional step or steps.
- required
- The content describes a required step or steps.
-
-
-
-
- Specifies if the content is required or optional.
-
-
-
-
-
- Specifies style information to be used when rendering the float
-
-
-
-
- Specifies the width of the element
-
-
-
-
- Specifies the depth of the element
-
-
-
-
- Specifies the width of the content rectangle
-
-
-
-
- Specifies the depth of the content rectangle
-
-
-
-
- 0
- False (do not scale-to-fit; anamorphic scaling may occur)
- 1
- True (scale-to-fit; anamorphic scaling is forbidden)
-
-
-
-
- Specifies the scaling factor
-
-
-
-
-
- center
- Centered horizontally
- char
- Aligned horizontally on the specified character
- justify
- Fully justified (left and right margins or edges)
- left
- Left aligned
- right
- Right aligned
-
-
-
-
- bottom
- Aligned on the bottom of the region
- middle
- Centered vertically
- top
- Aligned on the top of the region
-
-
-
-
- doi
- A document object identifier.
- isbn
- An international standard book number.
- isrn
- An international standard technical report number (ISO 10444).
- issn
- An international standard serial number.
- libraryofcongress
- A Library of Congress reference number.
- pubsnumber
- A publication number (an internal number or possibly organizational standard).
- uri
- A Uniform Resource Identifier
-
-
-
-
-
- Identifies the kind of bibliographic identifier
-
-
-
-
-
-
- Identifies the nature of the non-standard bibliographic identifier
-
-
-
-
-
-
- Identifies the kind of bibliographic identifier
- other
- Indicates that the identifier is some 'other' kind.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text of the title of a section of a document or of a formal block-level element
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The abbreviation of a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The subtitle of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block with a required title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block with only a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block with only a required title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for information about a component or other block without a title
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the controlled vocabulary used by this set's terms
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of terms describing the subject matter of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies a ranking for this subject relative to other subjects in the same set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- One of a group of terms describing the subject matter of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A term in a group of terms describing the subject matter of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of keywords describing the content of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- One of a set of keywords describing the content of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list of operations to be performed in a well-defined sequence
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for steps that occur within steps in a procedure
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A portion of a document that is isolated from the main narrative flow
-
-
- sidebar must not occur in the descendants of sidebar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A short description or note about a person
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A quotation set off from the main text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The source of a block quote or epigraph
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sect1
- Render as a first-level section
- sect2
- Render as a second-level section
- sect3
- Render as a third-level section
- sect4
- Render as a fourth-level section
- sect5
- Render as a fifth-level section
-
-
-
-
-
- Indicates how the bridge head should be rendered
-
-
-
-
-
-
- Identifies the nature of the non-standard rendering
-
-
-
-
-
-
- Indicates how the bridge head should be rendered
- other
- Identifies a non-standard rendering
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A free-floating heading
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A remark (or comment) intended for presentation in a draft manuscript
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A short inscription at the beginning of a document or component
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the desired footnote mark
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A footnote
-
-
- footnote must not occur in the descendants of footnote
-
-
-
-
- example must not occur in the descendants of footnote
-
-
-
-
- figure must not occur in the descendants of footnote
-
-
-
-
- table must not occur in the descendants of footnote
-
-
-
-
- equation must not occur in the descendants of footnote
-
-
-
-
- indexterm must not occur in the descendants of footnote
-
-
-
-
- sidebar must not occur in the descendants of footnote
-
-
-
-
- task must not occur in the descendants of footnote
-
-
-
-
- epigraph must not occur in the descendants of footnote
-
-
-
-
- caution must not occur in the descendants of footnote
-
-
-
-
- important must not occur in the descendants of footnote
-
-
-
-
- note must not occur in the descendants of footnote
-
-
-
-
- tip must not occur in the descendants of footnote
-
-
-
-
- warning must not occur in the descendants of footnote
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A paragraph with a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A paragraph
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A paragraph that contains only text and inline markup, no block elements
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the type of mark to be used on items in this list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list in which each entry is marked with a bullet or other dingbat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- continues
- Specifies that numbering should begin where the preceding list left off
- restarts
- Specifies that numbering should begin again at 1
-
-
-
-
- Indicates how list numbering should begin relative to the immediately preceding list
-
-
-
-
-
- Specifies the initial line number.
-
-
-
-
-
- ignore
- Specifies that numbering should ignore list nesting
- inherit
- Specifies that numbering should inherit from outer-level lists
-
-
-
-
- Indicates whether or not item numbering should be influenced by list nesting
-
-
-
-
-
- arabic
- Specifies Arabic numeration (1, 2, 3, …)
- upperalpha
- Specifies upper-case alphabetic numeration (A, B, C, …)
- loweralpha
- Specifies lower-case alphabetic numeration (a, b, c, …)
- upperroman
- Specifies upper-case Roman numeration (I, II, III, …)
- lowerroman
- Specifies lower-case Roman numeration (i, ii, iii …)
-
-
-
-
- Indicates the desired numeration
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list in which each entry is marked with a sequentially incremented label
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the keyword for the type of mark that should be used on this
- item, instead of the mark that would be used by default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the elements of a list item
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A segmented list, a list of sets of elements
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of an element of a list item in a segmented list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list item in a segmented list
-
-
- The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An element of a list item in a segmented list
-
-
-
-
-
-
-
-
-
-
-
-
-
- horiz
- A tabular presentation in row-major order.
- vert
- A tabular presentation in column-major order.
- inline
- An inline presentation, usually a comma-delimited list.
-
-
-
-
- Specifies the type of list presentation.
-
-
-
-
-
- Specifies the number of columns for horizontal or vertical presentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An undecorated list of single words or short phrases
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An element of a simple list
-
-
-
-
-
-
-
-
-
-
-
-
-
- Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A list in which each entry is composed of a set of one or more terms and an associated description
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a set of terms and the associated description in a variable list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The word or phrase being defined or described in a variable list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal example, with a title
-
-
- example must not occur in the descendants of example
-
-
-
-
- figure must not occur in the descendants of example
-
-
-
-
- table must not occur in the descendants of example
-
-
-
-
- equation must not occur in the descendants of example
-
-
-
-
- caution must not occur in the descendants of example
-
-
-
-
- important must not occur in the descendants of example
-
-
-
-
- note must not occur in the descendants of example
-
-
-
-
- tip must not occur in the descendants of example
-
-
-
-
- warning must not occur in the descendants of example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A displayed example without a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- monospaced
- The literal layout should be formatted with a monospaced font
- normal
- The literal layout should be formatted with the current font
-
-
-
-
- Specifies the class of literal layout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A block of text in which line breaks and white space are to be reproduced faithfully
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Text that a user sees or might see on a computer screen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A representation of what the user sees or might see on a computer screen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal figure, generally an illustration, with a title
-
-
- example must not occur in the descendants of figure
-
-
-
-
- figure must not occur in the descendants of figure
-
-
-
-
- table must not occur in the descendants of figure
-
-
-
-
- equation must not occur in the descendants of figure
-
-
-
-
- caution must not occur in the descendants of figure
-
-
-
-
- important must not occur in the descendants of figure
-
-
-
-
- note must not occur in the descendants of figure
-
-
-
-
- tip must not occur in the descendants of figure
-
-
-
-
- warning must not occur in the descendants of figure
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the (horizontal) alignment of the image data
-
-
-
-
-
-
-
-
- Specifies the vertical alignment of the image data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Determines if anamorphic scaling is forbidden
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pointer to external image data
-
-
-
-
-
-
-
-
-
-
-
- Identifies the encoding of the text in the external file
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pointer to external text data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A caption
-
-
- example must not occur in the descendants of caption
-
-
-
-
- figure must not occur in the descendants of caption
-
-
-
-
- table must not occur in the descendants of caption
-
-
-
-
- equation must not occur in the descendants of caption
-
-
-
-
- sidebar must not occur in the descendants of caption
-
-
-
-
- task must not occur in the descendants of caption
-
-
-
-
- caution must not occur in the descendants of caption
-
-
-
-
- important must not occur in the descendants of caption
-
-
-
-
- note must not occur in the descendants of caption
-
-
-
-
- tip must not occur in the descendants of caption
-
-
-
-
- warning must not occur in the descendants of caption
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for document meta-information about a conference
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The dates of a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An identifier, frequently numerical, associated with a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The sponsor of a conference for which a document was written
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The contract number of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The sponsor of a contract
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright information about a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The year of publication of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of the individual or organization that holds a copyright
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Additional content for the cover of a publication
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The date of publication or revision of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name or number of an edition of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of the editor of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An identifier for a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A citation of a bibliographic identifier
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The source of a document
-
-
-
-
-
-
-
-
- hasformat
- The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
- haspart
- The described resource includes the referenced resource either physically or logically
- hasversion
- The described resource has a version, edition, or adaptation, namely, the referenced resource
- isformatof
- The described resource is the same intellectual content of the referenced resource, but presented in another format
- ispartof
- The described resource is a physical or logical part of the referenced resource
- isreferencedby
- The described resource is referenced, cited, or otherwise pointed to by the referenced resource
- isreplacedby
- The described resource is supplanted, displaced, or superceded by the referenced resource
- isrequiredby
- The described resource is required by the referenced resource, either physically or logically
- isversionof
- The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
- references
- The described resource references, cites, or otherwise points to the referenced resource
- replaces
- The described resource supplants, displaces, or supersedes the referenced resource
- requires
- The described resource requires the referenced resource to support its function, delivery, or coherence of content
-
-
-
-
-
- Identifies the type of relationship
-
-
-
-
-
-
-
- Identifies the type of relationship
- othertype
- The described resource has a non-standard relationship with the referenced resource
-
-
-
- A keyword that identififes the type of the non-standard relationship
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The relationship of a document to another
-
-
-
-
-
-
-
-
- dcmipoint
- The DCMI Point identifies a point in space using its geographic coordinates
- iso3166
- ISO 3166 Codes for the representation of names of countries
- dcmibox
- The DCMI Box identifies a region of space using its geographic limits
- tgn
- The Getty Thesaurus of Geographic Names
-
-
-
-
-
- Specifies the type of spatial coverage
-
-
-
-
-
-
-
- Specifies the type of spatial coverage
- otherspatial
- Identifies a non-standard type of coverage
-
-
-
- A keyword that identifies the type of non-standard coverage
-
-
-
-
-
-
-
-
-
-
-
- dcmiperiod
- A specification of the limits of a time interval
- w3c-dtf
- W3C Encoding rules for dates and times—a profile based on ISO 8601
-
-
-
-
-
- Specifies the type of temporal coverage
-
-
-
-
-
-
-
- Specifies the type of temporal coverage
- othertemporal
- Specifies a non-standard type of coverage
-
-
-
- A keyword that identifies the type of non-standard coverage
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The spatial or temporal coverage of a document
-
-
-
-
-
-
-
- copyeditor
- A copy editor
- graphicdesigner
- A graphic designer
- other
- Some other contributor
- productioneditor
- A production editor
- technicaleditor
- A technical editor
- translator
- A translator
-
-
-
-
-
- Identifies the nature of the contributor
-
-
-
-
-
-
- Identifies the nature of the non-standard contribution
-
-
-
-
-
-
- Identifies the nature of the contributor
- other
- Identifies a non-standard contribution
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A person or entity, other than an author or editor, credited in a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The numbers of the pages in a book, for use in a bibliographic entry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A summary of the contributions made to a document by a credited source
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a person
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The first name of a person
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A family name; in western cultures the last name
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The portion of a person's name indicating a relationship to ancestors
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A component of a persons name that is not a first name, surname, or lineage
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The printing history of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The date of publication of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The publisher of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of the publisher of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information about a particular release of a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A history of the revisions to a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An entry describing a single revision in the history of the revisions to a document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A comment on a line in a verbatim listing
-
-
-
-
-
-
-
-
- command
- A command
- function
- A function
- option
- An option
-
-
-
-
- Identifies the class of parameter
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A value or a symbolic reference to a value
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- command
- A command
- function
- A function
- option
- An option
- parameter
- A parameter
-
-
-
-
- Identifies the nature of the replaceable text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Content that may or must be replaced by the user
-
-
-
-
-
-
-
-
-
-
-
- Identifies the type of URI specified
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A Uniform Resource Identifier
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An abbreviation, especially one followed by a period
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An often pronounceable word made from the initial (or selected) letters of a name or phrase
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An inline bibliographic reference to another published work
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A citation to a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a reference page
-
-
-
-
-
-
-
-
-
- article
- An article
- bbs
- A bulletin board system
- book
- A book
- cdrom
- A CD-ROM
- chapter
- A chapter (as of a book)
- dvd
- A DVD
- emailmessage
- An email message
- gopher
- A gopher page
- journal
- A journal
- manuscript
- A manuscript
- newsposting
- A posting to a newsgroup
- part
- A part (as of a book)
- refentry
- A reference entry
- section
- A section (as of a book or article)
- series
- A series
- set
- A set (as of books)
- webpage
- A web page
- wiki
- A wiki page
-
-
-
-
- Identifies the nature of the publication being cited
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The title of a cited work
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Holds additional information that may be used by the applicatoin when resolving the link
-
-
-
-
- Specifies the URI of the document in which the link target appears
-
-
-
-
-
- Specifies the location of the link target in the document
-
-
-
-
- Identifies application-specific customization of the link behavior
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A link that addresses its target indirectly
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A spot in the document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A text-only annotation, often used for accessibility
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A collection of books
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The dedication of a book or other component
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Acknowledgements of a book or other component
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Text at the back of a book describing facts about its production
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An appendix in a Book or Article
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A chapter, as of a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A division in a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Introductory matter preceding the first chapter of a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An introduction to the contents of a part
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A recursive section
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A section of a document with no subdivisions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- faq
- A collection of frequently asked questions.
- journalarticle
- An article in a journal or other periodical.
- productsheet
- A description of a product.
- specification
- A specification.
- techreport
- A technical report.
- whitepaper
- A white paper.
-
-
-
-
- Identifies the nature of the article
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An article
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies one or more annotations that apply to this element
-
-
-
-
-
-
-
-
- Identifies one ore more elements to which this annotation applies
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An annotation
-
-
- annotation must not occur in the descendants of annotation
-
-
-
-
-
-
-
-
-
-
-
-
- source
- The name of the software product or component to which this topic applies
- version
- The version of the software product or component to which this topic applies
- manual
- The section title of the reference page (e.g., User Commands)
- sectdesc
- The section title of the reference page (believed synonymous with "manual" but in wide use)
- software
- The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use)
-
-
-
-
-
- Identifies the kind of miscellaneous information
-
-
-
-
-
-
- Identifies the nature of non-standard miscellaneous information
-
-
-
-
-
- Identifies the kind of miscellaneious information
- other
- Indicates that the information is some 'other' kind.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Meta-information for a reference entry other than the title and volume number
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name, purpose, and classification of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A description of the topic of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of (one of) the subject(s) of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A short (one sentence) synopsis of the topic of a reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The scope or other indication of applicability of a reference entry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A syntactic synopsis of the subject of the reference page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A recursive section in a refentry
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A major subsection of a reference entry
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subsection of a refsect1
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subsection of a refsect2
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a list of glossary entries
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the string by which the element's content is to be sorted; if unspecified, the content is used
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An entry in a Glossary or GlossList
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies a list of keywords for the definition
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A definition in a GlossEntry
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the other term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference from one glossentry
- to another
-
-
- @otherterm on glosssee must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the other term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference from one GlossEntry to another
-
-
- @otherterm on glossseealso must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The first occurrence of a term
-
-
- @linkend on firstterm must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A glossary term
-
-
- @linkend on glossterm must point to a glossentry.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A glossary
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a list of bibliography entries
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The units (for example, pages) used to identify the beginning and ending of a reference.
-
-
-
-
-
- Identifies the beginning of a reference; the location within the work that is being referenced.
-
-
-
-
-
- Identifies the end of a reference.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference to a bibliographic entry
-
-
-
-
-
-
-
- normal
- Normal
- preferred
- Preferred
-
-
-
-
- Specifies the significance of the term
-
-
-
-
-
- Specifies the IDs of the elements to which this term applies
-
-
-
-
-
- Indicates the page on which this index term occurs in some version of the printed document
-
-
-
-
- all
- All indexes
- global
- The global index (as for a combined index of a set of box)
- local
- The local index (the index for this document only)
-
-
-
-
- Specifies the scope of the index term
-
-
-
-
-
- Specifies the string by which the term is to be sorted; if unspecified, the term content is used
-
-
-
-
- Specifies the target index for this term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of index terms in the meta-information of a document
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of index term
- singular
- A singular index term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an indexed term
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of index term
- startofrange
- The start of a range
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an indexed term that covers a range
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of index term
- endofrange
- The end of a range
-
-
-
-
- Points to the start of the range
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the end of a range associated with an indexed term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The primary word or phrase under which an index term should be sorted
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A secondary word or phrase in an index term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A tertiary word or phrase in an index term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Part of an index term directing the reader instead to another entry in the index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Part of an index term directing the reader also to another entry in the index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An index to a book or part of a book
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An index to a set of books
-
-
- The root element must have a version attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information related to a task
-
-
-
-
-
-
-
-
-
-
- calspair
- Coordinates expressed as a pair of CALS graphic coordinates.
- linecolumn
- Coordinates expressed as a line and column.
- linecolumnpair
- Coordinates expressed as a pair of lines and columns.
- linerange
- Coordinates expressed as a line range.
-
-
-
-
-
- Identifies the units used in the coords attribute The default units vary according to the type of callout specified: calspair
- for graphics and linecolumn
- for line-oriented elements.
-
-
-
-
-
-
-
- Indicates that non-standard units are used for this area
-. In this case otherunits
- must be specified.
- other
- Coordinates expressed in some non-standard units.
-
-
-
- Identifies the units used in the coords
- attribute when the units
- attribute is other
-. This attribute is forbidden otherwise.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the areas described by this callout.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A called out
- description of a marked Area
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A program listing with associated areas used in callouts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A collection of regions in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Point to the callout
-s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.)
-
-
-
-
-
- Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute.
-
-
-
-
- Provides the coordinates of the area. The coordinates must be interpreted using the units
- specified.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A region defined for a Callout in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A region defined for a Callout in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A set of related areas in a graphic or code example
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A screen with associated areas used in callouts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an image object with callouts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The location of a callout embedded in text
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross reference to a co
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A production in a set of EBNF productions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The left-hand side of an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The right-hand side of an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies a URI that points to a production
-where the nonterminal
- is defined
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A non-terminal in an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A constraint in an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cross-reference to an EBNF production
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The definition of a constraint in an EBNF production
-
-
-
-
-
-
-
-
-
-
- Specifies the alignment character when align
- is set to char
-.
-
-
-
-
- Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char
- when align
- is set to char
-.
-
- 0
- 100
-
-
-
-
-
- Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table.
-
- all
- Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders.
- bottom
- Frame only the bottom of the table.
- none
- Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well.
- sides
- Frame the left and right sides of the table.
- top
- Frame the top of the table.
- topbot
- Frame the top and bottom of the table.
-
-
-
-
-
- Specifies the presence or absence of the column separator
-
- 0
- No column separator rule.
- 1
- Provide a column separator rule on the right
-
-
-
-
-
- Specifies the presence or absence of the row separator
-
- 0
- No row separator rule.
- 1
- Provide a row separator rule below
-
-
-
-
-
- Specifies the orientation of the table
-
- land
- 90 degrees counter-clockwise from the rest of the text flow.
- port
- The same orientation as the rest of the text flow.
-
-
-
-
-
- Specifies the table style
-
-
-
-
- Indicates whether or not the entries in the first column should be considered row headers
-
- firstcol
- Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers).
- norowheader
- Indicates that entries in the first column have no special significance with respect to column headers.
-
-
-
-
-
- Specifies the horizontal alignment of text in an entry.
-
- center
- Centered.
- char
- Aligned on a particular character.
- justify
- Left and right justified.
- left
- Left justified.
- right
- Right justified.
-
-
-
-
-
- Specifies the vertical alignment of text in an entry.
-
- bottom
- Aligned on the bottom of the entry.
- middle
- Aligned in the middle.
- top
- Aligned at the top of the entry.
-
-
-
-
-
- Specifies a column specification by name.
-
-
-
-
- Specifies a starting column by name.
-
-
-
-
- Specifies a span by name.
-
-
-
-
-
- Specifies a starting column by name.
-
-
- Specifies an ending column by name.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Provides a name for a column specification.
-
-
-
-
- Provides a name for a span specification.
-
-
-
-
-
-
-
-
- Additional style information for downstream processing; typically the name of a style.
-
-
-
-
- The number of columns in the table. Must be an integer greater than zero.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the main content of a table, or part of a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one.
-
-
-
-
-
- Specifies the width of the column.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifications for a column in a table
-
-
-
-
-
-
-
-
-
-
-
- Specifies a starting column by name.
-
-
-
-
- Specifies an ending column by name.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Formatting information for a spanned column in a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header consisting of one or more rows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table footer consisting of one or more rows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the rows of a table or informal table
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the number of additional rows which this entry occupies. Defaults to zero.
-
-
-
-
-
- Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated.
-
- 0
- Do not rotate the cell.
- 1
- Rotate the cell 90 degrees counter-clockwise.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A cell in a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Additional style information for downstream processing; typically the name of a style.
-
-
-
-
- The number of columns in the entry table. Must be an integer greater than zero.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subtable appearing in place of an Entry in a table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header consisting of one or more rows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the rows of a table or informal table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Indicates if the short or long title should be used in a List of Tables
-
- 0
- Indicates that the full title should be used.
- 1
- Indicates that the short short title (titleabbrev) should be used.
-
-
-
-
-
- Indicates if the table should appear in a List of Tables
-
- 0
- Indicates that the table should not occur in the List of Tables.
- 1
- Indicates that the table should appear in the List of Tables.
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal table in a document
-
-
- example must not occur in the descendants of table
-
-
-
-
- figure must not occur in the descendants of table
-
-
-
-
- equation must not occur in the descendants of table
-
-
-
-
- informaltable must not occur in the descendants of table
-
-
-
-
- caution must not occur in the descendants of table
-
-
-
-
- important must not occur in the descendants of table
-
-
-
-
- note must not occur in the descendants of table
-
-
-
-
- tip must not occur in the descendants of table
-
-
-
-
- warning must not occur in the descendants of table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters.
-
-
-
-
- This attribute specifies style information for the current element.
-
-
-
-
- This attribute offers advisory information about the element for which it is set.
-
-
-
-
-
-
-
- This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown.
-
-
-
-
-
-
-
- Occurs when the pointing device button is clicked over an element.
-
-
-
-
- Occurs when the pointing device button is double clicked over an element.
-
-
-
-
- Occurs when the pointing device button is pressed over an element.
-
-
-
-
- Occurs when the pointing device button is released over an element.
-
-
-
-
- Occurs when the pointing device is moved onto an element.
-
-
-
-
- Occurs when the pointing device is moved while it is over an element.
-
-
-
-
- Occurs when the pointing device is moved away from an element.
-
-
-
-
- Occurs when a key is pressed and released over an element.
-
-
-
-
- Occurs when a key is pressed down over an element.
-
-
-
-
- Occurs when a key is released over an element.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the alignment of data and the justification of text in a cell.
-
- left
- Left-flush data/Left-justify text. This is the default value for table data.
- center
- Center data/Center-justify text. This is the default value for table headers.
- right
- Right-flush data/Right-justify text.
- justify
- Double-justify text.
- char
- Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified.
-
-
-
-
-
- This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute.
-
-
-
-
- When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute.
-
-
-
- [0-9]+%
-
-
-
-
-
-
-
-
-
- Specifies the vertical position of data within a cell.
-
- top
- Cell data is flush with the top of the cell.
- middle
- Cell data is centered vertically within the cell. This is the default value.
- bottom
- Cell data is flush with the bottom of the cell.
- baseline
- All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells.
-
-
-
-
-
-
-
-
- Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille.
-
-
-
-
- Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent.
-
-
-
- [0-9]+%
-
-
-
-
-
-
- Specifies the width (in pixels only) of the frame around a table.
-
-
-
-
-
- Specifies which sides of the frame surrounding a table will be visible.
-
- void
- No sides. This is the default value.
- above
- The top side only.
- below
- The bottom side only.
- hsides
- The top and bottom sides only.
- lhs
- The left-hand side only.
- rhs
- The right-hand side only.
- vsides
- The right and left sides only.
- box
- All four sides.
- border
- All four sides.
-
-
-
-
-
- Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent.
-
- none
- No rules. This is the default value.
- groups
- Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only.
- rows
- Rules will appear between rows only.
- cols
- Rules will appear between columns only.
- all
- Rules will appear between all rows and columns.
-
-
-
-
-
- Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells.
-
-
-
- [0-9]+%
-
-
-
-
-
-
- Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space.
-
-
-
- [0-9]+%
-
-
-
-
-
-
-
-
-
-
- Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content.
-
-
-
-
- This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details.
-
-
-
-
- Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets.
-
-
-
-
- Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables.
-
- row
- The current cell provides header information for the rest of the row that contains it
- col
- The current cell provides header information for the rest of the column that contains it.
- rowgroup
- The header cell provides header information for the rest of the row group that contains it.
- colgroup
- The header cell provides header information for the rest of the column group that contains it.
-
-
-
-
-
- Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1
-). The value zero (0
-) means that the cell spans all rows from the current row to the last row of the table section (thead
-, tbody
-, or tfoot
-) in which the cell is defined.
-
-
-
-
-
- Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1
-). The value zero (0
-) means that the cell spans all columns from the current column to the last column of the column group (colgroup
-) in which the cell is defined.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A formal (captioned) HTML table in a document
-
-
- example must not occur in the descendants of table
-
-
-
-
- figure must not occur in the descendants of table
-
-
-
-
- equation must not occur in the descendants of table
-
-
-
-
- informaltable must not occur in the descendants of table
-
-
-
-
- caution must not occur in the descendants of table
-
-
-
-
- important must not occur in the descendants of table
-
-
-
-
- note must not occur in the descendants of table
-
-
-
-
- tip must not occur in the descendants of table
-
-
-
-
- warning must not occur in the descendants of table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An HTML table without a title
-
-
-
-
-
-
-
-
-
-
-
- An HTML table caption
-
-
- example must not occur in the descendants of caption
-
-
-
-
- figure must not occur in the descendants of caption
-
-
-
-
- table must not occur in the descendants of caption
-
-
-
-
- equation must not occur in the descendants of caption
-
-
-
-
- sidebar must not occur in the descendants of caption
-
-
-
-
- task must not occur in the descendants of caption
-
-
-
-
- caution must not occur in the descendants of caption
-
-
-
-
- important must not occur in the descendants of caption
-
-
-
-
- note must not occur in the descendants of caption
-
-
-
-
- tip must not occur in the descendants of caption
-
-
-
-
- warning must not occur in the descendants of caption
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This attribute, whose value must be an integer > 0, specifies the number of columns spanned
- by the col
- element; the col
- element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col
- element shares its attributes with the next N-1 columns.
-
-
-
-
-
- Specifies a default width for each column spanned by the current col
- element. It has the same meaning as the width
- attribute for the colgroup
- element and overrides it.
-
-
-
-
-
-
-
-
- Specifications for a column in an HTML table
-
-
-
-
-
-
-
-
-
-
-
- This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup
- defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup
- element defines a column group containing N columns. User agents must ignore this attribute if the colgroup
- element contains one or more col
- elements.
-
-
-
-
-
- This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0*
- (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0*
- will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col
- element.
-
-
-
-
-
-
-
-
- A group of columns in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header consisting of one or more rows in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table footer consisting of one or more rows in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for the rows of an HTML table or informal HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A row in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table header entry in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A table entry in an HTML table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A detailed set of messages, usually error messages
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for an entry in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The audience to which the message relevant
-
-
-
-
- The origin of the message
-
-
-
-
- The level of importance or severity of a message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A wrapper for a simpler entry in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The primary component of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A subcomponent of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A related component of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The actual text of a message component in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information about a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The level of importance or severity of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The origin of a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The audience to which a message in a message set is relevant
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Explanatory material relating to a message in a message set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A displayed mathematical equation
-
-
- example must not occur in the descendants of equation
-
-
-
-
- figure must not occur in the descendants of equation
-
-
-
-
- table must not occur in the descendants of equation
-
-
-
-
- equation must not occur in the descendants of equation
-
-
-
-
- caution must not occur in the descendants of equation
-
-
-
-
- important must not occur in the descendants of equation
-
-
-
-
- note must not occur in the descendants of equation
-
-
-
-
- tip must not occur in the descendants of equation
-
-
-
-
- warning must not occur in the descendants of equation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A displayed mathematical equation without a title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A mathematical phrase, an expression that can be represented with ordinary text and a small amount of markup
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies that the format of the data is MathML
- mathml
- Specifies MathML.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A MathML expression in a media object
-
-
-
-
-
-
-
-
-
-
-
- Any element from the MathML namespace
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies that the format of the data is SVG
- svg
- Specifies SVG.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An SVG drawing in a media object
-
-
-
-
-
-
-
-
-
-
-
- Any element from the SVG namespace
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A string of formatting markup in text that is to be represented literally
-
-
-
-
-
-
-
-
-
-
-
- attribute
- An attribute
- attvalue
- An attribute value
- element
- An element
- emptytag
- An empty element tag
- endtag
- An end tag
- genentity
- A general entity
- localname
- The local name part of a qualified name
- namespace
- A namespace
- numcharref
- A numeric character reference
- paramentity
- A parameter entity
- pi
- A processing instruction
- prefix
- The prefix part of a qualified name
- comment
- An SGML comment
- starttag
- A start tag
- xmlpi
- An XML processing instruction
-
-
-
-
- Identifies the nature of the tag content
-
-
-
-
-
- Identifies the namespace of the tag content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A component of XML (or SGML) markup
-
-
-
-
-
-
-
-
- Identifies the class of symbol
- limit
- The value is a limit of some kind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A name that is replaced by a value before processing
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A unit of information
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Inline text that is some literal value
-
-
-
-
-
-
-
-
- Identifies the (computer) language of the code fragment
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An inline code fragment
-
-
-
-
-
-
-
-
-
-
-
-
-
- Identifies the class of constant
- limit
- The value is a limit of some kind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A programming or system constant
-
-
-
-
-
-
-
-
-
-
-
- copyright
- A name with a copyright
- registered
- A name with a registered copyright
- service
- A name of a service
- trade
- A name which is trademarked
-
-
-
-
- Specifies the class of product name
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The formal name of a product
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A number assigned to a product
-
-
-
-
-
-
-
-
- altkey
- An alternate or secondary key
- constraint
- A constraint
- datatype
- A data type
- field
- A field
- foreignkey
- A foreign key
- group
- A group
- index
- An index
- key1
- The first or primary key
- key2
- An alternate or secondary key
- name
- A name
- primarykey
- The primary key
- procedure
- A (stored) procedure
- record
- A record
- rule
- A rule
- secondarykey
- The secondary key
- table
- A table
- user
- A user
- view
- A view
-
-
-
-
- Identifies the class of database artifact
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a database, or part of a database
-
-
-
-
-
-
-
-
- hardware
- A hardware application
- software
- A software application
-
-
-
-
- Identifies the class of application
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a software program
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A physical part of a computer system
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text on a button in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Graphic and/or text appearing as a icon in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text of a label in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a menu in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a terminal menu item in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a submenu in a GUI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A selection or series of selections from a menu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The conventional name of a mouse button
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- alt
- The "Alt" key
- backspace
- The "Backspace" key
- command
- The "Command" key
- control
- The "Control" key
- delete
- The "Delete" key
- down
- The down arrow
- end
- The "End" key
- enter
- The "Enter" or "Return" key
- escape
- The "Escape" key
- home
- The "Home" key
- insert
- The "Insert" key
- left
- The left arrow
- meta
- The "Meta" key
- option
- The "Option" key
- pagedown
- The page down key
- pageup
- The page up key
- right
- The right arrow
- shift
- The "Shift" key
- space
- The spacebar
- tab
- The "Tab" key
- up
- The up arrow
-
-
-
-
-
- Identifies the function key
-
-
-
-
-
-
-
- Identifies the function key
- other
- Indicates a non-standard function key
-
-
-
- Specifies a keyword that identifies the non-standard key
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The text printed on a key on a keyboard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The internal, frequently numeric, identifier for a key on a keyboard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- click
- A (single) mouse click.
- double-click
- A double mouse click.
- press
- A mouse or key press.
- seq
- Sequential clicks or presses.
- simul
- Simultaneous clicks or presses.
-
-
-
-
-
- Identifies the nature of the action taken. If keycombo
- contains more than one element, simul
- is the default, otherwise there is no default.
-
-
-
-
-
-
-
- Identifies the nature of the action taken
- other
- Indicates a non-standard action
-
-
-
- Identifies the non-standard action in some unspecified way.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A combination of input actions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The symbolic name of a key on a keyboard
-
-
-
-
-
-
-
- devicefile
- A device
- directory
- A directory
- extension
- A filename extension
- headerfile
- A header file (as for a programming language)
- libraryfile
- A library file
- partition
- A partition (as of a hard disk)
- symlink
- A symbolic link
-
-
-
-
- Identifies the class of filename
-
-
-
-
-
- Specifies the path of the filename
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a file
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of an executable program or other software command
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data, generally text, displayed or presented by a computer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Data entered by the user
-
-
-
-
-
-
-
-
-
-
-
-
-
- Specifies the character that should separate the command and its top-level arguments
-
-
-
-
- Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A syntax summary for a software command
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- norepeat
- Can not be repeated.
- repeat
- Can be repeated.
-
-
-
-
- Indicates whether or not repetition is possible.
-
-
-
-
-
- opt
- Formatted to indicate that it is optional.
- plain
- Formatted without indication.
- req
- Formatted to indicate that it is required.
-
-
-
-
- Indicates optionality.
-
-
-
-
-
- Indicates optionality.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A group of elements in a CmdSynopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An explicit line break in a command synopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A portion of a CmdSynopsis broken out from the main body of the synopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A reference to a fragment of a command synopsis
-
-
- @linkend on synopfragmentref must point to a synopfragment.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A function (subroutine) name and its return type
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a function or subroutine, as in a programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An empty element in a function synopsis indicating that the function in question takes no arguments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An empty element in a function synopsis indicating a variable number of arguments
-
-
-
-
-
-
-
-
-
-
-
- opt
- Formatted to indicate that it is optional.
- req
- Formatted to indicate that it is required.
-
-
-
-
- Indicates optionality.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information about a function parameter in a programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Parameters for a function referenced through a function pointer in a synopsis
-
-
-
-
-
-
-
-
-
-
-
- class
- This is the synopsis of a class
- interface
- This is the synopsis of an interface
-
-
-
-
- Specifies the nature of the synopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The syntax summary for a class definition
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Information supplementing the contents of a ClassSynopsis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A class in an object-oriented programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An interface in an object-oriented programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An exception in an object-oriented programming language
-
-
-
-
-
-
-
-
-
-
-
-
-
- Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example).
- preserve
- Extra whitespace and line breaks must be preserved.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a variable
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The value returned by a function
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The classification of a value
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of a class, in the object-oriented programming sense
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A literal listing of all or part of a program
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A note of caution
-
-
- caution must not occur in the descendants of caution
-
-
-
-
- important must not occur in the descendants of caution
-
-
-
-
- note must not occur in the descendants of caution
-
-
-
-
- tip must not occur in the descendants of caution
-
-
-
-
- warning must not occur in the descendants of caution
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An admonition set off from the text
-
-
- caution must not occur in the descendants of important
-
-
-
-
- important must not occur in the descendants of important
-
-
-
-
- note must not occur in the descendants of important
-
-
-
-
- tip must not occur in the descendants of important
-
-
-
-
- warning must not occur in the descendants of important
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A message set off from the text
-
-
- caution must not occur in the descendants of note
-
-
-
-
- important must not occur in the descendants of note
-
-
-
-
- note must not occur in the descendants of note
-
-
-
-
- tip must not occur in the descendants of note
-
-
-
-
- warning must not occur in the descendants of note
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A suggestion to the user, set off from the text
-
-
- caution must not occur in the descendants of tip
-
-
-
-
- important must not occur in the descendants of tip
-
-
-
-
- note must not occur in the descendants of tip
-
-
-
-
- tip must not occur in the descendants of tip
-
-
-
-
- warning must not occur in the descendants of tip
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An admonition set off from the text
-
-
- caution must not occur in the descendants of warning
-
-
-
-
- important must not occur in the descendants of warning
-
-
-
-
- note must not occur in the descendants of warning
-
-
-
-
- tip must not occur in the descendants of warning
-
-
-
-
- warning must not occur in the descendants of warning
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The classification of an error message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- daemon
- A daemon or other system process (syslogd)
- domainname
- A domain name (example.com)
- etheraddress
- An ethernet address (00:05:4E:49:FD:8E)
- event
- An event of some sort (SIGHUP)
- eventhandler
- An event handler of some sort (hangup)
- filesystem
- A filesystem (ext3)
- fqdomainname
- A fully qualified domain name (my.example.com)
- groupname
- A group name (wheel)
- ipaddress
- An IP address (127.0.0.1)
- library
- A library (libncurses)
- macro
- A macro
- netmask
- A netmask (255.255.255.192)
- newsgroup
- A newsgroup (comp.text.xml)
- osname
- An operating system name (Hurd)
- process
- A process (gnome-cups-icon)
- protocol
- A protocol (ftp)
- resource
- A resource
- server
- A server (mail.example.com)
- service
- A service (ppp)
- systemname
- A system name (hephaistos)
- username
- A user name (ndw)
-
-
-
-
- Identifies the nature of the system item
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A system-related item or term
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An option for a software command
-
-
-
-
-
Note: This
- document lists changes only since the 1.76.0 release.
- If you instead want a record of the complete list of
- changes for the codebase over its entire history, you
- can obtain one by running the following commands:
-
-
The following changes have been made to the
- extensions code
- since the 1.76.0 release.
David Cramer: Makefile
More webhelp refactoring
David Cramer: Makefile
Refactoring webhelp to separate more cleanly the xsl and java code.
-
diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS.xml b/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS.xml
deleted file mode 100644
index 8cc04e6da30d76421ad9147b189874256caf36d6..0000000000000000000000000000000000000000
--- a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
-Note: This
- document lists changes only since the 1.76.0 release.
- If you instead want a record of the complete list of
- changes for the codebase over its entire history, you
- can obtain one by running the following commands:
-
-svn checkout https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/xsl
- svn log --xml --verbose xsl > ChangeHistory.xml
-
-Changes since the 1.76.0 release
-
-
-Release Notes: 1.76.1
-The following is a list of changes that have been made
- since the 1.76.0 release.
-
-
-Common
-The following changes have been made to the
- common code
- since the 1.76.0 release.
-
-
-Mauritz Jeanson: MakefileAdded eu.xml and gl.xml to SOURCES.
-
-
-Jirka Kosek: l10n.xslFixed bug when context was lost due to usage of xsl:key
-
-
-
-
-
-FO
-The following changes have been made to the
- fo code
- since the 1.76.0 release.
-
-
-Robert Stayton: docbook.xsl; xref.xsl; fop1.xslApply patch to support named destination in fop1.xsl, per Sourceforge
-bug report #3029845.
-
-
-dleidert: pagesetup.xslRemove the namespace mistakingly added with the last upload.
-
-
-
-
-
-HTML
-The following changes have been made to the
- html code
- since the 1.76.0 release.
-
-
-Keith Fahlgren: highlight.xslImplementing handling for <b> and <i>: transform to <strong> and <em> for XHTML outputs and do not use in the highliting output (per Mauritz Jeanson)
-
-
-
-
-
-Epub
-The following changes have been made to the
- epub code
- since the 1.76.0 release.
-
-
-Keith Fahlgren: docbook.xslBugfix for [#3071521] to ensure that NCX navPoints are generated for d:book root nodes with the -NS version of the stylesheets
-
-
-Keith Fahlgren: docbook.xslRemove unused NCX metadata elements
-
-
-Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl; bin/spec/files/test_cust.x⋯Normalizing identifier lookup between NCX and OPF
-
-
-Keith Fahlgren: bin/dbtoepubReduce logging verbosity
-
-
-Keith Fahlgren: bin/dbtoepub; bin/lib/docbook.rbOnly copy images once for the DocBook to EPUB tool to correct Windows bug reported in [#3065489]
-
-
-
-
-
-Webhelp
-The following changes have been made to the
- webhelp code
- since the 1.76.0 release.
-
-
-David Cramer: indexerMore webhelp indexer refactoring
-
-
-David Cramer: build.xmlRemoved cruft from before webhelp indexer refactoring
-
-
-David Cramer: indexer/srcRefactoring webhelp to separate more cleanly the xsl and java code.
-
-
-David Cramer: indexer/libRefactoring webhelp to separate more cleanly the xsl and java code.
-
-
-David Cramer: Makefile; build.xmlRefactoring webhelp to separate more cleanly the xsl and java code.
-
-
-David Cramer: indexer/src/com/nexwave/nquindexer/IndexerTask.java; build.xml; indexer/src/⋯Merged in changes from webhelp branch to address issue #3058244 regarding the xx.html temp file that was being created
-
-
-
-
-
-Params
-The following changes have been made to the
- params code
- since the 1.76.0 release.
-
-
-Robert Stayton: draft.mode.xmlChange default for draft.mode to 'no'.
-
-
-
-
-
-Extensions
-The following changes have been made to the
- extensions code
- since the 1.76.0 release.
-
-
-David Cramer: MakefileMore webhelp refactoring
-
-
-David Cramer: MakefileRefactoring webhelp to separate more cleanly the xsl and java code.
-
-
-
-
-
-
-
diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html b/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html
deleted file mode 100644
index 556bd67a724efea2a26f2692d4161e1368689011..0000000000000000000000000000000000000000
--- a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html
+++ /dev/null
@@ -1,8353 +0,0 @@
-Release Notes for the DocBook XSL Stylesheets
This release-notes
- document is available in the following formats:
- HTML,
- PDF,
- plain text; it provides a per-release list
-of enhancements and changes to the stylesheets’ public APIs
-(user-configurable parameters) and excludes descriptions of most
-bug fixes. For a complete list of all changes (including all bug
-fixes) that have been made since the previous release, see the
-separate NEWS (plain text) or NEWS.html files. Also available:
-An online hyperlinked change history (warning: big file) of all
-changes made over the entire history of the codebase.
-
-
As with all DocBook Project “dot
- one plus” releases, this release aspires to be stable (in
- contrast to dot-zero releases, which
- are experimental).
This release includes important bug fixes and adds the following
-significant feature changes:
-
Webhelp
A new browser-based, cross-platform help format with full-text search and other features typically found in help systems. See webhelp/docs/content/ch01.html for more information and a demo.
Gentext
Many updates and additions to translation/locales thanks to Red Hat, the Fedora Project, and other contributors.
Common
Faster localization support, as language files are loaded on demand.
- Refactored localization support. Language files are loaded on demand. Speedup is about 30%.
-
-
-
- Jirka Kosek: l10n.xsl
-
-
- Added xsl:keys for improved performance of localization texts look up. Performance gain around 15%.
-
-
-
- Mauritz Jeanson: titles.xsl
-
-
- Fixed bug #2912677 (error with xref in title).
-
-
-
- Robert Stayton: olink.xsl
-
-
- Fix bug in xrefstyle "title" handling introduced with
-the 'insert.targetdb.data' template.
-
-
-
- Robert Stayton: gentext.xsl
-
-
- Fix bug in xref to equation without title to use context="xref-number" instead
-of "xref-number-and-title".
-
-
-
- Robert Stayton: labels.xsl
-
-
- Number all equations in one sequence, with or without title.
-
-
-
- Robert Stayton: entities.ent
-
-
- Fix bug #2896909 where duplicate @sortas on indexterms caused
-some indexterms to drop out of index.
-
-
-
- Robert Stayton: stripns.xsl
-
-
- Expand the "Stripping namespace ..." message to advise users to
-use the namespaced stylesheets.
-
-
-
- Robert Stayton: stripns.xsl
-
-
- need a local version of $exsl.node.set.available variable because
-this module imported many places.
-
-
-
- Mauritz Jeanson: olink.xsl
-
-
- Added /node() to the select expression that is used to compute the title text
-so that no <ttl> elements end up in the output. Closes bug #2830119.
-
-
-
-
-
FO
-
-
The following changes have been made to the
- fo code
- since the 1.75.2 release.
-
-
- Robert Stayton: table.xsl
-
-
- Fix bug 2979166 able - Attribute @rowheader not working
-
-
-
- Mauritz Jeanson: inline.xsl
-
-
- Improved glossterm auto-linking by using keys. The old code was inefficient when processing documents
-with many inline glossterms.
-
- Added table-layout="fixed" on segmentedlisttable (required by XSL spec when proportional-column-width() is used).
-
-
-
- Jirka Kosek: autoidx-kosek.xsl
-
-
- Upgraded to use common entities. Fixed bug when some code used @sortas and some not for grouping/sorting of indexterms.
-
-
-
- Jirka Kosek: index.xsl
-
-
- Upgraded to use common entities. Fixed bug when some code used @sortas and some not for grouping/sorting of indexterms.
-
-
-
- Robert Stayton: xref.xsl
-
-
- Fix bug in olink template when an olink has an id.
-Add warning message with id value when trying to link
-to an element that has no generated text.
-
-
-
- Mauritz Jeanson: refentry.xsl
-
-
- Fixed bug #2930968 (indexterm in refmeta not handled correctly).
-
-
-
- Robert Stayton: block.xsl
-
-
- fix bug 2949567 title in revhistory breaks FO transform.
-
-
-
- Robert Stayton: glossary.xsl
-
-
- Output id attributes on glossdiv blocks so they can be added to
-xrefs or TOC.
-
-
-
- Jirka Kosek: xref.xsl
-
-
- Enabled hyphenation of URLs when ulink content is the same as link target
-
-
-
- Robert Stayton: table.xsl
-
-
- Apply patch to turn off row recursion if no @morerows attributes present.
-This will enable very large tables without row spanning to
-process without running into recursion limits.
-
- Row recursion turned off if no @morerows attributes in the table.
-This will prevent failure on long table (with no @morerows) due
-to excessive depth of recursion.
-
- Updated the template for footnote paras to use the 'paragraph' template. Closes bug #2803739.
-
-
-
- Keith Fahlgren: inline.xsl; lists.xsl
-
-
- Remove <b> and <i> elements "discouraged in favor of style sheets" from
-XHTML, XHTML 1.1 (and therefore EPUB) outputs by changing html2xhtml.xsl.
-
-Fixes bug #2873153: No <b> and <i> tags in XHTML/EPUB
-
-Added regression to EPUB specs:
-
-
-
- Mauritz Jeanson: inline.xsl
-
-
- Fixed bug #2844916 (don't output @target if ulink.target is empty).
-
-
-
- Keith Fahlgren: autoidx.xsl
-
-
- Fix a bug when using index.on.type: an 'index symbols' section was created
-even if that typed index didn't include any symbols (they were in the other types).
-
-
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.75.2 release.
-
-
- Mauritz Jeanson: other.xsl
-
-
- Modified the write.stubs template so that the section directory name is not output twice. Should fix bug #2831602.
-Also ensured that $lang is added to the .so path (when man.output.lang.in.name.enabled=1).
-
-
-
- Mauritz Jeanson: docbook.xsl; other.xsl
-
-
- Fixed bug #2412738 (apostrophe escaping) by applying the submitted patch.
-
-
-
- Norman Walsh: block.xsl; endnotes.xsl
-
-
- Fix bug where simpara in footnote didn't work. Patch by Jonathan Nieder, jrnieder@gmail.com
-
-
-
- dleidert: lists.xsl
-
-
- Fix two indentation issues: In the first case there is no corresponding .RS
-macro (Debian #519438, sf.net 2793873). In the second case an .RS instead of
-the probably intended .sp leads to an indentation bug (Debian #527309,
-sf.net #2642139).
-
-
-
-
-
Epub
-
-
The following changes have been made to the
- epub code
- since the 1.75.2 release.
-
-
- Keith Fahlgren: bin/spec/examples/AMasqueOfDays.epub; docbook.xsl; bin/spec/epub_spec.rb
-
-
- Resolve some actual regressions in date output spotted by more recent versions of epubcheck
-
-
-
- Keith Fahlgren: docbook.xsl
-
-
- Updated mediaobject selection code that better uses roles (when available); based on contributons by Glenn McDonald
-
-
-
- Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl
-
-
- Ensure that NCX documents are always outputted with a default namespace
-to prevent problems with the kindlegen machinery
-
-
-
- Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/partintro.xml; docbook.x⋯
-
-
- Adding support for partintros with sect2s, 3s, etc
-
-
-
- Keith Fahlgren: docbook.xsl
-
-
- Adding param to workaround horrific ADE bug with the inability to process <br>
-
-
-
- Keith Fahlgren: docbook.xsl
-
-
- Add support for authorgroup/author in OPF metadata (via Michael Wiedmann)
-
-
-
- Keith Fahlgren: bin/spec/epub_regressions_spec.rb
-
-
- Remove <b> and <i> elements "discouraged in favor of style sheets" from
-XHTML, XHTML 1.1 (and therefore EPUB) outputs by changing html2xhtml.xsl.
-
-Fixes bug #2873153: No <b> and <i> tags in XHTML/EPUB
-
-Added regression to EPUB specs:
-
-
-
- Keith Fahlgren: bin/lib/docbook.rb; bin/spec/files/DejaVuSerif-Italic.otf; docbook.xsl; bi⋯
-
-
- This resolves bug #2873142, Please add support for multiple embedded fonts
-
-
-If you navigate to a checkout of DocBook-XSL and go to:
-xsl/epub/bin/spec/files
-You can now run the following command:
-
-../../dbtoepub -f DejaVuSerif.otf -f DejaVuSerif-Italic.otf -c test.css
--s test_cust.xsl orm.book.001.xml
-
-In dbtoepub, the following option can be used more than once:
--f, --font [OTF FILE] Embed OTF FILE in .epub.
-
-The underlying stylesheet now accepts a comma-separated list of font file
-names rather than just one as the RENAMED epub.embedded.fonts ('s' added).
-
-The runnable EPUB spec now includes:
-- should be valid .epub after including more than one embedded font
-
-
-
- Keith Fahlgren: docbook.xsl
-
-
- Improve the selection of cover images when working in DocBook 4.x land (work in progress)
-
-
-
- Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl
-
-
- Improve the quality of the OPF spine regression by ensuring that the spine
-elements for deeply nested refentries are in order and adjacent to their
-opening wrapper XHTML chunk.
-
-
-
- Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl; bin/spec/files/orm.book.00⋯
-
-
- Add more careful handling of refentries to ensure that they always appear in the opf:spine.
-This was only a problem when refentries were pushed deep into the hierarchy (like inside
-a sect2), but presented navigational problems for many reading systems (despite the
-correct NCX references). This may *not* be the best solution, but attacking a better
-chunking strategy for refentries was too big a nut to crack at this time.
-
-
-
-
-
Eclipse
-
-
The following changes have been made to the
- eclipse code
- since the 1.75.2 release.
-
-
- Mauritz Jeanson: eclipse3.xsl
-
-
- Added a stylesheet module that generates plug-ins conforming to the standard (OSGi-based) Eclipse 3.x
-architecture. The main difference to the older format is that metadata is stored in a separate
-manifest file. The module imports and extends the existing eclipse.xsl module. Based on code
-contributed in patch #2624668.
-
-
-
-
-
Params
-
-
The following changes have been made to the
- params code
- since the 1.75.2 release.
-
-
- Robert Stayton: draft.watermark.image.xml
-
-
- Fix bug 2922488 draft.watermark.image pointing to web resource.
-Now the value is images/draft.png, and may require customization
-for local resolution.
-
Convert all calls to class.attribute to calls to common.html.attributes to support dir, lang, and title attributes in html output for all elements. Fulfills feature request #1993833.
-
Inclusion of highlighting code was simplified. Only one import is now necessary.
Add support for the new index.links.to.section param which permits precise links to indexterms in HTML output rather than to the sectiontitle.
-
ePub
-
Slightly more nuanced handling of imageobject alternatives and better support in dbtoepub for XIncludes and ENTITYs to resolve Issue #2750442 reported by Raphael Hertzog.
-
Added a colon after an abstract/title when mapping into the dc:description for OPF metadata in ePub output to help the flat text have more pseudo-semantics (sugestions from Michael Wiedmann)
Added DocBook date -> OPF dc:date mapping and tests
-
Added DocBook abstract -> OPF dc:description mapping and tests
-
Added --output option to dbtoepub based on user request
-
HTMLHelp
-
Add support for generating olink target database for htmlhelp files.
Params
-
Add default setting for @rules attribute on HTML markup tables.
-
Added a new parameter, bookmarks.collapse, that controls the initial state of the bookmark tree. When the parameter has a non-zero value (the default), only the top-level bookmarks are displayed initially. Otherwise, the whole tree of bookmarks is displayed. This is implemented for FOP 0.9X. Closes FR #1792326.
Check in fixes for DSSSL gentext targets from submitted patch #1689633.
-
-
Robert Stayton: locale/uk.xml
Check in major update submitted with bug report #2008524.
-
-
Robert Stayton: locale/zh_tw.xml
Check in fix to Note string submitted in bug #2441051.
-
-
Robert Stayton: locale/ru.xml
Checkin typo fix submitted in bug #2453406.
-
-
-
-
Common
-
-
The following changes have been made to the
- common code
- since the 1.74.3 release.
-
-
Robert Stayton: gentext.xsl
Fix extra generated space when xrefstyle includes 'nopage'.
-
-
Robert Stayton: table.xsl
Add support for some format properties on tables using
-HTML table markup. These include:
- - frame attribute on table (or uses $default.table.frame parameter).
- - rules attribute on table (or uses $default.table.rules parameter).
- - align attribute on td and th
- - valign attribute on td and th
- - colspan on td and th
- - rowspan on td and th
- - bgcolor on td and th
-
-
Robert Stayton: olink.xsl
Add placeholder template to massage olink hot text to make
-customization easier, per Feature Request 1828608.
Add match on info/title in title.markup templates where missing.
-
-
Mauritz Jeanson: titles.xsl
Changed "ancestor::title" to "(ancestor::title and (@id or @xml:id))".
-This enables proper formatting of inline elements in titles in TOCs,
-as long as these inlines don't have id or xml:id attributes.
-
-
Robert Stayton: labels.xsl
Add two new qanda.defaultlabel values so that numbered sections
-and numbered questions can be distinguished. Satisfies
-Feature Request #1539045.
-
-
Robert Stayton: stripns.xsl; pi.xsl
Convert function-available(exsl:node-set) to use the new param
-so Xalan bug is isolated.
-
-
Mauritz Jeanson: titles.xsl
Added fixes for bugs #2112656 and #1759205:
-1. Reverted mistaken commits r7485 and r7523.
-2. Updated the template with match="link" and mode="no.anchor.mode" so that
-@endterm is used if it exists and if the link has no content.
Robert Stayton: param.xweb; param.ent; htmltbl.xsl; table.xsl
Add support for some format properties on tables using
-HTML table markup. These include:
- - frame attribute on table (or uses $default.table.frame parameter).
- - rules attribute on table (or uses $default.table.rules parameter).
- - align attribute on td and th
- - valign attribute on td and th
- - colspan on td and th
- - rowspan on td and th
- - bgcolor on td and th
-
-
Robert Stayton: table.xsl
Add support bgcolor in td and th
-elements in HTML table markup.
-
-
Robert Stayton: htmltbl.xsl
Add support for colspan and rowspan and bgcolor in td and th
-elements in HTML table markup.
-
-
Robert Stayton: param.xweb
Fix working of page-master left and right margins.
-
-
Mauritz Jeanson: param.xweb; param.ent; fop1.xsl
Added a new parameter, bookmarks.collapse, that controls the initial state of the bookmark tree. When the parameter has a non-zero value (the default), only the top-level bookmarks are displayed initially. Otherwise, the whole tree of bookmarks is displayed. This is implemented for FOP 0.9X. Closes FR #1792326.
-
-
Robert Stayton: table.xsl; pi.xsl
Add support for dbfo row-height processing instruction, like that in dbhtml.
-
-
Robert Stayton: lists.xsl
Add support for dbfo keep-together processing instruction for
-entire list instances.
-
-
Robert Stayton: lists.xsl; block.xsl
Add support fo dbfo keep-together processing instruction to
-more blocks like list items and paras.
Add id if specified from @id to output for quote and phrase so
-they can be xref'ed to.
-
-
Robert Stayton: xref.xsl
Add support for xref to phrase, simpara, anchor, and quote.
-This assumes the author specifies something using xrefstyle since
-the elements don't have ordinary link text.
Rewrite toc templates to support an empty toc or populated toc
-in all permitted contexts. Same for lot elements.
-This fixes bug #1595969 for FO outputs.
Put programlisting in fo:block-container with writing-mode="lr-tb"
-when text direction is right to left because all program languages
-are left-to-right.
Fix bug #1787167 incorrect hot text for some olinks.
-
-
Robert Stayton: fo.xsl
Add writing-mode="tb-rl" as well since some XSL-FO processors support it.
-
-
Robert Stayton: autotoc.xsl; lists.xsl; glossary.xsl; fo.xsl; table.xsl; pagesetup.xsl
Add support for writing-mode="rl-tb" (right-to-left) in FO outputs.
-Changed instances of margin-left to margin-{$direction.align.start}
-and margin-right to margin-{$direction.align.end}. Those direction.align
-params are computed from the writing mode value in each locale's
-gentext key named 'writing-mode', introduced in 1.74.3 to add
-right-to-left support to HTML outputs.
-
-
Robert Stayton: param.xweb; param.ent
Add attribute-sets for formatting glossary terms and defs.
More tweaking the way that XSLTHL does or does not get called
-
-
Keith Fahlgren: verbatim.xsl
Alternate attempt at sanely including/excluding XSLTHT code
-
-
-
-
HTML
-
-
The following changes have been made to the
- html code
- since the 1.74.3 release.
-
-
Robert Stayton: lists.xsl
Removed redundant lang and title attributes on list element inside
-div element for lists.
-
-
Robert Stayton: inline.xsl; titlepage.xsl; division.xsl; toc.xsl; sections.xsl; table.xsl;⋯
Convert all calls to class.attribute to calls to common.html.attributes
-to support dir, lang, and title attributes in html output for all elements.
-Fulfills feature request #1993833.
-
-
Robert Stayton: chunk-common.xsl
Fix bug #2750253 wrong links in list of figures in chunk.html
-when target html is in a subdirectory and dbhtml filename used.
-
-
Jirka Kosek: highlight.xsl
Inclusion of highlighting code was simplified. Only one import is now necessary.
-
-
Robert Stayton: chunk-common.xsl; chunktoc.xsl; docbook.xsl; chunk-changebars.xsl; autoidx⋯
Convert function-available for node-set() to use
-new $exsl.node.set.available param in test.
More elements get common.html.attributes.
-Added locale.html.attributes template which does the lang,
-dir, and title attributes, but not the class attribute
-(used on para, for example).
-
-
Robert Stayton: lists.xsl
Replace more literal class atts with mode="class.attribute" to support
-easier customization.
Added template named common.html.attributes to output
-class, title, lang, and dir for most elements.
-Started adding it to some list and block elements.
-
-
Robert Stayton: qandaset.xsl
Add two new qanda.defaultlabel values so that numbered sections
-and numbered questions can be distinguished. Satisfies
-Feature Request #1539045.
-
-
Robert Stayton: param.xweb; chunk-code.xsl; param.ent; xref.xsl; chunkfast.xsl; verbatim.x⋯
Add support for the new index.links.to.section param which permits
-precise links to indexterms in HTML output rather than to
-the sectiontitle.
-
-
Mauritz Jeanson: synop.xsl
Added modeless template for ooclass|oointerface|ooexception.
-Closes bug #1623468.
-
-
Robert Stayton: qandaset.xsl
Make sure a qandaset has an anchor, even when it has no title,
-because it may be referenced in a TOC or xref.
-Before, the anchor was output by the title, but there was no
-anchor if there was no title.
-
-
Robert Stayton: xref.xsl
Add a template for indexterm with mode="xref-to" to fix bug 2102592.
Rewrite toc templates to support an empty toc or populated toc
-in all permitted contexts. Same for lot elements.
-This fixes bug #1595969 for HTML outputs.
Fix bug #1787140 HTML tables not handling attributes correctly.
-
-
Robert Stayton: param.xweb
Move writing-mode param.
-
-
Keith Fahlgren: refentry.xsl
Remove a nesting of <p> inside <p> for refclass (made XHTML* invalid, made HTML silly)
-
-
Robert Stayton: table.xsl
Fix bug #1945872 to allow passthrough of colwidth values to
-HTML table when no tablecolumns.extension is available and
-when no instance of * appears in the table's colspecs.
Add support for generating olinkdatabase when using chunktoc.xsl.
-
-
Keith Fahlgren: verbatim.xsl
Add better pointer to README for XSLTHL
-
-
Keith Fahlgren: verbatim.xsl
Another stab at fixing the stupid XSLTHT includes across processors (Saxon regression reported by Sorin Ristache)
-
-
Keith Fahlgren: verbatim.xsl
More tweaking the way that XSLTHL does or does not get called
-
-
Keith Fahlgren: verbatim.xsl
Alternate attempt at sanely including/excluding XSLTHT code
-
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.74.3 release.
-
-
Robert Stayton: table.xsl
Convert function-available test for node-set() function to
-test of $exsl.node.set.available param.
-
-
Mauritz Jeanson: lists.xsl
Added a template for bibliolist. Closes bug #1815916.
-
-
-
-
ePub
-
-
The following changes have been made to the
- epub code
- since the 1.74.3 release.
-
-
Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/onegraphic.xinclude.xml;⋯
Slightly more nuanced handling of imageobject alternatives and better support in dbtoepub for XIncludes and ENTITYs to resolve Issue #2750442 reported by Raphael Hertzog.
-
-
Keith Fahlgren: docbook.xsl
Add a colon after an abstract/title when mapping into the dc:description for OPF metadata in ePub output to help the flat text have more pseudo-semantics (sugestions from Michael Wiedmann)
-
-
Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl; bin/spec/files/de.xml
Correctly set dc:language in OPF metadata when i18nizing. Closes Bug #2755150
-
-
Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl
Corrected namespace declarations for literal XHTML elements to make them serialize "normally"
-
-
Keith Fahlgren: docbook.xsl
Be a little bit more nuanced about dates
-
-
Keith Fahlgren: docbook.xsl; bin/spec/epub_realbook_spec.rb; bin/spec/files/orm.book.001.x⋯
Keith Fahlgren: docbook.xsl; bin/spec/epub_realbook_spec.rb; bin/spec/files/orm.book.001.x⋯
Add DocBook abstract -> OPF dc:description mapping and tests
-
-
Robert Stayton: docbook.xsl
Check in patch submitted by user to add opf:file-as attribute
-to dc:creator element.
-
-
Keith Fahlgren: bin/dbtoepub
Adding --output option to dbtoepub based on user request
-
-
Keith Fahlgren: docbook.xsl; bin/spec/epub_spec.rb
Cleaning and regularizing the generation of namespaced nodes for OPF, NCX, XHTML and other outputted filetypes (hat tip to bobstayton for pointing out the silly, incorrect code)
-
-
Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/refclass.xml
Remove a nesting of <p> inside <p> for refclass (made XHTML* invalid, made HTML silly)
-
-
Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/blockquotepre.xml
Added regression test and fix for XHTML validation problem with <a>s added inside <blockquote>; This potentially causes another problem (where something is referenced by has no anchor, but someone reporting that should cause the whole <a id='thing'/> thing to be reconsidered with modern browsers in mind.
-
-
-
-
HTMLHelp
-
-
The following changes have been made to the
- htmlhelp code
- since the 1.74.3 release.
-
-
Robert Stayton: htmlhelp-common.xsl
Add support for generating olink target database for htmlhelp files.
-
-
-
-
-
Params
-
-
The following changes have been made to the
- params code
- since the 1.74.3 release.
-
-
Robert Stayton: default.table.rules.xml
Add default setting for @rules attribute on HTML markup tables.
-
-
Mauritz Jeanson: bookmarks.collapse.xml
Added a new parameter, bookmarks.collapse, that controls the initial state
-of the bookmark tree. When the parameter has a non-zero value (the default),
-only the top-level bookmarks are displayed initially. Otherwise, the whole
-tree of bookmarks is displayed.
-
-This is implemented for FOP 0.9X. Closes FR #1792326.
Support for documented metadata in fop1 mode has been added.
-
Highlighting
Support for the latest version of XSLTHL 2.0 and some new language syntaxes have been added to a variety of outputs.
Manpages
Added man.output.better.ps.enabled param (zero default). It non-zero, no such
-markup is embedded in generated man pages, and no enhancements are
-included in the PostScript output generated from those man pages
-by the man -Tps command.
HTML
Support for writing.mode to set text direction and alignment based on document locale has been added.
-
Added a new top-level stylesheet module, chunk-changebars.xsl, to be
-used for generating chunked output with highlighting based on change
-(@revisionflag) markup. The module imports/includes the standard chunking
-and changebars templates and contains additional logic for chunked output.
-See FRs #1015180 and #1819915.
-
ePub
-
Covers now look better in Adobe Digital Editions thanks to a patch from Paul Norton of Adobe
-
Cover handling now more generic (including limited DocBook 5.0 cover support thanks to patch contributed by Liza Daly.
Cover markup now carries more reliably into files destined for .mobi and the Kindle.
dc:identifiers are now generated from more types of numbering schemes.
Both SEO and semantic structure of chunked ePub output by ensuring that we always send out one and only one h1 in each XHTML chunk.
-
Primitive support for embedding a single font added.
-
-
Support for embedding a CSS customizations added.
-
Roundtrip
-
Support for imagedata-metadata and table as images added.
-
-
Support for imagedata-metadata and legalnotice as images added.
Added new param email.mailto.enabled for FO output.
-Patch from Paolo Borelli. Closes #2086321.
-
-
Mauritz Jeanson: docbook.xsl
Added support for document metadata for fop1 (patch #2067318).
-
-
Jirka Kosek: param.ent; param.xweb; highlight.xsl
Upgraded to support the latest version of XSLTHL 2.0
- -- nested markup in highlited code is now processed
- -- it is no longer needed to specify path XSLTHL configuration file using Java property
- -- support for new languages, including Perl, Python and Ruby was added
-
-
-
-
HTML
-
-
The following changes have been made to the html code since the 1.74.0 release.
-
-
Robert Stayton: param.xweb; docbook.xsl; param.ent; html.xsl
Add support for writing.mode to set text direction and alignment based on document locale.
-
-
Mauritz Jeanson: chunk-changebars.xsl
Added a new top-level stylesheet module, chunk-changebars.xsl, to be
-used for generating chunked output with highlighting based on change
-(@revisionflag) markup. The module imports/includes the standard chunking
-and changebars templates and contains additional logic for chunked output.
-See FRs #1015180 and #1819915.
-
-
-
-
Manpages
-
-
The following changes have been made to the manpages code since the 1.74.0 release.
-
-
Michael(tm) Smith: docbook.xsl
Put the following at the top of generated roff for each page:
- \" t
-purpose is to explicitly tell AT&T troff that the page needs to be
-pre-processed through tbl(1); groff can figure it out
-automatically, but apparently AT&T troff needs to be explicitly told
-
-
-
-
ePub
-
-
The following changes have been made to the epub code since the 1.74.0 release.
-
-
Keith Fahlgren: docbook.xsl
Patch from Paul Norton of Adobe to get covers to look better in Adobe Digital Editions
-
-
Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/v5cover.xml; bin/spec/sp⋯
Patch contributed by Liza Daly to make ePub cover handling more generic. Additionally
-DocBook 5.0's <cover> now has some limited support:
-
-- should reference a cover in the OPF guide for a DocBook 5.0 test document
-
-
Keith Fahlgren: bin/spec/files/isbn.xml; bin/spec/files/issn.xml; bin/spec/files/biblioid.⋯
Liza Daly reported that the dc:identifer-generation code was garbage (she was right).
-
-Added new tests:
-- should include at least one dc:identifier
-- should include an ISBN as URN for dc:identifier if an ISBN was in the metadata
-- should include an ISSN as URN for dc:identifier if an ISSN was in the metadata
-- should include an biblioid as a dc:identifier if an biblioid was in the metadata
-- should include a URN for a biblioid with @class attribute as a dc:identifier if an biblioid was in the metadata
-
-
Keith Fahlgren: docbook.xsl; bin/spec/epub_spec.rb
Improve both SEO and semantic structure of chunked ePub output by ensuring that
-we always send out one and only one h1 in each XHTML chunk.
-
-DocBook::Epub
-- should include one and only one <h1> in each HTML file in rendered ePub files
-for <book>s
-- should include one and only one <h1> in each HTML file in rendered ePub files
-for <book>s even if they do not have section markup
-
-
Keith Fahlgren: docbook.xsl; bin/spec/epub_realbook_spec.rb; bin/spec/files/orm.book.001.x⋯
Adding better support for covers in epub files destined for .mobi and the Kindle
-
-
Keith Fahlgren: bin/dbtoepub; bin/lib/docbook.rb; bin/spec/files/DejaVuSerif.otf; docbook.⋯
Adding primitive support for embedding a single font
-
-
Keith Fahlgren: bin/dbtoepub; bin/lib/docbook.rb; bin/spec/files/test_cust.xsl; bin/spec/e⋯
Adding support for user-specified customization layers in dbtoepub
-
-
Keith Fahlgren: bin/dbtoepub; bin/spec/epub_regressions_spec.rb; bin/lib/docbook.rb; bin/s⋯
Adding CSS support to .epub target & dbtoepub:
- -c, --css [FILE] Use FILE for CSS on generated XHTML.
-
-
-DocBook::Epub
-...
-- should include a CSS link in HTML files when a CSS file has been provided
-- should include CSS file in .epub when a CSS file has been provided
-- should include a CSS link in OPF file when a CSS file has been provided
-
-
-
-
Roundtrip
-
-
The following changes have been made to the
- roundtrip code
- since the 1.74.0 release.
-
-
Steve Ball: blocks2dbk.xsl; template.xml; template.dot
added support for imagedata-metadata
-added support for table as images
-
-
Steve Ball: blocks2dbk.xsl; normalise2sections.xsl; sections2blocks.xsl
Steve Ball: specifications.xml; supported.xml; blocks2dbk.xsl; wordml2normalise.xsl; dbk2w⋯
Updated specification.
-to-DocBook: add cols attribute to tgroup
-from-DocBook: fix for blockquotetitle
-
-
-
-
Params
-
-
The following changes have been made to the params since the 1.74.0 release.
-
-
The change was to add man.output.better.ps.enabled parameter, with
-its default value set to zero.
-
-If the value of the man.output.better.ps.enabled parameter is
-non-zero, certain markup is embedded in each generated man page
-such that PostScript output from the man -Tps command for that
-page will include a number of enhancements designed to improve the
-quality of that output.
-
-If man.output.better.ps.enabled is zero (the default), no such
-markup is embedded in generated man pages, and no enhancements are
-included in the PostScript output generated from those man pages
-by the man -Tps command.
-
-WARNING: The enhancements provided by this parameter rely on
-features that are specific to groff (GNU troff) and that are not
-part of "classic" AT&T troff or any of its derivatives. Therefore,
-any man pages you generate with this parameter enabled will be
-readable only on systems on which the groff (GNU troff) program is
-installed, such as GNU/Linux systems. The pages will not not be
-readable on systems on with the classic troff (AT&T troff) command
-is installed.
-
-NOTE: The value of this parameter only affects PostScript output
-generated from the man command. It has no effect on output
-generated using the FO backend.
-
-TIP: You can generate PostScript output for any man page by
-running the following command:
-
-man FOO -Tps > FOO.ps
-
-You can then generate PDF output by running the following command:
-
-ps2pdf FOO.ps
-
-
Robert Stayton: writing.mode.xml
writing mode param used to set text direction.
-
-
Michael(tm) Smith: email.mailto.enabled.xml
Added new param email.mailto.enabled for FO output.
-Patch from Paolo Borelli. Closes #2086321.
Upgraded to support the latest version of XSLTHL 2.0
- -- nested markup in highlited code is now processed
- -- it is no longer needed to specify path XSLTHL configuration file using Java property
- -- support for new languages, including Perl, Python and Ruby was added
-
-
-
-
Highlighting
-
-
The following changes have been made to the
- highlighting code
- since the 1.74.0 release.
Upgraded to support the latest version of XSLTHL 2.0
- -- nested markup in highlited code is now processed
- -- it is no longer needed to specify path XSLTHL configuration file using Java property
- -- support for new languages, including Perl, Python and Ruby was added
-
-
-
-
-
-
-
Release Notes: 1.74.0
-
-
This release includes important bug fixes and adds the following
-significant feature changes:
-
.epub target
Paul Norton (Adobe) and Keith Fahlgren(O'Reilly Media) have donated code that generates .epub documents from
-DocBook input. An alpha-reference implementation in Ruby has also been provided.
-
.epub is an open standard of the The International Digital Publishing Forum (IDPF),
-a the trade and standards association for the digital publishing industry.
-
Read more about this target in epub/README
-
XHTML 1.1 target
To support .epub output, a strict XHTML 1.1 target has been added. The stylesheets for this output are
-generated and are quite similar to the XHTML target.
Gentext updates
A number of locales have been updated.
Roundtrip improvements
Table, figure, template syncronization, and character style improvements have been made for WordML & Pages. Support added for OpenOffice.org.
First implementation of a libxslt extension
-
A stylesheet extension for libxslt, written in Python, has been added.
- The extension is a function for adjusting column widths in CALS tables. See
- extensions/README.LIBXSLT for more information.
-
-
-
The following is a list of changes that have been made
- since the 1.73.2 release.
-
-
Gentext
-
-
The following changes have been made to the
- gentext code
- since the 1.73.2 release.
-
-
Michael(tm) Smith: locale/id.xml
Checked in changes to Indonesion locale submitted by Euis Luhuanam a long time ago.
-
-
Michael(tm) Smith: locale/lt.xml
Added changes to Lithuanian locate submitted a long time back by Nikolajus Krauklis.
-
-
Michael(tm) Smith: locale/hu.xml
fixed error in lowercase.alpha definition in Hungarian locale
-
-
Michael(tm) Smith: locale/nb.xml
Corrected language code for nb locale, and restored missing "startquote" key.
-
-
Michael(tm) Smith: locale/ja.xml
Committed changes to ja locale file, from Akagi Kobayashi. Adds bracket quotes around many xref instances that did not have them
-before.
-
-
Michael(tm) Smith: Makefile
"no" locale is now "nb"
-
-
Michael(tm) Smith: locale/nb.xml
Update Norwegian Bokmål translation. Thanks to Hans F. Nordhaug.
-
-
Michael(tm) Smith: locale/no.xml; locale/nb.xml
per message from Hans F. Nordhaug, correct identifier for
-Norwegian Bokmål is "nb" (not "no") and has been for quite some
-time now...
-
-
Michael(tm) Smith: locale/ja.xml
Converted ja.xml source file to use real unicode characters so
-that the actual glyphs so up when you edit it in a text editor
-(instead of the character references).
-
-
Michael(tm) Smith: locale/ja.xml
Checked in changes to ja.xml locale file. Thanks to Akagi Kobayashi.
-
-
Michael(tm) Smith: locale/it.xml
Changes from Federico Zenith
-
-
Dongsheng Song: locale/zh_cn.xml
Added missing translations.
-
-
-
-
Common
-
-
The following changes have been made to the
- common code
- since the 1.73.2 release.
-
-
Michael(tm) Smith: l10n.xsl
Added new template "l10.language.name" for retrieving the
-English-language name of the lang setting of the current document.
-Closes #1916837. Thanks to Simon Kennedy.
-
-
Michael(tm) Smith: refentry.xsl
fixed syntax error
-
-
Michael(tm) Smith: refentry.xsl
fixed a couple of typos
-
-
Michael(tm) Smith: refentry.xsl
refined handling of cases where refentry "source" or "manual"
-metadata is missing or when we use fallback content instead. We
-now report a Warning if we use fallback content.
-
-
Michael(tm) Smith: refentry.xsl
don't use refmiscinfo@class=date value as fallback for refentry
-"source" or "manual" metadata fields
-
-
Michael(tm) Smith: refentry.xsl
Made reporting of missing refentry metadata more quiet:
-
- - we no longer report anything if usable-but-not-preferred
- metadata is found; we just quietly use whatever we manage to
- find
-
- - we now only report missing "source" metadata if the refentry
- is missing BOTH "source name" and "version" metadata; if it
- has one but not the other, we use whichever one it has and
- don't report anything as missing
-
-The above changes were made because testing with some "real world"
-source reveals that some authors are intentionally choosing to use
-"non preferred" markup for some metadata, and also choosing to
-omit "source name" or "version" metadata in there DocBook XML. So
-it does no good to give them pedantic reminders about what they
-already know...
-
-Also, changed code to cause "fixme" text to be inserted in output
-in particular cases:
-
- - if we can't manage to find any "source" metadata at all, we
- now put fixme text into the output
-
- - if we can't manage to find any "manual" metadata a all, we
- now put fixme text into the output
-
-The "source" and "manual" metadata is necessary information, so
-buy putting the fixme stuff in the output, we alert users to the
-need problem of it being missing.
-
-
Michael(tm) Smith: refentry.xsl
When generating manpages output, we no longer report anything if
-the refentry source is missing date or pubdate content. In
-practice, many users intentionally omit the date from the source
-because they explicitly want it to be generated.
-
-
Michael(tm) Smith: l10n.xml
further change needed for switch from no locale to nb.
-
-
Michael(tm) Smith: common.xsl
Added support for orgname in authorgroup. Thanks to Camille
-Bégnis.
-
-
Michael(tm) Smith: Makefile
"no" locale is now "nb"
-
-
Mauritz Jeanson: stripns.xsl
Removed the template matching "ng:link|db:link" (in order to make @xlink:show
-work with <link> elements). As far as I can tell, this template is no longer needed.
-
-
Mauritz Jeanson: entities.ent
Moved declaration of comment.block.parents entity to common/entities.ent.
-
-
Mauritz Jeanson: titles.xsl
Added an update the fix made in revision 7528 (handling of xref/link in no.anchor.mode mode).
-Having xref in title is not a problem as long as the target is not an ancestor element.
-Closes bug #1838136.
-
-Note that an xref that is in a title and whose target is an ancestor element is still not
-rendered in the TOC. This could be considered a bug, but on the other hand I cannot really
-see the point in having such an xref in a document.
-
-
Mauritz Jeanson: titles.xsl
Added a "not(ancestor::title)" test to work around "too many nested
-apply-templates" problems when processing xrefs or links in no.anchor.mode mode.
-Hopefully, this closes bug #1811721.
-
-
Mauritz Jeanson: titles.xsl
Removed old template matching "link" in no.anchor.mode mode.
-
-
Mauritz Jeanson: titles.xsl
Process <link> in no.anchor.mode mode with the same template as <xref>.
-Closes bug #1759205 (Empty link in no.anchor.mode mode).
-
-
Mauritz Jeanson: titles.xsl
In no.anchor.mode mode, do not output anchors for elements that are descendants
-of <title>. Previously, having inline elements with @id/@xml:id in <title>s
-resulted in anchors both in the TOC and in the main flow. Closes bug #1797492.
-
-
-
-
FO
-
-
The following changes have been made to the
- fo code
- since the 1.73.2 release.
-
Mauritz Jeanson: pi.xsl
Updated documentation for keep-together.
Mauritz Jeanson: task.xsl
Enabled use of the keep-together PI on task elements.
-
Robert Stayton: index.xsl
FOP1 requires fo:wrapper for inline index entries, not fo:inline.
-
-
Robert Stayton: index.xsl
Fixed non-working inline.or.block template for indexterm wrappers.
-Add fop1 to list of processors using inline.or.block.
-
-
Mauritz Jeanson: table.xsl
Fixed bug #1891965 (colsep in entytbl not working).
-
-
Mauritz Jeanson: titlepage.xsl
Added support for title in revhistory. Closes bug #1842847.
-
-
Mauritz Jeanson: pi.xsl
Small doc cleanup (dbfo float-type).
-
-
Mauritz Jeanson: titlepage.xsl
Insert commas between multiple copyright holders.
-
-
Mauritz Jeanson: autotoc.xsl; division.xsl
Added modifications to support nested set elements. See bug #1853172.
-
-
David Cramer: glossary.xsl
Added normalize-space to xsl:sorts to avoid missorting of glossterms due to stray leading spaces.
-
-
David Cramer: glossary.xsl
Fixed bug #1854199: glossary.xsl should use the sortas attribute on glossentry
-
-
Mauritz Jeanson: inline.xsl
Added a template for citebiblioid. The hyperlink target is the parent of the referenced biblioid,
-and the "hot text" is the biblioid itself enclosed in brackets.
-
-
Mauritz Jeanson: inline.xsl
Moved declaration of comment.block.parents entity to common/entities.ent.
-
-
Mauritz Jeanson: docbook.xsl
Updated message about unmatched element.
-
-
Mauritz Jeanson: param.xweb
Added link to profiling chapter of TCG.
-
-
Mauritz Jeanson: refentry.xsl
Fixed typo (refsynopsysdiv -> refsynopsisdiv).
-
-
David Cramer: fop.xsl; fop1.xsl; ptc.xsl; xep.xsl
Added test to check generate.index param when generating pdf bookmarks
-
-
Mauritz Jeanson: graphics.xsl
Added support for MathML in imagedata.
-
-
Michael(tm) Smith: math.xsl
Removed unnecessary extra test condition in test express that
-checks for passivetex.
-
-
Michael(tm) Smith: math.xsl
Don't use fo:instream-foreign-object if we are processing with
-passivetex. Closes #1806899. Thanks to Justus Piater.
-
-
Mauritz Jeanson: component.xsl
Added code to output a TOC for an appendix in an article when
-generate.toc='article/appendix toc'. Closes bug #1669658.
-
-
Dongsheng Song: biblio-iso690.xsl
Change encoding from "windows-1250" to "UTF-8".
-
-
Mauritz Jeanson: pi.xsl
Updated documentation for dbfo_label-width.
-
-
Mauritz Jeanson: lists.xsl
Added support for the dbfo_label-width PI in calloutlists.
-
-
Robert Stayton: biblio.xsl
Support finding glossary database entries inside bibliodivs.
-
-
Robert Stayton: formal.xsl
Complete support for <?dbfo pgwide="1"?> for informal
-elements too.
-
-
Mauritz Jeanson: table.xsl
In the table.block template, added a check for the dbfo_keep-together PI, so that
-a table may break (depending on the PI value) at a page break. This was needed
-since the outer fo:block that surrounds fo:table has keep-together.within-column="always"
-by default, which prevents the table from breaking. Closes bug #1740964 (Titled
-table does not respect dbfo PI).
-
-
Mauritz Jeanson: pi.xsl
Added a few missing @role="tcg".
-
-
Mauritz Jeanson: inline.xsl
Use normalize-space() in glossterm comparisons (as in html/inline.xsl).
-
-
Mauritz Jeanson: autoidx.xsl
Removed the [&scope;] predicate from the target variable in the template with name="reference".
-This filter was the cause of missing index backlinks when @zone and @type were used on indexterms,
-with index.on.type=1. Closes bug #1680836.
Added capability in FO output for displaying URLs for all
-hyperlinks (elements marked up with xlink:href attributes) in the
-same way as URLs for ulinks are already handled (which is to say,
-either inline or as numbered footnotes).
-
-Background on this change:
-DocBook 5 allows "ubiquitous" linking, which means you can make
-any element a hyperlink just by adding an xlink:href attribute to
-it, with the value set to an external URL. That's in contrast to
-DocBook 4, which only allows you to use specific elements (e.g.,
-the link and ulink elements) to mark up hyperlinks.
-
-The existing FO stylesheets have a mechanism for handling display
-of URLs for hyperlinks that are marked up with ulink, but they did
-not handle display of URLs for elements that were marked up with
-xlink:href attributes. This change adds handling for those other
-elements, enabling the URLs they link to be displayed either
-inline or as numbered footnotes (depending on what values the user
-has the ulink.show and ulink.footnotes params set to).
-
-Note that this change only adds URL display support for elements
-that call the simple.xlink template -- which currently is most
-(but not all) inline elements.
-
-This change also moves the URL display handling out of the ulink
-template and into a new "hyperlink.url.display" named template;
-the ulink template and the simple.xlink named template now both
-call the hyperlink.url.display template.
-
-Warning: In the stylesheet code that determines what footnote
-number to assign to each footnote or external hyperlink, there is
-an XPath expression for determining whether a particular
-xlink:href instance is an external hyperlink; that expression is
-necessarily a bit complicated and further testing may reveal that
-it doesn't handle all cases as expected -- so some refinements to
-it may need to be done later.
-
-Closes #1785519. Thanks to Ken Morse for reporting and
-troubleshooting the problem.
-
-
-
-
HTML
-
-
The following changes have been made to the
- html code
- since the 1.73.2 release.
-
Keith Fahlgren: inline.xsl; synop.xsl
Work to make HTML and XHTML targets more valid
Keith Fahlgren: table.xsl
Add better handling for tables that have footnotes in the titles
Keith Fahlgren: biblio.xsl
Add anchors to bibliodivs
-
Keith Fahlgren: formal.xsl; Makefile; htmltbl.xsl
Initial checkin/merge of epub target from work provided by Paul Norton of Adobe
-and Keith Fahlgren of O'Reilly.
-
This change includes new code for generating the XHTML 1.1 target sanely.
-
-
Mauritz Jeanson: biblio.xsl
Added code for creating URLs from biblioids with @class="doi" (representing Digital
-Object Identifiers). See FR #1934434 and http://doi.org.
-
-To do: 1) Add support for FO output. 2) Figure out how @class="doi" should be handled
-for bibliorelation, bibliosource and citebiblioid.
-
-
Norman Walsh: formal.xsl
Don't use xsl:copy because it forces the resulting element to be in the same namespace as the source element; in the XHTML stylesheets, that's wrong. But the HTML-to-XHTML converter does the right thing with literal result elements, so use one of them.
-
-
Michael(tm) Smith: Makefile
Added checks and hacks to various makefiles to enable building
-under Cygwin. This stuff is ugly and maybe not worth the mess and
-trouble, but does seem to work as expected and not break anything
-else.
-
-
Michael(tm) Smith: docbook.xsl
added "exslt" namespace binding to html/docbook.xsl file (in
-addition to existing "exsl" binding. reason is because lack of it
-seems to cause processing problems when using the profiled
-version of the stylsheet
-
-
Norman Walsh: chunk-common.xsl
Rename link
-
-
Mauritz Jeanson: table.xsl
Added a fix to make rowsep apply to the last row of thead in entrytbl.
-
-
Michael(tm) Smith: synop.xsl
Simplified and streamlined handling of output for ANSI-style
-funcprototype output, to correct a problem that was causing type
-data to be lost in the output parameter definitions. For example,
-for an instance like this:
- <paramdef>void *<parameter>dataptr</parameter>[]</paramdef>
-... the brackets (indicating an array type) were being dropped.
-
-
Michael(tm) Smith: synop.xsl
Changed HTML handling of K&R-style paramdef output. The parameter
-definitions are no longer output in a table (though the prototype
-still is). The reason for the change is that the
-kr-tabular-funcsynopsis-mode template was causing type data to be
-lost in the output parameter definitions. For example, for an
-instance like this:
- <paramdef>void *<parameter>dataptr</parameter>[]</paramdef>
-... the brackets (indicating an array type) were being dropped.
-The easiest way to deal with the problem is to not try to chop up
-the parameter definitions and display them in table format, but to
-instead just output them as-is. May not look quite as pretty, but
-at least we can be sure no information is being lost...
Removed the funcsynopsis.tabular.threshold param. It's no longer
-being used in the code and hasn't been since mid 2006.
-
-
Mauritz Jeanson: graphics.xsl
Added support for the img.src.path parameter for SVG graphics. Closes bug #1888169.
-
-
Mauritz Jeanson: chunk-common.xsl
Added missing space.
-
-
Norman Walsh: component.xsl
Fix bug where component titles inside info elements were not handled properly
-
-
Michael(tm) Smith: pi.xsl
Moved dbhtml_stop-chunking embedded doc into alphabetical order,
-fixed text of TCG section it see-also'ed.
-
-
David Cramer: pi.xsl
Added support for <?dbhtml stop-chunking?> processing instruction
-
-
David Cramer: chunk-common.xsl; pi.xsl
Added support for <?dbhtml stop-chunking?> processing instruction
-
-
David Cramer: glossary.xsl
Fixed bug #1854199: glossary.xsl should use the sortas attribute on glossentry. Also added normalize-space to avoid missorting due to stray leading spaces.
-
-
Mauritz Jeanson: inline.xsl
Added a template for citebiblioid. The hyperlink target is the parent of the referenced biblioid,
-and the "hot text" is the biblioid itself enclosed in brackets.
-
-
Mauritz Jeanson: inline.xsl
Added support for @xlink:show in the simple.xlink template. The "new" and "replace"
-values are supported (corresponding to values of "_blank" and "_top" for the
-ulink.target parameter). I have assumed that @xlink:show should override ulink.target
-for external URI links. This closes bugs #1762023 and #1727498.
-
-
Mauritz Jeanson: inline.xsl
Moved declaration of comment.block.parents entity to common/entities.ent.
-
-
Mauritz Jeanson: param.xweb
Added link to profiling chapter of TCG.
-
-
Dongsheng Song: biblio-iso690.xsl
Change encoding from "windows-1250" to "UTF-8".
-
-
Robert Stayton: biblio.xsl
Add support in biblio collection to entries in bibliodivs.
-
-
Mauritz Jeanson: pi.xsl
Added missing @role="tcg".
-
-
Mauritz Jeanson: chunk-common.xsl; titlepage.xsl
Refactored legalnotice/revhistory chunking, so that the use.id.as.filename
-parameter as well as the dbhtml_filename PI are taken into account. A new named
-template in titlepage.xsl is used to compute the filename.
-
-
Mauritz Jeanson: chunk-common.xsl; titlepage.xsl
An update to the fix for bug #1790495 (r7433):
-The "ln-" prefix is output only when the legalnotice doesn't have an
-@id/@xml:id, in which case the stylesheets generate an ID value,
-resulting in a filename like "ln-7e0fwgj.html". This is useful because
-without the prefix, you wouldn't know that the file contained a legalnotice.
-The same logic is also applied to revhistory, using an "rh-" prefix.
-
-
Mauritz Jeanson: autoidx.xsl
Removed the [&scope;] predicate from the target variable in the template with name="reference".
-This filter was the cause of missing index backlinks when @zone and @type were used on indexterms,
-with index.on.type=1. Closes bug #1680836.
-
-
Mauritz Jeanson: titlepage.xsl
Added 'ln-' prefix to the name of the legalnotice chunk, in order to match the
-<link href"..."> that is output by make.legalnotice.head.links (chunk-common.xsl).
-Modified the href attribute on the legalnotice link.
-Closes bug #1790495.
-
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.73.2 release.
-
-
Michael(tm) Smith: other.xsl
slightly adjusted spacing around admonition markers
-
-
Michael(tm) Smith: refentry.xsl; utility.xsl
make sure refsect3 titles are preceded by a line of space, and
-make the indenting of their child content less severe
-
-
Michael(tm) Smith: block.xsl
only indent verbatim environments in TTY output, not in non-TTY/PS
-
-
Michael(tm) Smith: block.xsl
made another adjustment to correct vertical alignment of admonition marker
-
-
Michael(tm) Smith: block.xsl; other.xsl
Adjusted/corrected alignment of adominition marker in PS/non-TTY output.
-
-
Michael(tm) Smith: endnotes.xsl
For PS/non-TTY output, display footnote/endnote numbers in
-superscript.
Changed handling of hanging indents for cmdsynopsis, funcsynopsis,
-and synopfragment such that they now look correct in non-TTY/PS
-output. We now use the groff \w escape to hang by the actual width
--- in the current font -- of the command, funcdef, or
-synopfragment references number (as opposed to hanging by the
-number of characters). This rendering in TTY output remains the
-same, since the width in monospaced TTY output is the same as the
-number of characters.
-
-Also, created new synopsis-block-start and synopsis-block-end
-templates to use for cmdsynopsis and funcsynopsis instead of the
-corresponding verbatim-* templates.
-
-Along with those changes, also corrected a problem that caused the
-content of synopfragment to be dropped, and made a
-vertical-spacing change to adjust spacing around table titles and
-among sibling synopfragment instances.
-
-
Michael(tm) Smith: other.xsl
use common l10.language.name template to retrieve English-language name
-
-
Michael(tm) Smith: synop.xsl; inline.xsl
added comment in code explaining why we don't put filename output
-in italic (despite the fact that man guidelines say we should)
-
-
Michael(tm) Smith: inline.xsl
put filename output in monospace instead of italic
-
-
Michael(tm) Smith: synop.xsl
put cmdsynopsis in monospace
-
-
Michael(tm) Smith: inline.xsl
removed template match for literal. template matches for monospace
-inlines are all imported from the HTML stylesheet
-
-
Michael(tm) Smith: block.xsl
don't indent verbatim environments that are descendants of
-refsynopsisdiv, not put backgrounds behind them
-
-
Michael(tm) Smith: inline.xsl
set output of the literal element in monospace. this causes all
-inline monospace instances in the git man pages to be set in
-monospace (since DocBook XML source for git docs is generated with
-asciidoc and asciidoc consistently outputs only <literal> for
-inline monospace (not <command> or <code> or anything else).
-Of course this only affects non-TTY output...
-
-
Michael(tm) Smith: utility.xsl
Added inline.monoseq named template.
-
-
Michael(tm) Smith: utility.xsl
don't bother using a custom register to store the previous
-font-family value when setting blocks of text in code font; just
-use \F[] .fam with no arg to switch back
-
-
Michael(tm) Smith: endnotes.xsl
put links in blue in PS output (note that this matches how groff
-renders content marked up with the .URL macro)
Added new param man.base.url.for.relative.links .. specifies a
-base URL for relative links (for ulink, @xlink:href, imagedata,
-audiodata, videodata) shown in the generated NOTES section of
-man-page output. The value of man.base.url.for.relative.links is
-prepended to any relative URI that is a value of ulink url,
-xlink:href, or fileref attribute.
-
-If you use relative URIs in link sources in your DocBook refentry
-source, and you leave man.base.url.for.relative.links unset, the
-relative links will appear "as is" in the NOTES section of any
-man-page output generated from your source. That's probably not
-what you want, because such relative links are only usable in the
-context of HTML output. So, to make the links meaningful and
-usable in the context of man-page output, set a value for
-man.base.url.for.relative.links that points
-to the online version of HTML output generated from your DocBook
-refentry source. For example:
-
- <xsl:param name="man.base.url.for.relative.links"
- >http://www.kernel.org/pub/software/scm/git/docs/</xsl:param>
-
-
Michael(tm) Smith: info.xsl
If a source refentry contains a Documentation or DOCUMENTATION
-section, don't report it as having missing AUTHOR information.
-Also, if missing a contrib/personblurb for a person or org, report
-pointers to http://docbook.sf.net/el/personblurb and to
-http://docbook.sf.net/el/contrib
-
-
Michael(tm) Smith: info.xsl
If we encounter an author|editor|othercredit instance that lacks a
-personblurb or contrib, report it to the user (because that means
-we have no information about that author|editor|othercredit to
-display in the generated AUTHOR|AUTHORS section...)
if we can't find any usable author data, emit a warning and insert
-a fixme in the output
-
-
Michael(tm) Smith: info.xsl
fixed bug in indenting of output for contrib instances in AUTHORS
-section. Thanks to Daniel Leidert and the fglrx docs for exposing
-the bug.
-
-
Michael(tm) Smith: block.xsl
for a para or simpara that is the first child of a callout,
-suppress the .sp or .PP that would normally be output (because in
-those cases, the output goes into a table cell, and the .sp or .PP
-markup causes a spurious linebreak before it when displayed
-
-
Michael(tm) Smith: lists.xsl
Added support for rendering co callouts and calloutlist instances.
-So you can now use simple callouts -- marking up programlisting
-and such with co instances -- and have the callouts displayed in
-man-page output. ("simple callouts" means using co@id and
-callout@arearefs pointing to co@id instances; in man/roff output,
-we can't/don't support markup that uses areaset and area)
-
-
Michael(tm) Smith: block.xsl
only put a line of space after a verbatim if it's followed by a
-text node or a paragraph
-
-
Michael(tm) Smith: utility.xsl
put verbatim environments in slightly smaller font in non-TTY
-output
-
-
Michael(tm) Smith: lists.xsl
minor whitespace-only reformatting of lists.xsl source
-
-
Michael(tm) Smith: lists.xsl
Made refinements/fixes to output of orderedlist and itemizedlist
--- in part, to get mysql man pages to display correctly. This
-change causes a "\c" continuation marker to be added between
-listitem markers and contents (to ensure that the content remains
-on the same line as the marker when displayed)
-
-
Michael(tm) Smith: block.xsl
put a line of vertical space after all verbatim output that has
-sibling content following it (not just if that sibling content is
-a text node)
-
-
Michael(tm) Smith: block.xsl
refined spacing around titles for admonitions
-
-
Michael(tm) Smith: block.xsl; other.xsl
Deal with case of verbatim environments that have a linebreak
-after the opening tag. Assumption is that users generally don't
-want that linebreak to appear in output, so we do some groff
-hackery to mess with vertical spacing and close the space.
-
-
Michael(tm) Smith: inline.xsl
indexterm instances now produce groff comments like this:
-
- .\" primary: secondary: tertiary
-
-remark instances, if non-empty, now produce groff comments
-
-
Michael(tm) Smith: charmap.groff.xsl; other.xsl
convert no-break space character to groff "\ \&" (instead of just
-"\ "). the reason is that if a space occurs at the end of a line,
-our processing causes it to be eaten. a real-world case of this is
-the mysql(1) man page. appending the "\&" prevents that
-
-
Michael(tm) Smith: block.xsl
output "sp" before simpara output, not after it (outputting it
-after results in undesirable whitespace in particular cases; for
-example, in the hg/mercurial docs
renamed from title-preamble to pinch.together and replaced "sp -1"
-between synopsis fragments with call to pinch.together instead
-
-
Michael(tm) Smith: table.xsl
use title-preamble template for table titles (instead of "sp -1"
-hack), and "sp 1" after all tables (instead of just "sp"
-
-
Michael(tm) Smith: utility.xsl
created title-preamble template for suppressing line spacing after
-headings
-
-
Michael(tm) Smith: info.xsl
further refinement of indenting in AUTHORS section
-
-
Michael(tm) Smith: block.xsl; other.xsl
refined handling of admonitions
-
-
Michael(tm) Smith: lists.xsl
Use RS/RE in another place where we had IP ""
-
-
Michael(tm) Smith: info.xsl
Replace (ab)use of IP with "sp -1" in AUTHORS section with RS/RE
-instead.
-
-
Michael(tm) Smith: table.xsl; synop.xsl; info.xsl
changed all instances of ".sp -1n" to ".sp -1"
-
-
Michael(tm) Smith: other.xsl
add extra line before SH heads only in non-TTY output
-
-
Michael(tm) Smith: block.xsl
Reworked output for admonitions (caution, important, note, tip,
-warning). In TTY output, admonitions now get indented. In non-TTY
-output, a colored marker (yellow) is displayed next to them.
-
-
Michael(tm) Smith: other.xsl
Added BM/EM macros for putting a colored marker in margin next to
-a block of text.
-
-
Michael(tm) Smith: utility.xsl
created make.bold.title template by moving title-bolding part out
-from nested-section-title template. This allows the bolding to
-also be used by the template for formatting admonitions
-
-
Michael(tm) Smith: info.xsl
put .br before copyright contents to prevent them from getting run in
Added the man.charmap.subset.profile.english parameter and refined
-the handling of charmap subsets to differentiate between English
-and non-English source.
-
-This way charmap subsets are now handled is this:
-
-If the value of the man.charmap.use.subset parameter is non-zero,
-and your DocBook source is not written in English (that is, if its
-lang or xml:lang attribute has a value other than en), then the
-character-map subset specified by the man.charmap.subset.profile
-parameter is used instead of the full roff character map.
-
-Otherwise, if the lang or xml:lang attribute on the root element
-in your DocBook source or on the first refentry element in your
-source has the value en or if it has no lang or xml:lang
-attribute, then the character-map subset specified by the
-man.charmap.subset.profile.english parameter is used instead of
-man.charmap.subset.profile.
-
-The difference between the two subsets is that
-man.charmap.subset.profile provides mappings for characters in
-Western European languages that are not part of the Roman
-(English) alphabet (ASCII character set).
-
-
Michael(tm) Smith: other.xsl
Various updates, mainly related to uppercasing SH titles:
-
- - added a "Language: " metadata line to the top comment area of
- output man pages, to indicate the language the page is in
-
- - added a "toupper" macro of doing locale-aware uppercasing of
- SH titles and cross-references to SH titles; the mechanism
- relies on the uppercase.alpha and lowercase.alpha DocBook
- gentext keys to do locale-aware uppercasing based on the
- language the page is written in
-
- - added a "string.shuffle" template, which provides a library
- function for "shuffling" two strings together into a single
- string; it takes the first character for the first string, the
- first character from second string, etc. The only current use
- for it is to generate the argument for the groff tr request
- that does string uppercasing.
-
- - added make.tr.uppercase.arg and make.tr.normalcase.arg named
- templates for use in generating groff code for uppercasing and
- "normal"-casing SH titles
-
- - made the BB/BE "background drawing" macros have effect only in
- non-TTY output
-
- - output a few comments in the top part of source
-
-
Michael(tm) Smith: utility.xsl
removed some leftover kruft
-
-
Michael(tm) Smith: refentry.xsl
To create the name(s) for each man page, we now replace any spaces
-in the refname(s) with underscores. This ensures that tools like
-lexgrog(1) will be able to parse the name (lexgrog won't parse
-names that contain spaces).
-
-
Michael(tm) Smith: docbook.xsl
Put a comment into source of man page to indicate where the main
-content starts. (We now have a few of macro definitions at the
-start of the source, so putting this comment in helps those that
-might be viewing the source.)
-
-
Michael(tm) Smith: refentry.xsl
refined mechanism for generating SH titles
-
-
Michael(tm) Smith: charmap.groff.xsl
Added zcaron, Zcaron, scaron, and Scaron to the groff character map.
-This means that generated Finnish man pages will no longer contain
-any raw accented characters -- they'll instead by marked up with
-groff escapes.
-
-
Michael(tm) Smith: other.xsl; utility.xsl
corrected a regression I introduced about a year ago that caused
-dots to be output just as "\." -- instead needs to be "\&." (which
-is what it will be now, after this change)
-
-
Michael(tm) Smith: refentry.xsl
Changed backend handling for generating titles for SH sections and
-for cross-references to those sections. This should have no effect
-on TTY output (behavior should remain the same hopefully) but
-results in titles in normal case (instead of uppercase) in PS
-output.
-
-
Michael(tm) Smith: info.xsl
use make.subheading template to make subheadings for AUTHORS and
-COPYRIGHT sections (instead of harcoding roff markup)
-
-
Michael(tm) Smith: block.xsl
put code font around programlisting etc.
-
-
Michael(tm) Smith: synop.xsl; docbook.xsl
embed custom macro definitions in man pages, plus wrap synopsis in
-code font
-
-
Michael(tm) Smith: endnotes.xsl
use the make.subheading template to generated SH subheading for
-endnotes section.
-
-
Michael(tm) Smith: lists.xsl
Added some templates for generating if-then-else conditional
-markup in groff, so let's use those instead of hard-coding it in
-multiple places...
-
-
Michael(tm) Smith: other.xsl; utility.xsl
Initial checkin of some changes related to making PS/PDF output
-from "man -l -Tps" look better. The current changes:
-
- - render synopsis and verbatim sections in a monospace/code font
-
- - put a light-grey background behind all programlisting, screen,
- and literallayout instances
-
- - prevent SH heads in PS output from being rendered in uppercase
- (as they are in console output)
-
- - also display xrefs to SH heads in PS output in normal case
- (instead of uppercase)
-
- - draw a line under SH heads in PS output
-
-The changes made to the code to support the above features were:
-
- - added some embedded/custom macros: one for conditionally
- upper-casing SH x-refs, one for redefining the SH macro
- itself, with some conditional handling for PS output, and
- finally a macro for putting a background/screen (filled box)
- around a block of text (e.g., a program listing) in PS output
-
- - added utility templates for wrapping blocks of text in code
- font; also templates for inline code font
-
-
Robert Stayton: refentry.xsl
refpurpose nodes now get apply-templates instead of just normalize-space().
-
-
Michael(tm) Smith: lists.xsl
Fixed alignment of first lined of text for each listitem in
-orderedlist output for TTY. Existing code seemed to have been
-causing an extra undesirable space to appear.
-
-
Michael(tm) Smith: lists.xsl
Wrapped some roff conditionals around roff markup for orderedlist
-and itemizedlist output, so that the lists look acceptable in PS
-output as well as TTY.
Added the man.funcsynopsis.style parameter. Has the same effect in
-manpages output as the funcsynopsis.style parameter has in HTML
-output -- except that its default value is 'ansi' instead of 'kr'.
-
-
Michael(tm) Smith: synop.xsl
Reworked handling of K&R funcprototype output. It no longer relies
-on the HTML kr-tabular templates, but instead just does direct
-transformation to roff. For K&R output, it displays the paramdef
-output in an indented list following the prototype.
-
-
Michael(tm) Smith: synop.xsl
Properly integrated handling for K&R output into manpages
-stylesheet. The choice between K&R output and ANSI output is
-currently controlled through use of the (HTML) funcsynopsis.style
-parameter. Note that because the mechanism does currently rely on
-funcsynopsis.style, the default in manpages output is now K&R
-(because that's the default of that param). But I suppose I ought
-to create a man.funcsynopsis.style and make the default for that
-ANSI (to preserve the existing default behavior).
-
-
Michael(tm) Smith: docbook.xsl
added manpages/pi.xsl file
-
-
Michael(tm) Smith: .cvsignore; pi.xsl
Added "dbman funcsynopsis-style" PI and incorporated it into the
-doc build.
-
-
Michael(tm) Smith: refentry.xsl
Fixed regression that caused an unescaped dash to be output
-between refname and refpurpose content. Closes bug #1894244.
-Thanks to Daniel Leidert.
-
-
Michael(tm) Smith: other.xsl
Fixed problem with dots being escaped in filenames of generated
-man files. Closes #1827195. Thanks to Daniel Leidert.
-
-
Michael(tm) Smith: inline.xsl
Added support for processing structfield (was appearing in roff
-output surrounded by HTML <em> tags; fixed so that it gets roff
-ital markup). Closes bug #1858329. Thanks to Sam Varshavchik.
-
-
-
-
Epub
-
-
The following changes have been made to the
- epub code
- since the 1.73.2 release.
-
Keith Fahlgren: bin/spec/README; bin/spec/epub_realbook_spec.rb
'Realbook' spec now passes
Keith Fahlgren: bin/dbtoepub; README; bin/spec/README; bin/lib/docbook.rb; bin/spec/epub_r⋯
Very primitive Windows support for dbtoepub reference implementation; README for running tests and for the .epub target in general; shorter realbook test document (still fails for now)
Keith Fahlgren: bin/dbtoepub; bin/spec/epub_regressions_spec.rb; bin/lib/docbook.rb; bin/s⋯
Changes to OPF spine to not duplicate idrefs for documents with parts not at the root; regression specs for same
Keith Fahlgren: docbook.xsl
Fixing linking to cover @id, distinct from other needs of cover-image-id (again, thanks to Martin Goerner)
Keith Fahlgren: docbook.xsl
Updating the title of the toc element in the guide to be more explicit (thanks to Martin Goerner)
-
Keith Fahlgren: bin/spec/examples/amasque_exploded/content.opf; bin/spec/examples/amasque_⋯
Initial checkin/merge of epub target from work provided by Paul Norton of Adobe
-and Keith Fahlgren of O'Reilly.
-
-
Keith Fahlgren: docbook.xsl
== General epub test support
-
-$ spec -O ~/.spec.opts spec/epub_spec.rb
-
-DocBook::Epub
-- should be able to be created
-- should fail on a nonexistent file
-- should be able to render to a file
-- should create a file after rendering
-- should have the correct mimetype after rendering
-- should be valid .epub after rendering an article
-- should be valid .epub after rendering an article without sections
-- should be valid .epub after rendering a book
-- should be valid .epub after rendering a book even if it has one graphic
-- should be valid .epub after rendering a book even if it has many graphics
-- should be valid .epub after rendering a book even if it has many duplicated graphics
-- should report an empty file as invalid
-- should confirm that a valid .epub file is valid
-- should not include PDFs in rendered epub files as valid image inclusions
-- should include a TOC link in rendered epub files for <book>s
-
-Finished in 20.608395 seconds
-
-15 examples, 0 failures
-
-
-== Verbose epub test coverage against _all_ of the testdocs
-
-Fails on only (errors truncated):
-1)
-'DocBook::Epub should be able to render a valid .epub for the test document /Users/keith/work/docbook-dev/trunk/xsl/epub/bin/spec/testdocs/calloutlist.003.xml [30]' FAILED
-'DocBook::Epub should be able to render a valid .epub for the test document /Users/keith/work/docbook-dev/trunk/xsl/epub/bin/spec/testdocs/cmdsynopsis.001.xml [35]' FAILED
-....
-
-Finished in 629.89194 seconds
-
-224 examples, 15 failures
-
-224 examples, 15 failures yields 6% failure rate
-
-
-
-
HTMLHelp
-
-
The following changes have been made to the
- htmlhelp code
- since the 1.73.2 release.
-
-
Mauritz Jeanson: htmlhelp-common.xsl
Added <xsl:with-param name="quiet" select="$chunk.quietly"/> to calls to
-the write.chunk, write.chunk.with.doctype, and write.text.chunk templates.
-This makes chunk.quietly=1 suppress chunk filename messages also for help
-support files (which seems to be what one would expect). See bug #1648360.
-
-
-
-
Eclipse
-
-
The following changes have been made to the
- eclipse code
- since the 1.73.2 release.
-
-
David Cramer: eclipse.xsl
Use sortas attributes (if they exist) when sorting indexterms
-
-
David Cramer: eclipse.xsl
Added support for indexterm/see in eclipse index.xml
Generate index.xml file and add related goo to plugin.xml file. Does not yet support see and seealso.
-
-
Mauritz Jeanson: eclipse.xsl
Added <xsl:with-param name="quiet" select="$chunk.quietly"/> to calls to
-the write.chunk, write.chunk.with.doctype, and write.text.chunk templates.
-This makes chunk.quietly=1 suppress chunk filename messages also for help
-support files (which seems to be what one would expect). See bug #1648360.
-
-
-
-
JavaHelp
-
-
The following changes have been made to the
- javahelp code
- since the 1.73.2 release.
-
-
Mauritz Jeanson: javahelp.xsl
Added <xsl:with-param name="quiet" select="$chunk.quietly"/> to calls to
-the write.chunk, write.chunk.with.doctype, and write.text.chunk templates.
-This makes chunk.quietly=1 suppress chunk filename messages also for help
-support files (which seems to be what one would expect). See bug #1648360.
-
-
-
-
Roundtrip
-
-
The following changes have been made to the
- roundtrip code
- since the 1.73.2 release.
-
-
Steve Ball: blocks2dbk.xsl; wordml2normalise.xsl
fix table/cell borders for wordml, fix formal figure, add emphasis-strong
-
-
Mauritz Jeanson: supported.xml
Changed @cols to 5.
-
-
Steve Ball: blocks2dbk.xsl; blocks2dbk.dtd; template.xml
added pubdate, fixed metadata handling in biblioentry
-
-
Steve Ball: supported.xml
Added support for edition.
-
-
Steve Ball: docbook-pages.xsl; wordml-blocks.xsl; docbook.xsl; wordml.xsl; pages-normalise⋯
Removed stylesheets for old, deprecated conversion method.
-
-
Steve Ball: specifications.xml; dbk2ooo.xsl; blocks2dbk.xsl; dbk2pages.xsl; blocks2dbk.dtd⋯
Added support for Open Office, added edition element, improved list and table support in Word and Pages
-
-
Steve Ball: normalise-common.xsl; blocks2dbk.xsl; dbk2pages.xsl; template-pages.xml; templ⋯
Fixed bug in WordML table handling, improved table handling for Pages 08, synchronised WordML and Pages templates.
-
-
Steve Ball: normalise-common.xsl; blocks2dbk.xsl; wordml2normalise.xsl; dbk2wp.xsl
fix caption, attributes
-
-
Steve Ball: specifications.xml; blocks2dbk.xsl; wordml2normalise.xsl; blocks2dbk.dtd; temp⋯
Fixes to table and list handling
-
-
Steve Ball: blocks2dbk.xsl
added support for explicit emphasis character styles
-
-
Steve Ball: wordml2normalise.xsl
added support for customisation in image handling
-
-
Steve Ball: blocks2dbk.xsl
Added inlinemediaobject support for metadata.
-
-
Steve Ball: normalise-common.xsl; blocks2dbk.xsl; template.xml; dbk2wordml.xsl; dbk2wp.xsl
Added support file. Added style locking. Conversion bug fixes.
-
-
-
-
Slides
-
-
The following changes have been made to the
- slides code
- since the 1.73.2 release.
-
-
Michael(tm) Smith: fo/Makefile; html/Makefile
Added checks and hacks to various makefiles to enable building
-under Cygwin. This stuff is ugly and maybe not worth the mess and
-trouble, but does seem to work as expected and not break anything
-else.
-
-
Jirka Kosek: html/plain.xsl
Added support for showing foil number
-
-
-
-
Website
-
-
The following changes have been made to the
- website code
- since the 1.73.2 release.
Added new param man.base.url.for.relative.links .. specifies a
-base URL for relative links (for ulink, @xlink:href, imagedata,
-audiodata, videodata) shown in the generated NOTES section of
-man-page output. The value of man.base.url.for.relative.links is
-prepended to any relative URI that is a value of ulink url,
-xlink:href, or fileref attribute.
-
-If you use relative URIs in link sources in your DocBook refentry
-source, and you leave man.base.url.for.relative.links unset, the
-relative links will appear "as is" in the NOTES section of any
-man-page output generated from your source. That's probably not
-what you want, because such relative links are only usable in the
-context of HTML output. So, to make the links meaningful and
-usable in the context of man-page output, set a value for
-man.base.url.for.relative.links that points
-to the online version of HTML output generated from your DocBook
-refentry source. For example:
-
- <xsl:param name="man.base.url.for.relative.links"
- >http://www.kernel.org/pub/software/scm/git/docs/</xsl:param>
-
-
Michael(tm) Smith: man.string.subst.map.xml
squeeze .sp\n.sp into a single .sp (to prevent a extra, spurious
-line of whitespace from being inserted after programlisting etc.
-in certain cases)
Added the man.charmap.subset.profile.english parameter and refined
-the handling of charmap subsets to differentiate between English
-and non-English source.
-
-This way charmap subsets are now handled is this:
-
-If the value of the man.charmap.use.subset parameter is non-zero,
-and your DocBook source is not written in English (that is, if its
-lang or xml:lang attribute has a value other than en), then the
-character-map subset specified by the man.charmap.subset.profile
-parameter is used instead of the full roff character map.
-
-Otherwise, if the lang or xml:lang attribute on the root element
-in your DocBook source or on the first refentry element in your
-source has the value en or if it has no lang or xml:lang
-attribute, then the character-map subset specified by the
-man.charmap.subset.profile.english parameter is used instead of
-man.charmap.subset.profile.
-
-The difference between the two subsets is that
-man.charmap.subset.profile provides mappings for characters in
-Western European languages that are not part of the Roman
-(English) alphabet (ASCII character set).
-
-
Michael(tm) Smith: man.charmap.subset.profile.xml
Added to default charmap used by manpages:
-
- - the "letters" part of the 'C1 Controls And Latin-1 Supplement
- (Latin-1 Supplement)' Unicode block
- - Latin Extended-A block (but not all of the characters from
- that block have mappings in groff, so some of them are still
- passed through as-is)
-
-The effects of this change are that in man pages generated for
-most Western European languages and for Finnish, all characters
-not part of the Roman alphabet are (e.g., "accented" characters)
-are converted to groff escapes.
-
-Previously, by default we passed through those characters as is
-(and users needed to use the full charmap if they wanted to have
-those characters converted).
-
-As a result of this change, man pages generated for Western
-European languages will be viewable in some environments in which
-they are not viewable if the "raw" non-Roman characters are in them.
Added information on how the filename is computed.
-
-
Mauritz Jeanson: default.table.width.xml
Clarified PI usage.
-
-
Michael(tm) Smith: man.funcsynopsis.style.xml
Added the man.funcsynopsis.style parameter. Has the same effect in
-manpages output as the funcsynopsis.style parameter has in HTML
-output -- except that its default value is 'ansi' instead of 'kr'.
Updated description of img.src.path. Bug #1785224 revealed that
-there was a risk of misunderstanding how it works.
-
-
-
-
Profiling
-
-
The following changes have been made to the
- profiling code
- since the 1.73.2 release.
-
-
Jirka Kosek: xsl2profile.xsl
Added new rules to profile all content generated by HTML Help (including alias files)
-
-
Robert Stayton: profile-mode.xsl
use mode="profile" instead of xsl:copy-of for attributes so
-they can be more easily customized.
-
-
-
-
-
Tools
-
-
The following changes have been made to the
- tools code
- since the 1.73.2 release.
-
-
Michael(tm) Smith: make/Makefile.DocBook
various changes and additions to support making with asciidoc as
-an input format
-
-
Michael(tm) Smith: make/Makefile.DocBook
make dblatex the default PDF maker for the example makefile
-
-
Michael(tm) Smith: xsl/build/html2roff.xsl
Reworked handling of K&R funcprototype output. It no longer relies
-on the HTML kr-tabular templates, but instead just does direct
-transformation to roff. For K&R output, it displays the paramdef
-output in an indented list following the prototype.
-
-
Mauritz Jeanson: xsl/build/make-xsl-params.xsl
Made attribute-sets members of the param list. This enables links to attribute-sets in the
-reference documentation.
-
-
Michael(tm) Smith: xsl/build/html2roff.xsl
use .BI handling in K&R funsynopsis output for manpages, just as
-we do already of ANSI output
-
-
Michael(tm) Smith: xsl/build/html2roff.xsl
Implemented initial support for handling tabular K&R output of
-funcprototype in manpages output. Accomplished by adding more
-templates to the intermediate HTML-to-roff stylesheet that the
-build uses to create the manpages/html-synop.xsl stylesheet.
-
-
Michael(tm) Smith: xsl/build/doc-link-docbook.xsl
Made the xsl/tools/xsl/build/doc-link-docbook.xsl stylesheet
-import profile-docbook.xsl, so that we can do profiling of release
-notes. Corrected some problems in the target for the release-notes
-HTML build.
-
-
-
-
Extensions
-
-
The following changes have been made to the
- extensions code
- since the 1.73.2 release.
-
Keith Fahlgren: Makefile
Use DOCBOOK_SVN variable everywhere, please; build with PDF_MAKER
-
Michael(tm) Smith: Makefile
moved extensions build targets from master xsl/Makefile to
-xsl/extensions/Makefile
-
-
Michael(tm) Smith: .cvsignore
re-adding empty extensions subdir
-
-
-
-
XSL-Saxon
-
-
The following changes have been made to the
- xsl-saxon code
- since the 1.73.2 release.
-
-
Michael(tm) Smith: VERSION
bring xsl2, xsl-saxon, and xsl-xalan VERSION files up-to-date with
-recent change to snapshot build infrastructure
Changed hard-coded file references in "clean" target to variable
-references. Closes #1792043. Thanks to Daniel Leidert.
-
-
Michael(tm) Smith: VERSION; Makefile
Did post-release wrap-up of xsl-saxon and xsl-xalan dirs
-
-
Michael(tm) Smith: nbproject/build-impl.xml; VERSION; Makefile; test
More tweaks to get release-ready
-
-
-
-
XSL-Xalan
-
-
The following changes have been made to the
- xsl-xalan code
- since the 1.73.2 release.
-
-
Michael(tm) Smith: VERSION
bring xsl2, xsl-saxon, and xsl-xalan VERSION files up-to-date with
-recent change to snapshot build infrastructure
-
-
Michael(tm) Smith: nbproject/build-impl.xml
Changed hard-coded file references in "clean" target to variable
-references. Closes #1792043. Thanks to Daniel Leidert.
-
-
Michael(tm) Smith: Makefile; VERSION
Did post-release wrap-up of xsl-saxon and xsl-xalan dirs
-
-
Michael(tm) Smith: Makefile; nbproject/build-impl.xml; VERSION
More tweaks to get release-ready
-
-
-
-
XSL-libxslt
-
-
The following changes have been made to the
- xsl-libxslt code
- since the 1.73.2 release.
-
-
Mauritz Jeanson: python/xslt.py
Print the result to stdout if no outfile has been given.
-Some unnecessary semicolons removed.
-
-
Mauritz Jeanson: python/xslt.py
Added a function that quotes parameter values (to ensure that they are interpreted as strings).
-Replaced deprecated functions from the string module with string methods.
renamed xsl-libxslt/python/README to xsl-libxslt/python/README.LIBXSLT
-
-
Mauritz Jeanson: python/README
Tweaked the text a little.
-
-
-
-
-
-
Release Notes: 1.73.2
-
-
This is solely a minor bug-fix update to the 1.73.1 release.
- It fixes a packaging error in the 1.73.1 package, as well as a
- bug in footnote handling in FO output.
-
-
-
Release: 1.73.1
-
-
This is mostly a bug-fix update to the 1.73.0 release.
-
-
Gentext
-
-
The following changes have been made to the
- gentext code
- since the 1.73.0 release.
The following changes have been made to the
- fo code
- since the 1.73.0 release.
-
-
Mauritz Jeanson: table.xsl
Modified the tgroup template so that, for tables with multiple tgroups,
-a width attribute is output on all corresponding fo:tables. Previously,
-there was a test prohibiting this (and a comment saying that outputting more
-than one width attribute will cause an error). But this seems to be no longer
-relevant; it is not a problem with FOP 0.93 or XEP 4.10. Closes bug #1760559.
-
-
Mauritz Jeanson: graphics.xsl
Replaced useless <a> elements with warning messages (textinsert extension).
-
-
Mauritz Jeanson: admon.xsl
Enabled generation of ids (on fo:wrapper) for indexterms in admonition titles, so that page
-references in the index can be created. Closes bug #1775086.
-
-
-
-
HTML
-
-
The following changes have been made to the
- html code
- since the 1.73.0 release.
-
-
Mauritz Jeanson: titlepage.xsl
Added <xsl:call-template name="process.footnotes"/> to abstract template
-so that footnotes in info/abstract are processed. Closes bug #1760907.
-
-
Michael(tm) Smith: pi.xsl; synop.xsl
Changed handling of HTML output for the cmdsynopsis and
-funcsynopsis elements, such that a@id instances are generated for
-them if they are descendants of any element containing a dbcmdlist
-or dbfunclist PI. Also, update the embedded reference docs for the
-dbcmdlist and dbfunclist PIs to make it clear that they can be
-used within any element for which cmdsynopsis or funcsynopsis are
-valid children.
-
-
Michael(tm) Smith: formal.xsl
Reverted the part of revision 6952 that caused a@id anchors to be
-generated for output of informal objects. Thanks to Sam Steingold
-for reporting.
Modified legalnotice template so that the base.name parameter is calculated
-in the same way as for revhistory chunks. Using <xsl:apply-templates
-mode="chunk-filename" select="."/> did not work for single-page output since
-the template with that mode is in chunk-code.xsl.
-
-
Mauritz Jeanson: graphics.xsl
Updated support for SVG (must be a child of imagedata in DB 5).
-Added support for MathML in imagedata.
-
-
Mauritz Jeanson: pi.xsl
Added documentation for the dbhh PI (used for context-sensitive HTML Help).
-(The two templates matching 'dbhh' are still in htmlhelp-common.xsl).
-
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.73.0 release.
-
-
Michael(tm) Smith: endnotes.xsl
In manpages output, generate warnings about notesources with
-non-para children only if the notesource is a footnote or
-annotation. Thanks to Sam Steingold for reporting problems with
-the existing handling.
-
-
-
-
HTMLHelp
-
-
The following changes have been made to the
- htmlhelp code
- since the 1.73.0 release.
-
-
Michael(tm) Smith: htmlhelp-common.xsl
Added single-pass namespace-stripping support to the htmlhelp,
-eclipse, and javahelp stylesheets.
-
-
-
-
Eclipse
-
-
The following changes have been made to the
- eclipse code
- since the 1.73.0 release.
-
-
Michael(tm) Smith: eclipse.xsl
Added single-pass namespace-stripping support to the htmlhelp,
-eclipse, and javahelp stylesheets.
-
-
-
-
JavaHelp
-
-
The following changes have been made to the
- javahelp code
- since the 1.73.0 release.
-
-
Michael(tm) Smith: javahelp.xsl
Added single-pass namespace-stripping support to the htmlhelp,
-eclipse, and javahelp stylesheets.
-
-
-
-
Roundtrip
-
-
The following changes have been made to the
- roundtrip code
- since the 1.73.0 release.
-
-
Steve Ball: blocks2dbk.xsl; blocks2dbk.dtd; pages2normalise.xsl
Modularised blocks2dbk to allow customisation,
-Added support for tables to pages2normalise
-
-
-
-
Params
-
-
The following changes have been made to the
- params code
- since the 1.73.0 release.
-
-
Robert Stayton: procedure.properties.xml
procedure was inheriting keep-together from formal.object.properties, but
-a procedure does not need to be kept together by default.
-
-
Dave Pawson: title.font.family.xml; component.label.includes.part.label.xml; table.frame.b⋯
Regular formatting re-org.
-
-
-
-
-
Release: 1.73.0
-
-
This release includes important bug fixes and adds the following
-significant feature changes:
-
New localizations and localization updates
-
We added two new localizations: Latvian and
- Esperanto, and made updates to the Czech, Chinese
- Simplified, Mongolian, Serbian, Italian, and Ukrainian
- localizations.
New documentation for processing instructions (PI)
-
The reference documentation that ships with the
- release now includes documentation on all PIs that you can use to
- control output from the stylesheets.
-
New profiling parameters for audience and wordsize
-
You can now do profiling based on the values of the
- audience and
- wordsize attributes.
-
Changes to man-page output
-
The manpages stylesheet now supports single-pass
- profiling and single-pass DocBook 5 namespace stripping
- (just as the HTML and FO stylesheets also do). Also, added
- handling for mediaobject &
- inlinemediaobject. (Each imagedata,
- audiodata, or videodata element
- within a mediaobject or inline
- mediaobject is now treated as a "notesource"
- and so handled in much the same way as links and
- annotation/alt/footnote
- are in manpages output.) And added the
- man.authors.section.enabled and
- man.copyright.section.enabled
- parameters to enable control over whether output includes
- auto-generated AUTHORS and
- COPYRIGHT sections.
-
Highlighting support for C
-
The highlighting mechanism for generating
- syntax-highlighted code snippets in output now supports C
- code listings (along with Java, PHP, XSLT, and others).
-
Experimental docbook-xsl-update script
-
We added an experimental docbook-xsl-update
- script, the purpose of which is to facilitate
- easy sync-up to the latest docbook-xsl snapshot (by means
- of rsync).
-
-
-
-
Gentext
-
-
The following changes have been made to the
-gentext code
-since the 1.72.0 release.
-
-
Michael(tm) Smith: locale/lv.xml; Makefile
Added Latvian localization file, from Girts Ziemelis.
-
-
Dongsheng Song: locale/zh_cn.xml
Brought up to date with en.xml in terms of items. A few strings marked for translation.
-
-
Jirka Kosek: locale/cs.xml
Added missing translations
-
-
Robert Stayton: locale/eo.xml
New locale for Esperanto.
-
-
Robert Stayton: locale/mn.xml
Update from Ganbold Tsagaankhuu.
-
-
Jirka Kosek: locale/en.xml; locale/cs.xml
Rules for normalizing glossary entries before they are sorted can be now different for each language.
Added support to the HTML stylesheets for proper processing of
-orgname as a child of author.
-
-
Michael(tm) Smith: refentry.xsl
Refined logging output of refentry metadata-gathering template;
-for some cases of "missing" elements (refmiscinfo stuff, etc.),
-the log messages now include URL to corresponding page in the
-Definitive Guide (TDG).
Added support for correct handling of xref to elements that
-contain info/title descendants but no title children.
-
-This should be further refined so that it handles any *info
-elements. And there are probably some other places where similar
-handling for *info/title should be added.
-
-
Mauritz Jeanson: pi.xsl
Modified <xsl:when> in datetime.format template to work
-around Xalan bug.
-
-
-
FO
-
-
The following changes have been made to the
-fo code
-since the 1.72.0 release.
-
-
Robert Stayton: component.xsl
Add parameters to the page.sequence utility template.
-
-
Mauritz Jeanson: xref.xsl
Added template for xref to area/areaset.
-Part of fix for bug #1675513 (xref to area broken).
-
-
Michael(tm) Smith: inline.xsl
Added template match for person element to fo stylesheet.
-
-
Robert Stayton: lists.xsl
Added support for spacing="compact" in variablelist, per bug report #1722540.
-
-
Robert Stayton: table.xsl
table pgwide="1" should also use pgwide.properties attribute-set.
Improved the page.sequence utility template for use with book.
-
-
Robert Stayton: division.xsl
Refactored the big book template into smaller pieces.
-Used the "page.sequence" utility template in
-component.xsl to shorten the toc piece.
-Added placeholder templates for front.cover and back.cover.
-
-
Robert Stayton: param.xweb; param.ent; sections.xsl
Added support for formatting biblioentries according to ISO690 citation style.
-New bibliography style can be turned on by setting parameter bibliography.style to "iso690"
-The code was provided by Jana Dvorakova
-
-
Robert Stayton: param.xweb; param.ent; pagesetup.xsl
Add header.table.properties and footer.table.properties attribute-sets.
The following changes have been made to the
- html code
- since the 1.72.0 release.
-
-
Mauritz Jeanson: param.xweb; param.ent
Moved declaration and documentation of javahelp.encoding from javahelp.xsl to the
-regular "parameter machinery".
-
-
Michael(tm) Smith: admon.xsl
Changed handling of titles for note, warning, caution, important,
-tip admonitions: We now output and HTML h3 head only if
-admon.textlabel is non-zero or if the admonition actually contains
-a title; otherwise, we don't output an h3 head at all.
-(Previously, we were outputting an empty h3 if the admon.textlabel
-was zero and if the admonition had no title.)
-
-
Mauritz Jeanson: xref.xsl
Added template for xref to area/areaset.
-Part of fix for bug #1675513 (xref to area broken).
Added new param abstract.notitle.enabled.
-If non-zero, in output of the abstract element on titlepages,
-display of the abstracttitle is suppressed.
-Because sometimes you really don't want or need that title
-there...
-
-
Michael(tm) Smith: chunk-code.xsl; graphics.xsl
When we are chunking long descriptions for mediaobject instances
-into separate HTML output files, and use.id.as.filename is
-non-zero, if a mediaobject has an ID, use that ID as the basename
-for the long-description file (otherwise, we generate an ID for it
-and use that ID as the basename for the file).
-The parallels the recent change made to cause IDs for legalnotice
-instances to be used as basenames for legalnotice chunks.
-Also, made some minor refinements to the recent changes for
-legalnotice chunk handling.
-
-
Michael(tm) Smith: titlepage.xsl
Added support to the HTML stylesheets for proper processing of
-orgname as a child of author.
-
-
Michael(tm) Smith: chunk-code.xsl
When $generate.legalnotice.link is non-zero and
-$use.id.as.filename is also non-zero, if a legalnotice has an ID,
-then instead of assigning the "ln-<generatedID>" basename to the
-output file for that legalnotice, just use its real ID as the
-basename for the file -- as we do when chunking other elements
-that have IDs.
-
-
David Cramer: xref.xsl
Handle alt text on xrefs to steps when the step doesn't have a title.
-
-
David Cramer: lists.xsl
Added <p> element around term in variablelist when formatted as table to avoid misalignment of term and listitem in xhtml (non-quirks mode) output
-
-
David Cramer: qandaset.xsl
Added <p> element around question and answer labels to avoid misalignment of label and listitem in xhtml (non-quirks mode) output
-
-
David Cramer: lists.xsl
Added <p> element around callouts to avoid misalignment of callout and listitem in xhtml (non-quirks mode) output
Add support for new profiling attributes audience and wordsize.
-
-
Robert Stayton: inline.xsl; xref.xsl
Add support for xlink olinks.
-
-
Jirka Kosek: glossary.xsl
Rules for normalizing glossary entries before they are sorted can be now different for each language.
-
-
Robert Stayton: chunk-common.xsl; chunk-code.xsl; manifest.xsl; chunk.xsl
Refactored the chunking modules to move all named templates to
-chunk-common.xsl and all match templates to chunk-code.xsl, in
-order to enable better chunk customization.
-See the comments in chunk.xsl for more details.
Added support for formatting biblioentries according to ISO690 citation style.
-New bibliography style can be turned on by setting parameter bibliography.style to "iso690"
-The code was provided by Jana Dvorakova
-
-
Robert Stayton: inline.xsl; xref.xsl
Add call to class.attribute to <a> output elements so they can
-have a class value too.
-
-
Mauritz Jeanson: glossary.xsl
Fixed bug #1644881:
-* Added curly braces around all $language attribute values.
-* Moved declaration of language variable to top level of stylesheet.
-Tested with Xalan, Saxon, and xsltproc.
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.72.0 release.
Took the test that the manpages stylesheet does to see if there
-are any Refentry chilren in current doc, and made it
-namespace-agnostic. Reason for that is because the test otherwise
-won't work when it is copied over into the generated
-profile-docbook.xsl stylesheet.
-
-
Michael(tm) Smith: Makefile
Added a manpages/profile-docbook.xsl file to enable single-pass
-profiling for manpages output.
-
-
Michael(tm) Smith: info.xsl
Output copyright and legalnotice in man-page output in whatever
-place they are in in document order. Closes #1690539. Thanks to
-Daniel Leidert for reporting.
-
-
Michael(tm) Smith: docbook.xsl
Restored support for single-pass namespace stripping to manpages
-stylesheet.
Changed handling of bold and italic/underline output in manpages
-output. Should be transparent to users, but...
-
-This touches handling of all bold and italic/underline output. The
-exact change is that the mode="bold" and mode="italic" utility
-templates were changed to named templates. (I think maybe I've
-changed it back and forth from mode to named before, so this is
-maybe re-reverting it yet again).
-
-Anyway, the reason for the change is that the templates are
-sometimes call on dynamically node-sets, and using modes to format
-those doesn't allow passing info about the current/real context
-node from the source (not the node-set created by the stylesheet)
-to that formatting stage.
-
-The named templates allow the context to be passed in as a
-parameter, so that the bold/ital formatting template can use
-context-aware condition checking.
-
-This was basically necessary in order to suppress bold formatting
-in titles, which otherwise gets screwed up because of the numbnut
-way that roff handles nested bold/ital.
-
-Closes #1674534). Much thanks to Daniel Leidert, whose in his
-docbook-xsl bug-finding kung-fu has achieved Grand Master status.
-
-
Michael(tm) Smith: block.xsl
Fixed handling of example instances by adding the example element
-to the same template we use for processing figure. Closes
-#1674538. Thanks to Daniel Leidert.
-
-
Michael(tm) Smith: utility.xsl
Don't include lang in manpages filename/pathname if lang=en (that
-is, only generate lang-qualified file-/pathnames for non-English).
-
-
Michael(tm) Smith: endnotes.xsl
In manpages output, emit warnings for notesources (footnote, etc.)
-that have something other than para as a child.
-
-The numbered-with-hanging-indent formatting that's used for
-rendering endnotes in the NOTES section of man pages places some
-limits/assumptions on how the DocBook source is marked up; namely,
-for notesources (footnote, annotation, etc.) that can contain
-block-level children, if the they have a block-level child such as
-a table or itemizedlist or orderedlist that is the first child of
-a footnote, we have no way of rendering/indenting its content
-properly in the endnotes list.
-
-Thus, the manpages stylesheet not emits a warning message for that
-case, and suggests the "fix" (which is to wrap the table or
-itemizedlist or whatever in a para that has some preferatory text.
-
-
Michael(tm) Smith: utility.xsl
Added support to mixed-block template for handling tables in
-mixed-blocks (e.g., as child of para) correctly.
Reverted necessary escaping of backslash, dot, and dash
-out of the well-intentioned (but it now appears,
-misguided) "marker" mechanism (introduced in the 1.72.0
-release) -- which made use of alternative "marker"
-characters as internal representations of those
-characters, and then replaced them just prior to
-serialization -- and back into what's basically the
-system that was used prior to the 1.69.0 release; that
-is, into a part of stylesheet code that gets executed
-at the beginning of processing -- before any other roff
-markup up is. This change obviates the need for the
-marker system. It also requires a lot less RAM during
-processing (for large files, the marker mechanism
-ending up requiring gigabytes of memory).
-
-Closes bug #1661177. Thanks to Scott Smedley for
-providing a test case (the fvwm man page) that exposed
-the problem with the marker mechanism.
-
-Also moved the mechanism for converting non-breaking
-spaces back into the same area of the stylesheet code.
-
-
Michael(tm) Smith: lists.xsl
Fixed problem with incorrect formatting of nested variablelist.
-Closes bug #1650931. Thanks to Daniel "Eagle Eye" Leidert.
-
-
Michael(tm) Smith: lists.xsl
Make sure that all listitems in itemizedlist and orderedlist are
-preceded by a blank line. This fixes a regression that occurred
-when instances of the TP macro that were use in a previous
-versions of the list-handling code were switched to RS/RE (because
-TP doesn't support nesting). TP automatically generates a blank
-line, but RS doesn't. So I added a .sp before each .RS
Made a number of changes related to elements with
-out-of-line content:
-
-- Added handling for mediaobject & inlinemediaobject.
- Each imagedata, audiodata, or videodata element
- within a mediaobject or inline mediaobject is now
- treated as a "notesource" and so handled in much the
- same way as links and annotation/alt/footnotes.
-
- That means a numbered marker is generated inline to
- mark the place in the main flow where the imagedata,
- audiodata, or videodata element occurs, and a
- corresponding numbered endnote for it is generated in
- the endnotes list at the end of the man page; the
- endnote contains the URL from the fileref attribute
- of the imagedata, audiodata, or videodata element.
-
- For mediobject and inlinemediaobject instances that
- have a textobject child, the textobject is displayed
- within the main text flow.
-
-- Renamed several man.link.* params to man.endnotes.*,
- to reflect that fact that the endnotes list now
- contains more than just links. Also did similar
- renaming for a number of stylesheet-internal vars.
-
-- Added support for xlink:href (along with existing
- support for the legacy ulink element).
-
-- Cleaned up and streamlined the endnotes-handling
- code. It's still messy and klunky and the basic
- mechanism it uses is very inefficent for documents
- that contain a lot of notesources, but at least it's
- a bit better than it was.
-
-
-
Eclipse
-
-
The following changes have been made to the
- eclipse code
- since the 1.72.0 release.
-
-
Mauritz Jeanson: Makefile
Fixed bug #1715093: Makefile for creating profiled version of eclipse.xsl added.
-
-
David Cramer: eclipse.xsl
Added normalize-space around to avoid leading whitespace from appearing in the output if there's extra leading whitespace (e.g. <title> Foo</title>) in the source
-
-
-
JavaHelp
-
-
The following changes have been made to the
- javahelp code
- since the 1.72.0 release.
-
-
Mauritz Jeanson: javahelp.xsl
Implemented FR #1230233 (sorted index in javahelp).
-
-
Mauritz Jeanson: javahelp.xsl
Added normalize-space() around titles and index entries to work around whitespace problems.
-Added support for glossary and bibliography in toc and map files.
-
-
-
Roundtrip
-
-
The following changes have been made to the
- roundtrip code
- since the 1.72.0 release.
-
-
Steve Ball: blocks2dbk.xsl; wordml2normalise.xsl; normalise2sections.xsl; sections2blocks.⋯
new stylesheets for better word processor support and easier maintenance
-
-
Steve Ball: template-pages.xml; dbk2wp.xsl; sections-spec.xml
fixed bugs
-
-
-
Params
-
-
The following changes have been made to the
- params code
- since the 1.72.0 release.
Added new param abstract.notitle.enabled.
-If non-zero, in output of the abstract element on titlepages,
-display of the abstracttitle is suppressed.
-Because sometimes you really don't want or need that title
-there...
-
-
Michael(tm) Smith: man.string.subst.map.xml
Updated manpages string-substitute map to reflect fact that
-because of another recent change to suppress bold markup in .SH
-output, we no longer need to add a workaround for the accidental
-uppercasing of roff escapes that occurred previously.
Added support for formatting biblioentries according to ISO690 citation style.
-New bibliography style can be turned on by setting parameter bibliography.style to "iso690"
-The code was provided by Jana Dvorakova
-
-
Robert Stayton: header.table.properties.xml; footer.table.properties.xml
Support adding table properties to header and footer tables.
-
-
-
Highlighting
-
-
The following changes have been made to the
- highlighting code
- since the 1.72.0 release.
-
-
Jirka Kosek: c-hl.xml; xslthl-config.xml
Added support for C language. Provided by Bruno Guegan.
-
-
-
Profiling
-
-
The following changes have been made to the
- profiling code
- since the 1.72.0 release.
-
-
Robert Stayton: profile-mode.xsl
Add support for new profiling attributes audience and wordsize.
-
-
-
Lib
-
-
The following changes have been made to the
- lib code
- since the 1.72.0 release.
-
-
Michael(tm) Smith: lib.xweb
Changed name of prepend-pad template to pad-string and twheeked so
-it can do both right/left padding.
-
-
-
Tools
-
-
The following changes have been made to the
- tools code
- since the 1.72.0 release.
-
-
Michael(tm) Smith: bin; bin/docbook-xsl-update
Did some cleanup to the install.sh source and added a
-docbook-xsl-update script to the docbook-xsl distro, the purpose
-of which is to facilitate easy sync-up to the latest docbook-xsl
-snapshot (by means of rsync).
-
-
-
XSL-Saxon
-
-
The following changes have been made to the
- xsl-saxon code
- since the 1.72.0 release.
Added modifications so that the new callout.icon.size parameter is taken into account. This
-parameter is used for FO output (where SVG now is the default graphics format for callouts).
Added code for generating id attributes on callouts in HTML and FO output.
-These patches enable cross-references to callouts placed by area coordinates.
-It works for graphic, unicode and text callouts.
-Part of fix for bug #1675513 (xref to area broken).
The following changes have been made to the
- xsl-xalan code
- since the 1.72.0 release.
-
-
Michael(tm) Smith: Makefile; xalan2
Turned off xalan2.jar build. This removes DocBook XSL
-Java extensions support for versions of Xalan prior to
-Xalan 2.7. If you are currently using the extensions
-with an earlier version of Xalan, you need to upgrade
-to Xalan 2.7.
Added modifications so that the new callout.icon.size parameter is taken into account. This
-parameter is used for FO output (where SVG now is the default graphics format for callouts).
Added code for generating id attributes on callouts in HTML and FO output.
-These patches enable cross-references to callouts placed by area coordinates.
-It works for graphic, unicode and text callouts.
-Part of fix for bug #1675513 (xref to area broken).
This release includes important bug fixes and adds the following
-significant feature changes:
-
Automatic sorting of glossary entries
-
The HTML and FO stylesheets now support automatic sorting
- of glossary entries. To enable glossary sorting, set
- the value of the glossary.sort parameter
- to 1 (by default, it’s value is
- 0). When you enable glossary sorting,
- glossentry elements within a glossary,
- glossdiv, or glosslist are sorted on the
- glossterm, using the current language setting. If you
- don’t enable glossary sorting, then the order of
- glossentry elements is left “as is” — that is, they
- are not sorted but are instead just displayed in document
- order.
-
WordML renamed to Roundtrip, OpenOffice support added
-
Stylesheets for “roundtrip” conversion between documents in
- OpenOffice format (ODF) and DocBook XML have been added to the set
- of stylesheets that formerly had the collective title
- WordML, and that set of stylesheets has
- been renamed to Roundtrip to better
- reflect the actual scope and purpose of its contents.
-
So the DocBook XSL Stylesheets now support roundtrip
- conversion (with certain limitations) of WordML, OpenOffice, and
- Apple Pages documents to and from DocBook XML.
-
Including QandASet questions in TOCs
-
The HTML stylesheet now provides support for including
- QandASetquestions in the document TOC. To
- enable display of questions in the document TOC, set
- the value of the qanda.in.toc to
- 1 (by default, it’s 0). When you
- enable qanda.in.toc, then the generated
- table of contents for a document will include
- qandaset titles, qandadiv titles, and
- question elements. The default value of zero
- excludes them from the TOC.
-
Note
-
The qanda.in.toc parameter does
- not affect any tables of contents that may be generated
- within a qandaset or
- qandadiv (only in the document TOC).
-
-
-
Language identifier in man-page filenames and pathnames
-
Added new parameter man.output.lang.in.name.enabled, which controls whether
- a language identifier is included in man-page filenames and
- pathnames. It works like this:
-
-
If the value of man.output.lang.in.name.enabled is non-zero,
- man-page files are output with a language identifier included in
- their filenames or pathnames as follows:
-
-
if
- man.output.subdirs.enabled is non-zero,
- each file is output to, e.g., a
- /$lang/man8/foo.8 pathname
For FO output, use the
- index.page.number.properties to control
- formatting of page numbers in index output — to (for
- example) to display page numbers in index output in a
- different color (to indicate that they are links).
-
Crop marks in output from Antenna House XSL Formatter
-
Support has been added for generating crop marks in
- print/PDF output generated using Antenna House XSL Formatter
The hardcoded properties used in verbatim elements (literallayout,
- programlisting, screen) were moved to the verbatim.properties
- attribute-set so they can be more easily customized.
-
enhanced simple.xlink template
-
Now the simple.xlink template in inline.xsl works with
- cross reference elements xref and link as well. Also, more elements
- call simple.xlink, which enables DB5 xlink functionality.
-
-
DocBook 5 compatibility
-
Stylesheets now consistently support DocBook 5 attributes
- (such as xml:id). Also, DocBook 5 info elements are now checked
- along with other *info elements, and the use of name() function
- was replaced by local-name() so it also matches on DocBook 5 elements.
- These changes enable reusing the stylesheets with DocBook 5
- documents with minimal fixup.
-
-
HTML class attributes now handled in class.attribute mode
-
The HTML class attributes were formerly hardcoded to the
- element name. Now the class attribute is generated by applying
- templates in class.attribute mode so class attribute names
- can be customized. The default is still the element name.
-
arabic-indic numbering enabled in autolabels
-
Numbering of chapter, sections, and pages can now use
- arabic-indic numbering when number format is set to 'arabicindic' or
- to ١.
-
-The following is a detailed list of changes (not
-including bug fixes) that have been made since the 1.71.1
-release.
-
-
Common
-
-
The following changes have been made to the
- common code
- since the 1.71.1 release.
-
-
Add support for arabicindic numbering to autolabel.format template.
-
-
Finish support for @xml:id everywhere @id is used.
Fixed imagemaps so they work properly going from calspair coords
-to HTML area coords.
-
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.71.1 release.
-
-
Added doc for man.output.lang.in.name.enabled parameter. This
-checkin completes support for writing file/pathnames for man-pages
-with $lang include in the names. Closes #1585967. knightly
-accolades to Daniel Leidert for providing the feature request.
-
-
Added new param man.output.lang.in.name.enabled, which
-controls whether $LANG value is included in manpages
-filenames and pathnames. It works like this:
-
-If the value of man.output.lang.in.name.enabled is non-zero,
-man-page files are output with the $lang value included in
-their filenames or pathnames as follows;
-
-- if man.output.subdirs.enabled is non-zero, each file is
- output to, e.g., a /$lang/man8/foo.8 pathname
-
-- if man.output.subdirs.enabled is zero, each file is output
- with a foo.$lang.8 filename
-
-
Use "\e" instead of "\\" for backslash output, because the
-groff docs say that's the correct thing to do; also because
-testing (thanks, Paul Dubois) shows that "\\" doesn't always
-work as expected; for example, "\\" within a table seems to
-mess things up.
-
-
Added the man.string.subst.map.local.pre and
-man.string.subst.map.local.post parameters. Those parameters
-enable local additions and changes to string-substitution mappings
-without the need to change the value of man.string.subst.map
-parameter (which is for standard system mappings). Closes
-#1456738. Thanks to Sam Steingold for constructing a true
-stylesheet torture test (the clisp docs) that exposed the need for
-these params.
-
-
Added the Markup element to the list of elements that get output
-in bold. Thanks to Eric S. Raymond.
-
-
Replaced all dots in roff requests with U+2302 ("house"
-character), and added escaping in output for all instances of dot
-that are not in roff requests. This fixes the problem case where a
-string beginning with a dot (for example, the string ".bashrc")
-might occur at the beginning of a line in output, in which case
-would mistakenly get interpreted as a roff request. Thanks to Eric
-S. Raymond for pushing to fix this.
-
-
Made change to ensure that list content nested in
-itemizedlist and orderedlist instances is properly indented. This
-is a switch from using .TP to format those lists to using .RS/.RE
-to format them instead (because .TP does not allow nesting). Closes bug #1602616.
-Thanks to Daniel Leidert.
-
-
-
-
Params
-
-
The following changes have been made to the
- params code
- since the 1.71.1 release.
-
-
Added doc for man.output.lang.in.name.enabled parameter. This
-checkin completes support for writing file/pathnames for man-pages
-with $lang include in the names. Closes #1585967. knightly
-accolades to Daniel Leidert for providing the feature request.
-
-
Added new param man.output.lang.in.name.enabled, which
-controls whether $LANG value is included in manpages
-filenames and pathnames. It works like this:
-
-If the value of man.output.lang.in.name.enabled is non-zero,
-man-page files are output with the $lang value included in
-their filenames or pathnames as follows;
-
-- if man.output.subdirs.enabled is non-zero, each file is
- output to, e.g., a /$lang/man8/foo.8 pathname
-
-- if man.output.subdirs.enabled is zero, each file is output
- with a foo.$lang.8 filename
-
-
Added the man.string.subst.map.local.pre and
-man.string.subst.map.local.post parameters. Those parameters
-enable local additions and changes to string-substitution mappings
-without the need to change the value of man.string.subst.map
-parameter (which is for standard system mappings). Closes
-#1456738. Thanks to Sam Steingold for constructing a true
-stylesheet torture test (the clisp docs) that exposed the need for
-these params.
Add option to include qanda in tables of contents.
-
-
Moved all properties to attribute-sets so can be customized more easily.
-
-
-
-
Template
-
-
The following changes have been made to the
- template code
- since the 1.71.1 release.
-
-
Added workaround for Xalan bug: use for-each and copy instead of copy-of (#1604770).
-
-
-
-
Roundtrip
-
-
The following changes have been made to the
- roundtrip code
- since the 1.71.1 release.
-
-
rename to roundtrip, add OpenOffice support
-
-
-
-
-
Release: 1.71.1
-
-
This is a minor update to the 1.71.0 release. Along with a
-number of bug fixes, it includes two feature changes:
-
-
-
Added support for profiling based on xml:lang and status attributes.
-
-
Added initial support in manpages output for
- footnote, annotation, and alt
- instances. Basically, they all now get handled the same way
- ulink instances are. They are treated as a class as
- "note sources": A numbered marker is generated at the place in the
- main text flow where they occur, then their contents are displayed
- in an endnotes section at the end of the man page.
-
-
-
-
Common
-
-
The following changes have been made to the
- common code
- since the 1.71.1 release.
-
-
For backward compatability autoidx-ng.xsl is invoking "kosek" indexing method again.
-
-
Add support for Xalan generating a root xml:base like saxon.
-
-
-
-
FO
-
-
The following changes have been made to the
- fo code
- since the 1.71.1 release.
-
-
For backward compatability autoidx-ng.xsl is invoking "kosek" indexing method again.
-
-
Add support for Xalan to add root node xml:base for db5 docs.
-
-
Added support for profiling based on xml:lang and status attributes.
-
-
-
-
HTML
-
-
The following changes have been made to the
- html code
- since the 1.71.1 release.
-
-
For backward compatability autoidx-ng.xsl is invoking "kosek" indexing method again.
-
-
Add support for Xalan to add root node xml:base for db5 docs.
-
-
Added support for profiling based on xml:lang and status attributes.
-
-
Made changes in namespace declarations to prevent xmllint's
-canonicalizer from treating them as relative namespace URIs.
-
- - Changed xmlns:k="java:com.isogen.saxoni18n.Saxoni18nService"
- to xmlns:k="http://www.isogen.com/functions/com.isogen.saxoni18n.Saxoni18nService";
- Saxon accepts either form
- (see http://www.saxonica.com/documentation/extensibility/functions.html);
- to Saxon, "the part of the URI before the final '/' is immaterial".
-
- - Changed, e.g. xmlns:xverb="com.nwalsh.xalan.Verbatim" to
- xmlns:xverb="xalan://com.nwalsh.xalan.Verbatim"; Xalan accepts
- either form
- (see http://xml.apache.org/xalan-j/extensions.html#java-namespace-declare);
- just as Saxon does, it will "simply use the string to the
- right of the rightmost forward slash as the Java class name".
-
- - Changed xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect"
- to xmlns:redirect="http://xml.apache.org/xalan/redirect", and
- adjusted associated code to make the current Xalan redirect spec.
- (see http://xml.apache.org/xalan-j/apidocs/org/apache/xalan/lib/Redirect.html)
-
-
Added the html.append and chunk.append parameters. By default, the
-value of both is empty; but the internal DocBook XSL stylesheets
-build sets their value to "<xsl:text>
</xsl:text>", in order
-to ensure that all files in the docbook-xsl-doc package end in a
-newline character. (Because diff and some other tools may emit
-error messages and/or not behave as expected when processing
-files that are not newline-terminated.)
-
-
-
-
Highlighting
-
-
The following changes have been made to the
- highlighting code
- since the 1.71.1 release.
-
-
Added license information
-
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.71.1 release.
-
-
Added initial support in manpages output for footnote, annotation,
-and alt instances. Basically, they all now get handled the same
-way ulink instances are. They are treated as a class as "note
-sources": A numbered marker is generated at the place in the main
-text flow where they occur, then their contents are displayed in
-an endnotes section at the end of the man page (currently titled
-REFERENCES, for English output, but will be changed to NOTES).
-
-This support is not yet complete. It works for most "normal"
-cases, but probably mishandles a good number of cases. More
-testing will be needed to expose the problems. It may well also
-introduce some bugs and regressions in other areas, including
-basic paragraph handling, handling of "mixed block" content,
-handling of other indented content, and handling of authorblurb
-and personblurb in the AUTHORS section.
-
-
-
-
Params
-
-
The following changes have been made to the
- params code
- since the 1.71.1 release.
-
-
Added support for profiling based on xml:lang and status attributes.
-
-
Added the html.append and chunk.append parameters. By default, the
-value of both is empty; but the internal DocBook XSL stylesheets
-build sets their value to "<xsl:text>
</xsl:text>", in order
-to ensure that all files in the docbook-xsl-doc package end in a
-newline character. (Because diff and some other tools may emit
-error messages and/or not behave as expected when processing
-files that are not newline-terminated.)
-
-
-
-
Profiling
-
-
The following changes have been made to the
- profiling code
- since the 1.71.1 release.
-
-
Added support for profiling based on xml:lang and status attributes.
-
-
-
-
-
-
Release: 1.71.0
-
-
This is mainly a bug fix release, but it also includes two
-significant feature changes:
-
Highlighting support added
-
The stylesheets now include support for source-code
- highlighting in output of programlisting instances (controlled
- through the highlight.source
- parameter). The Java-based implementation requires Saxon and
- makes use of MichalMolhanec’s XSLTHL. More details are available at Jirka Kosek’s
- website:
The support is currently limited to highlighting
- of XML, Java, PHP, Delphi, Modula-2 sources, and INI
- files.
-
Changes to autoindexing
-
The templates that handle alternative indexing methods
- were reworked to avoid errors produced by certain processors not
- being able to tolerate the presence of unused functions. With
- this release, none of the code for the 'kimber' or 'kosek'
- methods is included in the default stylesheets. In order to use
- one of those methods, your customization layer must import one
- of the optional stylesheet modules:
-
-
- html/autoidx-kosek.xsl
-
- html/autoidx-kimber.xsl
-
- fo/autoidx-kosek.xsl
-
- fo/autoidx-kimber.xsl
-
- See the index.method parameter
- reference page for more information.
-
-
Two other changes to note:
-
- The default indexing method now can handle accented
- characters in latin-based alphabets, not just English. This
- means accented latin letters will group and sort with their
- unaccented counterpart.
-
- The default value for the
- index.method parameter was changed
- from 'english' to 'basic' because now the default method can
- handle latin-based alphabets, not just English.
-
-
-
-The following is a list of changes that have
-been made since the 1.70.1 release.
-
-
Common
-
-
The following changes have been made to the
- common code
- since the 1.70.1 release.
The following changes have been made to the
- extensions code
- since the 1.70.1 release.
-
-
Completely reworked extensions build system; now uses NetBeans and ant
-
-
-
-
FO
-
-
The following changes have been made to the
- fo code
- since the 1.70.1 release.
-
-
xsl:sort lang attribute now uses two-char substring of lang attribute.
-
-
Support titlecase "Java", "Perl", and "IDL" as values for the
-language attribute on classsynopsis, etc. (instead of just
-lowercase "java", "perl", and "idl"). Also support "c++" and "C++"
-(instead of just "cpp").
-
-Affects HTML, FO, and manpages output. Closes bug 1552332. Thanks
-to "Brian A. Vanderburg II".
Support rows that are *completely* overlapped by the preceding row
-
-
Rearranged templates for the 3 indexing methods
-and changed method named 'english' to 'basic'.
-
-
New modules for supporting indexing extensions.
-
-
Turn off blank-body for fop1.extensions too since fop 0.92
-does not support it either.
-
-
Add Xalan variant to test for exslt:node-set function.
-Xalan can use function named node-set(), but doesn't
-recognize it using function-available().
-
-
Added support to FO stylesheets for handling instances of Org
-where it occurs outside of *info content. In HTML stylesheets,
-moved handling of Org out of info.xsl and into inline.xsl. In both
-FO and HTML stylesheets, added support for correctly processing
-Affiliation and Jobtitle.
-
-
Don't output punctuation between Refname and Refpurpose if
-Refpurpose is empty. Also corrected handling of Refsect2/title
-instances, and removed some debugging stuff that was generated in
-manpages output to mark the ends of sections.
-
-
Added new email.delimiters.enabled param. If non-zero (the
-default), delimiters are generated around e-mail addresses (output
-of the email element). If zero, the delimiters are suppressed.
-
-
Initial support of syntax highlighting of programlistings.
-
-
Chapter after preface should restart numbering of pages.
-
-
-
-
HTML
-
-
The following changes have been made to the
- html code
- since the 1.70.1 release.
-
-
xsl:sort lang attribute now uses two-char substring of lang attribute.
-
-
Support titlecase "Java", "Perl", and "IDL" as values for the
-language attribute on classsynopsis, etc. (instead of just
-lowercase "java", "perl", and "idl"). Also support "c++" and "C++"
-(instead of just "cpp").
-
-Affects HTML, FO, and manpages output. Closes bug 1552332. Thanks
-to "Brian A. Vanderburg II".
Support rows that are *completely* overlapped by the preceding row
-
-
Rearranged templates for the 3 indexing methods
-and changed method named 'english' to 'basic'.
-
-
New modules for supporting indexing extensions.
-
-
Added several new HTML parameters for controlling appearance of
-content on HTML title pages:
-
-contrib.inline.enabled:
- If non-zero (the default), output of the contrib element is
- displayed as inline content rather than as block content.
-
-othercredit.like.author.enabled:
- If non-zero, output of the othercredit element on titlepages is
- displayed in the same style as author and editor output. If zero
- (the default), othercredit output is displayed using a style
- different than that of author and editor.
-
-blurb.on.titlepage.enabled:
- If non-zero, output from authorblurb and personblurb elements is
- displayed on title pages. If zero (the default), output from
- those elements is suppressed on title pages (unless you are
- using a titlepage customization that causes them to be included).
-
-editedby.enabled
- If non-zero (the default), a localized Edited by heading is
- displayed above editor names in output of the editor element.
-
-
Add Xalan variant to test for exslt:node-set function.
-Xalan can use function named node-set(), but doesn't
-recognize it using function-available().
-
-
Added support to FO stylesheets for handling instances of Org
-where it occurs outside of *info content. In HTML stylesheets,
-moved handling of Org out of info.xsl and into inline.xsl. In both
-FO and HTML stylesheets, added support for correctly processing
-Affiliation and Jobtitle.
-
-
Don't output punctuation between Refname and Refpurpose if
-Refpurpose is empty. Also corrected handling of Refsect2/title
-instances, and removed some debugging stuff that was generated in
-manpages output to mark the ends of sections.
-
-
Added new email.delimiters.enabled param. If non-zero (the
-default), delimiters are generated around e-mail addresses (output
-of the email element). If zero, the delimiters are suppressed.
-
-
Added qanda.nested.in.toc param. Default value is zero. If
-non-zero, instances of "nested" Qandaentry (ones that are children
-of Answer elements) are displayed in the TOC. Closes patch 1509018
-(from Daniel Leidert). Currently on affects HTML output (no patch
-for FO output provided).
-
-
Improved handling of relative locations generated files
-
-
Initial support of syntax highlighting of programlistings.
Support $keep.relative.image.uris also when chunking
-
-
-
-
Highlighting
-
-
The following changes have been made to the
- highlighting code
- since the 1.70.1 release.
-
-
Initial support of syntax highlighting of programlistings.
-
-
-
-
Manpages
-
-
The following changes have been made to the
- manpages code
- since the 1.70.1 release.
-
-
Suppress footnote markers and output warning that footnotes are
-not yet supported.
-
-
Handle instances of address/otheraddr/ulink in author et al in the
-same way as email instances; that is, display them on the same
-linke as the author, editor, etc., name.
-
-
Don't number or link-list any Ulink instance whose string value is
-identical to the value of its url attribute. Just display it inline.
-
-
Don't output punctuation between Refname and Refpurpose if
-Refpurpose is empty. Also corrected handling of Refsect2/title
-instances, and removed some debugging stuff that was generated in
-manpages output to mark the ends of sections.
-
-
Added new email.delimiters.enabled param. If non-zero (the
-default), delimiters are generated around e-mail addresses (output
-of the email element). If zero, the delimiters are suppressed.
-
-
In manpages output, if the last/nearest *info element for
-particular Refentry has multiple Copyright and/or Legalnotice
-children, process them all (not just the first ones). Closes bug
-1524576. Thanks to Sam Steingold for the report and to Daniel
-Leidert for providing a patch.
-
-
-
-
Params
-
-
The following changes have been made to the
- params code
- since the 1.70.1 release.
Added namespace declarations to document elements for all param files.
-
-
Updated index.method doc to describe revised setup for importing index extensions.
-
-
Added several new HTML parameters for controlling appearance of
-content on HTML title pages:
-
-contrib.inline.enabled:
- If non-zero (the default), output of the contrib element is
- displayed as inline content rather than as block content.
-
-othercredit.like.author.enabled:
- If non-zero, output of the othercredit element on titlepages is
- displayed in the same style as author and editor output. If zero
- (the default), othercredit output is displayed using a style
- different than that of author and editor.
-
-blurb.on.titlepage.enabled:
- If non-zero, output from authorblurb and personblurb elements is
- displayed on title pages. If zero (the default), output from
- those elements is suppressed on title pages (unless you are
- using a titlepage customization that causes them to be included).
-
-editedby.enabled
- If non-zero (the default), a localized Edited by heading is
- displayed above editor names in output of the editor element.
-
-
Added new email.delimiters.enabled param. If non-zero (the
-default), delimiters are generated around e-mail addresses (output
-of the email element). If zero, the delimiters are suppressed.
-
-
Added qanda.nested.in.toc param. Default value is zero. If
-non-zero, instances of "nested" Qandaentry (ones that are children
-of Answer elements) are displayed in the TOC. Closes patch 1509018
-(from Daniel Leidert). Currently on affects HTML output (no patch
-for FO output provided).
-
-
Initial support of syntax highlighting of programlistings.
-
-
-
-
Tools
-
-
The following changes have been made to the
- tools code
- since the 1.70.1 release.
-
-
Racheted down font sizes of headings in example makefile FO output.
-
-
Added param and attribute set to example makefile, for getting
-wrapping in verbatims in FO output.
-
-
Renamed Makefile.paramDoc to Makefile.docParam.
-
-
Added Makefile.paramDoc file, for creating versions of param.xsl
-files with doc embedded.
-
-
Added variable to example makefile for controlling whether HTML or
-XHTML is generated.
-
-
-
-
-
Release: 1.70.1
-
-
-
This is a stable release of the 1.70 stylesheets. It includes only a
-few small changes from 1.70.0.
-
-
The following is a list of changes that have been made
- since the 1.70.0 release.
-
-
FO
-
-
The following changes have been made to the
- fo code
- since the 1.70.0 release.
-
-
Added three new attribute sets (revhistory.title.properties, revhistory.table.properties and revhistory.table.cell.properties) for controlling appearance of revhistory in FO output.
The following changes have been made to the
- htmlhelp code
- since the 1.70.0 release.
-
-
htmlhelp.generate.index is now param, not variable. This means that you can override its setting from outside. This is useful when you generate indexterms on the fly (see http://www.xml.com/pub/a/2004/07/14/dbndx.html?page=3).
The following changes have been made to the
- params code
- since the 1.70.0 release.
-
-
Added three new attribute sets (revhistory.title.properties, revhistory.table.properties and revhistory.table.cell.properties) for controlling appearance of revhistory in FO output.
If zero (the
-default), notes and warnings about "missing" markup are generated
-during gathering of refentry metadata. If
-non-zero, the metadata is gathered "quietly" -- that is, the
-notes and warnings are suppressed.
-
NOTE: If you are
-processing a large amount of refentry content, you
-may be able to speed up processing significantly by setting a
-non-zero value for
-refentry.meta.get.quietly.
After namespace stripping, the
-source document is the temporary tree created by the stripping
-process and it has the wrong base URI for relative
-references. Earlier versions of this code used to try to fix that
-by patching the elements with relative @fileref attributes. That
-was inadequate because it calculated an absolute base URI
-without considering that there might be xml:base attributes
-already in effect. It seems obvious now that the right thing to
-do is simply to put the xml:base on the root of the document. And
-that seems to work.
-
Modified: common/stripns.xsl,1.7 - Norman
-Walsh
-
-
Added support for "software" and
-"sectdesc" class values on refmiscinfo; "software" is
-treated identically to "source", and "setdesc" is treated
-identically to "manual".
Added support for DocBook 5
-namespace-stripping in manpages stylesheet. Closes request
-#1210692.
-
Modified: common/common.xsl,1.56; manpages/docbook.xsl,1.57 -
-Michael(tm) Smith
-
-
Added <xsl:template
-match="/"> to make stripns.xsl usable as a standalone
-stylesheet for stripping out DocBook 5/NG to DocBook 4. Note that
-DocBook XSLT drivers that include this stylesheet all override
-the match="/" template.
Number figures, examples, and
-tables from book if there is no prefix (i.e. if
-chapter.autolabel is set to 0). This avoids
-having the list of figures where the figures mysteriously restart
-their numeration periodically when
-chapter.autolabel is set to
-0.
Modified: fo/param.ent,1.99; fo/param.xweb,1.112 - Robert
-Stayton
-
-
Integrate support for three
-indexing methods: - the original English-only method. -
-Jirka Kosek's method using EXSLT extensions. - Eliot Kimber's
-method using Saxon extensions. Use the 'index.method'
-parameter to select.
Modified: fo/param.ent,1.97;
-fo/param.xweb,1.110 - Robert Stayton
-
-
Support PTC/Arbortext
-bookmarks
-
Modified: fo/docbook.xsl,1.40; fo/ptc.xsl,1.1 - Norman
-Walsh
-
-
Added
-table.footnote.properties to permit
-table footnotes to format differently from regular
-footnotes.
-
Modified: fo/param.ent,1.96; fo/param.xweb,1.109 - Robert
-Stayton
-
-
Refactored table
-templates to unify their processing and support all options in
-all types. Now table and informaltable, in
-both Cals and Html markup, use the same templates where possible,
-and all support pgwide, rotation, and floats. There is also a
-placeholder table.container template to
-support wrapping a table in a layout table,
-so the XEP tabletitle "continued"
-extension can be more easily implemented.
-
Modified: fo/formal.xsl,1.52;
-fo/htmltbl.xsl,1.9; fo/table.xsl,1.48 - Robert
-Stayton
-
-
Added new attribute set
-toc.line.properties for controlling appearance of lines in
-ToC/LoT
Added support for float to example
-and equation. Added support for pgwide to
-figure, example, and equation (the latter
-two via a dbfo pgwide="1" processing
-instruction).
-
Modified: fo/formal.xsl,1.51 - Robert
-Stayton
-
-
Add pgwide.properties
-attribute-set.
-
Modified: fo/param.ent,1.94; fo/param.xweb,1.107 - Robert
-Stayton
Adjusted spacing around
-K&R-formatted Funcdef and Paramdef
-output such that it can more easily be discerned where one ends
-and the other begins. Closes #1213264.
-
Modified: fo/synop.xsl,1.18 -
-Michael(tm) Smith
-
-
Made handling of
-paramdef/parameter in FO output consistent with that in HTML and
-manpages output. Closes #1213259.
-
Modified: fo/synop.xsl,1.17 - Michael(tm)
-Smith
-
-
Made handling of
-Refnamediv consistent with formatting in HTML
-and manpages output; specifically, changed so that
-Refname (comma-separated list of multiple instances
-found) is used (instead of Refentrytitle as
-previously), then em-dash, then the Refpurpose. Closes
-#1212562.
Added output of
-Releaseinfo to recto titlepage ("copyright"
-page) for Book in FO output. This makes it consistent
-with HTML output. Closes #1327034. Thanks to Paul DuBois for
-reporting.
Added condition for setting
-block-progression-dimension.minimum on table-row, instead of
-height, when fop1.extensions is
-non-zero. For an explanation of the reason for the change,
-see: http://wiki.apache.org/xmlgraphics-fop/Troubleshooting/CommonLogMessages
-
Modified: fo/pagesetup.xsl,1.59
-- Michael(tm) Smith
-
-
Added new
-refclass.suppress param for suppressing display
-of Refclass in HTML and FO output. Did not add it to
-manpages because manpages stylesheet is currently just silently
-ignoring Refclass anyway. Closes request
-#1461065. Thanks to Davor Ocelic (docelic) for
-reporting.
-
Modified: fo/refentry.xsl,1.29; html/refentry.xsl,1.23 -
-Michael(tm) Smith
-
-
Add support for keep-together PI
-to informal objects.
Output a real em dash for em-dash
-dingbat (instead of two hypens).
-
Modified: fo/fo.xsl,1.7 - Michael(tm)
-Smith
-
-
Support default label
-width parameters for itemized and ordered lists
-
Modified: fo/lists.xsl,1.64;
-fo/param.ent,1.90; fo/param.xweb,1.103;
-params/itemizedlist.label.width.xml,1.1;
-params/orderedlist.label.width.xml,1.1 - Norman
-Walsh
-
-
Generate localized
-title for Refsynopsisdiv if no
-appropriate Title descendant found in source. Closes
-#1212398. This change makes behavior for the Synopsis
-title consistent with the behavior of HTML and
-manpages output.
-
Also, added
-xsl:use-attribute-sets="normal.para.spacing" to
-block generated for Cmdsynopsis output. Previously,
-that block had no spacing at all specified, which resulted it
-being crammed up to closely to the Synopsis
-head.
Modified: fo/param.ent,1.89; fo/param.xweb,1.102 - Robert
-Stayton
-
-
Added "Cross References"
-section in HTML doc (for consistency with the FO
-doc). Also, moved the existing FO "Cross
-References" section to follow the "Linking"
-section.
-
Modified: fo/param.xweb,1.101; html/param.xweb,1.95 -
-Michael(tm) Smith
-
-
Added ID attribues to all
-Reference elements (e.g., id="tables" for the doc for
-section on Table params). So pages for
-all subsections of ref docs now have stable filenames instead
-of arbitrary generated filenames.
-
Modified: fo/param.xweb,1.100;
-html/param.xweb,1.94 - Michael(tm) Smith
-
-
Added two new parameters for
-handling of multi-term
-varlistentry elements:
These parameters are primarily intended to be
-useful if you have multi-term varlistentries that have long
-terms.
-
Closes #1306676. Thanks to Sam Steingold for
-providing an example "lots of long terms" doc that demonstrated
-the value of having these options.
-
Also, added
-normalize-space() call to processing of each
-term.
-
This change affects all output formats
-(HTML, PDF, manpages). The default behavior should pretty much
-remain the same as before, but it is possible (as always) that
-the change may introduce some
-new bugginess.
Modified: fo/titlepage.templates.xml,1.27 - Robert
-Stayton
-
-
Implemented RFE
-#1292615.
-
Added bunch of new parameters (attribute sets)
-that affect list presentation: list.block.properties,
-itemizedlist.properties, orderedlist.properties,
-itemizedlist.label.properties and
-orderedlist.label.properties. Default behaviour
-of stylesheets has not been changed but further customizations will be
-much more easier.
You can enable crop marks in your document by
-setting crop.marks=1 and xep.extensions=1. Appearance of crop
-marks can be controlled by parameters
-crop.mark.bleed (6pt),
-crop.mark.offset (24pt) and
-crop.mark.width (0.5pt).
-
Also there
-is new named template called user-xep-pis. You can overwrite it in
-order to produce some PIs that can control XEP as described in
-http://www.renderx.com/reference.html#Output_Formats
The following changes have been made to the
- html code
- since the 1.69.1 release.
-
-
implemented
-index.method parameter and three
-methods.
-
Modified: html/autoidx.xsl,1.28 - Robert
-Stayton
-
-
added index.method
-parameter to support 3 indexing methods.
-
Modified: html/param.ent,1.94;
-html/param.xweb,1.103 - Robert Stayton
-
-
Implemented feature request
-#1072510 as a processing instruction to permit including external
-HTML content into HTML output.
-
Modified: html/pi.xsl,1.9 - Robert
-Stayton
-
-
Added new parameter
-chunk.tocs.and.lots.has.title which
-controls presence of title in a separate chunk with
-ToC/LoT. Disabling title can be very useful if you are
-generating frameset output (well, yes those frames, but some customers
-really want them ;-).
If the value
-of autotoc.label.in.hyperlink is non-zero, labels
-are included in hyperlinked titles in the TOC. If it
-is instead zero, labels are still displayed prior to the
-hyperlinked titles, but are not hyperlinked along with the
-titles.
-
Closes patch #1065868. Thanks to anatoly techtonik
-for the patch.
-
Modified: html/autotoc.xsl,1.36; html/param.ent,1.92;
-html/param.xweb,1.101; params/autotoc.label.in.hyperlink.xml,1.1 -
-Michael(tm) Smith
If
-the value of the generate.legalnotice.link is
-non-zero, then the stylesheet generates (in the head
-section of the HTML source) either a single HTML
-link element or, if the value of
-the html.head.legalnotice.link.multiple is
-non-zero, one link element for each link
-type specified. Each link has the
-following attributes:
-
- a rel attribute whose value
-is derived from the value of
-html.head.legalnotice.link.types
-
-
-an href attribute whose value is set to the URL of the file
-containing the legalnotice
-
- a title
-attribute whose value is set to the title of the
-corresponding legalnotice (or a title
-programatically determined by the stylesheet)
Added new
-refclass.suppress param for suppressing display
-of Refclass in HTML and FO output. Did not add it to
-manpages because manpages stylesheet is currently just silently
-ignoring Refclass anyway. Closes request
-#1461065. Thanks to Davor Ocelic (docelic) for
-reporting.
-
Modified: fo/refentry.xsl,1.29; html/refentry.xsl,1.23 -
-Michael(tm) Smith
-
-
Process alt text with
-normalize-space(). Replace tab indents with
-spaces.
-
Modified: html/graphics.xsl,1.57 - Robert
-Stayton
-
-
Content of citation
-element is automatically linked to the bibliographic entry
-with the corresponding abbrev.
Handling of xref to
-area/areaset need support in extensions code also. I currently have no
-time to touch extensions code, so code is here to be enabled when
-extension is fixed also.
-
Modified: html/xref.xsl,1.56 - Jirka
-Kosek
-
-
Added 3 parameters for overriding
-gentext for index
-punctuation.
-
Modified: html/param.ent,1.89; html/param.xweb,1.98 - Robert
-Stayton
-
-
Added parameters to support
-localization of index item punctuation. Added
-index.separator named template to compute
-the separator punctuation based on
-locale.
-
Modified: html/autoidx.xsl,1.27 - Robert
-Stayton
-
-
Added a <div
-class="{$class}-contents"> wrapper around output of contents
-of all formal objects. Also, added an optional <br
-class="{class}-break"/> linebreak after all formal
-objects.
-
WARNING: Because this change places an additional
-DIV between the DIV wrapper for the equation and the
-equation contents, it may break some existing CSS
-stylesheets that have been created with the assumption that there
-would never be an intervening DIV there.
-
The following is
-an example of what Equation output looks like as a
-result of the changes described above.
Rationale: These changes allow
-CSS control of the placement of the formal-object
-title relative to the formal-object
-contents. For example, using the CSS "float" property
-enables the title and contents to be rendered on the
-same line. Example stylesheet:
New parameter:
-id.warnings. If non-zero, warnings are
-generated for titled objects that don't have titles. True by default;
-I wonder if this will be too aggressive?
If the
-keep.relative.image.uris parameter is true,
-don't use the absolute URI (as calculated from xml:base) in
-the img src attribute, us the value the author
-specified. Note that we still have to calculate the absolute
-filename for use in the image intrinsics
-extension.
These parameters are primarily intended to be
-useful if you have multi-term varlistentries that have long
-terms.
-
Closes #1306676. Thanks to Sam Steingold for
-providing an example "lots of long terms" doc that demonstrated
-the value of having these options.
-
Also, added
-normalize-space() call to processing of each
-term.
-
This change affects all output formats
-(HTML, PDF, manpages). The default behavior should pretty much
-remain the same as before, but it is possible (as always) that
-the change may introduce some
-new bugginess.
Added "wrapper-name" param to
-inline.charseq named template, enabling it to output inlines
-other than just "span". Acronym and Abbrev
-templates now use inline.charseq to output HTML
-"acronym" and "abbr" elements (instead of
-"span"). Closes #1305468. Thanks to Sam Steingold for suggesting
-the change.
Note that in earlier snapshots, man.indent.width
-was named man.indentation.default.value and the boolean params
-had names like man.indentation.*.adjust. Also the
-man.indent.blurbs param was called man.indentation.authors.adjust
-(or something).
-
The behavior now is: If the value of a
-particular man.indent.* boolean param is non-zero, the
-corresponding contents (refsect*, list items,
-authorblurb/personblurb, vervatims) are displayed with a left
-margin indented by a width equal to the value
-of man.indent.width.
In each
-table that contains footenotes, the string specified
-by the man.table.footnotes.divider parameter is output
-before the list of footnotes for the
-table.
-
Modified: manpages/docbook.xsl,1.73;
-manpages/links.xsl,1.6; manpages/param.ent,1.21;
-manpages/param.xweb,1.23; params/man.table.footnotes.divider.xml,1.1 -
-Michael(tm) Smith
-
-
Added the
-man.output.in.separate.dir,
-man.output.base.dir,
-and man.output.subdirs.enabled parameters.
-
The
-man.output.base.dir parameter specifies the
-base directory into which man-page files are
-output. The man.output.subdirs.enabled parameter controls whether
-the files are output in subdirectories within the base
-directory.
-
The values of the
-man.output.base.dir
-and man.output.subdirs.enabled parameters are used only if the
-value of man.output.in.separate.dir parameter is non-zero. If the
-value of man.output.in.separate.dir is zero, man-page files are
-not output in a separate
-directory.
If the value of
-man.segtitle.suppress is non-zero, then display
-of segtitle contents is suppressed in
-output.
-
Modified: manpages/docbook.xsl,1.68; manpages/param.ent,1.17;
-manpages/param.xweb,1.19; params/man.segtitle.suppress.xml,1.1 -
-Michael(tm) Smith
-
-
Added
-man.output.manifest.enabled and
-man.output.manifest.filename params.
-
If
-man.output.manifest.enabled is non-zero, a list
-of filenames for man pages generated by the stylesheet
-transformation is written to the file named by
-man.output.manifest.filename
If zero (the
-default), notes and warnings about "missing" markup are generated
-during gathering of refentry metadata. If
-non-zero, the metadata is gathered "quietly" -- that is, the
-notes and warnings are suppressed.
-
NOTE: If you are
-processing a large amount of refentry content, you
-may be able to speed up processing significantly by setting a
-non-zero value for
-refentry.meta.get.quietly.
Changed names of all boolean
-indentation params to man.indent.* Also discarded individual
-man.indent.*.value params and switched to just using a common
-man.indent.width param (3n by default).
Added boolean
-man.output.in.separate.dir param, to control whether or not man
-files are output in separate directory.
-
Modified: manpages/docbook.xsl,1.65;
-manpages/utility.xsl,1.14 - Michael(tm) Smith
-
-
Added options for controlling
-indentation of verbatim output. Controlled through the
-man.indentation.verbatims.adjust
-and man.indentation.verbatims.value params. Closes
-#1242997
-
Modified: manpages/block.xsl,1.15; manpages/docbook.xsl,1.64 -
-Michael(tm) Smith
-
-
Added options for controlling
-indentation in lists and in *blurb output in the AUTHORS
-section. Controlled through
-the man.indentation.lists.adjust,
-man.indentation.lists.value, man.indentation.authors.adjust, and
-man.indentation.authors.value parameters. Default is 3 characters
-(instead of the roff default of 8 characters). Closes
-#1449369.
-
Also, removed the indent that was being set on
-informalexample outuput. I will instead add an option
-for indenting verbatims, which I think is what the
-informalexample indent was intended
-for originally.
-
Modified: manpages/block.xsl,1.14;
-manpages/docbook.xsl,1.63; manpages/info.xsl,1.18;
-manpages/lists.xsl,1.28 - Michael(tm) Smith
-
-
Changed line-spacing call before
-synopfragment to use ".sp -1n" ("n" units specified)
-instead of plain ".sp -1"
Added support for writing man
-files into a specific output directory and into appropriate
-subdirectories within that output directory. Controlled through
-the man.base.dir parameter (similar to the
-base.dir support in the HTML stylesheet) and
-the man.subdirs.enabled parameter, which automatically determines
-the name of an appropriate subdir (for example, man/man7,
-man/man1, etc.) based on the section number/manvolnum
-of the source Refentry.
-
Closes #1255036 and
-#1170317. Thanks to Denis Bradford for the original feature
-request, and to Costin Stroie for submitting a patch that was
-very helpful in implementing the
-support.
-
Modified: manpages/docbook.xsl,1.62; manpages/utility.xsl,1.13 -
-Michael(tm) Smith
-
-
Refined XPath statements and
-notification messages for refentry metadata
-handling.
Modified: manpages/docbook.xsl,1.59; manpages/info.xsl,1.17 -
-Michael(tm) Smith
-
-
Drastically reworked all of the
-XPath expressions used in refentry metadata gathering
--- completely removed $parentinfo and turned $info into a set of
-nodes that includes the *info contents of the Refentry
-plus the *info contents all all of its ancestor elements. The
-basic XPath expression now used throughout is (using the example
-of checking for a date):
-
-(($info[//date])[last()]/date)[1].
-
That selects the "last"
-*info/date date in document order -- that is, the one
-eitther on the Refentry itself or on the
-closest ancestor to the Refentry.
-
It's
-likely this change may break some things; may need to pick up
-some pieces later.
Added support for DocBook 5
-namespace-stripping in manpages stylesheet. Closes request
-#1210692.
-
Modified: common/common.xsl,1.56; manpages/docbook.xsl,1.57 -
-Michael(tm) Smith
-
-
Fixed handling of table
-footnotes. With this checkin, the table support in the
-manpages stylesheet is now basically feature complete. So this
-change closes request #619532, "No support for tables" -- the
-oldest currently open manpages feature request, submitted by Ben
-Secrest (blsecres) on 2002-10-07. Congratulations to me [patting
-myself on the back].
Added handling for
-table titles. Also fixed handling of nested tables;
-nest tables are now "extracted" and displayed just after their
-parent tables.
-
Modified: manpages/docbook.xsl,1.54; manpages/table.xsl,1.14
-- Michael(tm) Smith
-
-
Added option for turning off bold
-formatting in Funcsynopsis. Boldface formatting in
-functionsynopsis is mandated in the
-man(7) man page and is used almost universally in existing man
-pages. Despite that, it really does look like crap to have an
-entire Funcsynopsis output in bold, so I added params
-for turning off the bold formatting and/or replacing it with a
-different roff special font (e.g., "RI" for alternating
-roman/italic instead of the default "BI" for alternating
-bold/italic). The new params
-are "man.funcprototype.font" and
-"man.funcsynopsisinfo.font". To be documented
-later.
-
Closes #1452247. Thanks to Joe Orton for the feature
-request.
Use AUTHORS instead of
-AUTHOR if we have multiple people to attribute. Also,
-fixed checking such that we generate
-authorsection even if we don't have an
-author (as long as there is at least one other
-person/entity we can put in the
-section). Also adjusted assembly of content for
-Author metainfo field such that we now not only use
-author, but try to find a "best match" if we can't
-find an author name to put there.
-
Closes
-#1233592. Thanks to Sam Steingold for the
-request.
Changes for request #1243027,
-"Impove handling of AUTHORsection." This
-adds support for Collab, Corpauthor, Corpcredt,
-Orgname, Publishername, and
-Publisher. Also adds support for output
-of Affiliation and its children, and support for using
-gentext strings for auto-attributing roles (Author,
-Editor, Publisher, Translator, etc.). Also
-did a lot of code cleanup and modularization of all the
-AUTHOR handling code. And fixed a bug that was causing
-Authorinfo to not be picked up correctly
-for metainfo comment we embed in man-page
-source.
Support bold output for
-"emphasis remap='B'". (because Eric Raymond's
-doclifter(1) tool converts groff source marked up with ".B"
-request or "\fB" escapes to DocBook "emphasis
-remap='B'".)
Added support for
-Segmentedlist. Details: Output is tabular, with no
-option for "list" type output. Output for Segtitle
-elements can be supressed by
-setting man.segtitle.suppress. If Segtitle
-content is output, it is rendered in italic type (not bold
-because not all terminals support bold and so italic ensures the
-stand out on those terminals). Extra space (.sp line) at end of
-table code ensures that it gets handled correctly in
-the case where its source is the child of a Para.
-Closes feature-request #1400097. Thanks to Daniel Leidert for the
-patch and push, and to Alastair Rankine for filing the original
-feature request.
-
Modified: manpages/lists.xsl,1.23;
-manpages/utility.xsl,1.10 - Michael(tm) Smith
-
-
Improved handling or
-Author/Editor/Othercredit.
-
Reworked content of
-(non-visible) comment added at top of each page (metadata
-stuff).
-
Added support for generating a
-manifest file (useful for cleaning up
-after builds, etc.)
-
Modified: manpages/docbook.xsl,1.46;
-manpages/info.xsl,1.9; manpages/other.xsl,1.12;
-manpages/utility.xsl,1.6 - Michael(tm) Smith
-
-
Added two new parameters for
-handling of multi-term
-varlistentry elements:
These parameters are primarily intended to be
-useful if you have multi-term varlistentries that have long
-terms.
-
Closes #1306676. Thanks to Sam Steingold for
-providing an example "lots of long terms" doc that demonstrated
-the value of having these options.
-
Also, added
-normalize-space() call to processing of each
-term.
-
This change affects all output formats
-(HTML, PDF, manpages). The default behavior should pretty much
-remain the same as before, but it is possible (as always) that
-the change may introduce some
-new bugginess.
The following changes have been made to the
- params code
- since the 1.69.1 release.
-
-
New parameters to set
-header/footer table minimum
-height.
-
Modified: params/footer.table.height.xml,1.1;
-params/header.table.height.xml,1.1 - Robert
-Stayton
-
-
Support multiple indexing methods
-for different languages.
-
Modified: params/index.method.xml,1.1 - Robert
-Stayton
-
-
Remove qandaset and
-qandadiv from generate.toc for fo
-output because formerly it wasn't working, but now it is and
-the default behavior should stay the
-same.
-
Modified: params/generate.toc.xml,1.8 - Robert
-Stayton
-
-
add support for page number
-references to link element
-too.
-
Modified: params/insert.link.page.number.xml,1.1 - Robert
-Stayton
-
-
Add support for more characters to
-hyphen on when ulink.hyphenate is turned
-on.
-
Modified: params/ulink.hyphenate.chars.xml,1.1;
-params/ulink.hyphenate.xml,1.3 - Robert Stayton
Added new parameter
-chunk.tocs.and.lots.has.title which
-controls presence of title in a separate chunk with
-ToC/LoT. Disabling title can be very useful if you are
-generating frameset output (well, yes those frames, but some customers
-really want them ;-).
If the value
-of autotoc.label.in.hyperlink is non-zero, labels
-are included in hyperlinked titles in the TOC. If it
-is instead zero, labels are still displayed prior to the
-hyperlinked titles, but are not hyperlinked along with the
-titles.
-
Closes patch #1065868. Thanks to anatoly techtonik
-for the patch.
-
Modified: html/autotoc.xsl,1.36; html/param.ent,1.92;
-html/param.xweb,1.101; params/autotoc.label.in.hyperlink.xml,1.1 -
-Michael(tm) Smith
If
-the value of the generate.legalnotice.link is
-non-zero, then the stylesheet generates (in the head
-section of the HTML source) either a single HTML
-link element or, if the value of
-the html.head.legalnotice.link.multiple is
-non-zero, one link element for each link
-type specified. Each link has the
-following attributes:
-
- a rel attribute whose value
-is derived from the value of
-html.head.legalnotice.link.types
-
-
-an href attribute whose value is set to the URL of the file
-containing the legalnotice
-
- a title
-attribute whose value is set to the title of the
-corresponding legalnotice (or a title
-programatically determined by the stylesheet)
Note that in earlier snapshots, man.indent.width
-was named man.indentation.default.value and the boolean params
-had names like man.indentation.*.adjust. Also the
-man.indent.blurbs param was called man.indentation.authors.adjust
-(or something).
-
The behavior now is: If the value of a
-particular man.indent.* boolean param is non-zero, the
-corresponding contents (refsect*, list items,
-authorblurb/personblurb, vervatims) are displayed with a left
-margin indented by a width equal to the value
-of man.indent.width.
In each
-table that contains footenotes, the string specified
-by the man.table.footnotes.divider parameter is output
-before the list of footnotes for the
-table.
-
Modified: manpages/docbook.xsl,1.73;
-manpages/links.xsl,1.6; manpages/param.ent,1.21;
-manpages/param.xweb,1.23; params/man.table.footnotes.divider.xml,1.1 -
-Michael(tm) Smith
-
-
Added the
-man.output.in.separate.dir,
-man.output.base.dir,
-and man.output.subdirs.enabled parameters.
-
The
-man.output.base.dir parameter specifies the
-base directory into which man-page files are
-output. The man.output.subdirs.enabled parameter controls whether
-the files are output in subdirectories within the base
-directory.
-
The values of the
-man.output.base.dir
-and man.output.subdirs.enabled parameters are used only if the
-value of man.output.in.separate.dir parameter is non-zero. If the
-value of man.output.in.separate.dir is zero, man-page files are
-not output in a separate
-directory.
If the value of
-man.segtitle.suppress is non-zero, then display
-of segtitle contents is suppressed in
-output.
-
Modified: manpages/docbook.xsl,1.68; manpages/param.ent,1.17;
-manpages/param.xweb,1.19; params/man.segtitle.suppress.xml,1.1 -
-Michael(tm) Smith
-
-
Added
-man.output.manifest.enabled and
-man.output.manifest.filename params.
-
If
-man.output.manifest.enabled is non-zero, a list
-of filenames for man pages generated by the stylesheet
-transformation is written to the file named by
-man.output.manifest.filename
If zero (the
-default), notes and warnings about "missing" markup are generated
-during gathering of refentry metadata. If
-non-zero, the metadata is gathered "quietly" -- that is, the
-notes and warnings are suppressed.
-
NOTE: If you are
-processing a large amount of refentry content, you
-may be able to speed up processing significantly by setting a
-non-zero value for
-refentry.meta.get.quietly.
Added support for "software" and
-"sectdesc" class values on refmiscinfo; "software" is
-treated identically to "source", and "setdesc" is treated
-identically to "manual".
Drastically reworked all of the
-XPath expressions used in refentry metadata gathering
--- completely removed $parentinfo and turned $info into a set of
-nodes that includes the *info contents of the Refentry
-plus the *info contents all all of its ancestor elements. The
-basic XPath expression now used throughout is (using the example
-of checking for a date):
-
-(($info[//date])[last()]/date)[1].
-
That selects the "last"
-*info/date date in document order -- that is, the one
-eitther on the Refentry itself or on the
-closest ancestor to the Refentry.
-
It's
-likely this change may break some things; may need to pick up
-some pieces later.
Added option for turning off bold
-formatting in Funcsynopsis. Boldface formatting in
-functionsynopsis is mandated in the
-man(7) man page and is used almost universally in existing man
-pages. Despite that, it really does look like crap to have an
-entire Funcsynopsis output in bold, so I added params
-for turning off the bold formatting and/or replacing it with a
-different roff special font (e.g., "RI" for alternating
-roman/italic instead of the default "BI" for alternating
-bold/italic). The new params
-are "man.funcprototype.font" and
-"man.funcsynopsisinfo.font". To be documented
-later.
-
Closes #1452247. Thanks to Joe Orton for the feature
-request.
fop.extensions now only
-for FOP version 0.20.5 and earlier.
-
Modified: params/fop.extensions.xml,1.4
-- Robert Stayton
-
-
Support for fop1 different from
-fop 0.20.5 and earlier.
-
Modified: params/fop1.extensions.xml,1.1 - Robert
-Stayton
-
-
Reset default value to empty
-string so template uses gentext first, then the parameter value
-if not empty.
-
Modified: params/index.number.separator.xml,1.2;
-params/index.range.separator.xml,1.2;
-params/index.term.separator.xml,1.2 - Robert
-Stayton
-
-
New parameter:
-id.warnings. If non-zero, warnings are
-generated for titled objects that don't have titles. True by default;
-I wonder if this will be too aggressive?
These parameters are primarily intended to be
-useful if you have multi-term varlistentries that have long
-terms.
-
Closes #1306676. Thanks to Sam Steingold for
-providing an example "lots of long terms" doc that demonstrated
-the value of having these options.
-
Also, added
-normalize-space() call to processing of each
-term.
-
This change affects all output formats
-(HTML, PDF, manpages). The default behavior should pretty much
-remain the same as before, but it is possible (as always) that
-the change may introduce some
-new bugginess.
Modified: params/olink.doctitle.xml,1.4 - Robert
-Stayton
-
-
Implemented RFE
-#1292615.
-
Added bunch of new parameters (attribute sets)
-that affect list presentation: list.block.properties,
-itemizedlist.properties, orderedlist.properties,
-itemizedlist.label.properties and
-orderedlist.label.properties. Default behaviour
-of stylesheets has not been changed but further customizations will be
-much more easier.
You can enable crop marks in your document by
-setting crop.marks=1 and xep.extensions=1. Appearance of crop
-marks can be controlled by parameters
-crop.mark.bleed (6pt),
-crop.mark.offset (24pt) and
-crop.mark.width (0.5pt).
-
Also there
-is new named template called user-xep-pis. You can overwrite it in
-order to produce some PIs that can control XEP as described in
-http://www.renderx.com/reference.html#Output_Formats
The following changes have been made to the
- profiling code
- since the 1.69.1 release.
-
-
Profiling now works together with
-namespace stripping (V5 documents). Namespace striping should work
-with all stylesheets named profile-, even if they are not supporting
-namespace stripping in a non-profiling
-variant.
Moved profiling stage out of
-templates. This make possible to reuse profiled content by several
-templates and still maintaing node indentity (needed for example for
-HTML Help where content is processed multiple times).
-
I
-don't know why this was not on the top level before. Maybe some XSLT
-processors choked on it. I hope this will be OK
-now.
This release is a minor bug-fix update to the 1.69.0
- release. Along with bug fixes, it includes one
- configuration-parameter change: The default value of the
- annotation.support parameter is now
- 0 (off). The reason for that change is that
- there have been reports that annotation handling is
- causing a significant performance degradation in processing of
- large documents with xsltproc.
-
-
-
-
Release 1.69.0
-
-
The release includes major feature changes,
- particularly in the manpages
- stylesheets, as well as a large number of bug fixes.
-
-
As with all DocBook Project “dot zero” releases, this is an
- experimental release .
-
-
Common
-
-
-
This release adds localizations for the following
- languages:
- Albanian, Amharic, Azerbaijani, Hindi, Irish (Gaelic), Gujarati, Kannada, Mongolian, Oriya, Punjabi, Tagalog, Tamil, and Welsh.
EXPERIMENTAL: Incorporated the Slides and Website
- stylesheets into the DocBook XSL stylesheets package. So,
- for example, Website documents can now be processed using
- the following URI for the driver Website
- tabular.xsl file:
A procedure without a title is
- now treated as an “informal” procedure (meaning
- that it is not added to any generated “list of
- procedures” and has no affect on numbering of
- generated labels for other procedures).
-
-
docname is no longer added to
- olink when pointing to a root element.
-
-
Added support for generation of choice separator in
- inline simplelist. This enables auto-generation of an
- appropriate localized “choice separator” (for
- example, “and” or “or”) before the
- final item in an inline simplelist.
-
To indicate that you want a choice separator
- generated for a particular list, you need to put a processing
- instruction (PI) of the form
- <?dbchoice choice="foo"?> as a
- child of the list. For example:
-
<para>Choose from
- ONE and ONLY ONE of the following:
- <simplelist type="inline">
- <?dbchoice choice="or" ?>
- <member>A</member>
- <member>B</member>
- <member>C</member>.</simplelist></para>
-
- Output (for English):
-
-
Choose from ONE and only ONE of the
- following choices: A, B, or C.
-
- As a temporary workaround for the fact that most of the
- DocBook non-English locale files don't have a localization for
- the word “or”, you can put in a literal string to
- be used; example for French: <?dbchoice choice="ou">. That is, use
- “ou” instead of “or”.
-
-
-
FO
-
-
-
Added content-type property to
- external-graphic element, based on
- imagedataformat
- attribute.
-
-
Added support for generating
- <rx:meta-field creator="$VERSION"/>
- field for XEP output. This makes the DocBook XSL
- stylesheet version information available through the
- Document Properties menu in Acrobat
- Reader and other PDF viewers.
-
-
Trademark symbol handling made consistent with
- handling of same in HTML stylesheets. Prior to this change,
- if you processed a document that contained no value for the
- class attribute on the
- trademark element, the HTML stylesheets would
- default to rendering a superscript TM
- symbol after the trademark contents,
- but the FO stylesheets would render nothing.
-
-
Added support for generating XEP bookmarks for
- refentry.
-
-
Added support for HTML markup tableborder attribute, applied to each
- table cell.
-
-
The table.width template can now
- sum column specs if none use % or
- *.
-
-
Added fox:destination extension
- inside fox:outline to support linking to
- internal destinations.
Generate client-side image map for
- imageobjectco with areas using
- calspair units
-
-
Added support for <?img.src.path?> PI.
-
-
Added support for passing
- img.src.path to DocBook Java XSLT
- image extensions when appropriate. Controlled using the
- graphicsize.use.img.src.path
- parameter.
-
-
Added support for (not
- valid for DocBook 4) xlink:href
- on area and (not valid for DocBook 4)
- alt in area.
-
-
Added new parameter
- default.table.frame to control table
- framing if there is no frame
- attribute on a table.
Added support for chunking revhistory into
- separate file (similar to the support for doing same with
- legalnotice). Patch from Thomas
- Schraitle. Controlled through new
- generate.revhistory.link parameter.
-
-
l10n.xsl: Made language codes RFC compliant. Added a
- new boolean config parameter,
- l10n.lang.value.rfc.compliant. If it
- is non-zero (the default), any underscore in a language code
- will be converted to a hyphen in HTML output. If it is zero,
- the language code will be left as-is.
-
-
-
man
-
-
This release closes out 44 manpages stylesheet bug reports
- and feature requests. It adds more than 35 new configuration
- parameters for controlling aspects of man-page output --
- including hyphenation and justification, handling of links,
- conversion of Unicode characters, and contents of man-page
- headers and footers.
-
-
New options for globally disabling/enabling
- hyphenation and justification:
- man.justify and
- man.hyphenate.
-
Note that the default
- for the both of those is zero (off), because justified text
- looks good only when it is also hyphenated; to quote the
- “Hyphenation” node from the groff info page:
-
-
Since the odds are not great for finding a
- set of words, for every output line, which fit nicely on a
- line without inserting excessive amounts of space between
- words, `gtroff' hyphenates words so that it can justify
- lines without inserting too much space between
- words.
-
- The problem is that groff can end up hyphenating a lot of
- things that you don't want hyphenated (variable names and
- command names, for example). Keeping both justification and
- hyphenation disabled ensures that hyphens won't get inserted
- where you don't want to them, and you don't end up with
- lines containing excessive amounts of space between
- words. These default settings run counter to how most
- existing man pages are formatted. But there are some notable
- exceptions, such as the perl man pages.
Implemented a new system for replacing Unicode
- characters. There are two parts to the new system: a
- “string substitution map” for doing
- “essential” replacements, and a
- “character map” that can optionally be disabled
- and enabled.
-
The new system fixes all open bugs that had to do with
- literal Unicode numbered entities such as “ and
- ” showing up in output, and greatly expands the
- ability of the stylesheets to generate “good” roff
- equivalents for Unicode symbols and special
- characters.
-
Here are some details...
-
The previous manpages mechanism for replacing Unicode
- symbols and special characters with roff equivalents (the
- replace-entities template) was not
- scalable and not complete. The mechanism handled a somewhat
- arbitrary selection of less than 20 or so Unicode
- characters. But there are potentially more than
- 800 Unicode special characters that
- have some groff equivalent they can be mapped to. And there
- are about 34 symbols in the Latin-1 (ISO-8859-1) block
- alone. Users might reasonably expect that if they include
- any of those Latin-1 characters in their DocBook source
- documents, they will get correctly converted to known roff
- equivalents in output.
-
In addition to those common symbols, certain users may
- have a need to use symbols from other Unicode blocks. Say,
- somebody who is documenting an application related to math
- might need to use a bunch of symbols from the
- “Mathematical Operators” Unicode block (there
- are about 65 characters in that block that have reasonable
- roff equivalents). Or somebody else might really like
- Dingbats -- such as the checkmark character -- and so might
- use a bunch of things from the “Dingbat” block
- (141 characters in that that have roff equivalents or that
- can at least be “degraded” somewhat gracefully
- into roff).
-
So, the old replace-entities
- mechanism was replaced with a completely different mechanism
- that is based on use of two “maps”: a
- “substitution map” and a “character
- map” (the latter in a format compliant with the XSLT
- 2.0 spec and therefore completely “forward
- compatible” with XSLT 2.0).
-
The substitution map is controlled through the
- man.string.subst.map parameter, and
- is used to replace things like the backslash character
- (which needs special handling to prevent it from being
- interpreted as a roff escape). The substitution map cannot
- be disabled, because disabling it will cause the output to
- be broken. However, you can add to it and change it if
- needed.
-
-
The “character map” mechanism, on the
- other hand, can be completely disabled. It is enabled by
- default, and, by default, does replacement of all Latin-1
- symbols, along with most special spaces, dashes, and quotes
- (about 75 characters by default). Also, you can optionally
- enable a “full” character map that provides
- support for converting all 800 or so of the characters that
- have some reasonable groff equivalent.
-
-
The character-map mechanism is controlled through the
- following parameters:
-
specifies an alternate character map to
- use instead of the “standard” character map
- provided in the distribution
-
-
-
Implemented out-of-line handling of display of URLs
- for links (currently, only for ulink). This gives
- you three choices for handling of links:
-
-
Number and list links. Each link is numbered
- inline, with a number in square brackets preceding the
- link contents, and a numbered list of all links is added
- to the end of the document.
-
-
Only list links. Links are not numbered, but an
- (unnumbered) list of links is added to the end of the
- document.
-
-
Suppress links. Don't number links and don't add
- any list of links to the end of the document.
-
- You can also choose whether links should be underlined. The
- default is “the works” -- list, number, and
- underline links. You can use the
- man.links.list.enabled,
- man.links.are.numbered, and
- man.links.are.underlined parameters
- to change the defaults. The default heading for the link
- list is REFERENCES. You can be change that using the
- man.links.list.heading
- parameter.
-
-
Changed default output encoding to UTF-8. This does not mean that man pages are output in
- raw UTF-8, because the character map is applied
- before final output, causing all UTF-8 characters covered in
- the map to be converted to roff equivalents.
-
-
Added support for processing refsect3 and
- formalpara and nested refsection
- elements, down to any arbitrary level of nesting.
-
-
Output of the NAME and
- SYNOPSIS and AUTHOR
- headings and the headings for admonitions (note,
- caution, etc.) are no longer hard-coded for
- English. Instead, headings are generated for those in the
- correct locale (just as the FO and HTML stylesheets
- do).
-
-
Re-worked mechanism for assembling page
- headers/footers (the contents of the .TH
- macro “title line”).
-
-
Here are some details...
-
-
All man pages contain a .TH roff
- macro whose contents are used for rendering the “title
- line” displayed in the header and footer of each
- page. Here are a couple of examples of real-world man pages
- that have useful page headers/footers:
The easiest way to control the contents of those
- fields is to mark up your refentry content like
- the following (note that this is a “minimal”
- example).
- <refentry>
- <info>
- <date>2003-10-20</date>
- </info>
- <refmeta>
- <refentrytitle>gtk-options</refentrytitle>
- <manvolnum>7</manvolnum>
- <refmiscinfo class="source-name">GTK+</refmiscinfo>
- <refmiscinfo class="version">1.2</refmiscinfo>
- <refmiscinfo class="manual">GTK+ User's Manual</refmiscinfo>
- </refmeta>
- <refnamediv>
- <refname>gtk-options</refname>
- <refpurpose>Standard Command Line Options for GTK+ Programs</refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <para>This manual page describes the command line options, which
- are common to all GTK+ based applications.</para>
- </refsect1>
- </refentry>
-
-
Sets the “date” part of the header/footer.
-
-
Sets the “title” part.
-
-
Sets the “section” part.
-
-
Sets the “source name” part.
-
-
Sets the “version” part.
-
-
Sets the “manual” part.
-
-
-
Below are explanations of the steps the stylesheets
- take to attempt to assemble and display
- “good” headers and footer. [In the
- descriptions, note that *info
- is the refentry“info” child
- (whatever its name), and
- parentinfo is the
- “info” child of its parent (again, whatever
- its name).]
-
extra1 field (date)
-
Content of the “extra1” field is
- what shows up in the center
- footer position of each page. The
- man(7) man page describes it as
- “the date of the last revision”.
Otherwise, by default, they check for a
- date or pubdate not only in the
- *info contents, but also in
- the parentinfo
- contents.
-
If a date cannot be found, the stylesheets now
- automatically generate a localized “long
- format” date, ensuring that this field always
- has content in output.
-
However, if for some reason you want to suppress
- this field, you can do so by setting a non-zero value
- for man.th.extra1.suppress.
-
extra2 field (source)
-
On Linux systems and on systems with a modern
- groff, the content of the “extra2” field
- are what shows up in the left
- footer position of each page.
-
-
The man(7) man page describes
- this as “the source of the command”, and
- provides the following examples:
-
-
For binaries, use somwething like: GNU,
- NET-2, SLS Distribution, MCC Distribution.
-
-
For system calls, use the version of the
- kernel that you are currently looking at: Linux
- 0.99.11.
-
-
For library calls, use the source of the
- function: GNU, BSD 4.3, Linux DLL 4.4.1.
-
-
-
-
In practice, there are many pages that simply
- have a version number in the “source”
- field. So, it looks like what we have is a two-part
- field,
- NameVersion,
- where:
-
Name
-
product name (e.g., BSD) or org. name
- (e.g., GNU)
-
Version
-
version name
-
- Each part is optional. If the
- Name is a product name,
- then the Version is
- probably the version of the product. Or there may be
- no Name, in which case, if
- there is a Version, it is
- probably the version of the item itself, not the
- product it is part of. Or, if the
- Name is an organization
- name, then there probably will be no
- Version.
-
On Linux systems and on systems with a modern
- groff, the content of the “extra3” field
- are what shows up in the center
- header position of each page. Some man
- pages have “extra2” content, some
- don't. If a particular man page has it, it is most
- often “context” data about some larger
- system the documented item belongs to (for example,
- the name or description of a group of related
- applications). The stylesheets now check the following
- places, in the following order, to look for content to
- add to the “extra3” field.
Reworked *info gathering. For
- each refentry found, the stylesheets now cache its
- *info content, then check for any
- valid parent of it that might have metainfo content and cache
- that, if found; they then then do all further matches against
- those node-sets (rather than re-selecting the original
- *info nodes each time they are
- needed).
-
-
New option for breaking strings after forward
- slashes. This enables long URLs and pathnames to be broken
- across lines. Controlled through
- man.break.after.slash parameter.
-
-
Output for servicemark and trademark are now
- (SM) and (TM). There is
- a groff "\(tm" escape, but output from that
- is not acceptable.
-
-
New option for controlling the length of the title
- part of the .TH title line. Controlled
- through the man.th.title.max.length
- parameter.
-
-
New option for specifying output encoding of each man
- page; controlled with
- man.output.encoding (similar to the
- HTML chunker.output.encoding
- parameter).
-
-
New option for suppressing filename messages when
- generating output; controlled with
- man.output.quietly (similar to the HTML
- chunk.quietly parameter).
Cross-references to refnamediv now use the
- localized NAME title instead of using the
- first refname child. This makes the output
- inconsistent with HTML and FO output, but for man-page output,
- it seems to make better sense to have the
- NAME. (It may actually make better sense to
- do it that way in HTML and FO output as well...)
Removed the space that was being output between
- funcdef and paramdef; example: was:
- float rand (void); now:
- float rand(void)
-
-
Turned off bold formatting for the type
- element when it occurs within a funcdef or
- paramdef
-
-
Corrected rendering of simplelist. Any
- <simplelist type="inline" instance
- is now rendered as a comma-separated list (also with an
- optional localized “and” or “or” before the last item -- see
- description elsewhere in these release notes). Any simplelist
- instance whose type is not
- inline is rendered as a one-column vertical
- list (ignoring the values of the type and columns attributes if present)
-
-
Comment added at top of roff source for each page now
- includes DocBook XSL stylesheets version number (as in the
- HTML stylesheets)
-
-
Made change to prevent “sticky” fonts
- changes. Now, when the manpages stylesheets encounter node
- sets that need to be boldfaced or italicized, they put the
- \fBfoo\fR and \fIbar\fR
- groff bold/italic instructions separately around each node in
- the set.
-
-
synop.xsl: Boldface everything in
- funcsynopsis output except parameters (which are in
- ital). The man(7) man page says:
-
-
For functions, the arguments are always specified
- using italics, even in the SYNOPSIS section, where the rest
- of the function is specified in bold.
-
- A look through the contents of the
- man/man2 directory shows that most
- (all) existing pages do follow this “everything in
- funcsynopsis bold” rule. That means the
- type content and any punctuation (parens,
- semicolons, varargs) also must be bolded.
-
-
Removed code for adding backslashes before periods/dots
- in roff source, because backslashes in front of periods/dots
- in roff source are needed only in the very rare case where a
- period is the very first character in a line, without any
- space in front of it. A better way to deal with that rare case
- is for you to add a zero-width space in front of the offending
- dot(s) in your source
-
-
Removed special handling of the quote
- element. That was hard-coded to cause anything marked up with
- the quote element to be output preceded by two
- backticks and followed by two apostrophes -- that is, that
- old-school kludge for generating “curly” quotes in Emacs and
- in X-Windows fonts. While Emacs still seems to support that, I
- don't think X-Windows has for a long time now. And, anyway, it
- looks (and has always looked) like crap when viewed on a
- normal tty/console. In addition, it breaks localiztion of
- quote. By default, quote content is
- output with localized quotation marks, which, depending on the
- locale, may or may not be left and right double quotation
- marks.
-
-
Changed mappings for left and right single quotation
- marks. Those had previously been incorrectly mapped to the
- backtick (`) and apostrophe (&39;) characters (for
- kludgy reasons -- see above). They are now correctly mapped to
- the \(oq and \(cq roff
- escapes. If you want the old (broken) behavior, you need to
- manually change the mappings for those in the value of the
- man.string.subst.map parameter.
-
-
Removed xref.xsl file. Now, of the
- various cross-reference elements, only the ulink
- element is handled differently; the rest are handled exactly
- as the HTML stylesheets handle them, except that no hypertext
- links are generated. (Because there is no equivalent hypertext
- mechanism is man pages.)
-
-
New option for making “subheading dividers” in generated
- roff source. The dividers are not visible in the rendered man
- page; they are just there to make the source
- readable. Controlled using
- man.subheading.divider.
-
-
Fixed many places where too much space was being added
- between lines.
-
-
-
-
-
-
-
Release 1.68.1
-
-
The release adds localization support for Farsi (thanks to
- Sina Heshmati) and improved support for the XLink-based DocBook NG
- db:link element. Other than that, it is a minor
- bug-fix update to the 1.68.0 release. The main thing it fixes is a
- build error that caused the XSLT Java extensions to be jarred up
- with the wrong package structure. Thanks to Jens Stavnstrup for
- quickly reporting the problem, and to Mauritz Jeanson for
- investigating and finding the cause.
-
-
-
-
Release 1.68.0
-
-
This release includes some features changes, particularly
- for FO/PDF output, and a number of bug fixes.
-
FO
-
Moved footnote properties to attribute-sets.
-
-
Added support for side floats, margin notes, and
- custom floats.
Moved hard-coded properties to
- nongraphical.admonintion.properties
- and graphical.admonition.properties
- attribute sets.
-
-
Added support for sidebar-width and
- float-type processing instructions in
- sidebar.
-
-
For tables with HTML markup elements, added support
- for dbfo bgcolor PI, the attribute-sets
- named table.properties,
- informaltable.properties,
- table.table.properties, and
- table.cell.padding. Also added
- support for the templates named
- table.cell.properties and
- table.cell.block.properties so that
- tabstyles can be implemented. Also added support for tables
- containing only tr instead of
- tbody with tr.
-
-
Added new paramater
- hyphenate.verbatim.characters which
- can specify characters after which a line break can occur in
- verbatim environments. This parameter can be used to extend
- the initial set of characters which contain only space and
- non-breakable space.
-
-
Added itemizedlist.label.markup to enable
- selection of different bullet symbol. Also added several
- potential bullet characters, commented out by default.
-
-
Enabled all id's in XEP output for external olinking.
refsynopsisdiv as a section for
- counting section levels
-
-
Images
-
Added new SVG admonition graphics and navigation images.
-
-
-
-
-
-
Release 1.67.2
-
-
This release fixes a table bug introduced in the 1.67.1
- release.
-
-
Release 1.67.1
-
-
This release includes a number of bug fixes.
-
The following lists provide details about API and feature changes.
-
FO
-
Tables: Inherited cell properties are now passed to the
- table.cell.properties template so they can
- be overridden by a customization.
-
-
Tables: Added support for bgcolor PI on table row
- element.
-
-
TOCs: Added new parameter
- simplesect.in.toc; default value of
- 0 causes simplesect to be omitted from TOCs; to
- cause simplesect to be included in TOCs, you
- must set the value of simplesect.in.toc to
- 1.Comment from Norm:
-
-
-
Simplesect elements aren't supposed to
- appear in the ToC at all... The use case for simplesect
- is when, for example, every chapter in a book ends with
- "Exercises" or "For More Information" sections and you
- don't want those to appear in the ToC.
-
-
-
-
Sections: Reverted change that caused a variable reference
- to be used in a template match and rewrote code to preserve
- intended semantics.
-
-
Lists: Added workaround to prevent "* 0.60 + 1em" garbage in
- list output from PassiveTeX
-
-
Moved the literal attributes from
- component.title to the
- component.title.properties attribute-set so
- they can be customized.
-
-
Lists: Added glossdef's first
- para to special handling in
- fo:list-item-body.
-
-
-
HTML
-
TOCs: Added new parameter
- simplesect.in.toc; for details, see
- the list of FO changes for this
- release.
Added support for generating windows-1252-encoded
- output using Saxon; for more details, see the list of XSL Java extensions changes for this release.
-
-
man pages
-
Replaced named/numeric character-entity references for
- non-breaking space with groff equivalent (backslash-tilde).
-
-
XSL Java extensions
-
Saxon extensions: Added the
- Windows1252 class. It extends Saxon
- 6.5.x with the windows-1252 character set, which is
- particularly useful when generating HTML Help for Western
- European Languages (code from
- PontusHaglund and contributed to the
- DocBook community by Sectra AB, Sweden).
-
To use:
-
-
Make sure that the Saxon 6.5.x jar file and the jar file for
- the DocBook XSL Java extensions are in your CLASSPATH
-
-
Create a DocBook XSL customization layer -- a file named
- mystylesheet.xsl or whatever -- that, at a
- minimum, contains the following:
-
-
- In both cases, the "mystylesheet.xsl" file should be a
- DocBook customization layer containing the parameters
- show in step 2.
-
-
-
-
Saxon extensions: Removed Saxon 8 extensions from release package
-
-
-
-
Release 1.67.0
-
-
-
A number of important bug fixes.
-
-
Added Saxon8 extensions
-
-
Enabled dbfo table-width on
- entrytbl in FO output
-
-
Added support for role=strong on
- emphasis in FO output
-
-
Added new FO parameter
- hyphenate.verbatim that can be used to turn
- on "intelligent" wrapping of verbatim environments.
-
-
Replaced all <tt></tt> output with
- <code></code>
-
-
Changed admon.graphic.width template to a
- mode so that different admonitions can have different graphical
- widths.
-
-
Deprecated the HTML shade.verbatim
- parameter (use CSS instead)
-
-
Wrapped ToC
- refentrytitle/refname and
- refpurpose in span with class values. This
- makes it possible to style them using a CSS stylesheet.
-
-
Use strong/em instead of
- b/i in HTML output
-
-
Added support for converting Emphasis to
- groff italic and Emphasis role='bold' to
- bold. Controlled by
- emphasis.propagates.style param, but not
- documented yet using litprog system. Will do that next (planning
- to add some other parameter-controllable options for hyphenation
- and handling of line spacing).
-
-
callout.graphics.number.limit.xml
- param: Changed the default from 10 to
- 15.
-Added index.on.type parameter for new type
-attribute introduced in DocBook 4.3 for indexterms and index.
-This allows you to create multiple indices containing
-different categories of entries.
-For users of 4.2 and earlier, you can use the new parameter index.on.role
-instead.
-
-
-
-Added new
-section.autolabel.max.depth parameter to turn off section numbering
-below a certain depth.
-This permits you to number major section levels and leave minor
-section levels unnumbered.
-Added parameter img.src.path as a prefix to HTML img src
-attributes.
-The prefix is added to whatever path is already generated by the
-stylesheet for each image file.
-Add component.label.includes.part.label
-parameter to add any part number to chapter, appendix
-and other component labels when
-the label.from.part parameter is nonzero.
-This permits you to distinguish multiple chapters with the same
-chapter number in cross references and the TOC.
-
-
-Added chunk.separate.lots parameter for HTML output.
-This parameter lets you generate separate chunk files for each LOT
-(list of tables, list of figures, etc.).
-
-
Added several table features:
-
-
-Added table.table.properties attribute set to add
-properties to the fo:table element.
-
-
-
-Added placeholder templates named table.cell.properties
-and table.cell.block.properties to enable adding properties
-to any fo:table-cell or the cell's fo:block, respectively.
- These templates are a start for implementing table styles.
-
-
-
-Added new attribute
-set component.title.properties for easy modifications of
-component's title formatting in FO output.
-
-
-
-Added Saxon support for an encoding attribute on the textdata element. Added new parameter
-textdata.default.encoding which specifies encoding when
-encoding attribute on
-textdata is missing.
-
-
-
-Template label.this.section now controls whole
-section label, not only sub-label which corresponds to
-particular label. Former behaviour was IMHO bug as it was
-not usable.
-
-
-
-Formatting in titleabbrev for TOC and headers
-is preserved when there are no hotlink elements in the title. Formerly the title showed only the text of the title, no font changes or other markup.
-
-
-
-Added intial.page.number template to set the initial-page-number
-property for page sequences in print output.
-Customizing this template lets you change when page numbering restarts. This is similar to the format.page.number template that lets you change how the page number formatting changes in the output.
-
-
-
-Added force.page.count template to set the force-page-count
-property for page sequences in print output.
-This is similar to the format.page.number template.
-
-
-
-Sort language for localized index sorting in autoidx-ng.xsl is now taken from document
-lang, not from system environment.
-
-
-
-Numbering and formatting of normal
-and ulink footnotes (if turned on) has been unified.
-Now ulink footnotes are mixed in with any other footnotes.
-
-
-Added support for renderas attribute in section and
-sect1 et al.
-This permits you to render a given section title as if it were a different level.
-
-
-Added support for label attribute in footnote to manually
-supply the footnote mark.
-
-
-
-Added support for DocBook 4.3 corpcredit element.
-
-
-
-Added support for a dbfo keep-together PI for
-formal objects (table, figure, example, equation, programlisting). That permits a formal object to be kept together if it is not already, or to be broken if it
-is very long and the
-default keep-together is not appropriate.
-
-
-
-For graphics files, made file extension matching case
-insensitive, and updated the list of graphics extensions.
-
-
-
-Allow calloutlist to have block content before
-the first callout
-
-
-
-Added dbfo-need processing instruction to provide
-soft page breaks.
-
-
-
-Added implementation of existing but unused
-default.image.width parameter for graphics.
-
-It appears that XEP now supports Unicode characters in
-bookmarks. There is no further need to strip accents from
-characters.
-
-
-
-Make segmentedlist HTML markup
-more semantic and available to CSS styles.
-
-
-
-Added user.preroot placeholder template to
-permit xsl-stylesheet and other PIs and comments to be
-output before the HTML root element.
-
-
-
-Non-chunked legalnotice now gets an <a
-name="id"> element in HTML output
-so it can be referenced with xref or link.
-
-
-
-In chunked HTML output, changed link rel="home" to rel="start",
-and link rel="previous" to rel="prev", per W3C HTML 4.01
-spec.
-
-
-
-Added several patches to htmlhelp from W. Borgert
-
-
-
-Added Bosnian locale file as common/bs.xml.
-
-
-
-
Release 1.65.0
-
-
-
A number of important bug fixes.
-
-
-
Added a workaround to allow these stylesheets to process DocBook NG
-documents. (It’s a hack that pre-processes the document to strip off the
-namespace and then uses exsl:node-set to process
-the result.)
-
-
-
Added alternative indexing mechanism which has better
-internationalization support. New indexing method allows grouping of
-accented letters like e, é, ë into the same group under letter "e". It
-can also treat special letters (e.g. "ch") as one character and place
-them in the correct position (e.g. between "h" and "i" in Czech
-language).
-
In order to use this mechanism you must create customization
-layer which imports some base stylesheet (like
-fo/docbook.xsl,
-html/chunk.xsl) and then includes appropriate
-stylesheet with new indexing code
-(fo/autoidx-ng.xsl or
-html/autoidx-ng.xsl). For example:
New method is known to work with Saxon and it should also work
-with xsltproc 1.1.1 and later. Currently supported languages are
-English, Czech, German, French, Spanish and Danish.
-
-
-
Release 1.64.1
-
-
General bug fixes and improvements. Sorry about the failure to produce
-an updated release notes file for 1.62.0—1.63.2
-
In the course of fixing bug #849787, wrapping Unicode callouts
-with an appropriate font change in the Xalan extensions, I discovered
-that the Xalan APIs have changed a bit. So xalan2.jar
-will work with older Xalan 2 implementations, xalan25.jar
-works with Xalan 2.5.
-
-
-
Release 1.61.0
-
-
Lots of bug fixes and improvements.
-
Initial support for timestamp PI. From now you
- can use <?dbtimestamp format="Y-m-d H:M:S"?> to get current
- datetime in your document. Added localization support for datetime PI
-
-
-
Added level 6 to test for section depth in
-section.level template so that
-section.title.level6.properties will be used for sections
-that are 6 deep or deeper. This should also cause a h6 to be
-created in html output.
-
Now uses number-and-title-template for sections
- only if section.autolabel is not zero.
-
-
-
Added missing 'english-language-name' attribute to
-the l10n element, and the missing 'style' attribute to the
-template element so the current gentext documents will
-validate.
-
-
-
Corrected several references to parameter
- qanda.defaultlabel that were missing the "$".
-
-
-
Now accepts admon.textlabel parameter to turn off
- Note, Warning, etc. label.
-
-
-
FeatReq #684561: support more XEP metadata
-
-
-
Added hyphenation support. Added support for coref.
-Added beginpage support. (does nothing; see TDG).
-
-
-
Added support for
-hyphenation-character, hyphenation-push-character-count, and
-hyphenation-remain-character-count
-
Support bgcolor PI in table cells; make sure
-rowsep and colsep don't have any effect on the last row or
-column
-
-
-
Handle othercredit on titlepage a little
-better
-
-
-
Applied fix from Jeff Beal that fixed the bug
-that put secondary page numbers on primary entries. Same
-with tertiary page numbers on secondary entries.
-
-
-
Added definition of missing variable
-collection.
-
-
-
Make footnote formatting 'normal' even when it
-occurs in a context that has special formatting
-
-
-
Added warning when glossary.collection is not
-blank, but it cannot open the specified file.
-
Added process.chunk.footnotes to sect2 through
-5 to fix bug of missing footnotes when chunk level greater
-than 1.
-
-
-
Added
-paramater toc.max.depth which controls maximal depth of ToC
-as requested by PHP-DOC group.
-
-
-
Exempted titleabbrev from preamble processing in
-lists, and fixed variablelist preamble code to use the same
-syntax as the other lists.
-
-
-
Added support for elements between variablelist
-and first varlistentry since DocBook 4.2 supports that now.
-
-
-
-
Release 1.60.1
-
-
Lots of bug fixes.
-
The format of the titlepage.templates.xml files and
-the stylesheet that transforms them have been significantly changed. All of the
-attributes used to control the templates are now namespace qualified. So what
-used to be:
Attributes from other namespaces (including those that are unqualified) are
-now copied directly through. In practice, this means that the names that used
-to be “fo:” qualified:
The t:titlepage and t:titlepage-content
-elements both generate wrappers now. And unqualified attributes on those elements
-are passed through. This means that you can now make the title font apply to
-ane entire titlepage and make the entire “recto”
-titlepage centered by specifying the font and alignment on the those elements:
Suppress the draft-mode page masters when
-draft-mode is “no”.
-
-
-
Make blank pages verso not recto. D'Oh!
-
-
-
Improved formatting of ulink footnotes.
-
-
-
Fixed bugs in graphic width/height calculations.
-
-
-
Added class attributes to inline elements.
-
-
-
Don't add “.html” to the filenames identified
-with the “dbhtml” PI.
-
-
-
Don't force a ToC when sections contain refentrys.
-
-
-
Make section title sizes a function of the
-body.master.size.
-
-
-
-
Release 1.59.2
-
-
The 1.59.2 fixes an FO bug in the page masters that causes FOP to fail.
-
-
Removed the region-name from the region-body of blank pages. There's
-no reason to give the body of blank pages a unique name and doing so causes
-a mismatch that FOP detects.
-
-
-
Output IDs for the first paragraphs in listitems.
-
-
-
Fixed some small bugs in the handling of page numbers in double-sided mode.
-
-
-
Attempt to prevent duplicated IDs from being produced when
-endterm on xref points
-to something with nested structure.
-
Make endterm on
-xref higher priority than
-xreflabel target.
-
-
-
Glossary formatting improvements.
-
-
-
-
Release 1.58.0
-
-
The 1.58.0 adds some initial support for extensions in xsltproc, adds
-a few features, and fixes bugs.
-
-
This release contains the first attempt at extension support for xsltproc.
-The only extension available to date is the one that adjusts table column widths.
-Run extensions/xsltproc/python/xslt.py.
-
-
-
Fixed bugs in calculation of adjusted column widths to correct for rounding
-errors.
-
Reworked gentext.template to take context into consideration.
-The name of elements in localization files is now an xpath-like context list, not
-just a simple name.
-
-
-
Made some improvements to bibliography formatting.
-
The 1.57.0 release wasn't documented here. Oops.
-
-
-
-
Release 1.56.0
-
-
The 1.56.0 release fixes bugs.
-
-
Reworked chunking. This will break all existing customizations
-layers that change the chunking algorithm. If you're customizing chunking,
-look at the new “content” parameter that's passed to
-process-chunk-element and friends.
-
-
-
Support continued and inherited numeration in orderedlist
-formatting for FOs.
-
-
-
Added Thai localization.
-
-
-
Tweaked stylesheet documentation stylesheets to link to TDG and
-the parameter references.
-
-
-
Allow title on tables of contents ("Table of Contents") to be optional.
-Added new keyword to generate.toc.
-Support tables of contents on sections.
-
Suppress formatting of “endofrange”indexterms.
-This is only half-right. They should generate a range, but I haven't figured out how
-to do that yet.
-
Added context to the “missing template” error message.
-
-
-
Process arg correctly in a group.
-(Bug #605150)
-
-
-
Removed 'keep-with-next' from formal.title.properties
-attribute set now that the stylesheets support the option of putting
-such titles below the object. Now the $placement value determines if
-'keep-with-next' or 'keep-with-previous' is used in the title block.
-
-
-
Wrap “url()” around external-destinations when appropriate.
-
-
-
Fixed typo in compact list spacing. (Bug #615464)
-
-
-
Removed spurious hash in anchor name. (Bug #617717)
-
-
-
Address is now displayed verbatim on title pages. (Bug #618600)
-
Totally reworked funcsynopsis code; it now
-supports a 'tabular' presentation style for 'wide' prototypes; see
-funcsynopsis.tabular.threshold. (HTML only
-right now, I think, FO support, uh, real soon now.)
-
-
-
Reworked support for difference marking; toned down the colors a bit
-and added a “system.head.content” template so that the diff CSS
-wasn't overriding “user.head.content”. (Bug #610660)
-
-
-
Added call to the “*.head.content” elements when writing
-out long description chunks.
-
-
-
Make sure legalnotice link is correct even when
-chunking to a different base.dir.
-
-
-
Use CSS to set viewport characteristics if
-css.decoration is non-zero, use div instead of p for making
-graphic a block element; make figure titles the
-default alt
-text for images in a figure.
DocBook Project “dot zero” releases should be
- considered experimental and are always
- followed by stable “dot one plus” releases, usually within
- two or three weeks. Please help to ensure the stability of
- “dot one plus” releases by carefully testing each
- “dot zero” release and reporting back about any
- problems you find.
-
It is not recommended that you use a “dot zero”
- release in a production system. Instead, you should wait for
- the “dot one” or greater versions.